转:通过ROS,用Kinect2跑ORB-SLAM2

前言

继上篇博客成功安装Kinect2驱动后,就打算跑一下ORB-SLAM2,然后很顺利地就成功了。
但是我还有点疑惑,既然是RGB-D SLAM,为什么没有显示稠密点云?可能是没有写界面进行显示,需要自己写代码保存点云地图,这个有待研究。

步骤

安装ORB-SLAM2

参考:https://blog.csdn.net/learning_tortosie/article/details/79881165
因为要使用ROS,所以要进行到编译ROS下的ORB-SLAM2。

安装Kinect2驱动

参考:https://blog.csdn.net/learning_tortosie/article/details/81151128

修改ORB-SLAM2

安装好Kinect2的驱动后,执行:

roslaunch kinect_bridge kinect_bridge.launch

     
     
     
     
  • 1

然后执行以下命令查询ROS发布的话题

rostopic list

     
     
     
     
  • 1

话题如下:

/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 rgb_sub(nh,"/kinect2/qhd/image_color",1);
message_filters::Subscriber depth_sub(nh,"/kinect2/qhd/image_depth_rect",1);

     
     
     
     
  • 1
  • 2

修改后执行./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

     
     
     
     
  • 1

运行截图如下:

地图的保存和加载

参考:

  • https://blog.csdn.net/felaim/article/details/79667635
  • https://blog.csdn.net/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的路线才行。
请大佬多多指教。

你可能感兴趣的:(ORB-SLAM2,ros,算法)