gmapping介绍及参数说明

软件包摘要

这个包包含一个用于OpenSlam的Gmapping的ROS包。gmapping包提供基于激光的SLAM(同时定位和建图),作为称为slam_gmapping的ROS节点。使用slam_gmapping,您可以从移动机器人收集的激光和姿势数据创建2-D占用网格地图(如建筑平面图)。

1、外部文档

这主要是第三方包; 底层的GMapping库是外部文档。查看有关下面列出的许多参数的详细信息。

2、硬件要求

要使用slam_gmapping,您需要一个移动机器人,它提供里程数据,并配备有水平安装的固定激光测距仪。该slam_gmapping节点将尝试每个传入的扫描转换成odom(里程计)TF框架。有关所需变换的更多信息,请参阅“ 必需的Tf变换 ”。

3、例子

要从具有激光发布扫描的机器人上创建地图base_scan主题:

rosrun gmapping slam_gmapping scan:= base_scan

4、节点

4.1 slam_gmapping
该slam_gmapping节点发生在sensor_msgs /激光扫描信息,并建立一个映射(nav_msgs / OccupancyGrid)。可以通过ROS 主题或服务检索地图。

4.2 订阅主题

(1) tf(tf / tfMessage)
需要进行激光,基准和测距的相关框架转换(见下文)

(2) scan (sensor_msgs / LaserScan)
激光扫描从中创建地图

4.3 发布主题

(1) map_metadata(nav_msgs / MapMetaData)
从此主题获取地图数据,将其锁定并定期更新。

(2) map(nav_msgs / OccupancyGrid)
从此主题获取地图数据,将其锁定并定期更新

(3) 〜entropy (std_msgs / Float64)
机器人姿态分布的熵的估计值(较高的值表示较大的不确定性)。

4.4 服务

dynamic_map(nav_msgs / GetMap)
调用此服务以获取地图数据

4.5 参数

(1)〜inverted_laser(string,默认:“false”)
(改为使用变换数据)激光是正面朝上(扫描按CCW排序)还是上下颠倒(扫描按顺序排列)?

(2)〜throttle_scans(int,默认:1)
处理1每次这许多扫描(将其设置为更高的数字,以跳过更多的扫描)

(3)〜base_frame(string,默认:“base_link”)
框架连接到移动基座。

(4)〜map_frame(string,默认:“map”)
框架附加到地图。

(5)〜odom_frame(string,默认:“ odom ”)
框架连接到里程计系统。

(6)〜map_update_interval(float,默认值:5.0)
在更新地图之间的时间长度(以秒为单位)。降低该数量更频繁地更新占用网格,代价是更大的计算负荷。

(7)〜maxUrange(float,默认值:80.0)
激光的最大可用范围。光束被裁剪为该值。

(8)〜sigma(float,默认值:0.05)
贪心终点匹配使用的sigma

(9)〜kernelSize(int,default:1)
内核中要查找一个对应关系

(10)〜lstep(float,default:0.05)
翻译的优化步骤

(11)〜astep(float,默认值:0.05)
旋转中的优化步骤

(12)〜iterations(int,default:5)
扫描匹配器的迭代次数

(13)〜lsigma(float,默认值:0.075)
用于计算的波束可能性的sigma

(14)〜ogain(float,默认值:3.0)
在评估可能性时使用的增益,用于平滑重采样效果

(15)〜lskip(int,默认值:0)
每次扫描中要跳过的光束数。

(16)〜minimumScore(float,default:0.0)
考虑扫描结果的最小分数匹配好。当使用具有有限范围(例如5m)的激光扫描仪时,可以避免在大的开放空间中跳跃姿态估计。分数上升到600+,例如当遇到跳跃估计问题时,尝试50。

(17)〜srr(float,默认值:0.1)
作为平移函数的平移误差(rho / rho)

(18)〜srt(float,默认值:0.2)
作为旋转的函数的平移误差(rho / theta)

(19)〜str(float,默认值:0.1)
作为平移函数的旋转中的测量误差(θ/ rho)

(20)〜stt(float,默认值:0.2)
作为旋转的函数的旋转中的测量误差(θ/θ)

(21)〜linearUpdate(float,default:1.0)
每次机器人翻译远处时,处理一次扫描

(22)〜angularUpdate(float,default:0.5)
每次机器人旋转这么远时处理一次扫描

(23)〜temporalUpdate(float,default:-1.0)
如果上次扫描处理的时间早于更新时间(秒),则处理扫描。小于零的值将关闭基于时间的更新。

(24)〜resampleThreshold(float,default:0.5)
基于Neff的重采样阈值

(25)〜particles(int,默认值:30)
过滤器中的粒子数

(26)〜xmin(float,默认值:-100.0)
初始地图大小X最小值

(27)〜ymin(float,默认值:-100.0)
初始地图大小Y最小值

(28)〜xmax(float,默认值:100.0)
初始地图大小X最大值

(29)〜ymax(float,默认值:100.0)
初始地图大小Y最大值

(30)〜delta(float,默认值:0.05)
地图的分辨率

(31)〜llsamplerange(float,默认值:0.01)
可能性的平移采样范围

(32)〜llsamplestep(float,默认值:0.01)
可能性的平移采样步骤

(33)〜lasamplerange(float,默认值:0.005)
角度采样范围的可能性

(34)〜lasamplestep(float,默认值:0.005)
角度采样步骤的可能性

(35)〜transform_publish_period(float,默认值:0.05)
转换发布之间的时间长度(以秒为单位)。

(36)〜occ_thresh(float,默认:0.25)
gmapping的占用值的阈值。具有较大占用率的单元被认为是占用的(即,在所得的sensor_msgs / LaserScan中设置为100 )。

(37)〜maxRange(float)
传感器的最大范围。如果传感器范围内没有障碍物的区域在地图中显示为自由空间,则设置maxUrange <实际传感器的最大范围<= maxRange。

4.6 必需的tf转换

(1)<传入激光数据的框架> → base_link
通常是固定值,由robot_state_publisher或tf static_transform_publisher定期广播。

(2)base_link → odom
通常由里程表系统(例如,移动基座的驱动器)提供,

4.7 提供tf转换

(1) 地图 → odom
在地图框架内的机器人姿势的当前估计

猜你喜欢

转载自blog.csdn.net/Forrest_Z/article/details/62883695