概述http://wiki.ros.org/gmapping
Gmapping
包包含OpenSlam的Gmapping的一个ROS封装。Gmapping 的ROS节点slam_gmapping提供基于激光的SLAM(同时定位和创建地图)。依靠移动机器人收集的激光和位姿数据,使用slam_gmapping可以创建2维栅格地图。外部文档主要是一个第三方包。
硬件需求使用
slam_gmapping,需要移动机器人提供里程计数据,并且水平安装固定激光测距仪。slam_gmapping节点试图转换每个扫描输入数据到odom(里程计)tf坐标系。见"Required tf transforms"更多需要的转换。例子机器人用激光扫描发布创建地图在
base_scan话题上: [html] view plain copy - rosrun gmapping slam_gmapping scan:=base_scan
节点slam_gmapping节点
slam_gmapping采用sensor_msgs/LaserScan消息,并且构建地图(nv_msgs/OccupancyGrid)。地图可以通过topic或service检索。订阅话题tf(tf/tfMessage) 转换需要涉及激光坐标系,基座坐标系和里程计坐标系。
scan(sensor_msgs/LaserScan) 从激光扫描创建地图
发布话题 map_metadata (nav_msgs/MapMetaData) 从这个话题获得地图数据,这个话题是被锁存的,并定期更新。
map (nav_msgs/OccupancyGrid) 从这个话题获得地图数据,这个话题是被锁存的,并定期更新。
~entropy (std_msgs/Float64) 机器人位姿分布熵的估计
(值越高表示越大的不确定性)。服务dynamic_map(nav_msgs/GetMap) 调用这个服务来获取地图数据。
参数http://wiki.ros.org/gmapping· inverted_laser (string, default: "false") (REMOVED in 1.1.1; transform data is used instead) 激光是朝上安装(扫描是逆时 针), 还 是朝下安装 (扫描是顺时针)?
· throttle_scans (int, default: 1) 激光雷达每扫描一周跳过多少扫描。
· base_frame (string, default: "base_link") 移动基座的坐标系。
· map_frame (string, default: "map") 地图坐标系。
· odom_frame (string, default: "odom") 里程计系统的坐标系。
· map_update_interval (float, default: 5.0) 地图更新的时间间隔(
单位:seconds)。更新间隔越小,计算负荷越大。
· maxUrange (float, default: 80.0) 激光雷达最大可用距离。光束被裁减成这个值。
· sigma (float, default: 0.05) 用作结束点匹配。
· kernelSize (int, default: 1) 在内核内寻找一个对应。
· lstep (float, default: 0.05) 平移的最优步长。
· astep (float, default: 0.05) 旋转的最优步长。
· iterations (int, default: 5) 扫描匹配的迭代次数。
· lsigma (float, default: 0.075) 波束的sigma,用来计算似然估计。
· ogain (float, default: 3.0) 评估似然的增益,用来平滑重采样的影响。
· lskip (int, default: 0) 每次扫描跳过的波束。
· minimumScore (float, default: 0.0) 评价扫描匹配良好结果的最低分数。
· srr (float, default: 0.1) 平移函数在平移时的里程计误差 (rho/rho)。
· srt (float, default: 0.2) 旋转函数在平移时的里程计误差 (rho/theta)
· str (float, default: 0.1) 平移函数在旋转时的里程计误差 (theta/rho)
· stt (float, default: 0.2) 旋转函数在旋转时的里程计误差 (theta/theta)
· linearUpdate (float, default: 1.0) 机器人平移这么远,处理一次扫描。
· angularUpdate (float, default: 0.5) 机器人旋转这个角度,处理一次扫描。
· temporalUpdate (float, default: -1.0) 如果上一次扫描处理比更新时间长,处理一次扫描。值小于0
,将会关闭更新相关 的时间。
· resampleThreshold (float, default: 0.5) 基于重采样阈值的Neff
。
· particles (int, default: 30) 滤波器的粒子数。
· xmin (float, default: -100.0) 初始地图尺寸。
· ymin (float, default: -100.0) 初始地图尺寸。
· xmax (float, default: 100.0) 初始地图尺寸。
· ymax (float, default: 100.0) 初始地图尺寸。
· delta (float, default: 0.05) 处理参数 (地图的分辨率)。
· llsamplerange (float, default: 0.01) 似然的平移采样距离。
· llsamplestep (float, default: 0.01) 似然的平移采样步长。
· lasamplerange (float, default: 0.005) 似然的角度采样距离。
· lasamplestep (float, default: 0.005) 似然的角度采样步长。
· transform_publish_period (float, default: 0.05) 转换发布间隔,单位:seconds
· occ_thresh (float, default: 0.25) Gmapping
占用值的阈值。有大一些的占用值的单元格,被视为占用。
· maxRange (float) 传感器的最大距离。
需要的tf转换 → base_link 通常是一个固定值, 由
robot_state_publisher或
tf static_transform_publisher.
定期广播。base_link → odom 通常有里程计系统提供
(例如,移动机器人的驱动)提供的tf转换map → odom 在地图坐标系中机器人位姿的当前估计。http://wiki.ros.org/pr2_controllers/Tutorials/Using%20the%20base%20controller%20with%20odometry%20and%20transform%20information