gmapping介绍及参数说明

本文介绍了Gmapping ROS包,这是一个基于激光的SLAM(同时定位和建图)软件包,适用于移动机器人。通过slam_gmapping节点,可以利用激光扫描和机器人姿势数据创建2-D占用网格地图。文章还详细描述了其工作原理、参数配置及所需的硬件条件。

软件包摘要

这个包包含一个用于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
在地图框架内的机器人姿势的当前估计

在配置 GMapping 算法参数时,需要根据实际应用场景和硬件性能进行调整。以下是一些重要的参数及其推荐设置: ### 参数说明及推荐设置 - **particles (int, default: 30)** 这个参数决定 GMapping 算法中的粒子数,因为 GMapping 使用的是粒子滤波算法,粒子在不断地迭代更新,所以选取一个合适的粒子数可以让算法在保证比较准确的同时有较高的速度。通常情况下,可以尝试将粒子数设置为 60 到 100 之间,以获得更好的精度[^1]。 - **minimumScore (float, default: 0.0)** 最小匹配得分,这个参数很重要,它决定了对激光的一个置信度。越高说明对激光匹配算法的要求越高,激光的匹配也越容易失败而转去使用里程计数据,而设得太低又会使地图中出现大量噪声,所以需要权衡调整。一般建议设置为 0.5 到 0.8 之间,以平衡精度和鲁棒性。 - **global_frame (/map)** 对于全局代价地图,使用 `/map` 框架作为 global 框架。 - **robot_base_frame (/base_footprint 或 /base_link)** 这个通常是 `/base_link` 或者 `/base_footprint`。对于 TurtleBot 应设为 `/base_footprint`。 - **update_frequency (default: 1.0 Hz)** 根据传感器数据,全局地图更新的频率,单位为赫兹。这个数值越大,计算机 CPU 负担就会越重。特别对于全局地图,通常会设定一个相对较小、在 1.0 到 5.0 之间的值[^2]。 ### 示例配置代码 ```xml <launch> <node name="slam_gmapping" pkg="gmapping" type="slam_gmapping" output="screen"> <param name="particles" value="60"/> <param name="minimumScore" value="0.7"/> <param name="global_frame" value="/map"/> <param name="robot_base_frame" value="/base_footprint"/> <param name="update_frequency" value="2.0"/> </node> </launch> ``` ### 注意事项 - 在调整参数时,应考虑计算资源的限制,避免因参数设置过高导致系统性能下降。 - 实际应用中可能需要多次试验和调整,以找到最适合当前环境和设备的最佳参数组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值