在Kinect

时间:2015-07-27 09:50:27

标签: unity3d filter kinect smooth kalman-filter

我正在使用Kinect来获取每个关节的位置和方向,然后我将它们发送给Unity。我注意到有很多"跳跃"或者值的波动,例如,有时我不动我的手,在Unity中旋转180度。

我想要的是一种平衡这种波动的好方法。我听说过卡尔曼滤波器,我实现了这里写的代码

http://www.dyadica.co.uk/very-simple-kalman-in-c/

对于这些位置并不坏,但是对于方向来说并不是那么好......如果你知道更好的方法或者更好的方法来实现卡尔曼,那就太好了。

1 个答案:

答案 0 :(得分:2)

在先前,您需要检查传感器能够获取变化和运动的程度。 如果传感器是一个好的,那么卡尔曼滤波器将是一个很好的方法来开始消除抖动和其他噪音。通过查看您的代码,您已经实现了一维KF,这很好。但在您的情况下,您的要求似乎需要正确的方向和位置,您可能需要设计多维KF(矩阵格式的方程式以消除多维噪声)。您可以通过这些链接更好地了解KF

  1. http://www.codeproject.com/Articles/342099/EMGU-Kalman-Filter
  2. http://www.codeproject.com/Articles/865935/Object-Tracking-Kalman-Filter-with-Ease
  3. 尝试实现多维KF并查看系统对其的响应情况。如果您对系统的性能不满意,那么您可能需要通过进行一些更改来扩展过滤器。在最近的过去,还有一些其他的KF变种,它们是扩展的KF和Unscented KF。

    在某些实际情况下卡尔曼滤波器失败
    1. 噪音不是高斯零均值
    2. 来自传感器的输入信号是非线性的(实际上很明显)
    3. 在实际情况中,噪声绝不是零均值,输入不是线性的。为此目的,已经引入了KF的扩展。您可以通过Extended kalman filterunscented kalman filter来克服上述缺点。这两种算法都是对KF的改进,它适用于实际案例,只有你对KF有所了解才能理解。