前言
继上篇博客成功安装Kinect2驱动后,就打算跑一下ORB-SLAM2,然后很顺利地就成功了。
但是我还有点疑惑,既然是RGB-D SLAM,为什么没有显示稠密点云?可能是没有写界面进行显示,需要自己写代码保存点云地图,这个有待研究。
步骤
安装ORB-SLAM2
参考:https://blog.youkuaiyun.com/learning_tortosie/article/details/79881165
因为要使用ROS,所以要进行到编译ROS下的ORB-SLAM2。
安装Kinect2驱动
参考:https://blog.youkuaiyun.com/learning_tortosie/article/details/81151128
修改ORB-SLAM2
安装好Kinect2的驱动后,执行:
roslaunch kinect_bridge kinect_bridge.launch
然后执行以下命令查询ROS发布的话题
rostopic list
话题如下:
/kinect2/bond
/kinect2/hd/camera_info
/kinect2/hd/image_color
/kinect2/hd/image_color/compressed
/kinect2/hd/image_color_rect
/kinect2/hd/image_color_rect/compressed
/kinect2/hd/image_depth_rect
/kinect2/hd/image_depth_rect/compressed
/kinect2/hd/image_mono
/kinect2/hd/image_mono/compressed
/kinect2/hd/image_mono_rect
/kinect2/hd/image_mono_rect/compressed
/kinect2/hd/points
/kinect2/qhd/camera_info
/kinect2/qhd/image_color
/kinect2/qhd/image_color/compressed
/kinect2/qhd/image_color_rect
/kinect2/qhd/image_color_rect/compressed
/kinect2/qhd/image_depth_rect
/kinect2/qhd/image_depth_rect/compressed
/kinect2/qhd/image_mono
/kinect2/qhd/image_mono/compressed
/kinect2/qhd/image_mono_rect
/kinect2/qhd/image_mono_rect/compressed
/kinect2/qhd/points
/kinect2/sd/camera_info
/kinect2/sd/image_color_rect
/kinect2/sd/image_color_rect/compressed
/kinect2/sd/image_depth
/kinect2/sd/image_depth/compressed
/kinect2/sd/image_depth_rect
/kinect2/sd/image_depth_rect/compressed
/kinect2/sd/image_ir
/kinect2/sd/image_ir/compressed
/kinect2/sd/image_ir_rect
/kinect2/sd/image_ir_rect/compressed
/kinect2/sd/points
/rosout
/rosout_agg
这里使用/kinect2/qhd/image_color
和/kinect2/qhd/image_depth_rect
。
打开ORB-SLAM2/Example/ROS/ORBSLAM2/src/ros_rgbd.cc
,将对应语句修改为:
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh,"/kinect2/qhd/image_color",1);
message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh,"/kinect2/qhd/image_depth_rect",1);
修改后执行./build_ros.bash
重新编译。
参考https://github.com/code-iai/iai_kinect2/tree/master/kinect2_calibration#calibrating-the-kinect-one标定Kinect2,获取内参和畸变系数后,新建kinect2.yaml
,参照Examples/RGB-D/TUM1.yaml
,修改对应参数。
最后执行以下命令即可启动ORB-SLAM2。
rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.txt Examples/RGB-D/kinect2.yaml
运行截图如下:
地图的保存和加载
参考:
- https://blog.youkuaiyun.com/felaim/article/details/79667635
- https://blog.youkuaiyun.com/felaim/article/details/79671160
- http://www.cnblogs.com/mafuqiang/p/6972342.html
- http://www.cnblogs.com/mafuqiang/p/6972841.html
可以实现保存和加载地图,但是还无法进行重定位。
有时间再尝试并整理一波。
总结
ORB-SLAM2是一个非常完善非常易用的系统,优势不多说。
随着了解的深入,发现ORB-SLAM2并不能解决实际问题。它基于特征点法,建的图是稀疏的,只能满足定位需求,而无法提供导航、避障、交互等诸多功能。而且目前还没有开放存储和读取地图后重新定位的功能。
最近一直在思考一个问题,如何利用视觉SLAM进行导航?感觉还是要走激光SLAM的路线才行。
请大佬多多指教。