我有一个 3 轴加速度计和一个 2 轴陀螺仪。我打算测量只在 X 和 Z 轴上移动的东西。我听说过使用卡尔曼滤波器来平滑加速度矢量,但我找不到适合该主题的完整初学者的好的教程。另外,我知道我可以对加速度进行双重积分以获得位置,但是如何使用有限数量的采样加速度矢量来做到这一点?对于这两个主题的初学者,我会很感激链接到好的教程。
如何根据陀螺仪和加速度计输入确定位置?
这是一个关于为 IMU 实现方向余弦矩阵的教程:http: //gentlenav.googlecode.com/files/DCMDraft2.pdf
看看 ArduIMU 页面: http ://code.google.com/p/ardu-imu/wiki/Theory
这里有几个开源项目可以做到这一点。阅读代码应该会给出一些线索:
...双积分加速度以获得位置
理论上(只要你有完美的传感器和测量)你可以做到这一点,但实际上你不能。问题是当物体静止不动时,加速度计将具有由重力引起的 1G 恒定力(在自由落体的情况下为零 G),但这并不能精确地测量为 1.00000000...G。移动物体时,您将获得一个矢量,作为 1G 重力和运动加速度(通常远小于 1G)的总和,并且您的测量值会随着时间的推移累积太多的噪声,如果您尝试整合测量值,则不会有用加速度减去 1G 重力。
我大约 6 个月前开始构建四边形,在正确确定角度时遇到了很多问题 :)
首先你应该试试这个演示文稿 - http://web.mit.edu/scolton/www/filter.pdf 它真的很全面,它可以帮助你更好地了解你真正想要的东西,它几乎成功了为了我。
我想这在很大程度上取决于您,但是,实现卡尔曼滤波器不仅需要非常扎实的数学知识、系统理论知识,在这种情况下还需要物理知识,而且对 CPU 负载的要求也很高。如果您打算使用时钟频率为 16Mhz 的 Atmega328,您可能会遇到使用这种滤波器的问题。如果您使用的是 DSP,这真的很有效,这样您就可以对您的输入进行低通滤波。
总而言之,我的建议是 - 尝试使用一阶互补滤波器,或者甚至是二阶互补滤波器,以防您对结果不满意。如果您的系统没有高频振动,那应该可以很好地工作。除此之外,JustJeff 的链接是一个完美的起点,以防您在实施过程中遇到困难 :)
一切顺利,丹