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


71

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

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

在此处输入图片说明

我见过的使这些传感器坚如磐石的最常用方法是使用卡尔曼滤波器。但是,我不是微积分专家,我真的不懂数学符号,但是我确实懂源代码中的数学。

我使用的是RobotC(与其他C派生类一样),如果有人可以给我有关如何在C中实现此功能的示例,我将不胜感激。

感谢您的帮助!

解决方案结果:

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

结果1

在此处输入图片说明

结果#2

在此处输入图片说明

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

编辑:由于我还是要修复损坏的图像,所以我认为显示用于生成此数据的装备会很有趣:

在此处输入图片说明


您的数据明显不同。如果您的初始数据不一致,那么卡尔曼过滤器或任何其他方法都不会帮助您。
ldog

我不确定您是否完全了解图形显示的内容,这是陀螺仪数据漂移的已知问题。这就是为什么数据会发散的原因,这就是我要使用加速度计数据纠正的滤波器/积分。另外,发生剧烈漂移的原因是因为我猛烈地晃动了传感器以说明我的问题。:)
Dylan Vester

1
我不知道您要绘制什么图形,因为您没有标注轴的坐标,但是无论您的数据是否明显偏离相同的y值(给定相同的x值),这都是非常糟糕的数据。
ldog

如果您按原样对它应用任何过滤器,以尝试在最小二乘意义上最小化误差(例如,卡尔曼滤波器的作用),则您将平均一个误差,该误差随着x值的增加而增加。显然,数据的一部分正在告诉您一些信息,而数据的另一部分正在告诉您其他信息。
ldog

3
卡尔曼滤波器的一个很好的选择是互补滤波器,它更容易实现:http
//www.pieter-jan.com/node/11

Answers:


46

卡尔曼滤波器非常出色,但我发现互补滤波器更容易实现,并且结果相似。我找到了有关编码互补滤波器的最佳文章,这是Wiki(以及关于将传感器转换为工程单位的这篇文章)和此页面zip文件中的PDF (在技术文档中,我相信zip中的文件名是filter.pdf);

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


2
太棒了,我相信这可能正是我想要的。Filter.pdf文件确实是最大的帮助,它解释并解决了我的确切问题。我尚未验证(我在工作)。但是今晚,我会尽力做到这一点,并将我的问题标记为已回答!
Dylan Vester

很高兴我能帮助你!如果您想查看示例,请在ohscope.com上查看我的博客。我建立了Segway式平衡滑板车,不久以后我将提供更多数据。
kersny,

9
Wiki链接似乎已失效
JonDrnek 2011年

7
Yay archive.org:web.archive.org/web/20091121085323/http://www.mikroquad.com/bin/…
Edward Falk

6

Gamasutra.com刊登了一篇有关使用Kalman过滤器进行WiiMote过滤的文章

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


感谢您的回复。这篇文章也很棒,但是我真的需要知道如何使用卡尔曼(或其他)滤波器组合两个传感器值,而不仅仅是平滑一个。
Dylan Vester

据我了解,您可以使其中一个平滑,然后将其应用于另一个校正因子。但是不能说我完全理解它应该如何工作。这些<a href=" tlb.org/scooter2.html">两个</ a > <a href=" tlb.org/scooter.html">文章</ a >可能会有所帮助。
瓦汀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.