AMCL介绍及参数说明

在ros环境下的amcl配置笔记 这段时间导师让研究一下amcl,在这之前只有一点ros基础,根本不知道amcl是什么东东,于是开始查资料找教程,但是真心没有找到面向小白的配置教程,在这几天的摸索中,终于让amcl正常跑起来了,所以,一定要做一下笔记,免得以后忘光了。 amcl的英文全称是adaptive Monte Carlo localization,即自适应蒙特卡罗定位,它是2D机器人运动的概率定位系统,它实现了自适应(或... 阅读详情

软件包摘要

amcl是机器人在2D中移动的概率定位系统。它实现了自适应(或KLD采样)蒙特卡罗定位方法,其使用粒子滤波器来针对已知的地图跟踪机器人的姿势。

算法

许多算法及其参数在本文中有详细描述。用户是建议检查有更多的细节。使用以下算法:
sample_motion_model_odometry,
beam_range_finder_model,
likelihood_field_range_finder_model,
Augmented_MCL和 KLD_Sampling_MCL。

如目前实现的,该节点仅与激光扫描和 激光地图。它可以扩展到使用其他传感器数据。

例子

要在base_scan主题上使用激光数据进行本地化:

amcl scan:= base_scan

节点amcl

amcl接收基于激光的地图,激光扫描和变换消息,并输出姿态估计。在启动时,amcl根据提供的参数初始化其粒子滤波器。注意,由于默认值,如果没有设置参数,则初始过滤器状态将是以(0,0,0)为中心的中等大小的粒子云。

订阅主题

(1)scan (sensor_msgs / LaserScan)
激光扫描数据。

(2))tf(tf / tfMessage)
tf转换。

(3)initialpose(geometry_msgs / PoseWithCovarianceStamped)
用于(重新)初始化粒子滤波器的平均值和协方差。

(4)map(nav_msgs / OccupancyGrid)
当设置了use_map_topic参数时,AMCL订阅此主题以检索用于基于激光的本地化的映射。

发布主题

(1)amcl_pose(geometry_msgs / PoseWithCovarianceStamped)
机器人在地图上的估计姿态,具有协方差。

(2)particlecloud(geometry_msgs / PoseArray)
由过滤器维护的姿态估计集合。

(3)tf(tf / tfMessage)
从odom发布的tf变换(可通过〜odom_frame_id参数被重新映射),以映射。

服务

(1)global_localization(std_srvs / Empty)
启动全局定位,其中所有粒子随机分散通过地图中的自由空间。

呼叫服务

(1)static_map(nav_msgs / GetMap)
amcl调用此服务来检索用于基于激光的本地化的映射; 启动阻止从这个服务获取地图。

参数

有三个类别的ROS 参数可用于配置amcl节点:总体过滤器,激光模型和里程计模型。

1、总体过滤器参数:

(1)〜min_particles(int,默认值:100)
最小允许的颗粒数。

(2)〜max_particles(int,default:5000)
允许的最大粒子数。

(3)〜kld_err(double,默认值:0.01)
真实分布和估计分布之间的最大误差。

(4)〜kld_z(double,默认:0.99)
(1-p)的上标准正常分位数,其中p是估计的失谐上的误差将小于kld_err的概率。

(5)〜update_min_d(double,默认值:0.2米)
执行过滤器更新之前需要执行平移运动。

(6)〜update_min_a(double,default:π/ 6.0 radians)
执行过滤器更新之前需要执行旋转运动。

(7)〜resample_interval(int,default:2)
重新采样之前所需的过滤器更新数。

(8)〜transform_tolerance(double,默认为0.1秒)
将发布的变换后期化的时间,以指示此变换在未来有效。

(9)〜recovery_alpha_slow(double,默认值:0.0(禁用))
慢平均权重滤波器的指数衰减率,用于决定何时通过添加随机姿态来恢复。良好的值可能为0.001。

(10)〜recovery_alpha_fast(double,默认值:0.0(禁用))
快速平均权重滤波器的指数衰减率,用于决定何时通过添加随机姿态来恢复。好的值可能为0.1。

(11)〜initial_pose_x(double,默认值:0.0米)
初始姿态均值(x),用于初始化具有高斯分布的滤波器。

(12)〜initial_pose_y(double,默认值:0.0米)
初始姿态平均值(y),用于初始化具有高斯分布的滤波器。

(13)〜initial_pose_a(double,默认值:0.0弧度)
初始姿态平均(偏航),用于初始化具有高斯分布的滤波器。

(14)〜initial_cov_xx(double,默认值:0.5 * 0.5米)
初始姿态协方差(x * x),用于初始化具有高斯分布的滤波器。

(15)〜initial_cov_yy(double,默认值:0.5 * 0.5米)
初始姿态协方差(y * y),用于初始化具有高斯分布的滤波器。

(16)〜initial_cov_aa(double,默认值:(π/ 12)*(π/ 12)弧度)
初始姿态协方差(yaw * yaw),用于初始化具有高斯分布的滤波器。

(17)〜gui_publish_rate(double,默认值:-1.0 Hz)
发布可视化扫描和路径的最大速率(Hz),禁用-1.0。

(18)〜save_pose_rate(double,默认值:0.5 Hz)
在变量〜initial_pose_ 和〜initial_cov_ 中存储参数服务器的最后估计姿态和协方差的最大速率(Hz)。此保存的姿势将用于后续运行以初始化过滤器。-1.0禁用。

(19)〜use_map_topic(bool,default:false)
当设置为true时,AMCL将订阅地图主题,而不是进行服务调用以接收其地图。

(20)〜first_map_only(bool,default:false)
当设置为true时,AMCL将只使用它订阅的第一个映射,而不是每次接收到新的映射时更新。

2、激光模型参数

注意,无论使用哪个混合权重,应该总和为1.波束模型使用4个:z_hit,z_short,z_max和z_rand。likelihood_field模型仅使用2个:z_hit和z_rand。

(1)〜laser_min_range(double,默认值:-1.0)
要考虑的最小扫描范围; -1.0将导致使用激光器报告的最小范围。

(2)〜laser_max_range(double,默认值:-1.0)
要考虑的最大扫描范围; -1.0将导致使用激光器报告的最大范围。

(3)〜laser_max_beams(int,默认值:30)
在更新过滤器时要在每次扫描中使用多少均匀间隔的光束。

(4)〜laser_z_hit(double,默认值:0.95)
模型的z_hit部分的混合重量。

(5)〜laser_z_short(double,默认值:0.1)
模型的z_short部分的混合重量。

(6)〜laser_z_max(double,默认值:0.05)
模型的z_max部分的混合物重量。

(7)〜laser_z_rand(double,默认值:0.05)
模型的z_rand部分的混合重量。

(8)〜laser_sigma_hit(double,默认值:0.2米)
在模型的z_hit部分中使用的高斯模型的标准偏差。

(9)〜laser_lambda_short(double,default:0.1)
模型的z_short部分的指数衰减参数。

(10)〜laser_likelihood_max_dist(double,默认:2.0米)
在地图上做障碍物充气的最大距离,用于likelihood_field模型。

(11)〜laser_model_type(string,default:“likelihood_field”)
使用哪个模型,beam,likelihood_field或likelihood_field_prob(与likelihood_field相同,但包含beamkip功能,如果已启用)。

3、里程计模型参数

如果〜odom_model_type是“diff”,那么我们使用Probabilistic Robotics 的sample_motion_model_odometry算法,p136; 这个模型使用噪声参数odom_alpha_1到odom_alpha4。

如果〜odom_model_type是“omni”,那么我们使用一个自定义模型用于一个全方位的基础,它使用odom_alpha_1到odom_alpha_5。前四个参数的含义与“diff”模型的含义相似。第五个参数捕获机器人垂直于观察到的行进方向平移(不旋转)的倾向。

发现并修复了一个错误。但是固定旧模型将改变或破坏已经调谐的机器人系统的本地化,因此新的固定里程计模型被添加为新类型“差分校正”和“全向校正”。odom_alpha参数的默认设置只适合旧模型,对于新模型,这些值可能需要更小,请参阅http://answers.ros.org/question/227811/tuning-amcls-diff-corrected-和全向校正后的模型。

(1)〜odom_model_type(string,default:“diff”)
使用哪个模型,“diff”,“omni”,“diff-corrected”或“omni-corrected”。

(2)〜odom_alpha1(double,默认值:0.2)
根据机器人运动的旋转分量指定里程表旋转估计中的预期噪声。

(3)〜odom_alpha2(double,默认值:0.2)
根据机器人运动的平移分量,指定里程表旋转估计中的预期噪声。

(4)〜odom_alpha3(double,默认值:0.2)
从机器人运动的平移分量中指定odometry的翻译估计中的预期噪声。

(5)〜odom_alpha4(double,默认值:0.2)
根据机器人运动的旋转分量指定odometry的翻译估计中的预期噪声。

(6)〜odom_alpha5(double,默认值:0.2)
与翻译相关的噪声参数(仅在模型为“omni”时使用)。

(7)〜odom_frame_id(string,default:“ odom ”)
用于odometry的帧。

(8)〜base_frame_id(string,default:“base_link”)
用于机器人基座的框架

(9)〜global_frame_id(string,default:“map”)
由本地化系统发布的坐标系的名称

(10)〜tf_broadcast(bool,default:true)
将此值设置为false可防止amcl发布全局框架和odometry框架之间的变换。

转换

amcl将输入的laser scans转换为odometry帧(〜odom_frame_id)。因此,必须存在从tf树的路径,其中将激光扫描从帧发布到里程表帧。

实现细节:在接收到第一激光扫描时,amcl查找激光器的帧和基本帧(〜base_frame_id)之间的变换,并且将其永久锁存。因此amcl不能处理相对于基座移动的激光器。

下图显示了使用odometry和amcl的本地化之间的差异。在操作期间,amcl 估计基本帧(〜base_frame_id)相对于全局帧(〜global_frame_id)的变换,但是它仅公开全局帧和里程表帧(〜odom_frame_id)之间的变换。本质上,这种变换解释了使用航位推算发生的漂移。发布的变换是未来的日期。

这里写图片描述

AMCL源码解析(ROS-noetic) 一、AMCL算法引言 节选自中文版《概率机器人》8.3.5章节,amcl的算法实现如下图所示: 这里稍微对该算法的几个阶段做一些解释: 算法输入参数: 1、X_t-1:上一时刻的粒子集合; 2、u_t:运动过程中的控制量; 3、z_t:测量值; 4、m:粒子数量; 初始化阶段 1、静态变量:Wslow是长期权重,Wfast是代表短期权重,用于重采样时判断是否需要添加新的随机粒子; 2、粒子集合:Xt(上划线)采样后粒子集合,Xt重采样后粒子集合 采样阶段 如上图算法所示,将每个上一时刻的粒子 阅读详情

相关推荐

机器人导航(仿真)(二)——amcl定位

导航实现02_amcl定位 参考视频:【奥特学园】ROS机器人入门课程《ROS理论与实践》零基础教程_哔哩哔哩_bilibili 参考文档:http://www.autolabor.com.cn/book/ROSTutorials/ 所谓定位就是推算机器人自身在全局地图中的位置,当然,SLAM中也包含定位算法实现,不过SLAM的定位是用于构建全局地图的,是属于导航开始之前的阶段,而当前定位是用于...

蔡军帅 1万+

ros的navigation之———amcl(localization)应用详解

关于amcl amcl的英文全称是adaptive Monte Carlo localization,其实就是蒙特卡洛定位方法的一种升级版,使用自适应的KLD方法来更新粒子,这里不再多说(主要我也不熟),有兴趣的可以去看:KLD。 而mcl(蒙特卡洛定位)法使用的是粒子滤波的方法来进行定位的。而粒子滤波很粗浅的说就是一开始在地图空间很均匀的撒一把粒子,然后通过获取机器人的motion来移动粒子,比如机器人向前移动了一米,所有的粒子也就向前移动一米,不管现在这个粒子的位置对不对。使用每个粒子所处位置模拟一个传

lovely_yoshino的博客 6303

AMCL代码详解(六)amcl中的重采样

每次都从w1左边的竖线开始转,显而易见,转到w1的概率为0-w1之间的随机数,转到w2的概率为w1到w1+w2之间的随机数,转到w3的概率为w1+w2到w1+w2+w3之间的随机数,后面的依次类推。当某个粒子的权值较大的时候,产生的随机数落在相应区间的概率就会增大,从而实现了对权值大粒子的多次复制,权值小的粒子的剔除。可以看出,在整个重采样的过程中,粒子进行了两次种情况的刷新,一种是随机生成的新的粒子,一种是对原来的粒子的复制。得到的值越大,说明粒子的权重越小,当前粒子的可信度比较小,需要重采样粒子。

YiYeZhiNian的博客 1579

amcl 参数设置

acml 参数配置

ABC_ORANGE的博客 2208

ros学习第十章作业

终端输入如下指令: 1、导航: 第一个终端roslaunch mbot_gazebo slam.launch 第二个终端roslaunch mbot_navigation nav_cloister_demo.launch 在rviz上面选择目标点进行导航 或者运行 rosrun mbot_navigation move_test.py或者rosrun mbot_navigation exploring_random.py 实现程序中指定点导航 2、导航与slam建图同步进行 第一...

小王子的博客 534

ros 简述用urdf建模和部分问题的解决+rviz

背景:kinetic 1、建模参考书籍《 ros by example2 》 (1)下载其中的package (2)移植其中的 description_package (3)学习、掌握参数的意义并修改 (4)可建立简单的custom模型 PS:按照其中的包有一些deprecate的 [warn] (1)其中下载的package中的launch 需要修改一些东西,主要好像是现在的xa...

未命名 754

ROS应用之AMCL话题与消息接口

在机器人定位与导航中,AMCL(Adaptive Monte Carlo Localization)作为自适应蒙特卡洛定位算法的核心组件,承担着位置和姿态估计的重要职责。而AMCL的功能依赖于ROS通信框架,通过订阅和发布多个话题,与其他模块高效交互,构建了完整的定位工作流。本文将从话题与消息接口的角度,深入剖析AMCL的通信机制,包括其设计理念、具体实现及优化方式。

weixin_68094467的博客 2194

AMCL算法原理讲解

ROS进阶教程(二)AMCL算法原理讲解AMCL算法理解蒙特卡洛定位算法蒙特卡洛定位算法自适应变种里程计运动模型测距仪模型波束模型似然域模型 AMCL算法理解 AMCL(adaptive Monte Carlo Localization)自适应蒙特卡洛定位 ,源于MCL算法的一种增强,那么为什么要从MCL升级为AMCL呢?首先应该了解MCL的算法原理 本教程是对Dr. Sebastian Thr...

Redglass的博客 2万+

ROS中amcl配置需要特别注意的问题(base_link、base_footprint、footprint的联系)

概述 AMCL的主要参数请参照http://wiki.ros.org/amcl,要了解参数详细意义还是读读论文吧,我也不是很懂,怕误导。这里主要讲几个amcl与导航堆栈联系较深的参数,以及如何理解和配置导航堆栈里的footprint参数,因为两者联系很紧密,就放到一起来讲了。 重要参数概览 默认订阅的话题:/scan ~transform_tolerance (double, default: 0.1 seconds) ~initial_pose_x (double, default: 0.0 meters

czsnooker的博客 1万+

AMCL理解(一)

AMCL(adaptive Monte Carlo Localization)自适应蒙特卡洛定位,A也可以理解为augmented,是机器人在二维移动过程中概率定位系统,采用粒子滤波器来跟踪已经知道的地图中机器人位姿,对于大范围的局部定位问题工作良好。对机器人的定位是非常重要的,因为若无法正确定位机器人当前位置,那么基于错误的起始点来进行后面规划的到达目的地的路径必定也是错误的。 粒子滤波和蒙特...

shuijinghua的博客 3万+

ROS自学笔记16--AMCL

AMCL是蒙特卡洛自适应定位。 输入给AMCL的有/tf、/scan、/map,其中输入的tf有base_frame到odem_frame,输出的tf有base_frame到map_frame。 下图是AMCL的原理: 第一个框图是纯粹的里程计定位,会通过里程计的信息,算出base和odem之间的偏移,这种情况下默认map和odem是绑在一起的,会存在累计误差,随着里程的增加,误差增加,...

二毛的博客 3576

机器人amcl定位实现,硬件配置,及算法配置文件参数记录

而且源代码只支持ros2的humble版本,如果是jazzy版本,需要把源代码的头文件(ros2_laser_scan_matcher/include/ros2_laser_scan_matcher/laser_scan_matcher.h)的第47行将 #include <tf2_geometry_msgs/tf2_geometry_msgs.h> 替换为 #include <tf2_geometry_msgs/tf2_geometry_msgs.hpp>再编译即可。激光雷达:/scan。

m0_62630089的博客 437

从大疆智图到Cesium:3D Tiles模型加载与Web三维场景构建实战

本文详细介绍了如何利用大疆智图生成3D Tiles数据,并通过Cesium在Web端实现高效加载与三维场景构建。从大疆智图参数设置到Cesium环境配置,再到3D Tiles性能调优与高级功能实现,提供了一套完整的实战指南,帮助开发者快速掌握3D Tiles模型加载与Web三维场景构建技术。

weixin_30520015的博客 1285

基于gmapping地图与cartographer地图测试蒙特卡罗定位

最近这一段时间一直在调节基于蒙特卡罗定位的导航,前提是基于已经开源的基于激光雷达的SLAM算法。地图的建立,主要是参考网上的开源教程,根据实际情况,调整相关的参数文件。最终是实现了建图。建立的地图的精度还没有具体的分析,但从直观上看,应该是没什么问题。因此计划通过AMCL来测试建立地图的精度。要运行AMCL首要的工作是运行move_base导航包;本文以rplidar_A2雷达为例,介绍...

aobiao7853的博客 1038

Kettle下载与安装教程【保姆版】

Kettle简介 Kettle最早是一个开源的ETL工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。后来Kettle重命名为Pentaho Data Integration 。 它由Java开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。 主要功能 Pentaho D

weixin_43407520的博客 12万+

Office LTSC 2021/2024专业部署:ODT+config.xml标准化实战

Office部署本质上是企业终端软件生命周期管理的关键环节,其核心原理在于通过声明式配置驱动安装、激活与组件裁剪。Office Deployment Tool(ODT)作为微软官方命令行引擎,配合config.xml这一DSL契约文件,实现可版本控制、可审计、可回滚的自动化交付。该方案技术价值突出体现在稳定性保障(如LTSC长期支持通道)、合规性强化(不绕过授权机制)及运维提效(批量部署、离线支持)。典型应用场景覆盖教育机房批量装机、政企终端标准化、医疗HIS工作站部署等对功能冻结与系统确定性要求严苛的环境

diaocuiguo2493的博客 558

ros学习笔记2.Robot Localization

学习笔记

qq_44188415的博客 2151

扩增子测序|iCAMP包——基于系统发育零模型分析确定性和随机性在群落构建过程R中实践

iCAMP的核心功能是通过系统发育分箱的零模型分析,量化不同生态过程的相对重要性。,用于评估不同生态过程(同质选择、异质选择、扩散和漂变)对整个群落及各个系统发育分箱(bin)的相对重要性。该方法也成为nature,science系列文章的常客,深受大家喜欢,在文章中运用该方法将为论文增色不少。外环和内环的圆环图显示了每个门(或变形菌门的分类)中不同过程的相对重要性。中央是系统发育树,内环展示了不同过程的相对重要性,表示每个系统发育箱中的DL。示例代码中提供了数据和代码,已经小编测试,可直接运行。

weixin_46814750的博客 6230

Navigation包中的move_base和amcl实现自动驾驶

安装导航定位包,navigation: sudo apt-get install ros-indigo-navigation 由于导航包在/cmd_val下发布的移动数据加速度会过于不友好,所以我们需要对速度做平滑处理,其实就是控制加速,一般通过滤波即可实现,在此我们采用turtlebot的平滑包即可安装平滑包yocs_velocity_smoother,具体的平滑算法和输入切换请自己阅...

工大机器人工作室 1225

关系代数表达式优化步骤

关系代数表达式优化步骤 本篇主要讲解怎么画查询语法树并对其优化,因为我在学关系代数的语法树的时候,在网上找不到比较详细的教法或者技巧,最后通过答案反推原理,所以想写一篇技巧来描述一下这类题的解题方法。 先上书内讲解 1、构造查询树 第一步:把用高级语言定义的查询转换为关系代数表达式 ★ 以 SELECT子向对应投影操作,以FROM字向对应笛卡尔积以 WHERE子句对应选择操作,生成原始查询树 ★ SQL语句转化为原始查询树 第二步:把关系代数表达式转换为查询树。 注: 查询树是一种表示关系代数表达式的树形结

m0_51718449的博客 7016

python中frida的安装+frida-server(雷电模拟器)保姆级安装教程

frida的安装,安卓逆向,adb

2301_80224944的博客 4579

ROS自主导航系统搭建与优化实战指南

机器人自主导航是ROS(Robot Operating System)最核心的功能之一,通过环境感知、定位、路径规划和运动控制四大模块的协同工作,实现机器人在未知环境中的自主移动。其核心技术包括SLAM(即时定位与地图构建)、传感器融合和路径规划算法。在工程实践中,激光雷达(如RPLIDAR)与IMU的多传感器数据融合能显著提升导航精度,而move_base等ROS功能包则提供了开箱即用的导航框架。本文以TurtleBot3为例,详细解析从仿真环境搭建到真实机器人部署的全流程,涵盖URDF建模、参数调优等实

weixin_33898876的博客 379

CAPL与人工智能结合

AI模型是指通过机器学习算法训练得到的模型,可以用于分类、回归、聚类等任务。常见的AI模型包括神经网络、支持向量机、决策树等。在汽车电子系统中,AI模型可以用于故障诊断、驾驶行为分析、自动驾驶等场景。实时决策是指在汽车电子系统中,根据AI模型的预测结果,实时做出决策。实时决策可以用于自动驾驶、故障诊断等场景。通过本文的学习,读者应该对CAPL与人工智能结合有了初步的了解,并能够编写复杂的CAPL脚本。

闲人编程的博客 1480

深入AMCL(一):AMCL中轮式里程计误差模型参数

AMCL中轮式里程计误差模型参数 用了很久的AMCL,也偶尔会思考odom_alpha1,odom_alpha2,odom_alpha3,odom_alpha4这些如何参数如何根据我们轮子的精度来给出理论上比较准的值,而不是凭借实验中调出来的值(总感觉不专业),因此这次决定好好理一理。 一.diff模型与diff-corrected区别 结论:diff-corrected模型才是《概率机器人》中里...

qq_34672671的博客 9698

Python实战:打造学生信息管理系统

通过本教程,我们构建了一个简单的学生信息管理系统,实现了基本的添加、删除、修改和查询功能。当然,这个系统还有很多可以改进和扩展的地方,比如添加用户界面、增加数据持久化功能、支持批量操作等。简介:本文将介绍如何使用Python编写一个功能齐全的学生信息管理系统,包括添加、删除、修改和查询学生信息的基本操作。学生信息管理系统是学校日常管理中不可或缺的一部分,它能够帮助管理人员快速、准确地管理学生信息,提高工作效率。为了实现上述功能,我们可以设计一个包含学生信息的字典,并使用函数来封装各个操作。

铭渊老黄 1489

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: move_base 配置文件说明
下一篇: map_server介绍及参数说明
Forrest-Z
博客等级 码龄11年 661粉丝 20原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值