利用外接usb摄像头跑通ORB SLAM2的记录

摘要

最近在看slam相关方面的内容,对于其原理和算法不是很了解,干脆先做个实际例子,以后再详细研读其原理。

准备工作

硬件准备
 1.装有ROS Indigo和装有OpenCv的ubuntu 14.04
 3.USB 摄像头(具体参数不详,罗技的)
 环境准备
 安装几个依赖项和库
Boost

sudo apt-get install libboost-all-dev

g2o
 关于g2o的详细解释可以看高博的blog:http://www.cnblogs.com/gaoxiang12/p/5304272.html
 为了编译g2o需要安装如下三个库

 sudo apt-get install libblas-dev
 sudo apt-get install liblapack-dev
 sudo apt-get install libeigen3-dev

1.由于使用USB摄像头作为图像输入,需要将图像信息作为topic发送出去,ROS官网提供了usb_cam的package代码,从github上下usb_cam的代码,下载链接:https://github.com/bosch-ros-pkg/usb_cam
2.ORB_SLAM的代码下载: https://github.com/raulmur/ORB_SLAM2
工程建立
之前你应该有一个ros的工作空间
,关于工作空间的创立可以参考以下博客
http://www.cnblogs.com/liu-fa/p/5761448.html
将代码拷到src中

编译usb_cam
编译成功后可先测试一下usb摄像头
在运行该节点之前,需要先配置一下节点参数,打开src/usb_cam-develop/launch文件中的的launch文件,我这里只需要该设备号即可,笔记本电脑的video0一般是网络摄像头,插入usb摄像头一般是video1,若想看usb摄像头是哪个端口号,可cd到根目录中的dev文件夹下查看.

cd /
cd dev
ls

启动摄像头节点

roscore
cd catkin_ws
catkin_make
roslaunch usb_cam usb_cam-test.launch

运行后,正常的情况下可打开摄像头,看到新建窗口将图像信息显示出来.同时命令窗口会有一部分warning ,直观显示是没有找到head_camera.yaml,应该是相机标定后的内参信息.
利用外接usb摄像头跑通ORB SLAM2的记录_第1张图片

(打开新的终端)运行rqt_graph可以看usb_cam节点向/usb_cam/image_raw发布了消息,image_view订阅了该消息,消息内容即为图像帧,由image_view显示.
这里写图片描述
编译g2o

cd ~/catkin_ws/src/ORB_SLAM2/Thirdparty/g2o/
mkdir build
cd build
cmake ..
make

编译DBoW2

cd ~/catkin_ws/src/ORB_SLAM2/Thridparty/DBoW2
mkdir build
cd build 
cmake ..
make

编译ORB_SLAM2

cd catkin_ws/src/ORB_SLAM2
mkdir build 
cd build 
cmake ..
make 

编译完成后,让我们看下官方文档上关于运行orb需要的两个文件
这里写图片描述
PATH_TO_VOCABULARY
PATH_TO_SETTINGS_FILE
第一个是VOCABULARY,在catkin_ws/src/ORB_SLAM2/Vocabulary中,将压缩包解压即可
第二个相机内参设置文件由于使用外部usb摄像头的时,需要输入相机内参进行运算,所以还需要对camera进行标定,这里采用的matlab工具箱
将内参数据标定出来之后填写到Example/ROS/ORB_SLAM2路径下的yaml文件中
两个文件都准备好了之后就可以开始运行了.
运行顺序:
1.第一个终端

roscore

2.第二个终端运行usb_cam

roslaunch usb_cam usb_cam-test.launch

观察camera是否在正常输出图像,正常则继续
3.第三个终端运行

rosrun ORB_SLAM2 Mono /home/xx/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/xx/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml 

因为现在是单目SLAM,采用的mono,第二个参数是标定参数保存的路径.
读vocabulary需要一点时间,等等....
正常情况下,你这个时候应该是看到这样的东西,
利用外接usb摄像头跑通ORB SLAM2的记录_第2张图片
关掉第三个终端,进到catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src 打开ros_mono.cc
将subscribe的话题改为/usb_cam/image_raw,将话题接上
重新编译ROS的example

cd ~/catkin_ws/src/ORB_SLAM2/Example/ROS/ORB_SLAM2
mkdir build
cd build
cmake ..
make 

再来一次

rosrun ORB_SLAM2 Mono /home/xx/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/xx/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml 

路径请写自己的路径咯,xx是我的用户目录
到这里应该就可以跑起来了
利用外接usb摄像头跑通ORB SLAM2的记录_第3张图片
总结:刚刚开始一段时间,还没有来得及对代码进行深扒,其中若有错误的地方,如有大神路过发现的还请帮忙及时提出改正.

你可能感兴趣的:(利用外接usb摄像头跑通ORB SLAM2的记录)