本文共 3106 字,大约阅读时间需要 10 分钟。
目录
7 ROS激光SLAM
机器人导航的主要问题可以分为建图(Mapping)、定位(Localization)和路径规划(Path Planning)三部分。同步定位与建图(SLAM)问题位于定位和建图的交集部分。SLAM需要机器人在未知的环境中逐步建立起地图,然后根据地图确定自身位置,从而进一步定位。
SLAM可以分为激光,视觉,激光+视觉 三类。本章主要研究激光SLAM算法。
7.1 Map(地图)
ROS中的地图就是一张普通的灰度图像,通常为pgm格式。这张图像上的黑色像素表示障碍物,白色像素表示可行区域,灰色是未探索的区域。如下图所示:
地图在ROS中是以Topic的形式维护和呈现的,这个Topic名称是 /map ,它的消息类型是 nav_msgs/OccupancyGrid
可以通过 rosmsg show nav_msgs/OccupancyGrid 来查看消息格式:
std_msgs/Header header #消息的报头 uint32 seq time stamp string frame_id #地图消息绑定在TF的哪个frame上,一般为mapnav_msgs/MapMetaData info #地图相关信息 time map_load_time #加载时间 float32 resolution #分辨率 单位:m/pixel uint32 width #宽 单位:pixel uint32 height #高 单位:pixel geometry_msgs/Pose origin #原点 geometry_msgs/Point position float64 x float64 y float64 z geometry_msgs/Quaternion orientation float64 x float64 y float64 z float64 wint8[] data #地图具体信息
以上定义了/map话题的数据结构,包含了三个主要的部分:header, info和data。header是消息的报头,保存了序号、时间戳、frame等通用信息,info是地图的配置信息,它反映了地图的属性,data是真正存储这张地图数据的部分,它是一个可变长数组, int8 后面加了 [] ,可以理解为一个类似于vector的容器,它存储的内容有width*height个int8型的数据,也就是这张地图上每个像素。
对于未知区域的地图,可以是机器人在运动中使用SLAM算法动态构建。
对于已知区域的地图,可以首先启动SLAM算法node,移动机器人使其扫描周围环境并建图,然后使用map_server($ rosrun map_server map_saver -f map) 保存地图。 在以后的导航中使用已保存的地图即可。
7.2 常用的激光SLAM算法比较
ROS中常用的激光SLAM算法有Gmapping、Karto、Hector等算法。
具体的比较如下表所示:
| gmapping | Karto | Hector |
所需sensor | 激光雷达 里程计 | 激光雷达 里程计 | 激光雷达(需要高频率的雷达) |
输入topic |
|
|
|
输出topic |
|
|
|
提供的service | /dynamic_map : 类型为nav_msgs/GetMap,用于获取当前的地图。 | /dynamic_map :类型为nav_msgs/GetMap,用于获取当前的地图 | /dynamic_map :类型为nav_msgs/GetMap,用于获取当前的地图 |
技术实现 | 粒子滤波 | 基于图优化的方法 | scan-matching(Gaussian-Newton equation) |
效果 | 成熟,可靠,效果稳定,许多基于ROS的机器人都跑gmapping_slam | 与gmapping类似,更适合在大地图环境下 | 效果不如Gmapping、Karto,因为它仅用到激光雷达信息 |
(1)里程计包括车轮上的光电码盘、惯性导航单元(IMU)、视觉里程计,可以只用其中的一个作odom,也可以选择多个进行数据融合,融合结果作为odom。
(2)
(3)Refer to《An evaluation of 2D SLAM techniques available in robot operating system》
7.2.1 Gmapping SLAM计算图
7.2.2 Karto SLAM计算图
7.2.3 Hector SLAM计算图
转载地址:https://blog.csdn.net/lclfans1983/article/details/105399567 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!