前言
最近,毕设做的是ORB SLAM2相关的,这里分享一下我搭建ORB SLAM2环境的过程。
实验环境:Ubuntu 16.04 + Ros Kinetic + Opencv3 + tb买的usb摄像头
Opencv安装
参考:Opencv安装
说明:搭建Ros不要用GTK3, 装GTK2就行,不然后面运行Mono,显示
(Mono:27720): Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
还是要重装Opencv,还有所有的要重新编译一下,大坑。
Ros安装
参考:https://www.jianshu.com/p/68f88e377850
说明:这里面运行$ roscore
命令的时候,如果你用的是非Bash终端,如Zsh,请$ exec bash
,切换到Bash终端,才能正常运行。
ORB SLAM2安装
配置Ros环境
1 | $ mkdir -p ~/catkin_ws/src |
在home目录找到隐藏文件.bashrc,在最下面添加1
2source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
编译usb_cam
1 | $ cd catkin_ws/src |
编译ORB SLAM2
1 | # 安装 g++ |
如果./build_ros.sh
遇到
Undefined reference to symbol ‘_ZN5boost6system15system_categoryEv’
请参考https://github.com/raulmur/ORB_SLAM2/issues/494
运行测试集
先下载测试数据集,选 fr1/desk,下载到Data文件下并解压1
2# 运行
$ ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Data/rgbd_dataset_freiburg1_desk
相机标定
相机标定有很多方法,MATLAB,Opencv,Ros等,这里用Ros方法。
首先确保上面的测试集运行成功,摄像头能正常工作,然后打印一张A3的黑白方格的棋盘图片。1
2
3
4
5
6# 第一个终端
$ roscore
# 第二个终端
$ roslaunch usb_cam usb_cam-test.launch #可以在.launch文件里修改要用的摄像头,比如笔记本的摄像头是/dev/video0,外接USB摄像头是/dev/video1
# 第三个终端
$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.035 image:=/usb_cam/image_raw camera:=/usb_cam #这里参数要与打印的模板一致
然后按照x(左右)、y(上下)、size(前后)、skew(倾斜)等方式移动棋盘,直到x,y,size,skew的进度条都变成绿色位置。
此时可以按下CALIBRATE按钮,等一段时间就可以完成标定。
完成后Commit,在终端后会有标定结果yaml文件地址.打开后,按照Asus.yaml的格式修改,命名为my.yaml,复制到/home/vgreen/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2目录下。
至此,标定完成。
运行
修改ros_mono.cc
进入catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src 打开ros_mono.cc。
把
ros::Subscriber sub = nodeHandler.subscribe(“/camera/image_raw”, 1, &ImageGrabber::GrabImage,&igb);
中camera改为usb_cam
重新编译
$ ./build_ros.sh
启动
1 | # 还是3个终端 |
效果图
欢迎访问我的github查看更多: https://github.com/itswcg
参考
http://blog.csdn.net/Darlingqiang/article/details/78989544
http://www.cnblogs.com/li-yao7758258/p/5933651.html
http://www.cnblogs.com/shang-slam/p/6733322.html