常用的 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