AMCL中轮式里程计误差模型参数

AMCL中轮式里程计误差模型参数

用了很久的AMCL,也偶尔会思考odom_alpha1,odom_alpha2,odom_alpha3,odom_alpha4这些如何参数如何根据我们轮子的精度来给出理论上比较准的值,而不是凭借实验中调出来的值(总感觉不专业),因此这次决定好好理一理。

一.diff模型与diff-corrected区别

结论:diff-corrected模型才是《概率机器人》中里程模型的实现!!!强烈建议AMCL新用户直接使用diff-corrected模型,两个模型参数数量级完全不一样。
AMCL中轮式里程计误差模型参数
diff模型:pf_ran_gaussian()函数产生服从高斯分布值,注意参数为高斯分布的标准差(不是方差)。再看看图片括号里的参数是平方值像不像方差表达形式,于是矛盾产生了。(当时本人看源码就是发现这点,所以也去github上找了相关问题)
AMCL中轮式里程计误差模型参数
diff-corrected模型:注意传给pf_ran_gaussian()函数的参数为是开根后,看起来是不是像标准差的表达式。想更详细了解的一些链接。
链接AMCL mixes units when sampling the gaussian distribution
链接Is AMCL’s implementation of the odometry model correct?

二.各个odom_alpha如何影响粒子的预测更新

先给出odom_alpha参数的字面意义,默认值看看就好。
AMCL中轮式里程计误差模型参数
1.odom_alpha3 考虑里程计只有位移累计误差,那么理论上AMCL中的里程计实现粒子预测更新应该只表现粒子整体纵向拉长*(仿真走起)*
AMCL中轮式里程计误差模型参数AMCL中轮式里程计误差模型参数
第一张图初始生成的粒子,角度的误差给的很小,所以看起来像????。
第二张图直线行走,更新的粒子逐渐被拉长,表示位移的误差越来越多,此处给的odom_alpha3 = 0.04,折算到我们通常说的轮式里程计累计误差在20%(别忘了代码中的odom_alpha3有求开根号的),基本满足我们理论中的预设。其中还是变胖了,主要是即使角度误差为0作为高斯分布的标准差,也会产生不为0 的误差。
2.odom_alpha1 考虑里程计只有旋转累计误差,那么理论上AMCL中的里程计实现粒子预测更新应该主要只表现粒子整体横向变胖*(仿真走起)****
AMCL中轮式里程计误差模型参数AMCL中轮式里程计误差模型参数
基本上跟理论上一致,角度发散严重。
3.odom_alpha2 位移的变化引起角度变化的系数
假如我只控制小车直行,理论上小车运行是一条直线(此时odom_alpha2=0.0)但由于底盘精度,小车运行轨迹可能是条斜线(odom_alpha2=0.04)。
AMCL中轮式里程计误差模型参数AMCL中轮式里程计误差模型参数
结论:以上就是各个参数怎么影响粒子的更新形状。所以我们可以通过测试我们自己的里程计的误差特性,从而能计算出odom_alpha各个参数的值。欢迎各位爱好者加微信讨论(15112119047)

广告一波~ 欢迎加入高新兴机器人!!