我正在使用Kinect来获取每个关节的位置和方向,然后我将它们发送给Unity。我注意到有很多"跳跃"或者值的波动,例如,有时我不动我的手,在Unity中旋转180度。
我想要的是一种平衡这种波动的好方法。我听说过卡尔曼滤波器,我实现了这里写的代码
http://www.dyadica.co.uk/very-simple-kalman-in-c/
对于这些位置并不坏,但是对于方向来说并不是那么好......如果你知道更好的方法或者更好的方法来实现卡尔曼,那就太好了。
答案 0 :(得分:2)
在先前,您需要检查传感器能够获取变化和运动的程度。 如果传感器是一个好的,那么卡尔曼滤波器将是一个很好的方法来开始消除抖动和其他噪音。通过查看您的代码,您已经实现了一维KF,这很好。但在您的情况下,您的要求似乎需要正确的方向和位置,您可能需要设计多维KF(矩阵格式的方程式以消除多维噪声)。您可以通过这些链接更好地了解KF
尝试实现多维KF并查看系统对其的响应情况。如果您对系统的性能不满意,那么您可能需要通过进行一些更改来扩展过滤器。在最近的过去,还有一些其他的KF变种,它们是扩展的KF和Unscented KF。
在某些实际情况下卡尔曼滤波器失败在实际情况中,噪声绝不是零均值,输入不是线性的。为此目的,已经引入了KF的扩展。您可以通过Extended kalman filter
和unscented kalman filter
来克服上述缺点。这两种算法都是对KF的改进,它适用于实际案例,只有你对KF有所了解才能理解。