2

的溢出感知执行我试图实现卡尔曼滤波器获得物体的定向,使用3轴加速计和3轴陀螺仪作为传感器。卡尔曼滤波器

选择此过滤器的预测阶段的动态模型是直线前进,它是:

new_angle = angle + angular_velocity * time 
new_angular_velocity = angular_velocity 

但我没有浮点支持的手,我需要的精度每一位来建模角度。因此,我的计划是将角度表示为32位整数数据,表示完整转为2 pi为2^32个小步骤。 因此,整数溢出处理换行(2 pi0方向相同)是免费的。

但是,这也构成了对过滤器的一个问题:如果估计的角度将,说359°,我的测量,然后过滤器是假设一个巨大的创新,导致不确定性和奇数值。

有什么办法让过滤器意识到这种可能的包装?在上述情况下仅创新

为了规避这个问题,我想过使用角度的差异,而不是角度,但我不能找到合适的型号。

回答

2

今天我有类似KF同样的问题......但我没有限制你。

这里是我所做的:

  1. 的predicted_angle值被计算刚过:

    //避免0和360
    之间跳跃如果(measured_angle < pi/2之间& & predicted_angle> 3 * pi/2)prediction_angle = predicted_angle - 2 * pi;
    if(measured_angle> 3 * pi/2 & & estimate_aAngle < pi/2)predicted_angle = predicted_angle + 2 * pi;

  2. 规范化estimated_angle经计算后。

如果你不介意牺牲一点精度可能会切换到有符号整数[-2 * PI,+ 2 * PI)范围内,做同样的。

P.S.如果每个样本的最大角度变化很小,我认为在KF中使用内部角度偏移可以牺牲一个比特的精度。偏移量必须大于该值。 您将拥有2^32 = 2 * Pi + 2 * OFFSET范围而不是2 * pi。在KF中,将此OFFSET添加到局部角度变量并返回estimated_angle = normalize(offset_estimated_angle - OFFSET,0-2 * pi)。

HTH