【问题标题】:Overflow-aware implementation of a kalman filter卡尔曼滤波器的溢出感知实现
【发布时间】:2014-07-24 09:44:02
【问题描述】:

我正在尝试使用 3 轴加速度计和 3 轴陀螺仪作为传感器来实现卡尔曼滤波器来获取对象的方向。

为这个过滤器的预测阶段选择动态模型很简单,它是:

new_angle = angle + angular_velocity * time
new_angular_velocity = angular_velocity

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

但这也给过滤器带来了一个问题:如果估计的角度是359°,而我的测量结果是,那么过滤器假设了一个巨大的创新,导致不确定性和奇数值。

有没有办法让过滤器知道这种可能的包装?在上述情况下只提供 的创新?

为了规避这个问题,我想过用角度差代替角度,但找不到合适的模型。

【问题讨论】:

    标签: integer integer-overflow fixed-point kalman-filter integer-arithmetic


    【解决方案1】:

    我今天也遇到类似KF的问题……不过我没你那么拘束。

    这是我所做的:

    1. 就在计算出 predict_angle 值之后:

      // 避免在 0 和 360 之间跳跃
      如果(测量角度 3*pi/2)预测角度 = 预测角度 - 2*pi;
      if (measured_angle > 3*pi/2 &&estimate_aAngle

    2. 计算后对estimated_angle进行归一化。

    如果您不介意牺牲一点精度,您可以切换到有符号整数 [-2*Pi,+2*Pi) 范围并执行相同操作。

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

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 2017-08-30
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多