gmapping介绍及参数说明

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件包摘要

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

<think>好的,我现在需要回答用户关于GmappingROS中的实现和使用方法的问题。首先,我应该回忆一下Gmapping的基本概念。Gmapping是基于粒子滤波的SLAM算法,主要用于将激光雷达数据转换为栅格地图。用户可能想知道如何在ROS中安装、配置和使用它。 接下来,我需要检查用户提供的引用内容,看看是否有相关引用可用。引用[3]提到ROS用于输入、输出和参数处理,代码紧密封装,可能和GmappingROS实现有关。虽然引用中没有直接提到Gmapping,但可以推测Gmapping作为ROS中的常用SLAM包,其使用方法可能类似。 然后,我需要确保回答符合系统级指令:行内数学公式用$...$,独立公式用$$...$$,正确使用LaTeX,中文回答,生成相关问题,引用标识自然添加。例如,提到Gmapping的数学原理时,可能需要用公式,比如粒子滤波的权重更新公式:$w^{(i)} = w^{(i)} \cdot p(z_t | x_t^{(i)}, m_{t-1}^{(i)})$,但不确定是否需要,根据用户问题,可能更关注实现步骤而不是数学细节。 接下来,我需要组织回答结构。首先介绍Gmapping,然后安装步骤,使用方法,参数调整,最后注意事项。确保每个部分清晰,引用相关的地方添加引用标识。例如,在提到ROS依赖时,可以引用[3]。 生成的问题部分需要与Gmapping相关,可能涉及参数调优、与其他算法的比较、故障排除等。需要确保问题具体且有价值。 最后,检查LaTeX语法是否正确,是否有遗漏的引用,以及是否符合用户要求的结构。确保没有使用Markdown格式,所有代码用三个反引号包裹,并正确标注语言类型。</think>### Gmapping算法在ROS中的实现与使用方法 Gmapping是基于粒子滤波的Rao-Blackwellized SLAM算法,可将激光雷达数据实时转换为栅格地图。其核心公式可表示为: $$p(x_{1:t}, m | z_{1:t}, u_{1:t}) = p(m | x_{1:t}, z_{1:t}) \prod_{k=1}^t p(x_k | x_{k-1}, u_k)$$ 其中$x$表示位姿,$m$为地图,$z$为观测数据,$u$为里程计输入[^1]。 #### 一、安装步骤 1. 安装ROS依赖(以Noetic为例): ```bash sudo apt-get install ros-noetic-slam-gmapping ``` 2. 验证安装: ```bash rospack find gmapping ``` #### 二、基础使用方法 1. 启动文件配置示例: ```xml <launch> <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping"> <param name="delta" value="0.05"/> <param name="maxUrange" value="5.0"/> <remap from="scan" to="/laser/scan"/> </node> </launch> ``` 2. 关键参数说明: - `particles`:粒子数(默认30) - `map_update_interval`:地图更新频率(默认5秒) - `linearUpdate`:平移触发更新的阈值(默认0.5m) - `angularUpdate`:旋转触发更新的阈值(默认0.25rad) #### 三、数据要求 1. 必须的ROS话题: - `/scan`(sensor_msgs/LaserScan) - `/tf`中的坐标变换(odom→base_link→laser) 2. 建议配置: ```bash rosrun tf static_transform_publisher 0 0 0 0 0 0 base_link laser 100 ``` #### 四、地图保存 使用map_server包保存生成的地图: ```bash rosrun map_server map_saver -f ~/mymap ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值