首页 > 编程知识 正文

amclive,amcl调参

时间:2023-05-05 20:44:15 阅读:182156 作者:1306

介绍

文章使用以下算法:sample_motion_model_odometry, beam_range_finder_model, likelihood_field_range_finder_model, Augmented_MCL, 和 KLD_Sampling_MCL.

amcl读入激光地图、激光扫描数据、tf变换信息,输出姿势推定。 启动时,amcl根据提供的参数初始化粒子滤波器。 请注意,默认情况下,如果未设定参数,则初始过滤状态为粒子点云的中心为0,0,0。

1. 参数配置说明

launchnodepkg=' amcl ' type=' amcl ' name=' amcl ' output=' screen '! - publishscansfrombestposeatamaxof 10hz---/所有过滤器参数param name=' min _ particles ' value=' 500 '//可接受粒子数最小值默认100 param name=' max _ particles ' value=' 5000 ' /允许的最大实例数,默认5000 param name=' kld _ err ' value/0默认0.01 param name=' kld _ z ' value=' 0.99 ' /上标准分位数(1-p ),其中p是估计分布上的误差小于kld_err的概率, 默认值为0.99paramname='update_min;默认值为0.2 mpara mname=' update _ min _ a ' value=' 0.5 '//执行过滤器更新之前的旋转角度、数据6 rad param name=' resample _ interval ' value=默认2 param name=' transform _ tolerance ' value=' 0.1 '//TF转换发布延迟用于通过增加随机姿态来确定何时进行恢复,以说明TF转换在未来时间可用的paramname='recovery_alpha_slow '。 默认值0(disable )为0.001可能是正确的值。 param name=' recovery _ alpha _ fast ' value=' 0.0 '//用作快速平均权重过滤器的指数衰减频率的默认值为0(disable )。 恐怕0.1是个好值。 param name=' GUI _ publish _ rate ' value=' 10.0 '//扫描和路径向可视化软件公开的最大频率。 设置参数为-1.0表示禁用此功能,缺省值为-1.0。保存的姿态用于连续运动以初始化过滤器。 -1.0失能。 如果设置为param name=' use _ map _ topic ' value=' false '//true,AMCL将订阅map话题,而不是调用服务返回地图。 也就是说,如果设置为true,则当其他节点实时发布map话题,机器人实时构建地图,并将其设置为提供给amcl话题使用的false时,将通过map server调用预构建的地图。 navigation 1.4.2中新增的参数。 如果param name=' first _ map _ only ' value=' false '//设置为true,则AMCL仅使用订阅中的第一张地图,并且每次收到新地图时navigation 1 激光模型参数param name=' laser _ min _ range ' value='-1.0 '//考虑的最小扫描范围; 如果将参数设置为-1.0,则激光升级的最小扫描范围param name=' laser _ max _ range ' value='-1.0 '//使用考虑的最大扫描范围。 如果将参数设定为-1.0,则使用激光升级的最大扫描范围param name=' laser _ max _ beams ' value=' 30 '///更新滤波器时,每次扫描有多少个等间隔的光束

name="laser_z_short" value="0.05"/> //模型的z_short部分的最大权值,默认0.1 <param name="laser_z_max" value="0.05"/> //模型的z_max部分的最大权值,默认0.05 <param name="laser_z_rand" value="0.5"/> //模型的z_rand部分的最大权值,默认0.05 <param name="laser_sigma_hit" value="0.2"/> //被用在模型的z_hit部分的眯眯眼的秀发模型的标准差,默认0.2m <param name="laser_lambda_short" value="0.1"/> //模型z_short部分的指数衰减参数,默认0.1 <param name="laser_likehood_max_dist" value="2.0"/> //地图上做障碍物膨胀的最大距离,用作likehood_field模型 <param name="laser_model_type" value="likelihood_field"/> //模型使用,可以是beam, likehood_field, likehood_field_prob(和likehood_field一样但是融合了beamskip特征),默认是“likehood_field” //里程计模型参数 <param name="odom_model_type" value="diff"/> //模型使用,可以是"diff", "omni", "diff-corrected", "omni-corrected",后面两 个是对老版本里程计模型的矫正,相应的里程计参数需要做一定的减小 <param name="odom_alpha1" value="0.2"/> //指定由机器人运动部分的旋转分量估计的里程计旋转的期望噪声,默认0.2 <param name="odom_alpha2" value="0.2"/> //制定由机器人运动部分的平移分量估计的里程计旋转的期望噪声,默认0.2 <!-- translation std dev, m --> <param name="odom_alpha3" value="0.8"/> //指定由机器人运动部分的平移分量估计的里程计平移的期望噪声,默认0.2 <param name="odom_alpha4" value="0.2"/> //指定由机器人运动部分的旋转分量估计的里程计平移的期望噪声,默认0.2 <param name="odom_alpha5" value="0.1"/> //平移相关的噪声参数(仅用于模型是“omni”的情况) <param name="odom_frame_id" value="odom"/> //里程计默认使用的坐标系 <param name="base_frame_id" value="base_link"/> //用作机器人的基坐标系 <param name="global_frame_id" value="map"/> //由定位系统发布的坐标系名称 <param name="tf_broadcast" value="true"/> //设置为false阻止amcl发布全局坐标系和里程计坐标系之间的tf变换 //机器人初始化数据设置 <param name="initial_pose_x" value="0.0"/> //初始位姿均值(x),用于初始化眯眯眼的秀发分布滤波器。 <param name="initial_pose_y" value="0.0"/> //初始位姿均值(y),用于初始化眯眯眼的秀发分布滤波器。 <param name="initial_pose_a" value="0.0"/> //初始位姿均值(yaw),用于初始化眯眯眼的秀发分布滤波器。 <param name="initial_cov_xx" value="0.5*0.5"/> //初始位姿协方差(x*x),用于初始化眯眯眼的秀发分布滤波器。 <param name="initial_cov_yy" value="0.5*0.5"/> //初始位姿协方差(y*y),用于初始化眯眯眼的秀发分布滤波器。 <param name="initial_cov_aa" value="(π/12)*(π/12)"/> //初始位姿协方差(yaw*yaw),用于初始化眯眯眼的秀发分布滤波器。 </node></launch>

Note:初始位置和初始方差也可在此文件中声明。

2. 订阅的话题
scan(sensor_msgs/LaserScan):激光扫描

tf(tf/tfMessage Message) :tf变换

Initialpose(geometry_msgs/PoseWithCovarianceStamped):用作初始化粒子滤波的均值和协方差

map(nav_msgs/OccupancyGrid):当 use_map_topic 被设置时,AMCL订阅这个话题来获得用作激光定位的地图

3. 发布的话题

amcl_pose(geometry_msgs/PoseWithCovarianceStamped):在地图中机器人的估计位姿,带有标准差。

particlecloud(geometry_msgs/PoseArray):被滤波器操控的机器人位姿集

tf(tf/tfMessage Message):发布从里程计到地图的tf变换(能够通过参数odom_frame_id参数映射)

4. 服务

global_localization(std_srvs/Empty):初始化全局定位,然而所有例子被随机撒在地图中的无障碍区域

5. 调用的服务

static_map(nav_msgs/GetMap):amcl调用服务获得地图用作基于激光的定位;启动块在从这个服务获得地图

6. TF变换

amcl变换引入激光扫描到里程计坐标系(odom_frame_id)。所以就必须存在一条路径从激光发布的坐标系经过tf树到里程计坐标系。

执行细节是:在第一次激光扫描接收后,amcl查询激光坐标系和base坐标系之间的变换,并且永久绑定它。所以amcl不能处理激光坐标系相对于base运动的情况。

下列图片显示使用里程计定位和AMCL定位之间的区别。在操作期间,amcl估计base坐标系相对于全局坐标系之间的变换,但是它仅仅发布全局坐标系和里程计坐标系之间的变换。更重要的是,这个变换考虑了航迹推算过程中发生的漂移。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。