目前网络上大部分的配置都是先完成ORB_SLAM2所需要的依赖库的配置,再进行ORB_SLAM2的配置。但是这种方法在实际操作中非常不科学,因为一旦依赖库之前自己有安装过但是忘记了,再按照网络教程安装一遍就极容易出现同一个库多版本冲突的问题,非常难以解决。因此本博客用相反的顺序配置ORB_SLAM2,这种做法将会大大减少配置中所遇到的问题。
首先进行摄像头驱动的配置
(本文采用博世的usb摄像头驱动,再下一篇博文中,将写一下怎么自己编写摄像头驱动并以ROS节点的形式发布图像)
建立一个独立的工作空间
mkdir -p ~/camera_ws/src
cd ~/camera_ws/src
catkin_init_workspace
cd ~/camera_ws/
catkin_make
sudo gedit ~/.bashrc
#在末尾加入 source ~/camera_ws/devel/setup.bash
#查看是否成功:echo $ROS_PACKAGE_PATH
cd camera_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ../
catkin_make
编译ROS相机标定包
rosdep install camera_calibration
rosmake camera_calibration
sudo apt-get install ros-kinect-usb-cam optional #可选
标定相机
roslaunch usb_cam usb-cam-test.launch
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/usb_cam/image_raw camera:=/usb_cam
标定界面出现后,按照x(左右)、y(上下)、size(前后)、skew(倾斜)等方式移动棋盘,直到x,y,size,skew的进度条都变成绿色位置.
此时可以按下CALIBRATE按钮,等一段时间就可以完成标定,按SAVE保存。
标定结果保存在/home/leo/.ros/camera_info/head_camera.yaml中。
进行ORB_SLAM2配置
git clone https://github.com/raulmur/ORB_SLAM2.git
cd ORB-SLAM2
./build.sh
此阶段几乎一定会报错,根据报错信息中提示的缺少的库的信息,到本博客下面找对应库的安装方法。
此时假设读者已经完成了所有需要库的安装,并且没有报错。
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/leo/ORB_SLAM2/Examples/ROS
./build_ros.sh
此阶段如果报错,同样到本博客下找对应库的安装方法。
如果报错信息为undefined reference to symbol '_ZN5boost6system15system_categoryEv'类型问题,本博文结尾同样给出了解决方法。
之后为了配合上文安装的摄像头驱动,将ROS目录下的ros_mono.cc文件中/camera/image_raw改为/usb_cam/image_raw
再在终端中 ./build_ros.sh 编译即可。
假设读者已经完成了以上所有的步骤并且没有报错。那么ORB_SLAM2的配置就已经完成。
usb摄像头运行ORB_SLAM2
将之前完成标定的head_camera.yaml文件移动到ORB_SLAM2/Examples/ROS/ORB_SLAM2/head_camera.yaml,按照Asus.yaml的格式进行修改,成功运行ORB_SLAM2.
roslaunch usb_cam usb_cam-test.launch
rosrun ORB_SLAM2 Mono /home/leo/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/leo/ORB_SLAM2/Examples/ROS/ORB_SLAM2/head_camera.yaml
注:rosrun或者roslaunch如果报错,则在终端中cd到对应的文件夹下,再source ~/xxxx(文件夹名字)/devel/setup.bash
如: source ~/camera_ws/devel/setup.bash
各种依赖的安装方法
Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j
Opencv
参考官网进行安装,本文不再赘述
Eigen
sudo apt-get install libeigen3-dev
遇到undefined reference to symbol '_ZN5boost6system15system_categoryEv'报错的解决方法
打开终端
locate boost_system //查找到目录找到文件的路劲,然后将他加到cmakelist的文件路径中。
/usr/lib/x86_64-linux-gnu/libboost_system.a
/usr/lib/x86_64-linux-gnu/libboost_system.so
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
locate boost_filesystem //查找到目录
/usr/lib/x86_64-linux-gnu/libboost_filesystem.a
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so
/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
sudo cp /usr/lib/x86_64-linux-gnu/libboost_system.so /home/leo/ORB_SLAM2/lib
sudo cp /usr/lib/x86_64-linux-gnu/libboost_filesystem.so /home/leo/ORB_SLAM2/lib
然后在/home/leo/ORB_SLAM2/Examples/ROS/ORB_SLAM2/CMakeLists.txt中添加
set(LIBS
${PROJECT_SOURCE_DIR}/../../../lib/libboost_filesystem.so
${PROJECT_SOURCE_DIR}/../../../lib/libboost_system.so
)
问题即可解决。