在配置过程中我们需要用到cmake、gcc、g++、git工具,我们可以直接在终端使用相关命令进行下载安装。
sudo apt-get install cmake
sudo apt-get install gcc g++
sudo apt-get install git
安装Pangolin 作为可视化和用户界面。Pangolin是对OpenGL进行封装的轻量级的OpenGL输入/输出和视频显示的库。可以用于3D视觉和3D导航的视觉图,可以输入各种类型的视频、并且可以保留视频和输入数据用于debug。
1.在安装Pangolin之前,先要安装必要的依赖项:
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
sudo apt-get install libpython2.7-dev
2.安装完依赖项后可以通过以下命令安装Pangolin:
git clone https://github.com/stevenlovegrove/Pangolin.git
下载速度跟网速相关,如果失败,多执行几次命令。
3.编译安装
cd Pangolin
mkdir build
cd build
cmake -DCPP11_NO_BOOSR=1 ..
make –j
sudo make install
opencv的安装可以参考我另外的博客。
参考链接
sudo apt-get install libeigen3-dev
Eigen头文件的默认位置在 “usr/include/eigen3” 中。如果不确定,可以输入以下命令查找:
sudo updatedb
locate eigen3
相比于其他库,Eigen的神奇之处在于,它是一个纯用头文件搭起建起来的库。这意味着你只能找到它的头文件,而没有.so或.a那样的二进制文件。在使用时只需引入Eigen的头文件即可,不需要链接库文件(因为它没有库文件)。要使用Eigen库,需要在cmake工程中的CMakeLists.txt文件中指定Eigen的头文件目录。
在安装之前我们需要选择放置ORB_SLAM工程的文件夹。如果需要在ROS环境下运行ORB_SLAM,最好将工程放在catkin_ws/src文件夹下。(因为我的ros工作空间为catkin_ws)进行我的src文件夹下,打开终端执行下面命令:
1.下载ORB_SLAM2
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
cd ORB_SLAM2
赋予文件夹权限
chmod +x build.sh
编译build.sh文件
./build.sh
如果想要在ROS环境下运行ORB_SLAM,则需要编译build_ros.sh文件。
在当前终端修改文件权限
chmod +x build_ros.sh
添加环境变量
gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/自己的用户名/catkin_ws/src/ORB_SLAM2/Examples/ROS
接着运行
source ~/.bashrc
也可以使用下面命令来进行检查
echo $ROS_PACKAGE_PATH
出现/opt/ros/kinetic/share:/home/lizhongwan/catkin_ws/src/ORB_SLAM2/Examples/ROS,正常。
echo $ROS_ROOT
出现/opt/ros/kinetic/share/ros,正常。
编译build_ros.sh
./build_ros.sh
编译过程可能会有点慢,如果电脑性能可以,我们可以将上面相关编译文件中的make -j修改为make -j4或者make -j8。如果电脑性能不佳,我们可以将make j修改为make。
到这里我们的ROB_SLAM2就安装完成啦,下面可以进行实例运行。
1.下载usb_cam
cd catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
2.编译工作空间
cd catkin_ws/src
ctakin_make
3.注册程序
source ./devel/setup.bash
4.创建编译文件夹并编译
cd src/usb_cam
mkdir build
cd build
cmake ..
make -j8
roscore
7.在其他终端进行工作空间的usb_cam下的launch文件夹,运行相机节点
roslaunch usb_cam usb_cam-test.launch
运行效果展示:
到这里我们的usb_cam就安装成功啦!
1.下载数据集
有TUM、KITTI、EuRoC三种数据集,本实验使用TUM数据集,可以在下面链接进行下载:
下载地址
2.运行ORB_SLAM
官方给出的命令格式:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txtExamples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
其中PATH_TO_SEQUENCE_FOLDER为数据集的存储路径,并将tumx.yaml与下载的数据集对应,比如TUM1.yaml,TUM2.yaml 和TUM3.yaml 分别对应 freiburg1, freiburg2 和 freiburg3。
根据自己所保存的路径做适当修改:
在ORB_SLAM2文件夹下打开终端,执行以下命令来运行程序:
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/lizhongwan/rgbd_dataset_freiburg1_xyz
1.启动ros
roscore
2.启动usb_cam节点
roslaunch usb_cam usb_cam-test.launch
3.ORB-SLAM默认订阅的话题为/camera/image_raw,而usb_cam节点发布的话题为/usb_cam/image_raw,因此需要在ros_mono.cc中修改订阅的话题.
可以先通过下面命令查看已发布的话题
rostopic list
找到在/home/lizhongwan/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src的目录下的ros_mono.cc文件
打开文件并修改成下面显示的代码:
因为修改了源文件,所以我们需要重新编译
./build_ros.sh
4.运行实时单目
命令格式如下:
rosrun ORB_SLAM2 Mono PATH_TO_VOCABULARY PATH_TO_SETTINGS_FILE
其中PATH_TO_VOCABULARY是词典的路径,一般为Vocabulary/ORBvoc.txt
PATH_TO_SETTINGS_FILE是记录摄像头参数的文件,比如之前用到的TUM1.yaml。
我用的命令为:
rosrun ORB_SLAM2 RGBD /home/lizhongwan/catkin_ws/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/lizhongwan/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/Asus.yaml
运行效果如下:
将摄像头缓慢的旋转,可以看到右边窗口在进行路线规划吗,左边窗口在捕捉RGB。
1.编译./build_ros.sh出现下面错误
/home/lizhongwan/ORB-SLAM2-Sample/Examples/ROS/ORB_SLAM2/../../../Thirdparty/g2o/g2o/types/se3quat.h:32:22: fatal error: Eigen/Core: 没有那个文件或目录
compilation terminated.
CMakeFiles/RGBD.dir/build.make:119: recipe for target 'CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o' failed
make[2]: *** [CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
解决办法:将相应的.h文件中,eigen的引用进行修改。
2.编译build_ros.sh文件时出现下面错误
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/RGBD.dir/all' failed
make[1]: *** [CMakeFiles/RGBD.dir/all] Error 2
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../Stereo'. Stop.
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/Stereo.dir/all' failed
make[1]: *** [CMakeFiles/Stereo.dir/all] Error 2
make[2]: *** No rule to make target '/opt/ros/kinetic/lib/libopencv_calib3d3.so.3.2.0', needed by '../MonoAR'. Stop.
CMakeFiles/Makefile2:820: recipe for target 'CMakeFiles/MonoAR.dir/all' failed
make[1]: *** [CMakeFiles/MonoAR.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
解决办法: 修改Examples/ROS/ORB_SLAM2/文件夹下的CMakeLists.txt文件。
将下面的代码修改:
set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
)
修改为:
set(LIBS
${OpenCV_LIBS}
${EIGEN3_LIBS}
${Pangolin_LIBRARIES}
${PROJECT_SOURCE_DIR}/../../../Thirdparty/DBoW2/lib/libDBoW2.so
${PROJECT_SOURCE_DIR}/../../../Thirdparty/g2o/lib/libg2o.so
${PROJECT_SOURCE_DIR}/../../../lib/libORB_SLAM2.so
-lboost_system
)
到这里我们的整个安装与配置就完成啦,希望可以帮助到大家。