目录
Gmapping
1.安装与使用方式
3.Gmaping话题分析
4.Gmaping TF变换分析
5.Gmapping栅格分析
6.Gmapping参数分析
Gmapping基于激光雷达进行构图,采用Rao-Blackwellized粒子滤波算法,需要机器人提供里程计信息。
Rao-Blackwellized推导式:https://people.eecs.berkeley.edu/~pabbeel/cs287-fa12/slides/RBPF.pdf
wiki:https://en.wikipedia.org/wiki/Rao%E2%80%93Blackwell_theorem
git:https://github.com/ros-perception/slam_gmapping
安装gmapping
apt install ros-kinetic-gmapping
安装map-server,地图导出工具
apt install ros-kinetic-map-server
功能包准备
gitee地址:https://gitee.com/alen2020/ros_gmapping.git
mbot_description:车体描述文件,urdf
mbot_gazebo:gazebo文件,用于提供虚拟地图
mbot_navigation:gmmping启动包
启动方式
#启动gazebo,创建虚拟地图
$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
#启动gmpping构图
$ roslaunch mbot_navigation gmapping_demo.launch
#启动车体控制程序
$ roslaunch mbot_teleop mbot_teleop.launch
打开后看到rviz界面,此时可控制小车跑一圈来进行建图
随着机器人的移动地图逐渐成型
保存地图
构图完成后,执行命令保存地图
$ rosrun map_server map_saver -f mymap
保存之后生成两个文件,一个地图pgm,一个yaml文件
可选参数:
mode:可以有三个值之一:trinary,scale或raw。 Trinary是默认值。
参数解释:
如果像素的COLOR值x在[0,255]范围内,我们应该如何解释这个值?首先,我们将整数x转换为一个浮点数p,转换公式具体取决于yaml中negate标志的定义。
如果negate为0,则p =(255 - x)/ 255.0。这意味着黑色(0)现在具有最高值(1.0)而白色(255)具有最低值(0.0)。
如果negate为1,则p = x / 255.0。这是图像的非标准解释。
标准解释是三元解释,即解释所有值,使输出最终成为三个值之一。
如果p> occupied_thresh,则输出值100以指示单元格已被占用。
如果p 否则,输出-1 a.k.a. 255(作为无符号字符),以指示该单元格未知
这将调整上述解释,以允许更多的输出值。
如前所述,如果p> occupied_thresh,则输出值100,如果p 否则,输出99 *(p - free_thresh)/(occupied_thresh - free_thresh) 这将允许您输出范围为[0,100]的完整渐变值。要输出-1,只需使用png的alpha通道,其中任何透明度都将被解释为未知。
Gmapping订阅的传感器话题,如激光类的话题的默认名为scan,建图是一定需要用传感器的数据信息的,若开启的传感器所发布的话题不为scan,需将发布话题remap到scan,或修改Gmapping订阅话题名。gmapping订阅雷达信息后,会通过计算来生成地图,以及计算地图栅格数据,从而判定哪些地方机器人可走与否。
gmapping节点订阅话题
gmapping节点发布话题
gmapping服务维持
Gmapping建图的tf变换顺序为,map到_base_link的变换,base_link到里程坐标系的变换,传感器到base_link的变换
必须的TF变换
Gmapping建图的好坏,地图质量的高低,定位导航的精确性,CPU性能的占有率,都直接与建图参数挂钩。
各参数含义:https://www.ncnynl.com/archives/201702/1364.html
参考文章:
1.地图yaml分析,https://blog.csdn.net/wsc820508/article/details/81556620