通过ROS,用Kinect2跑ORB-SLAM2

本文详细介绍了如何在安装Kinect2驱动后配置并使用ORB-SLAM2系统,包括修改源代码以适配特定的话题、标定Kinect2获取内参及畸变系数等步骤,并探讨了如何保存和加载地图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

继上篇博客成功安装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

运行截图如下:

地图的保存和加载

参考:

可以实现保存和加载地图,但是还无法进行重定位。
有时间再尝试并整理一波。

总结

ORB-SLAM2是一个非常完善非常易用的系统,优势不多说。
随着了解的深入,发现ORB-SLAM2并不能解决实际问题。它基于特征点法,建的图是稀疏的,只能满足定位需求,而无法提供导航、避障、交互等诸多功能。而且目前还没有开放存储和读取地图后重新定位的功能。
最近一直在思考一个问题,如何利用视觉SLAM进行导航?感觉还是要走激光SLAM的路线才行。
请大佬多多指教。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值