【发布时间】:2018-01-11 20:55:17
【问题描述】:
我通过以下公式计算了加速度计的倾斜角度:
Angle_Accel = atan(Ax/sqrt(Ay*Ay+Az*Az))*(180/PI)
我现在想从陀螺仪计算倾斜角度,我正在使用 Gx 坐标进行如下积分,但我的结果不正确。
伪代码
- 每 0.1 秒测量一次 Gx。
- 在灵敏度因子和偏差校正后,我乘以 180/PI 以转换为度数。
- 然后我除以频率,即 10 并将其添加到最终角度。
C 代码
Gx = (((float)GYRO_PLAY.Gyroscope_X )* GYRO_PLAY.Gyro_Mult)-Gx_Correction;
Gy = (((float)GYRO_PLAY.Gyroscope_Y )* GYRO_PLAY.Gyro_Mult)-Gy_Correction;
Gz = (((float)GYRO_PLAY.Gyroscope_Z )* GYRO_PLAY.Gyro_Mult)-Gz_Correction;
Gx_temp = (Gx*degrees)/10.0; //degrees = 180/PI
Gx_Theta = Gx_Theta + Gx_temp;
我的角度不正确。我应该如何整合? 非常感谢任何帮助。
PS:我知道有类似here 的问题,但它没有回答我的问题,所以请帮助我。
【问题讨论】:
-
你知道
atan2()吗? -
加速度计正在正确测量角度(90 到 -90),但陀螺仪没有。陀螺仪以 rad/sec 为单位测量,所以我认为只有一个集成就足够了。但我认为我的实现在某个地方缺少一些东西。 ~谢谢。
-
@Yunnosch - 这是:atan2() 链接是否足够好,或者是否有您希望参考的 POSIX 版本。
标签: c embedded stm32 stm32f4discovery mpu6050