ROS:AMCL

软件包摘要

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
  • 1

节点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)之间的变换。本质上,这种变换解释了使用航位推算发生的漂移。发布的变换是未来的日期

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_25241325/article/details/80928467
ROS
今日推荐