我试图获得GY-521(MPU 6050)的Z角旋转,但如果我不移动传感器,角度也会升高静止。有没有办法“过滤”他对我的案件是正确的角度?
代码:
float accel_z = accel_t_gyro.value.z_accel;
float accel_angle_z = 0;
float gyro_angle_z = gyro_z*dt + get_last_z_angle();
float unfiltered_gyro_angle_z = gyro_z*dt + get_last_gyro_z_angle();
float alpha = 0.96;
float angle_z = alpha*gyro_angle_z + (1.0 - alpha)*accel_angle_z;
传感器未移动时输出:
x = x-roatation-angle z = z-roatation- angel
x z
8.37 4.24
8.35 4.22
8.33 4.21
8.32 4.19
8.31 4.18
8.29 4.17
8.28 4.15
8.26 4.14
8.25 4.12
8.23 4.12
8.22 4.10
8.21 4.09
8.19 4.07
8.18 4.05
答案 0 :(得分:1)
有两点可以帮助您获得更好的结果:
1)除非传感器保持完全水平,否则无法使用以下公式获得z轴旋转:
float gyro_angle_z = gyro_z*dt + get_last_z_angle();
为了解释原因,想象一下:如果你的陀螺仪围绕x轴旋转了90度,然后围绕z轴旋转了90度,那么就不会获得与围绕z轴旋转90度相同的结果。这意味着您应计算围绕所有轴的旋转,然后提取z轴旋转。如果不使用x和y轴,结果将不正确(除非传感器保持完全水平)。
计算所有轴周围旋转的一种有效方法是使用四元数。关于四元数有很多话要说,所以如果需要,我会让你自己做研究并提出更多问题。
2)使用所有3轴后,仍然会出现静态漂移。这是因为陀螺仪即使不移动也不会读取完美的0。为了改善这种情况,您可以校准陀螺仪。一种简单的校准方法是在陀螺仪不移动时读取大量(100+)的值,计算平均漂移,并在陀螺仪移动时从测量值中减去它。在此之后仍会有轻微的漂移,但不会像你现在所经历的那样糟糕。
以下是我使用MPU-6050陀螺仪和加速度计获得的最佳效果:http://robokitchen.tumblr.com/post/68626551378/imu-with-gyroscope-and-accelerometer-i-ran-the。如您所知,加速度计有助于稳定x和y轴,但不能稳定z轴。然而,z轴漂移很低并且仍然可用于许多应用。例如,有几个quadcopters不使用磁力计,并且受到z轴漂移的影响,但仍然可用。