前言
最近,毕设做的是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环境
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
$ catkin_make
在home目录找到隐藏文件.bashrc,在最下面添加
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
编译usb_cam
$ cd catkin_ws/src
$ git clone https://github.com/ros-drivers/usb_cam.git
$ cd usb_cam
$ mkdir build
$ cd build
$ cmake ..
$ make
编译ORB SLAM2
# 安装 g++
$ sudo apt-get install gcc g++
# 安装 Pangolin
$ sudo apt-get install libglew-dev #安装Glew
$ sudo apt-get install cmake #安装CMake
$ sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev #安装Boost
$ sudo apt-get install libpython2.7-dev #安装Python2'Python3
$ git clone https://github.com/stevenlovegrove/Pangolin.git
$ cd Pangolin
$ mkdir build
$ cd build
$ cmake -DCPP11_NO_BOOST=1 ..
$ make
$ sudo make
# 安装Opencv
$ sudo apt-get update
$ sudo apt-get install libcv-dev
# 安装Eigen
$ sudo apt-get install libeigen3-dev
# 安装BLAS,LAPACK
$ sudo apt-get install libblas-dev
$ sudo apt-get install liblapack-dev
# 编译ORB SLAM2
$ cd catkin_ws/src
$ git clone https://github.com/raulmur/ORB_SLAM2.git
$ cd ORB_SLAM2
$ chmod +x build.sh
$ ./build.sh #如果运行电脑卡死的话,请修改build.sh文件中所有的make -j为make
$ ./build_ros.sh
如果./build_ros.sh
遇到
Undefined reference to symbol '_ZN5boost6system15system_categoryEv'
请参考https://github.com/raulmur/ORB_SLAM2/issues/494
运行测试集
先下载测试数据集,选 fr1/desk,下载到Data文件下并解压
# 运行
$ ./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Data/rgbd_dataset_freiburg1_desk
相机标定
相机标定有很多方法,MATLAB,Opencv,Ros等,这里用Ros方法。
首先确保上面的测试集运行成功,摄像头能正常工作,然后打印一张A3的黑白方格的棋盘图片。
# 第一个终端
$ 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
启动
# 还是3个终端
$ roscore
$ roslaunch usb_cam usb_cam-test.launch
$ rosrun ORB_SLAM2 Mono /home/vgreen/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/vgreen/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/my.yaml
效果图
image
image
参考
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