1.概述
欢迎来到Project 3: Map My World(绘制我的世界地图)!在这个项目中,将使用RTAB-Map包从模拟环境中使用机器人创建一个2D占用网格和3D octomap。RTAB-Map(基于实时外观的映射)是SLAM开发能够三维映射环境的机器人的流行解决方案。RTAB-Map具有良好的速度和内存管理,并为信息分析提供了定制开发的工具。尤其重要的是,ROS Wiki (rtabmap_ros - ROS Wiki)上的文档质量非常高,若能够结合利用好RTAB-Map与机器人,将给绘图及定位打下一个坚实的基础。
对于这个项目,我们将使用rtabmap_ros包,这是一个用于与RTAB-Map交互的ROS包装器(API)。在查看相关文档时请记住这一点。
项目说明
项目流程如下:
1)将开发自己的包来与rtabmap_ros包进行接口。
2)在上一个定位项目的基础上进行必要的更改,以便将机器人与RTAB-Map连接起来。这方面的一个例子是RGB-D相机的添加。
3)确保所有文件都在适当的位置,所有链接都正确连接,命名设置正确,主题映射正确。此外,还需要生成适当的启动文件来启动机器人并映射其周围环境。
4)当机器人启动后,teleop控制它在房间里移动,生成一个适当的环境地图。
2.仿真设置
设置catkin_ws文件夹以及src文件夹,然后从上一个项目抓取代码(复制上一个项目的模拟环境和机器人)至重新命名的文件包( 比如:myrobotb)中。即,创建用于启动Gazebo世界和机器人模拟的包。然后运行catkin_make和source devel/setup.bash脚本。启动world.launch以验证是否可以正常运行!
roslaunch myrobotb world.launch
3.RTAB-Map包
RTAB-Map Pacakge
尽管ROS提供了大量的包,但是集成ROS包需要理解包本身以及它如何连接到项目。最好从RTAB-Map ROS Wiki页面开始。
根据文档http://wiki.ros.org/rtabmap_ros/Tutorials/SetupOnYourRobot,推荐的机器人配置要求:
1)一个2D Laser,提供sensor_msgs/LaserScan消息的测程传感器;
2)提供nav_msgs/Odometry消息的3D 摄像传感器;
3)兼容openni_launch, openni2_launch或freenect_launch ROS包。
但似乎我们缺少3D摄像传感器!
4.传感器升级
在之前的项目中,使用RGB相机,现在是时候给机器人升级了。具体来说,我们将为RTAB-Map使用一个模拟Kinect摄像头。升级传感器如下:
增加optical
摄像头链接
对于URDF文件中的RGB-D相机,为了使Gazebo中的相机图像与机器人正确对齐,需要在相机链接上增加一个额外的链接和一个额外的关节。注意,camera_optical_joint的父链接应该正确配置为原始摄像机链接。在机器人的.xacro文件中添加以下关节和链接:
<joint name="camera_optical_joint" type="fixed">
<origin xyz="0 0 0" rpy="-1.5707 0 -1.5707"/>
<parent link="camera_link"/>
<child link="camera_link_optical"/>
</joint&