整理内容来自: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):机器人在横向分量运动噪声,噪声在机器人左右两边分布 0.5如下图
~odom_alpha3 (double, default: 0.2):改参数是纵向分量运动噪声,沿着机器人前进方向分布 0.5参数如下图
~odom_alpha4 (double, default: 0.2): 斜角方向上的运动噪声 0.5参数如下图
~odom_alpha5(double, default: 0.2):第五个参数 对于 2轮差分diff 里程计模型无用,可忽略 该参数只对全向运动模型有用
注:参数 odom_alpha1~odom_alpha4里程计运动模型噪声 可适当的参数可提高定位精度跟鲁棒性
4、转移矩阵示意图
5、完整tf树
当amcl节点未启动时,odom->map的信息是没有的,laser_scan到map的数据也是没有的(定位数据),tf树不完整。