整理内容来自:http://wiki.ros.org/amcl

1、AMCL订阅的节点:

scan (sensor_msgs/LaserScan):激光数据

tf (tf/tfMessage):各种转移矩阵,如laser_scan->base_link;base_link->odom

initialpose (geometry_msgs/PoseWithCovarianceStamped):初始位姿

map (nav_msgs/OccupancyGrid):栅格地图

2、发布的节点:

amcl_pose (geometry_msgs/PoseWithCovarianceStamped):amcl算法估计出来的位姿

particlecloud (geometry_msgs/PoseArray):粒子点云,用于rviz可视化显示

tf (tf/tfMessage):这里发布的是odom->map的转移矩阵,通过base_link->map和base_odom求得的

3、主要参数

(1)全局滤波参数

~min_particles (int, default: 100):最小粒子数

~max_particles (int, default: 5000):最大粒子数

~kld_err (double, default: 0.01)、~kld_z (double, default: 0.99):KLD算法的两个误差评估参数,kdl_err是真实分布和估计分布之间的KL散度最大误差,表征两个分布的接近程度;两个参数选默认值即可

~update_min_d (double, default: 0.2 meters):运动超过0.2米时,更新粒子

~update_min_a (double, default: π/6.0 radians):旋转角度超过30°,更新粒子

~resample_interval (int, default: 2):重采样间隔

~recovery_alpha_slow (double, default: 0.0 (disabled))

~recovery_alpha_fast (double, default: 0.0 (disabled)):机器人被绑架,重新恢复时的粒子最快衰减率(参考Argument_MCL)

~initial_pose_x (double, default: 0.0 meters)

~initial_pose_y (double, default: 0.0 meters)

~initial_pose_a (double, default: 0.0 radians):初始位姿(x,y,theta)

~initial_cov_xx (double, default: 0.5*0.5 meters)

~initial_cov_yy (double, default: 0.5*0.5 meters)

~initial_cov_aa (double, default: (π/12)*(π/12) radian):初始位姿协方差,使粒子均匀围绕初始点

(2)激光模型参数

~laser_min_range (double, default: -1.0):激光最小角度范围

~laser_max_range (double, default: -1.0)

~laser_max_beams (int, default: 30):滤波器观测更新时,最大的激光束间隔

~laser_z_hit (double, default: 0.95):高斯噪声模型参数

~laser_z_short (double, default: 0.1):意外对象(人的干扰)噪声模型,呈指数分布

~laser_z_max (double, default: 0.05):激光失效噪声模型

~laser_z_rand (double, default: 0.05):随机测量噪声模型

~laser_sigma_hit (double, default: 0.2 meters):方差

~laser_lambda_short (double, default: 0.1):意外对象噪声模型的系数

~laser_likelihood_max_dist (double, default: 2.0 meters):这个参数和运动膨胀有关

~laser_model_type (string, default: "likelihood_field"):激光观测模型

(3)里程计参数(参考博客:https://blog.csdn.net/qq_29796781/article/details/80001355)

~odom_model_type (string, default: "diff"):里程计模型,可选 "diff""omni""diff-corrected" or "omni-corrected".

diff:2轮差分    omni:全向轮   y方向有速度

~odom_alpha1 (double, default: 0.2):转角分量的运动噪声  增大该值,机器人发生有旋转运动时,就会出现扇形噪声粒子云

~odom_alpha2 (double, default: 0.2):横向分量运动噪声,噪声在机器人左右两边分布

~odom_alpha3 (double, default: 0.2):纵向分量运动噪声,沿着机器人前进方向分布

~odom_alpha4 (double, default: 0.2): 斜角方向上的运动噪声

~odom_alpha5(double, default: 0.2):第五个参数 对于 2轮差分diff 里程计模型无用,可忽略  该参数只对全向运动模型有用

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

~base_frame_id (string, default: "base_link"):机器人坐标系

~global_frame_id (string, default: "map"):世界坐标系

~tf_broadcast (bool, default: true):默认开启,表示发布出里程计到世界坐标系下的tf转换

注:参数 odom_alpha1~odom_alpha4里程计运动模型噪声 根据实际模型的精度情况来设定

4、转移矩阵示意图

理想情况下,里程计坐标系和世界坐标系是重合的,但是因为传感器有噪声或者机器人车轮打滑或被搬移,里程计坐标系和世界坐标系有了偏差,AMCL可以估计这个偏差量。

5、完整tf树

当amcl节点未启动时,odom->map的信息是没有的,laser_scan到map的数据也是没有的(定位数据),tf树不完整。

更新:

amcl参数dynamic_reconfigure,动态参数可配置

在运行amcl节点后, rosrun rqt_reconfigure rqt_reconfigure,有gui的界面配置参数,调参

里程计初始坐标,是机器人上电后的坐标,和建图的时候一致

意外对象(人的干扰)概率模型

AMCL论文及源码解析--参数(持续更新中)的更多相关文章

  1. jQuery源码分析学习--资料收集--更新中

    1.逐行分析jQuery源码的奥秘 - 网易云课堂  http://study.163.com/course/courseMain.htm?courseId=465001#/courseDetail? ...

  2. Neural Style论文笔记+源码解析

    引言 前面在Ubuntu16.04+GTX1080配置TensorFlow并实现图像风格转换中介绍了TensorFlow的配置过程,以及运用TensorFlow实现图像风格转换,主要是使用了文章A N ...

  3. Spring IOC 源码解析(持续)

    如何查看源码 Spring源码下载https://github.com/spring-projects/spring-framework/tags?after=v3.1.0.RC1 eclipse关联 ...

  4. 【 js 基础 】【 源码学习 】源码设计 (持续更新)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...

  5. Telegram Android源码问题汇总 持续更新

    libtgvoip目录为空 git clone下来的工程中带有submodule时,submodule的内容没有下载下来,执行如下命令 cd Telegram git submodule update ...

  6. Sqli-labs-master通关解析(持续更新中。。。)

    大多情况下:SQL注入其实就是构造正确的mysql命令,让网页回显本不应该让我们看到的数据(如用户的账号和密码). 第一关-联合查询注入 查库 // 查看当前页面在的数据库 ?id=-1' union ...

  7. [源码解析] PyTorch 分布式(15) --- 使用分布式 RPC 框架实现参数服务器

    [源码解析] PyTorch 分布式(15) --- 使用分布式 RPC 框架实现参数服务器 目录 [源码解析] PyTorch 分布式(15) --- 使用分布式 RPC 框架实现参数服务器 0x0 ...

  8. [源码解析] PyTorch 分布式(10)------DistributedDataParallel 之 Reducer静态架构

    [源码解析] PyTorch 分布式(10)------DistributedDataParallel之Reducer静态架构 目录 [源码解析] PyTorch 分布式(10)------Distr ...

  9. [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer

    [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer 目录 [源码解析] PyTorch 分布式(11) ----- Dis ...

随机推荐

  1. python学习(6)选择排序算法简单代码

    选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.基于此思想的算法主要有简单选择排序.树型选择排序和堆排序.[1] 简单选择排序的基 ...

  2. Source Code Structure - Python 源码目录结构

    Source Code Structure - Python 源码目录结构 Include 目录包含了 Python 提供的所有头文件, 如果用户需要用 C 或 C++ 编写自定义模块扩展 Pytho ...

  3. css 关于自适应页面

    //不能使用绝对宽度的布局 不能使用具有绝对宽度的元素 media_type 设备类型说明 all 所有设备 aural 听觉设备 braille 点字触觉设备 handled 便携设备,如手机.平板 ...

  4. VFP CursorAdapter 起步三(作者:Doug Hennig 译者:fbilo)

    可重用数据类 VFP 的程序员们想要一个可重用的数据类已经很久了.尽管在过去的版本中也有许多解决这个问题的办法,不过总是有点美中不足.现在在 VFP 8里,我们有了真正的可重用数据类.这个月,Doug ...

  5. asp.net MVC项目开发之统计图echarts饼形图(二)

    上面介绍了柱状图,只有js代码后台的传递等我们介绍完饼形图的使用过程在做介绍 有了柱状图的介绍,在使用饼形图,其实很容易了,上代码 1.首先加载网页时,需要用到的加载项和事件. //打开网页加载 $( ...

  6. package包

    为什么需要package? 为了解决类之间的重名问题.为了方便管理类,合适的类放在合适的包. 怎么用package? 通常是类的第一句非注释性语句. 包名,域名倒着写,加上模块名,并与内部管理类. 命 ...

  7. Idea操作ElasticSearch

    前提: 1.ES服务成功启动 2.node.js成功启动 一.创建索引库 1.目录展示 2.导入依赖 <dependency> <groupId>org.elasticsear ...

  8. 进阶之路 | 奇妙的Window之旅

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习清单: Window&WindowManagerService Window&Window ...

  9. JavaScript-状态模式

    状态模式 一个对象有状态变化 每次状态变化都会触发一个逻辑 不能总是用 if...else 来控制 示例:交通信号灯的不同颜色变化 传统的 UML 类图 javascript 中的 UML 类图 cl ...

  10. ORACLE中如何找出大表分布在哪些数据文件中?

    ORACLE中如何找出大表分布在哪些数据文件中?   在ORACLE数据中,我们能否找出一个大表的段对象分布在哪些数据文件中呢? 答案是可以,我们可以用下面脚本来找出对应表的区.段分别位于哪些数据文件 ...