Калибровка датчика является неотъемлемой частью получения точных результатов на практике. В данном материале будет показано, как откалибровать датчик MPU6050 с помощью MicroPython и Raspberry Pi Pico. Однако в целом тот же метод можно применить к любой микроконтроллерной плате, будь то Arduino или любой другой.

Мы проводим калибровку, потому что значения датчиков, которые дает нам MPU6050, не совсем точны. Мы реализуем калибровку гироскопа, чтобы получить более точное представление значений углового ускорения.
Итак, чтобы получить точные значения калибровки, необходимо иметь устойчивое состояние. Если вы будете двигаться во время калибровки, вы рискуете исказить данные. Цель калибровки состоит в том, чтобы получить внутреннюю погрешность показаний датчика, и это легче всего сделать, когда датчик не движется, потому что мы знаем, что значения углового ускорения Gx, Gy и Gz должны быть равны нулю градусов в секунду в этой ситуации. Однако правда в том, что если вы в этот момент кладете датчик на стол, не двигая его, вы увидите, что, вероятно, получаете ненулевые значения углового ускорения. Нам нужно рассчитать три значения смещения, которые приближают показания покоящегося датчика к нулю. Это гироскопическая калибровка в двух словах.
Используйте следующий код, чтобы получить 3 смещения
from imu import MPU6050
from machine import Pin, I2C
import time
from time import sleep
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
imu = MPU6050(i2c)
t0 = time.time()
settling_time = 4
print('Settling MPU for %d seconds' % settling_time)
time.sleep(4)
print('MPU is Done Settling')
def get_gyro():
gx=imu.gyro.x
gy=imu.gyro.y
gz=imu.gyro.z
return gx, gy, gz
def gyro_calibration(calibration_time=10):
print('--' * 25)
print('Beginning Gyro Calibration - Do not move the MPU6050')
offsets = [0, 0, 0]
num_of_points = 0
end_loop_time = time.time() + calibration_time
while end_loop_time > time.time():
num_of_points += 1
(gx, gy, gz) = get_gyro()
offsets[0] += gx
offsets[1] += gy
offsets[2] += gz
if num_of_points % 100 == 0:
print('Still Calibrating Gyro... %d points so far' % num_of_points)
print('Calibration for Gyro is Complete! %d points total' % num_of_points)
offsets = [i/num_of_points for i in offsets]
return offsets
Библиотеку MPU для MicroPython можно найти на https://github.com/shillehbean/youtube-channel/blob/main/imu.py. Если ваш MPU6050 подключен в Thonny к Raspberry Pi Pico (при условии, что у вас есть файл библиотеки, сохраненный на Raspberry Pi), этот код работает сразу, он вернет три смещения, которые вы можете вычесть из показаний вашего датчика. На практике вы можете использовать показания датчика смещения для измерения, которое должно быть более точным, чем измерения, которые вы сделали без смещения.
Однако тем из вас, кто не использует MicroPython, может быть интересно, в чем заключается идея кода. Идея состоит в том, что мы позволяем датчику получать текущую сумму (за заданное время) показаний гироскопа по всем трем степеням углового ускорения. Мы знаем, что истинное значение датчика должно быть равно нулю для всех показаний углового ускорения, однако датчик никогда не дает истинного значения, он дает истинное значение плюс некоторое смещение. Таким образом, поскольку мы знаем, «истинное_значение_датчика = измеренное_значение_датчика — смещение» и когда мы калибруем в неподвижном состоянии, значение истинное_значение_датчика равно нулю, значение, которое мы измеряем, является просто смещением. Итак, мы берем текущую сумму смещения, а затем берем среднее значение... вот и все, что мы делаем.
Мы вычислили смещение как -2,145951, 1,384315 и -0,5084849. Ваш случай должен быть немного другим или даже сильно другим. Мы вычитали их следующим образом.

Вот и вся калибровка гироскопа MPU6050.
© digitrode.ru