目录
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上,一般为map
nav_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 w
int8[] 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等算法。
具体的比较如下表所示:
(1)里程计包括车轮上的光电码盘、惯性导航单元(IMU)、视觉里程计,可以只用其中的一个作odom,也可以选择多个进行数据融合,融合结果作为odom。
(2)https://blog.csdn.net/dddxxxx/article/details/78460636
(3)Refer to《An evaluation of 2D SLAM techniques available in robot operating system》
7.2.1 Gmapping SLAM计算图
7.2.2 Karto SLAM计算图
评论(0)
您还未登录,请登录后发表或查看评论