我试着得到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发布于 2013-12-16 14:18:11
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)三轴全部使用后,仍存在静态漂移。这是因为陀螺仪即使不动也不会读取完美的0。为了改善这种情况,你可以校准陀螺仪。一种简单的校准方法是在陀螺仪不动时读取大量(100+)值,计算平均漂移,并在陀螺仪移动时从测量值中减去它。在这之后仍然会有一个轻微的漂移,但没有你现在所经历的那么糟糕。
这里是我得到的最好的结果,使用MPU-6050陀螺仪和加速度计:http://robokitchen.tumblr.com/post/68626551378/imu-with-gyroscope-and-accelerometer-i-ran-the。正如你已经知道的,加速度计有助于稳定x和y轴,而不是z轴。然而,z轴漂移很低,仍然可以在许多应用中使用。例如,有几个不使用磁强计,遭受z轴漂移,但仍可使用的四体飞行器。
https://stackoverflow.com/questions/19436706
复制相似问题