week36 rtabmap_ros + kinect 实现三维
rtabmap
RTAB-Map (Real-Time Appearance-Based Mapping)是一种基于全局贝叶斯闭环检测的RGB-D Graph SLAM方法。它可以用kinect的深度信息结合kinect变换得到的激光数据进行即时定位与建图(gmapping算法只用到了kinect转换得到的激光数据,而把深度信息丢弃了)。
安装
$ sudo apt-get install ros-kinetic-rtabmap-ros
使用
要先启动配有kinect的仿真环境
$ roslaunch myrobot_description with_kinect.launch
之后启动写好的launch文件
$ roslaunch myrobot_description rtabmap_demo.launch
其中rtabmap_demo.launch文件的内容如下
<launch>
<include file="$(find rtabmap_ros)/launch/rtabmap.launch">
<arg name="rgb_topic" value="/kinect/rgb/image_raw" />
<arg name="depth_topic" value="/kinect/depth/image_raw" />
<arg name="camera_info_topic" value="/kinect/rgb/camera_info" />
<arg name="depth_camera_info_topic" value="/kinect/depth/camera_info" />
<arg name="frame_id" value="base_footprint"/>
<arg name="visual_odometry" value="false"/>
<arg name="odom_topic" value="/odom"/>
<arg name="rtabmap_args" value="--delete_db_on_start"/>
<arg name="rviz" value="true"/>
<arg name="rtabmapviz" value="true"/>
</include>
</launch>
可以看到,该launch文件启动了rtabmap.launch文件,后面的内容全是设置参数
包括定义 rgb_topic depth_topic camera_info_topic等等,最后启动rviz和rtabmap自带的可视化界面
效果
image.png左下为仿真的gazebo环境,右下为键盘控制前后左右移动的程序,右上为点云图,左上的3D Map为三维地图
三维地图
rtabmap_ros三维建图_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili.com/video/BV15a4y1Y7y7/
LaserScan数据结构
LaserScanheader消息头,包含序列、时间戳和坐标系
angle_min angle_max最小最大采样角度,比如-180°-180°
angle_increment两次采样间的角度步长,比如为1°,则一圈采样360个点
scan_time 扫描频率的倒数
range_min range_max最小最大范围 比如0.1m-8m
ranges一个数组,用来保存一圈360°所有的点的距离信息
LaserScan二维深度信息,能够采集保存一个平面的距离数据
Kinect RGB-D摄像头 三维点云信息
depthimage_to_laserscan$ sudo apt-get install ros-kinetic-depthimage-to-laserscan
通过depthimage_to_laserscan包,将摄像头获取到的环境深度信息转换为雷达信息(点云深度数据 to 激光数据)
Odometry数据结构
odom消息头header,同上
pose包含position为机器人三维位置和orientation表征机器人角度以及协方差矩阵
twist表征机器人的运动状态包括三维线速度和三维角速度以及协方差矩阵用于卡尔曼滤波
Odom里程计信息
通过编码器得到当前速度,积分得到里程计信息,即走过距离和转过角度
gazebo报错,无法显示图像信息
gzserver: /build/ogre-1.9-mqY1wq/ogre-1.9-1.9.0+dfsg1/OgreMain/src/OgreRenderSystem.cpp:546: virtual void Ogre::RenderSystem::setDepthBufferFor(Ogre::RenderTarget*): Assertion `bAttached && "A new DepthBuffer for a RenderTarget was created, but after creation" "it says it's incompatible with that RT"' failed.
报错参考
VMware+Gazebo Z-ordering issue · Issue #4 · udacity/RoboND-Perception-Exercises
https://github.com/udacity/RoboND-Perception-Exercises/issues/4
发现是gazebo版本的问题,当前版本7.0.0,升级至7.15+则无报错,但是升7.4.0的时候老是连接失败,一气之下升级到gazebo9.13.1
升级参考
将Kinetic中的原生Gazebo7升为Gazebo9_淡水苦舟-CSDN博客 https://blog.csdn.net/weixin_42268975/article/details/105057874
All about Gazebo ROS (Gazebo 9) | The Construct https://www.theconstructsim.com/all-about-gazebo-9-with-ros/