gpt4 book ai didi

c++ - 滤波器 Z 角旋转 MPU 6050 + Arduino

转载 作者:太空宇宙 更新时间:2023-11-04 11:47:22 25 4
gpt4 key购买 nike

我尝试获取 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-roatation- 天使

      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

最佳答案

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 轴漂移,但仍然可用。

关于c++ - 滤波器 Z 角旋转 MPU 6050 + Arduino,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19436706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com