7-机器人SLAM建图

常用的 SLAM 功能包应用

gmapping

gmapping 功能包

  • 基于激光雷达
  • Rao-Blackwellized粒子滤波算法
  • 二维栅格地图
  • 需要机器人提供里程计信息
  • OpenSlam开源算法
  • 输出地图话题:
  • nav_msgs/OccupancyGrid。
graph TD
A(即时定位与地图建模 gmapping)

B(深度信息)-->A

C(IMU信息)-->A 

D(里程计信息)-->A

<center>gmapping 功能包的总体框架</center>

安装gmapping

sudo apt-get install ros-melodic-gmapping

<center>gmapping 功能包中的话题和服务</center>

名称 类型 描述
Topic 订阅 tf tf/tfMessage 用于激光雷达坐标系,基座标系。里程计坐标系之间的变换
Topic 订阅 scan sensor_msgs/LaserScan 激光雷达扫描数据
Topic 发布 map_metedata nav_msgs/MapMeteData 发布地图Meta数据
Topic 发布 map nav_msgs/OccupancyGrid 发布地图栅格数据
Topic 发布 ~entropy std_msgs/Float64 发布机器人姿态分布熵的估计
Service dynamic_map nav_msgs/GetMap 获取地图数据

<center>gampping 功能包中的TF变换</center>

TF变换 描述
必须的TF坐标变换 <scan frame>->base_link 激光雷达坐标系之间的变换
base_link->odom 基座标系与里程计坐标系之间的变换。一般由里程计节点发布
发布的TF坐标变换 map->odom 地图坐标系与机器人里程计坐标系之间的变换。估计机器人在地图中的位置

保存地图

rosrun map_server map_saver -f cloister_gmapping

hector

hector 功能包

  • 基于激光雷达
  • 高斯牛顿方法
  • 二维栅格地图
  • 不需要机器人提供里程计信息
  • 输出地图话题:
  • nav_msgs/OccupancyGrid。
graph TD
A(即时定位与地图建模 hector)

B(深度信息)-->A

<center>hector_slam 功能包的总体框架</center>

安装hector_slam

$ git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git

<center>hector 功能包中的话题和服务</center>

名称 类型 描述
Topic 订阅 syscommand std_msgs/String 系统命令
Topic 订阅 scan sensor_msgs/LaserScan 激光雷达扫描数据
Topic 发布 map_metedata nav_msgs/MapMeteData 发布地图Meta数据
Topic 发布 map nav_msgs/OccupancyGrid 发布地图栅格数据
Topic 发布 slam_out_pose geometry_msgs/PoseStamped 估计的机器人位置(没用协方差)
Topic 发布 poseupdate geometry_msgs/PoseWithCovarianceStamped 估计的机器人位置(具有高斯估计的不确定性)
Service dynamic_map nav_msgs/GetMap 获取地图数据

<center>hector 功能包中的TF变换</center>

TF变换 描述
必须的TF坐标变换 <scan frame>->base_link 激光雷达坐标系之间的变换
base_link->odom 基座标系与里程计坐标系之间的变换。一般由里程计节点发布
发布的TF坐标变换 map->odom 地图坐标系与机器人里程计坐标系之间的变换。估计机器人在地图中的位置

cartographer

cartographer 功能包

  • 2016年10月5日,谷歌开源
  • 基于图网络的优化方法
  • 二维或三维条件下的定位及建图功能
  • 设计目的是在计算资源有限的情况下,实时获取相对较高精度的2D地图
  • 主要基于激光雷达
  • 后续会支持更多传感器和机器人平台,同时不断增加新的功能。

安装 cartographer

$ sudo apt-get install ros-melodic-cartographer-*

保存地图

$ rosservice call /finish_trajectory 0
$ rosservice call /write_state "{filename: '${HOME}/mymap.pbstream'}"
$ rosrun cartographer_ros cartographer_pbstream_to_ros_map-map_filestem=${HOME}/mymap-pbstream_filename=${HOME}/mymap.pbstream-resolution=0.05

rtabmap

安装 rtabmap

$ sudo apt-get install ros-melodic-rtabmap-ros

查看建图结果

$ rtabmap-databaseViewer ~/.ros/rtabmap.db
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容