1

我尝试让 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 旋转角度 z = z 旋转角度

      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
4

1 回答 1

1

Timo,我看到您找到了解决问题的部分方法(引用:“没有重力将陀螺仪保持在正确的位置”)。我想详细说明一下,因为有一些方法可以仅从陀螺仪获得相当好的结果。我不知道它是否适合您的应用程序。以下是我使用与您相同的硬件得到的结果:http ://robokitchen.tumblr.com/post/68625623585/imu-with-gyroscope-only-i-tested-the-three-axes 。在这个视频中,我根本没有使用加速度计。

有两点可以帮助您获得更好的结果:

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 轴漂移很低,并且可用于许多应用。例如,有几个四轴飞行器不使用磁力计并且会遭受 z 轴漂移,但仍然可以使用。

于 2013-12-16T14:18:11.487 回答