结合陀螺仪和加速度计数据
Posted
技术标签:
【中文标题】结合陀螺仪和加速度计数据【英文标题】:Combine Gyroscope and Accelerometer Data 【发布时间】:2010-12-07 21:12:44 【问题描述】:我正在使用 Lego Mindstorm 的 NXT 系统构建一个平衡机器人。我正在使用 HiTechnic 的两个传感器,第一个是加速度计,第二个是陀螺仪。我已成功滤除来自传感器和派生角度的噪声,范围在 -90 到 90 度之间,0 度完美平衡。
我的下一个挑战是结合两个传感器值来校正陀螺仪随时间的漂移。下面是我根据实际数据创建的示例图,用于演示陀螺仪的漂移:
我见过的最常用的方法是使用卡尔曼滤波器来组合这些传感器。但是,我不是微积分专家,我真的不懂数学符号,但我确实了解源代码中的数学。
我正在使用 RobotC(它与任何其他 C 衍生产品一样),如果有人能给我提供如何在 C 中完成此操作的示例,我将不胜感激。
感谢您的帮助!
解决方案结果:
好的,kersny 通过向我介绍互补过滤器解决了我的问题。这是说明我的结果的图表:
结果 #1
结果 #2
如您所见,滤波器校正陀螺漂移并将两个信号组合成一个平滑信号。
编辑:因为无论如何我都在修复损坏的图像,所以我认为展示我用来生成这些数据的装备会很有趣:
【问题讨论】:
您的数据明显不同。如果您的初始数据不一致,卡尔曼滤波器或任何其他方法都无法帮助您。 我不确定您是否完全理解图表显示的内容,这是陀螺仪数据漂移的已知问题。这就是数据发散的原因,这就是我正在寻找的过滤器/积分将使用加速度计数据进行纠正的原因。此外,剧烈漂移的原因是因为我非常猛烈地摇晃传感器来说明我的问题。 :) 我不知道您在绘制什么图形,因为您没有标记轴,但无论您的数据是否明显偏离相同的 y 值,给定相同的 x 值,这都是非常糟糕的数据。 如果你对它应用任何过滤器,试图在最小二乘意义上最小化错误(例如卡尔曼过滤器所做的),你将平均一个随着你的值增加的错误 x增加。很明显,您的数据的一部分在告诉您一些事情,而您的另一部分数据在告诉您其他事情。 卡尔曼滤波器的一个很好的替代方案是互补滤波器,它更容易实现:http://www.pieter-jan.com/node/11 【参考方案1】:卡尔曼滤波器非常棒,但我发现互补滤波器更容易实现,结果相似。我发现的用于编码互补滤波器的最佳文章是this wiki(以及关于将传感器转换为工程单位的this article)和this page 上zip 文件中的PDF(在技术文档下,我相信文件名在 zip 中是 filter.pdf);
PS。如果您卡在卡尔曼滤波器上,here 是实现它的 Arduino 的一些 C 语法代码。
【讨论】:
太棒了,我相信这可能正是我想要的。 Filter.pdf 文件真的很有帮助,它解释并解决了我的确切问题。我还没有验证它(我在工作)。但今晚,我会努力解决这个问题,并将我的问题标记为已回答! 很高兴我能帮上忙!如果您想查看它的实际示例,请查看我的博客ohscope.com。我制造了一辆 Segway 之类的平衡车,我很快就会提供更多数据。 维基链接似乎已失效 耶 archive.org: web.archive.org/web/20091121085323/http://www.mikroquad.com/bin/…【参考方案2】:Gamasutra.com 跑了an article on using Kalman filters for WiiMote filtering。
文末有一些C++源代码的链接。
【讨论】:
感谢您的回复。这篇文章也很棒,但我真的需要知道如何使用卡尔曼(或其他)滤波器来组合两个传感器值,而不仅仅是平滑一个。 据我了解,你平滑一个,然后用它对另一个应用校正因子。不过,不能说我完全理解它应该如何工作。这些 tlb.org/scooter2.html">two</a> tlb.org/scooter.html">articles</a> 可能会有所帮助。以上是关于结合陀螺仪和加速度计数据的主要内容,如果未能解决你的问题,请参考以下文章