将陀螺仪和加速度计读数与旋转无关的方式结合起来?

时间:2015-01-10 13:27:43

标签: c++ vector rotation accelerometer gyroscope

好的,所以我把我的Arduino连接到MPU-6050 6轴陀螺仪+加速度计GY-521分线板上。我已经将串行数据发送到计算机上的程序,所有这些都完美地运行。即使我的程序是用DBPro编写的,我也会用C ++提出这个问题。

我目前正在使用互补滤波器将角度旋转的陀螺仪速率与加速度计重力矢量相结合,以实现稳定但反应灵敏的旋转。这是我目前的代码:

angleX=0.98*(angleX+(gyroX/16.4)*timeMultiplier)+0.02*atanfull(accelY,accelZ)
angleY=0.98*(angleY+(gyroY/16.4)*timeMultiplier)+0.02*atanfull(accelZ,accelX)
angleZ=0.98*(angleZ+(gyroZ/16.4)*timeMultiplier)+0.02*atanfull(accelX,accelZ)

angleX/Y/ZtimeMultiplier是花车。 timeMultiplier基本上是(millis()-lastMillis)/1000.0atanfull基本上是atan2但输出的度数(0-360),而不是弧度(我认为这是唯一的区别)。

问题是,当电路板平放在桌子上时,加速度计显然无法测量绕Y轴(向上)的旋转,但陀螺仪可以。当我在Y周围扭曲棋盘时,3D立方体表示我将渲染扭曲一秒然后被拉回0.这是因为当棋盘竖直时(Y轴指向上方),atanfull会导致0。

我一直在网上搜索(但实际上不知道要搜索什么)是一种减少加速度计数据影响的方法,它变得越少使用。因此,当X轴旋转使其垂直于地面(并且对于测量变得无用)时,陀螺仪被允许越来越多的控制,直到X轴完全垂直时,陀螺仪没有注意到加速度计该轴完全依赖陀螺仪。

TL; DR :我正试图找到一种以旋转无关的方式组合陀螺仪和加速度计读数的方法。也就是说,陀螺+加速互补滤波器的所有实现我可以找到不同偏航的手柄俯仰/滚动,我不想这样做。我希望能够向任何方向转动我的电路板,并且仍能获得良好的读数。

我真的不知道我应该找什么来找出如何做到这一点,并希望得到任何帮助:)

0 个答案:

没有答案