如何/应该实现卡尔曼滤波器以获得准确的加速度计数据?

9
我希望尽可能准确地从Android手机内置的加速度计获取数据。我想要跟踪x和y轴上的二维运动,即使是微小的移动也必须被记录下来。
当我观察手机放在桌子上时的加速度/线性加速度数据时,它会经常变化,而应该是零。
我已经研究了卡尔曼滤波器,这似乎是一个不错的方法,但我在建立模型方面遇到了问题。
1. 卡尔曼滤波器是否是从加速度计中获取尽可能准确的数据的途径?
2. 卡尔曼滤波器是否有效?也许我误解了,但加速度或速度似乎必须是恒定的?
3. 如何设置使用卡尔曼滤波器的模型?我很难理解(除其他事项外)过程噪声是什么?

我认为这个链接对于实现会很有用。 - Y.E.S.
2个回答

12
Kalman滤波器适用于所有测量值(在本例中为加速度),其误差等于真实值加上测量误差的情况。这种测量误差就是过程噪声。为了让原始的Kalman滤波器应用于数据,这个噪声必须服从正态分布,也就是说,有时误差会是正的,有时是负的,平均值为零。
如果你快速地左右晃动安卓手机,就会出现大的加速度。建议记录加速度计读数,然后通过肉眼观察来确定读数是否确实受某种正态分布的过程噪声影响。我猜答案可能是否定的,即我预计绘制成图表时读数会相对平滑。但如果不平滑,那么Kalman滤波器可能有用。
如果你试图使用加速度计读数来计算位置,我认为你的项目注定要失败。加速度是位置关于时间的二阶导数,我从未听说过有人能够将这些读数以足够的精度进行积分以提供任何有用的信息。
我已成功地将Kalman滤波器应用于安卓手机上的GPS读数,以提高位置估计的准确性。请参见平滑GPS数据以获取实现该过程的代码。我随后想知道是否可以使用速度和加速度数据来提高位置估计的准确性。虽然我从未继续研究这个想法,但请参见https://dsp.stackexchange.com/questions/8860/more-on-kalman-filter-for-position-and-velocity了解我曾考虑使用的数学方法。

利用所有传感器输入(GPS,加速度计,陀螺仪等)以获取良好的位置估计的最佳方法是一个非常困难(也很有趣)的问题。要了解更多信息,请搜索“传感器融合”这个关键词。在这个主题上,有一个旧的YouTube视频,网址为http://www.youtube.com/watch?v=C7JQ7Rpwn2k


你好!感谢您的回答。这是当加速度传感器平放在桌子上时,x轴的输出结果。http://s15.postimg.org/amcypa83v/Fig1.jpg 右图是原始输出数据,左图是我尝试将简单卡尔曼滤波器应用于输出的结果。左侧的输出似乎不太平滑,您认为呢? - Kersch
我不确定设备经历了什么样的运动,才会产生那些读数,但可能是许多快速来回的瞬间。对于这种运动,加速度将会是正负交替的,而这正是右侧图表所显示的。如果是这样的话,那就意味着你的滤波器并没有做出任何明智的处理,因为它平滑了你的数据,使其始终略微为正。 - Stochastically
在那个读数中,设备没有添加任何运动。该设备静止放置在桌子上。因此,读数应该为零。 - Kersch
1
在这种情况下,读数正好是过程噪声,即随机波动,它们(至少在我看来)看起来大致上平均为零。此外,相对于最大读数,卡尔曼滤波值也大致为零。我不确定的是这种噪声有多重要,因为我不知道当加速度计移动时其值有多大。如果它们的数量级约为100,则0.3数量级的噪声是合理的。但是,如果加速度计值约为5,则噪声就更加棘手了! - Stochastically

0
你可能会发现这个线程很有用。我遇到了同样的问题。
我们认为平放时的方差可能是万向锁混淆计算的问题,但目前只是一个理论。我们还注意到每个轴上的协方差会随着设备的方向而改变,这也可能是万向锁干扰,但同样只是一个理论。 实现一个卡尔曼滤波器来平滑从deviceOrientation API获取的数据

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接