电子工坊

ROS 视觉SLAM 5 | rtabslam视觉建图导航

注意!该教程对应ROS套件用户

rtabslam 简介

RTAB-Map( for Real-Time Appearance-Based Mapping)用于基于外观的实时建图[Labb ́e and Michaud, 2013,Labb ́e and Michaud, 2017], 是一种基于增量式外观特征进行回环检测的SLAM框架。RTAB-Map可以使用手持的RGB-D相机、双目相机或三维激光雷达进行六自由度建图。

RTAB-Map使用词袋的方式判断新接收到的图像有多大可能是来自一个新位置或是曾经到过的位置,以此来完成回环检测,当检测到回环时,新的约束会被加到地图中,然后通过图优化的方式来最小化误差。RTAB-Map回使用内存管理的方法,限制用于回环检测和图优化的位置数量以保证在大规模环境中的实时性。


上面是RTAB-Map ROS节点的框图,输入有三种:

  1. 机器人里程计TF,可来自任何来源的里程计(可以是 3DoF 或 6DoF)
  2. 相机输入(一个或多个 RGB-D 图像,或立体相机图像)以及相应的校准消息
  3. 可选输入,来自 2D 激光雷达的激光扫描或来自 3D 激光雷达的点云

然后将来自这些输入的消息同步并传递给图 SLAM 算法。输出如下:

  1. Map Data 含最新添加的节点以及压缩的传感器数据和图形
  2. Map Graph 没有任何数据的地形图
  3. 在TF 上发布的校正过的里程计,提供MAP到ODOM位置转换
  4. 可选的 OctoMap(3D 占用网格)
  5. 可选的密集点云
  6. 可选的 2D 占用网格

具体算法流程可看官方的论文

深度相机+激光雷达融合建图

该例程使用激光雷达+深度摄像头融合建图,如需单独深度相机建图只需要在启动文件(launch)后面多加subscribe_scan:=false参数

  1. 机器人本地端启动基础驱动、深度相机、Rtabmap建图
    roslaunch lingao_vslam lingao_rtabmap_mapping.launch
    

  2. 启动远程rviz端查看建图

    roscd lingao_rviz/vslam/
    rviz -d rtabmap_slam.rviz 
    

    此时使用遥控控制小车进行建图

当地图建好后直接Ctrl+C退出程序会自动保存地图到~/.ros/rtabmap.db

rtabmap建的点云是三维稀疏地图,还是能看到轮廓

深度相机+激光雷达融合导航

该例程使用激光雷达+深度摄像头融合导航,效果比单独深度相机好

在使用导航时候 rtabmap会默认导入~/.ros/rtabmap.db地图

  1. 机器人本地端启动基础驱动、深度相机、Rtabmap定位、navitagiton导航
    roslaunch lingao_vslam lingao_rtabmap_navigation.launch
    
  2. 启动远程rviz端查看建图
    roscd lingao_rviz/vslam/
    rviz -d rtabmap_slam.rviz 
    

    打开导航后地图默认不会自动下载,需要点击Rtabmap cloud里面的Download map下载地图,下载需要一点时间

  3. 开始导航
    导航方法和nav一样,在rviz点击2D Nav Goal指定位置,交给move_base导航

只使用深度相机

只使用深度相机定位,不订阅雷达信息,效果也是不错的

  1. 机器人本地端启动基础驱动、深度相机、Rtabmap定位、navitagiton导航
    roslaunch lingao_vslam lingao_rtabmap_mapping.launch subscribe_scan:=false
    

    后面的步骤和上面一样,只是启动文件后面加多`subscribe_scan:=false`参数,建图同理

参数修改

rtabmap默认导入和保存地图到~/.ros/rtabmap.db
如需更改只需要更改src/lingaoRobot/lingao_visual_apps/lingao_vslam/launch/lingao_rtabmap_mapping.launch文件中的database_path路径