- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Lego Mindstorm 的 NXT 系统构建平衡机器人。我使用的是 HiTechnic 的两个传感器,第一个是加速度计,第二个是陀螺仪。我已成功滤除来自两个传感器的噪声和两个传感器的派生角度,范围在 -90 到 90 度之间,其中 0 度是完美平衡的。
我的下一个挑战是结合两个传感器值来校正陀螺仪随时间的漂移。下面是我根据实际数据创建的示例图,用于演示陀螺仪的漂移:
我见过最常用的将这些传感器组合在一起的方法是使用卡尔曼滤波器。但是,我不是微积分方面的专家,我真的不懂数学符号,但我确实理解源代码中的数学。
我正在使用 RobotC(它与任何其他 C 衍生产品一样),如果有人能给我示例说明如何在 C 中完成此操作,我将不胜感激。
感谢您的帮助!
解决方案结果:
好的,kersny 通过向我介绍互补过滤器解决了我的问题。这是一张说明我的结果的图表:
结果#1
结果 #2
如您所见,滤波器校正了陀螺仪漂移并将两个信号合并为一个平滑信号。
编辑:因为无论如何我都在修复损坏的图像,所以我认为展示我用来生成这些数据的装备会很有趣:
最佳答案
卡尔曼滤波器非常棒,但我发现互补滤波器更容易实现,而且结果相似。我找到的关于编码互补滤波器的最佳文章是 this wiki (连同 this article 关于将传感器转换为工程单位)和 this page 上的 zip 文件中的 PDF (在技术文档下,我相信 zip 中的文件名是 filter.pdf);
附言。如果您卡在卡尔曼滤波器上,here是实现它的 Arduino 的一些 C 语法代码。
关于结合陀螺仪和加速度计数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586658/
我想计算正在行驶的车辆的加速度。到目前为止,我能够使用以下公式获得沿航向矢量的加速度 a = (velocity(now)-velocity(previous))/time m/s^2 示例:一辆汽车
网站上修改后的滚动行为是如何制作的?正如您在示例中看到的那样,我想完成加速滚动行为。所以你以一定的速度滚动,当你放手之后,页面会自行滚动一点,减速并停止。 不幸的是,我绝对没有根据为您提供代码,希望您
我想使用标准操作(CCMoveBy 和 e.t.c)创建一个具有轨迹的可见对象,类似于: x = sin(y) 我的代码: CCMoveBy *moveAction1 = [CCMoveBy acti
问题是我的鼠标速度和加速度太高,系统设置(Ubuntu)完全没用,所以我需要一个外部工具/技巧来调整它。 那么,如何在不手动执行命令的情况下在启动时绝对减慢鼠标速度? xinput list 的输出是
我是一名优秀的程序员,十分优秀!