系统版本:Ubuntu16.04 + ROS-Kinect
一、首先安装rgbdslam_v2需要的环境
- 安装依赖项
sudo apt-get install libsuitesparse-dev libeigen3-dev
- 删除之前安装的g2o (保证g2o完全删除)
sudo apt-get purge ros-kinetic-libg2o libqglviewer-dev sudo rm -rf /usr/local/include/g2o
sudo rm -rf /usr/local/lib/libg2o_*
- 下载作者使用的g2o:
git clone https://github.com/felixendres/g2o.git
mkdir build
cd build
cmake ..
make
sudo make install
- 下载安装PCL1.8wget https://github.com/PointCloudLibrary/pcl/archive/pcl-1.8.0.tar.gztar -xzvf pcl-1.8.0.tar.gz
修改PCL1.8 中的 cmakelist.txt,在其第146行加入并保存
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# 随后开始编译安装点云库
cd pcl-pcl-1.8.0
mkdir build
cd build
cmake ..
make VERBOSE=1
sudo make install
二、上述部分环境已经准备就绪,接下来进行rgbdslam_v2的安装
# 创建ros的工作空间
mkdir -p catkin_ws/src
cd ~/catkin_ws/src
# 克隆工程
git clone https://gitee.com/cenruping/rgbdslam-v2.git
cd ~/catkin_ws
catkin_make
注意事项:
a. 确保rgbdslam_v2包下的cmakelist.txt文件的第79行,find_package(PCL 1.7 REQUIRED COMPONENTS common io) 改为 find_package(PCL 1.8 REQUIRED COMPONENTS common io)
b.不使用GPU需要关闭使用GPU ,将rgbdslam_v2包下的cmakelist.txt文件的第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”)
c.遇到缺少glew
sudo apt-get install libglew*
d.遇到缺少-lIL
sudo apt-get install libdevil-dev
三、安装完成测试部分
- 运行rgbdslam
roslaunch rgbdslam rgbdslam.launch
修改包中的rgbdslam.launch文件,将算法接收的topic改为rosbag的发布值(根据实际情况修改)。并启动rgbdslam节点
<param name="config/topic_image_mono" value="/camera/rgb/image_color"/> <param name="config/topic_image_depth" value="/camera/depth/image"/>
数据集下载地址:
http://vision.in.tum.de/data/datasets/rgbd-dataset/download#freiburg1_xyz
- play rosbag
rosbag play rgbd_dataset_freiburg1_xyz.bag
效果如下:
四、算法流程解析
rgbdslam结合了QT界面,使得保存地图,轨迹和octomap的操作界面化了,rgbdslam的算法并不复杂,该算法主要分为4个部分:
1、对每一帧RGB图像提取特征点、计算特征点描述子。作者使用的特征点包括SIFT特征点和ORB特征点,使用的特征点种类可以通过launch文件进行选择,同时该框架也支持使用GPU加速SIFT
2、利用RANSAC和ICP算法计算两帧图像之间的相对旋转和平移(R,t)
3、作者的核心贡献利用作者提出的EMM测量模型判断估计值是否可以接受(判断投影点的深度),
4、作者使用最小生成树模型进行回环检测(这与BOW词袋库模型有所不同),构建位姿图优化模型,最后利用g2o优化工具求解这个优化问题。
作者将前三个步骤作为前端,第四部分作为后端。作者在后端优化中只优化了相机的位姿,没有像ORB-SLAM那样同时优化3D点的位置和相机位姿,这可能是rgbdslam建图不准确的原因之一。因为深度相机在物体边缘处的深度值通常有很大的跳变,因此我们不能完全相信特征点的值,尤其是边缘处的特征点的深度。这个现象在高博的论文中也提到过,所以高翔博士使用了平面特征和边缘特征对特征进行了分类。
五、详细分析rgbdslam的博客
https://www.cnblogs.com/voyagee/p/7027076.html
参考文献:
3D Mapping with an RGB-D Camera", F. Endres, J. Hess, J. Sturm, D. Cremers, W. Burgard, IEEE Transactions on Robotics, 2014.
参考博客:
熊猫飞天