结合陀螺仪和加速度计数据

时间:2009-10-19 01:56:15

标签: c algorithm accelerometer lego nxt

我正在使用Lego Mindstorm的NXT系统构建平衡机器人。我使用的是HiTechnic的两个传感器,第一个是加速度计,第二个是陀螺仪。我已经成功地滤除了传感器和衍生角度的噪声,两者的范围在-90到90度之间,0度完全平衡。

我的下一个挑战是结合两个传感器值来校正陀螺仪随时间的漂移。下面是我根据实际数据创建的示例图,用于演示陀螺仪的漂移:

enter image description here

我见过的最常用的方法是将这些传感器结合起来使用卡尔曼滤波器。但是,我不是微积分的专家,我真的不懂数学符号,但我确实理解源代码中的数学。

我正在使用RobotC(就像任何其他C衍生产品一样),如果有人可以举例说明如何在C中完成此操作,我将非常感激。

感谢您的帮助!

解决方案结果:

好吧,kersny通过向我介绍补充过滤器解决了我的问题。这是一个说明我的结果的图表:

结果#1

enter image description here

结果#2

enter image description here

如您所见,滤波器可校正陀螺仪漂移,并将两个信号组合成一个平滑信号。

编辑:由于我正在修复损坏的图像,我认为展示用于生成此数据的装备会很有趣:

enter image description here

2 个答案:

答案 0 :(得分:43)

卡尔曼滤波器非常棒,但我发现互补滤波器更容易实现,结果相似。我在编写补充过滤器时找到的最好的文章是this wiki(以及this article关于将传感器转换为工程单位)和this page上的zip文件中的PDF(在技术文档下) ,我相信zip中的文件名是filter.pdf);

PS。如果你卡在卡尔曼滤波器上,here是实现它的Arduino的一些C语法代码。

答案 1 :(得分:5)

Gamasutra.com跑了an article on using Kalman filters for WiiMote filtering

本文末尾有一些指向C ++源代码的链接。