常用的 SLAM 功能包應(yīng)用
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 功能包中的話題和服務(wù)</center>
| 名稱 | 類型 | 描述 | |
|---|---|---|---|
| Topic 訂閱 | tf | tf/tfMessage | 用于激光雷達坐標系,基座標系。里程計坐標系之間的變換 |
| Topic 訂閱 | scan | sensor_msgs/LaserScan | 激光雷達掃描數(shù)據(jù) |
| Topic 發(fā)布 | map_metedata | nav_msgs/MapMeteData | 發(fā)布地圖Meta數(shù)據(jù) |
| Topic 發(fā)布 | map | nav_msgs/OccupancyGrid | 發(fā)布地圖柵格數(shù)據(jù) |
| Topic 發(fā)布 | ~entropy | std_msgs/Float64 | 發(fā)布機器人姿態(tài)分布熵的估計 |
| Service | dynamic_map | nav_msgs/GetMap | 獲取地圖數(shù)據(jù) |
<center>gampping 功能包中的TF變換</center>
| TF變換 | 描述 | |
|---|---|---|
| 必須的TF坐標變換 | <scan frame>->base_link | 激光雷達坐標系之間的變換 |
| base_link->odom | 基座標系與里程計坐標系之間的變換。一般由里程計節(jié)點發(fā)布 | |
| 發(fā)布的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 功能包中的話題和服務(wù)</center>
| 名稱 | 類型 | 描述 | |
|---|---|---|---|
| Topic 訂閱 | syscommand | std_msgs/String | 系統(tǒng)命令 |
| Topic 訂閱 | scan | sensor_msgs/LaserScan | 激光雷達掃描數(shù)據(jù) |
| Topic 發(fā)布 | map_metedata | nav_msgs/MapMeteData | 發(fā)布地圖Meta數(shù)據(jù) |
| Topic 發(fā)布 | map | nav_msgs/OccupancyGrid | 發(fā)布地圖柵格數(shù)據(jù) |
| Topic 發(fā)布 | slam_out_pose | geometry_msgs/PoseStamped | 估計的機器人位置(沒用協(xié)方差) |
| Topic 發(fā)布 | poseupdate | geometry_msgs/PoseWithCovarianceStamped | 估計的機器人位置(具有高斯估計的不確定性) |
| Service | dynamic_map | nav_msgs/GetMap | 獲取地圖數(shù)據(jù) |
<center>hector 功能包中的TF變換</center>
| TF變換 | 描述 | |
|---|---|---|
| 必須的TF坐標變換 | <scan frame>->base_link | 激光雷達坐標系之間的變換 |
| base_link->odom | 基座標系與里程計坐標系之間的變換。一般由里程計節(jié)點發(fā)布 | |
| 發(fā)布的TF坐標變換 | map->odom | 地圖坐標系與機器人里程計坐標系之間的變換。估計機器人在地圖中的位置 |
cartographer
cartographer 功能包
- 2016年10月5日,谷歌開源
- 基于圖網(wǎng)絡(luò)的優(yōu)化方法
- 二維或三維條件下的定位及建圖功能
- 設(shè)計目的是在計算資源有限的情況下,實時獲取相對較高精度的2D地圖
- 主要基于激光雷達
- 后續(xù)會支持更多傳感器和機器人平臺,同時不斷增加新的功能。
安裝 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
查看建圖結(jié)果
$ rtabmap-databaseViewer ~/.ros/rtabmap.db