如何使用卡尔曼滤波器将三个传感器数值(加速度计、陀螺仪和磁力计)结合起来?

9
2个回答

12

悲伤的消息是,没有所谓的“程序员的卡尔曼滤波器”。不要指望有一些公式可以盲目使用,一切都会神奇地起作用。

如果你执意采用卡尔曼滤波方法,请搜索以下关键词(姿态,误差状态,卡尔曼滤波):

http://scholar.google.com/scholar?q=attitude+%22error+state%22+kalman+filter

特别是,相对而言比较轻松的读物是Indirect Kalman filter for 3D attitude estimation。确保你对其中的数学内容感到舒适并完全理解;否则你将无法实现它。:(

如果你难以理解上述内容,我强烈推荐以下教程:

这基本上是一个教程,我无法想象有比它更容易实现传感器融合的方法。作者将其开发为可在微控制器上运行,因此它将在微控制器上很好地工作。


顺便提一句,卡尔曼滤波器非常流行,因为:

  • 在某些条件下它是最优的;

  • 理论告诉你如何估计滤波器参数。

关于滤波器参数,您很可能最终需要对其进行调优,因此在我看来,后者并不是一个很大的优势。请参见SIGGRAPH Course Pack中的5.1 参数估计或调优
至于最优性,在实际应用中,根据领域的不同,这些条件通常不再成立;卡尔曼滤波器会退化为(良好的)启发式算法。
但如果您已经使用一种启发式算法,为什么不选择一种更容易实现的算法呢?比如在《方向余弦矩阵 IMU:理论》中介绍的算法。

不幸的是,其中一些链接已经过时,即“程序员的卡尔曼滤波器”和“直接余弦矩阵IMU:理论”。不过,除此之外都是很好的参考资料。 - pionium
@pionium 谢谢你让我知道!我已经将“直接余弦矩阵IMU:理论”上传到了我的Google Drive,并分享了一个链接。希望这个链接能够保持稳定。至于“程序员的卡尔曼滤波器”,那是一个好问题,有很好的答案,但不幸的是它被删除了。如果你有足够的声望,仍然可以阅读它,但我删除了那个链接,因为很多人无法阅读它。:-( 无论如何,答案包含了所有相关信息,所以不要太担心。感谢你的反馈。 - Ali
非常好,感谢您的更新。十分感激。我会非常感兴趣地阅读您的理论文档。祝好。 - pionium

2
现在,虽然这是一个比较旧的问题,但人们可能仍然会寻找答案。 目前最好的指南/论文之一是J. Solá的“Quaternion kinematics for the error-state KF”(http://www.iri.upc.edu/people/jsola/JoanSola/objectes/notes/kinematics.pdf),它提供了四元数的完整入门以及如何在误差状态卡尔曼滤波器中使用它们的易于理解的方程式,适用于嵌入式实现。 此外,如果您只是测试算法并希望稍后获得更好的性能(并且拥有ARM Cortex-M4 / M7),则可以使用C ++中的Eigen模板库,在几个小时内实现它。 祝你好运!

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