GMAPPING的参数设置

2023-11-16

二、运行gmapping

我总结了运行gmapping的两种方法:

1.基于命令行

rosrun gmapping slam_gmapping scan:=scan _delta:=0.1 _maxUrange:=4.99 _xmin:=-5.0 _ymin:=-5.0 _xmax:=5.0 _ymax:=5.0 _particles:=30 _srr:=0 _srt:=0 _str:=0 _stt:=0.1 _minimumScore:=10000
这段命令scan:=scan是交代了订阅的激光主题,后面都是gmapping的参数设置。

2.基于launch

<launch> <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping"> <remap from="msg_laser4gmapping" to="scan"/> <param name="delta" value="0.1"/> <param name="maxUrange" value="4.99"/> <param name="xmin" value="-5.0"/> <param name="ymin" value="-5.0"/> <param name="xmax" value="5.0"/> <param name="ymax" value="5.0"/> <param name="particles" value="60"/> <param name="srr" value="0"/> <param name="srt" value="0"/> <param name="str" value="0.05"/> <param name="stt" value="0.05"/> <param name="minimumScore" value="200"/> <param name="map_update_interval" value="1"/> <param name="lsigma" value="0.05"/> </node> </launch>

remap也是订阅主题,下面是参数

3.参数解释

gmapping的参数很多,详细的你可以取看我上面给的官方链接,我只讲述一下我觉得比较重要的几个参数。 
1. particles (int, default: 30) 这个参数决定gmapping算法中的粒子数,因为gmapping使用的是粒子滤波算法,粒子在不断地迭代更新,所以选取一个合适的粒子数可以让算法在保证比较准确的同时有较高的速度。 
2. minimumScore (float, default: 0.0) 最小匹配得分,这个参数很重要,它决定了你对激光的一个置信度,越高说明你对激光匹配算法的要求越高,激光的匹配也越容易失败而转去使用里程计数据,而设的太低又会使地图中出现大量噪声,所以需要大家好好调整。

 

这篇文章写了参数介绍

slam_gmapping参数介绍

说明:

  • 介绍ROS封装了的OpenSlam GMapping,gmapping功能包提供了基于激光的SLAM,在ROS系统中使用slam_gmapping节点表示。 通过该节点用户可以用机器人在移动过程中激光传感器获取的数据创建2D栅格地图。

SLAM

  • SLAM(Simultaneous Localization and Mapping)也称为CML(concurrent mapping and localization),即同时定位与地图构建。
  • 机器人SLAM问题要解决的是:机器人在未知环境中从未知位置开始移动,在移动过程中依据位置估计和地图进行自身定位,在定位基础上同步增量建立地图,而实现自主定位和导航。

slam_gmapping节点

  • slam_gmapping节点通过消息sensor_msgs/LaserScan获取数据并建立地图。
  • 该创建的地图可以通过ROS主题或者服务方式获取。

节点订阅主题

  • tf (tf/tfMessage),用于激光器坐标系,基座坐标系,里程计坐标系之间转换。
  • scan (sensor_msgs/LaserScan ) ,激光器扫描数据

节点发布主题

  • map_metadata (nav_msgs/MapMetaData),周期性发布地图metadata数据
  • map (nav_msgs/OccupancyGrid),周期性发布地图数据
  • ~entropy (std_msgs/Float64),发布机器人姿态分布熵的估计

服务

  • dynamic_map (nav_msgs/GetMap),调用该服务可以获取地图数据

参数

  • ~inverted_laser (string, default:"false"), (已经已出在 版本 1.1.1; 用transform data 替换它) 激光器是right side up (scans are ordered CCW),还是 upside down (scans are ordered CW)?

  • ~throttle_scans (int, default: 1),处理的扫描数据门限,默认每次处理1个扫描数据(可以设置更大跳过一些扫描数据)

  • ~base_frame (string, default:"base_link"),机器人基座坐标系

  • ~map_frame (string, default:"map"),地图坐标系

  • ~odom_frame (string, default:"odom"),里程计坐标系

  • ~map_update_interval (float, default: 5.0),地图更新频率

  • ~maxUrange (float, default: 80.0),探测最大可用范围,即光束能到达的范围。

  • ~sigma (float, default: 0.05),endpoint匹配标准差

  • ~kernelSize (int, default: 1),用于查找对应的kernel size

  • ~lstep (float, default: 0.05),平移优化步长

  • ~astep (float, default: 0.05),旋转优化步长

  • ~iterations (int, default: 5),扫描匹配迭代步数

  • ~lsigma (float, default: 0.075),用于扫描匹配概率的激光标准差

  • ~ogain (float, default: 3.0),似然估计为平滑重采样影响使用的gain

  • ~lskip (int, default: 0),每次扫描跳过的光束数.

  • ~minimumScore (float, default: 0.0),为获得好的扫描匹配输出结果,用于避免在大空间范围使用有限距离的激光扫描仪(如5m)出现的jumping pose estimates问题。 当 Scores高达600+,如果出现了该问题可以考虑设定值50。

  • ~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),Process a scan each time the robot rotates this far

  • ~temporalUpdate (float, default: -1.0),如果最新扫描处理比更新慢,则处理1次扫描。该值为负数时候关闭基于时间的更新

  • ~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),变换发布时间间隔.

  • ~occ_thresh (float, default: 0.25),栅格地图栅格值 (i.e., set to 100 in the resultingsensor_msgs/LaserScan).

  • ~maxRange (float),传感器最大范围。如果在传感器距离范围内没有障碍物应该在地图上显示为自由空间。 maxUrange < 真实传感器最大距离范围 <= maxRange.

需要的tf转换

  • →base_link,通常是一个固定值,通过 robot_state_publisher, 或者 tf static_transform_publisher.周期性广播

  • base_link →odom,通常由里程计系统提供

提供的tf转换

  • map → odom,地图坐标系中机器人当前姿态估计

gmapping参数配置

  • gmapping参数配置文件设定及参数说明:

<launch>

<arg name="scan_topic" default="scan" /> //laser的topic名称,与自己的激光的topic相对应

<arg name="base_frame" default="base_footprint"/>//机器人的坐标系

<arg name="odom_frame" default="odom"/>//世界坐标


<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">//启动slam的节点

<param name="base_frame" value="$(arg base_frame)"/>

<param name="odom_frame" value="$(arg odom_frame)"/>

<param name="map_update_interval" value="0.01"/>//地图更新的一个间隔,两次scanmatch的间隔,地图更新也受scanmach的影响,如果scanmatch没有成功的话,是不会更新地图的

<param name="maxUrange" value="4.0"/>//set maxUrange < maximum range of the real sensor <= maxRange

<param name="maxRange" value="5.0"/>

<param name="sigma" value="0.05"/>

<param name="kernelSize" value="3"/>

<param name="lstep" value="0.05"/>optimize机器人移动的初始值(距离)

<param name="astep" value="0.05"/>//optimize机器人移动的初始值(角度)

<param name="iterations" value="5"/>//icp的迭代次数

<param name="lsigma" value="0.075"/>

<param name="ogain" value="3.0"/>

<param name="lskip" value="0"/>//为0,表示所有的激光都处理,尽可能为零,如果计算压力过大,可以改成1

<param name="minimumScore" value="30"/>//很重要,判断scanmatch是否成功的阈值,过高的话会使scanmatch失败,从而影响地图更新速率

<param name="srr" value="0.01"/>//以下四个参数是运动模型的噪声参数

<param name="srt" value="0.02"/>

<param name="str" value="0.01"/>

<param name="stt" value="0.02"/>

<param name="linearUpdate" value="0.05"/>//机器人移动linearUpdate距离,进行scanmatch

<param name="angularUpdate" value="0.0436"/>机器人选装angularUpdate角度,进行scanmatch

<param name="temporalUpdate" value="-1.0"/>

<param name="resampleThreshold" value="0.5"/>

<param name="particles" value="8"/>//很重要,粒子个数

<!--

<param name="xmin" value="-50.0"/>

<param name="ymin" value="-50.0"/>

<param name="xmax" value="50.0"/>

<param name="ymax" value="50.0"/>

make the starting size small for the benefit of the Android client's memory...

-->

<param name="xmin" value="-1.0"/>//map初始化的大小

<param name="ymin" value="-1.0"/>

<param name="xmax" value="1.0"/>

<param name="ymax" value="1.0"/>


<param name="delta" value="0.05"/>

<param name="llsamplerange" value="0.01"/>

<param name="llsamplestep" value="0.01"/>

<param name="lasamplerange" value="0.005"/>

<param name="lasamplestep" value="0.005"/>

<remap from="scan" to="$(arg scan_topic)"/>

</node>

  • 重要参数说明:
    • particles (int, default: 30) gmapping算法中的粒子数,因为gmapping使用的是粒子滤波算法,粒子在不断地迭代更新,所以选取一个合适的粒子数可以让算法在保证比较准确的同时有较高的速度。

    • minimumScore (float, default: 0.0) 最小匹配得分,这个参数很重要,它决定了对激光的一个置信度,越高说明对激光匹配算法的要求越高,激光的匹配也越容易失败而转去使用里程计数据,而设的太低又会使地图中出现大量噪声,所以需要权衡调整。

参考:

  • http://openslam.org/gmapping.html
  • http://blog.csdn.net/x_r_su/article/details/52723244
  • http://blog.csdn.net/eaibot/article/details/51628371
  • http://www.ncnynl.com/archives/201702/1364.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GMAPPING的参数设置 的相关文章

随机推荐

  • Python 3.9.0 已经可以下载了,但不支持win7和更低的系统版本!

    python3 9 0最近在官网可以下载了 而3 10 0a1已经开始测试了 根据python官网的说法 python3 9 0将不再支持win7或者win7以前的系统 下载来试了一下 win7果然不支持了 安装时报错 3 9的一些新功能
  • MongoDb随笔,PyMongo简单使用

    安装MongoDb 更新2021 07 06 https www mongodb com try download community 下载对应系统的软件版本 CentOS7 9 mongod 4 4 6 rpm ivh mongodb o
  • VSCode:Remote-SSH配置实录

    转自 VSCode Remote SSH配置实录 六天 CSDN博客 也可以通过这样一步步输入用户名和密码链接 为什么要使用VSCode Remote SSH 服务器很多时候都是部署在Linux远程机器上的 我们通常是SSH连过去然后用vi
  • JDBC——BasicDAO

    为什么要有 BasicDAO apache dbutils Druid 简化了 JDBC 开发 但还有不足 SQL语句是固定 不能通过参数传入 通用性不好 需要进行改进 更方便执行增删改查 对于 select 操作 如果有返回值 返回类型不
  • Putty配色方案(转)

    平时用Putty的频率相对挺高的 每次装完系统或是怎么的都得重新配色 还得百度去找配色表 每次太麻烦了 特地转载一篇好看的配色表供以后长期使用 以下内容为转载内容 使用的是修改注册表的方法 1 打开注册表 运行 regedit 2 找到对应
  • matlab仿真实例100题_输入-输出反馈线性化(Feedback linearization)控制算法Matlab仿真实例...

    反馈线性化 Feedback linearization 可能是大部分人接触非线性控制之后学习的第一种控制方法 个人认为主要优点有两点 一 它的理解和实现都相对简单 二 它能让非线性系统的转换为线性系统 这样接下来 就可以直接套用线性系统中
  • SQLEXPRESS服务无法启动

    一 软件版本 SQL Sever2014 localdb MSSQLLocalDB SQLServer13 0 VS2015 二 问题描述 由于使用web API中的odata编程 在工程中使用的是 localdb MSSQLLocalDB
  • Lintcode 464. 整数排序 II 冒泡排序三种实现 直接插入排序 直接选择排序 java

    一 冒泡排序 实现思路 https blog csdn net morewindows article details 6657829 Lintcode https www lintcode com problem sort integer
  • Ubuntu下安装及卸载JDK

    安装 1 添加 PPA repository 到系统 sudo add apt repository ppa webupd8team java 2 更新 sudo apt get update 3 下载安装 JDK sudo apt get
  • 算法专题之二叉树

    前言 树型数据结构广泛存在于现实世界中 比如家族族谱 企业职能架构等 它是一类在计算机领域被广泛应用的非线性数据结构 二叉树是树型数据中最常用的一类 本文从前端角度以js语法构建和操作二叉树的相关知识 基础概念 观察上图 二叉树的数据结构如
  • C++——大数加法

    大数加法 即运算的数据可能很大 int long long long无法存放 存在字符串中 但是加法的运算规则还是10进制 对于两个字符串 首先判断两者的长度 我们将字符串s设置为较长的字符串 方便后面的运算 也可以将t设置为较长的 从低位
  • 一文2000字详细介绍Android APP 常见概念与 adb 命令

    01 背景 因 team 正在推进 APP 自动化测试 那么主要业务是 IoT 相关的产品 既然是 APP 自动化测试 那么 Android APP 相关的一些概念与知识就很关键了 在之前遇到相关的问题都是现查现用 对于一些常用的概念和命令
  • 【Redis】常见数据结构及命令

    Redis常见命令 Redis数据结构介绍 Redis是一个key value的数据库 key一般是String类型 但是value的类型有很多种 Redis 通用命令 通用指令是部分数据类型的 都可以使用的指令 常见的有 KEYS 查看符
  • C++实现英语词典

    需要的东西 1 一个词典的txt文件 2 创建map容器 map
  • 最小二乘支持向量机”在学习偏微分方程 (PDE) 解方面的应用(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本代码说明了 最小二乘支持向量机 在学习偏
  • 多媒体(视频容量计算)-软件设计(四十二)

    真题详解 有向图 软件设计 四十一 https blog csdn net ke1ying article details 129942490 一 音频概念 声音带宽 人耳 20Hz 20KHz 说话300 3400Hz 小于20Hz次声波
  • 上海链节科技:什么是企业链改?

    如何定义链改 链改 即用区块链中的部分技术原理和机制来改造业务系统中特定的部分 以创造更高效 更有公信力的系统 甚至还包括利用区块链上的各类积分 Token通证 来重新分配业务系统进而间接的改进业务系统背后的生产关系 传统基本结构的公司 通
  • 从IDataReaderHelper中读取数据实体

    using System using System Collections Generic using System Linq using System Text using System Data using System Reflect
  • 截取oracle字符串中的数字(转载)

    截取oracle字符串中的数字 云淡风轻博客 博客园 cnblogs com 方法一 如果Oracle版本不是太低的话 使用 正则表达式函数 REGEXP SUBSTR 处理 REGEXP SUBSTR有5个参数 分别是 第一个是输入的字符
  • GMAPPING的参数设置

    二 运行gmapping 我总结了运行gmapping的两种方法 1 基于命令行 rosrun gmapping slam gmapping scan scan delta 0 1 maxUrange 4 99 xmin 5 0 ymin