1)软件--装有ROS kinetic ubuntu 16.04 同时兼容 ROS Indigo ubuntu 14.04
2)硬件--笔记本、kinect2摄像头
2、建立orbslam_ws工作空间
$ cd ~/rgbdslam_ws/src
$ cd rgbdslam_ws
$ catkin_make
$ source devel/setup.bash
3、获取rgbdslam_v2包--注意:ros_kinetic下务必下载对应kinetic版本的package
1) 方式一$ cd ~/rgbdslam_ws/src
$ wget -q http://github.com/felixendres/rgbdslam_v2/archive/kinetic.zip
$ unzip -q kinetic.zip
$ cd ~/rgbdslam_ws/
2) 方式二
--直接到作者github网址下载https://github.com/felixendres/rgbdslam_v2
--解压后放到目录 /rgbdslam_ws/src 下即可
4、安装及编译rgbdslam_v2包
$ rosdep update
$ rosdep install rgbdslam
catkin_make之前rgbdslam_v2包的cmakelists.txt文件下的第6行加入
add_compile_options(-std=c++11)
如下图所示
终端执行catkin_make
$ catkin_make
如果编译成功,如下所示:
5、添加rgbdslam_ws工作空间到.bashrc文件下
$ echo "source /home/ljl/rgbdslam_ws/devel/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
6、修改rgbdslam_v2包的cmakelists文件
将第7行的
set(USE_SIFT_GPU 1 CACHE BOOL "build with support for siftgpu")
改成
set(USE_SIFT_GPU 0 CACHE BOOL "build with support for siftgpu")
如下图红框所示:
7、修改rgbdslam_v2包launch文件夹下的rgbdslam.launch文件和openni+rgbdslam.launch文件
修改1 ) ~/rgbdslam_ws/src/rgbdslam_v2/launch/rgbdslam.launch文件中13、14行的value值设置为ORB
<param name="config/feature_detector_type" value="ORB"/>
<param name="config/feature_extractor_type" value="ORB"/>
修改2 ) ~/rgbdslam_ws/src/rgbdslam_v2/launch/openni+rgbdslam.launch文件中13、14行的value值设置为ORB<param name="config/feature_detector_type" value="ORB"/>
<param name="config/feature_extractor_type" value="ORB"/>
8、下载rgbd数据集
数据集网址:https://vision.in.tum.de/data/datasets/rgbd-dataset/download,这里我下了个最小的,如下图所示,下载完成后,解压到rgbdslam_v2/src/rgbdslam/目录下;
9、开始测试
1)打开一个终端,输入
$ roscore
2) 打开第二个终端,cd到rgbd数据集所在目录下,然后输入
$ rosbag play rgbd_dataset.bag
3) 打开第三个终端,输入
$ roslaunch rgbdslam rgbdslam.launch
10、BUG解决
如果您遇到了“required process[rgbdslam-2] has died”......Iinitiating down问题,请不要着急,该问题主要是由于rgbdslam依赖库g2o和pcl不兼容引起的;
我的解决方法:已测试成功
1 )如果你之前已经安装了g2o,请将其卸载,卸载方法如下:
解决方法为:(1)删除/usr/local/include/g2o,指令为sudo rm -rf /usr/local/include/g2o;(2)删除/usr/local/lib下有关libg2o_*.so的库文件,先进入目录cd /usr/local/lib,然后挨个(可多个同时)删除sudo rm -rf libg2o_*.so libg2o_*.so libg2o_*.so(我一个一个删的我会说……)
2 ) 下载Eigen3库到rgbdslam_vs/src目录下
$ cd rgbdslam_vs/src
$ wget http://bitbucket.org/eigen/eigen/get/3.2.10.tar.bz2
$ mkdir eigen
$ tar -xvjf 3.2.10.tar.bz2 -C eigen --strip-components 1
3 ) 使用上面下载的eigen3.2配置g2o
编辑g2o包下的cmakelists.txt文件,将第251行
SET(G2O_EIGEN3_INCLUDE ${EIGEN3_INCLUDE_DIR} CACHE PATH "Directory of Eigen3")
改成
SET(G2O_EIGEN3_INCLUDE "你的Eigen3的绝对路径" CACHE PATH "Directory of Eigen3")
4 ) 下载rgbdslam作者的g2o并利用cmake编译
$ cd rgbdslam_vs/src
$ git clone https://github.com/felixendres/g2o.git
$ cd ~/rgbdslam/src/g2o
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
5 ) 下载PCL1.8并修改其cmakelist.txt
$ cd ~/rgbdslam_vs/src
$ wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.8.0.tar.gz
$ tar -xvzf pcl-1.8.0.tar.gz
修改cmakelist.txt,在其第146行加入并保存
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
6 )编译PCL1.8
$ cd ~/temp_test_ws/src/pcl-pcl-1.8.0
$ mkdir build
$ cd build
$ cmake ..
$ make VERBOSE=1
$ sudo make install
7 ) 更改rgbdslam_v2包下的cmakelist.txt文件,并重新编译
--将rgbdslam_v2包下的cmakelist.txt文件的第79行
find_package(PCL 1.7 REQUIRED COMPONENTS common io)
改成
find_package(PCL 1.8 REQUIRED COMPONENTS common io)
8 )将rgbdslam_ws下的build和devel文件夹删除,并重新编译
$ cd rgbdslam_ws
$ catkin_make
9 ) 至此,bug已解决
11、重新测试
1)打开一个终端,输入
roscore
2) 打开第二个终端,cd到rgbd数据集所在目录下,然后输入
rosbag play rgbd_dataset.bag
3) 打开第三个终端,输入
roslaunch rgbdslam rgbdslam.launch
测试成功,如下图所示: