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

标签 c algorithm accelerometer lego-mindstorms 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

最佳答案

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

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

关于结合陀螺仪和加速度计数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586658/

相关文章:

algorithm - 计算 3 个数字模 m 的乘积

ios - 如何计算设备移动的最后两点的加速度计

java - 安卓弹跳球

C++ 逐帧视频处理

c# - 哪个角落案例单元测试会失败?

c++ - 回溯算法卡住了

android - 检测智能手机在 table 上的水平和垂直运动

c++ - 这会得到优化吗?

c - 查找寄存器较高位置和较低位置的掩码值

c - 需要使用指针将 "a"更改为 "e"或 "o",具体取决于 "a"位置是偶数还是奇数