Добрый день. Использую MPU6050 с Arduino UNO. Код программы представлен ниже. Проблема заключается вот в чем: я экспериментальным методом определил параметры калибровки гироскопа. Установил необходимые значения во время инициализации. Первые 6 - 10 секунд работы датчика (датчик неподвижен) данные с гироскопа по всем осям 0, потом начинаются скачки 0, -1, 0, -1, 0, -1 и тд. Предполагаю, что DMP сам производит калибровку первые 10 секунд потому, что даже когда я не устанавливаю свои значения, то датчик показывает: -3 по Х, -2 по Y, - 2 по Z, а через 6 - 10 секунд опять начинаются скачки 0, -1, 0, -1. Не подскажите как от этого избавится? Код (C++): #include "myMPU6050_6Axis_MotionApps20.h" MPU6050 mpu; uint16_t packetSize = 42; // expected DMP packet size (default is 42 bytes) uint8_t fifoBuffer[64]; // FIFO storage buffer void setup() { Wire.begin(); Serial.begin(500000); while (!Serial); // Serial.println(F("Initializing I2C devices...")); mpu.initialize(); // verify connection Serial.println("CORE: Testing device connections..."); Serial.println(mpu.testConnection() ? "CORE: MPU6050 connection successful" : "CORE: MPU6050 connection failed"); // wait for ready Serial.println("CORE: Send any character to begin DMP programming and demo: "); Serial.flush(); while (Serial.available() == 0); Serial.flush(); // Serial.println("CORE: Initializing DMP..."); if (mpu.dmpInitialize() == true) { mpu.setXGyroOffset(131); mpu.setYGyroOffset(87); mpu.setZGyroOffset(87); Serial.print("CORE: Enabling DMP..."); mpu.setDMPEnabled(true); Serial.println("CORE: SUCCESS"); } else Serial.println("FAIL"); // Serial.println("SETUP END"); } // ================================================================ // === MAIN PROGRAM LOOP === // ================================================================ void loop() { if (mpu.getFIFOCount() >= 42) { mpu.getFIFOBytes(fifoBuffer,packetSize); mpu.dmpGetGyro(Data,fifoBuffer); Serial.print("G:\t"); Serial.print(Data[0]); Serial.print("\t"); Serial.print(Data[1]); Serial.print("\t"); Serial.println(Data[2]); } } Первые 10 секунд После 10 секунд
Гироскоп это датчик относительных величин. Поэтому ему свойственно накапливать погрешность в течении времени. Для борьбы с этой погрешностью используют поправки по датчикам других типов: акселерометру и магнитометру. Все зависит от задачи.