0

我正在尝试制作四轴飞行器,并且正在使用 MPU6050 为我的 PID 算法获取角度数据。然而,即使有免费的过滤器,随着时间的推移,我仍然会在陀螺仪上产生很大的漂移,尤其是在 y 轴上。如果有人可以建议对代码进行改进以最大程度地减少上述漂移,那将不胜感激。

'''

from mpu6050 import mpu6050
import time
import math

imu = mpu6050.mpu6050(0x68)

gyro_angle_x,gyro_angle_y,gyro_angle_z = 0,0,0     
accelerometer_angle_x, accelerometer_angle_y = 0,0
comp_filtered_x,comp_filtered_y = 0,0

filter_const = 0.9
pi = 3.14159265358979323846
rad_deg = 57.29578
gyr_const = 131
acc_const = 4096.0
gyro_error_x = 0
gyro_error_y = 0

imu.set_gyro_range(250)
imu.set_accel_range(8)

dt, time_curr , time_prev = 0,0,0

time_curr = time.time()

i = 0
while i < 200:
    gyro_error_x += imu.read_i2c_word(imu.GYRO_XOUT0) / gyr_const
    gyro_error_y += imu.read_i2c_word(imu.GYRO_YOUT0) / gyr_const
    i +=1

gyro_error_x = gyro_error_x / 200
gyro_error_y = gyro_error_y / 200
while True:
    time_prev = time_curr
    time_curr = time.time()
    dt = (time_curr - time_prev)

    gyro_raw_x = (imu.read_i2c_word(imu.GYRO_XOUT0) / gyr_const) - gyro_error_x
    gyro_raw_y = (imu.read_i2c_word(imu.GYRO_YOUT0) / gyr_const) - gyro_error_y
    gyro_raw_z = imu.read_i2c_word(imu.GYRO_ZOUT0) / gyr_const

    gyro_angle_x += gyro_raw_x * dt
    gyro_angle_y += gyro_raw_y * dt
    gyro_angle_z += gyro_raw_z * dt

    accelerometer_raw_x = imu.read_i2c_word(imu.ACCEL_XOUT0) / acc_const
    accelerometer_raw_y = imu.read_i2c_word(imu.ACCEL_YOUT0) / acc_const
    accelerometer_raw_z = imu.read_i2c_word(imu.ACCEL_ZOUT0) / acc_const

    accelerometer_angle_x = math.atan((accelerometer_raw_y)/math.sqrt(pow((accelerometer_raw_x),2) + pow((accelerometer_raw_z),2)))*rad_deg
    accelerometer_angle_y = math.atan(-1*(accelerometer_raw_x)/math.sqrt(pow((accelerometer_raw_y),2) + pow((accelerometer_raw_z),2)))*rad_deg

    comp_filtered_x = (filter_const * gyro_angle_x) + ((1-filter_const) * accelerometer_angle_x)
    comp_filtered_y = (filter_const * gyro_angle_y) + ((1-filter_const) * accelerometer_angle_y)

    print(comp_filtered_x, "   ", comp_filtered_y)

'''

4

2 回答 2

2

我认为您对此无能为力。MPU6050 中的廉价陀螺仪不够精确,无法防止漂移。为了获得可靠的定向,您将需要至少具有用于绝对定向的磁传感器的东西,例如 BNO055。

于 2020-01-14T13:26:25.000 回答
0

我做的一件有帮助的事情是将我的文件管理器常数更改为 0.8。我发现这给出了足够准确的答案,而不会出现过多的陀螺漂移。通常在网站上你会发现 0.97,但我认为这是质量更好的设备。

于 2020-07-20T08:42:09.400 回答