Как откалибровать Mpu6050 с помощью библиотеки?

Я использую библиотеку i2cdev

Код: (я не знал, правильный это код или нет)

#include <Arduino.h>
#include <MPU6050.h>
#include <kalman.h>
#include <stdint.h>

#define ACCELLSB  2048
#define GYROLSB   16.4

#define CONSOLE
#define CALIBRATE

#ifdef  CALIBRATE
int16_t Accel_X_offset;
int16_t Accel_Y_offset;
int16_t Accel_Z_offset;

int16_t Gyro_X_offset;
int16_t Gyro_Y_offset;
int16_t Gyro_Z_offset;
#endif

MPU6050 mpu6050;

Kalman  AngleX;
Kalman  AngleY;


void setup()
{
   mpu6050.initialize();
   mpu6050.setFullScaleAccelRange(MPU6050_ACCEL_FS_16);
   mpu6050.setFullScaleGyroRange(MPU6050_GYRO_FS_2000);

   #ifdef CALIBRATE
   mpu6050.CalibrateAccel();
   mpu6050.CalibrateGyro();

   Accel_X_offset = mpu6050.getXAccelOffset();
   Accel_Y_offset = mpu6050.getYAccelOffset();
   Accel_Z_offset = mpu6050.getZAccelOffset();

   Gyro_X_offset  = mpu6050.getXGyroOffset();
   Gyro_Y_offset  = mpu6050.getYGyroOffset();
   Gyro_Z_offset  = mpu6050.getZGyroOffset();
   #endif

   int16_t AccelX, AccelY, AccelZ;
   int16_t GyroX, GyroY, GyroZ;

   mpu6050.getMotion6(&AccelX,&AccelY,&AccelZ,&GyroX,&GyroY,&GyroZ);

   // Я собираюсь использовать эти значения в фильтре Калмана
   #ifdef CALIBRATE
   AccelX -= Accel_X_offset;
   AccelY -= Accel_Y_offset;
   AccelZ -= Accel_Z_offset;

   GyroX  -= Gyro_X_offset;
   GyroY  -= Gyro_Y_offset;
   GyroZ  -= Gyro_Z_offset;
   #endif
}


void loop()
{

}

Как правильно откалибровать mpu6050 (поправьте меня, что я не так или это правильно)?

Спасибо.

, 👍0


1 ответ


Лучший ответ:

0

Я лично предлагаю вам библиотеку MPU6050_tockn.https://github.com/tockn/MPU6050_tockn

Если вы используете calcGyroOffsets() в setup(), он рассчитает калибровку гироскопа, и значение гироскопа будет откалибровано.

#include <MPU6050_tockn>
#include <Wire.h>

MPU6050 mpu6050(Wire);

void setup(){
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets();
}

Если вы используете calcGyroOffsets(true) в setup(), вы можете увидеть состояние расчета калибровки в последовательном мониторе.

#include <MPU6050_tockn>
#include <Wire.h>

MPU6050 mpu6050(Wire);

void setup(){
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.calcGyroOffsets(true);
}

Последовательный монитор:

Calculate gyro offsets
DO NOT MOVE MPU6050.....
Done!
X : 1.45
Y : 1.23
Z : -1.32
Program will start after 3 seconds

Если вы знаете смещения гироскопа, вы можете установить их с помощью setGyroOffsets(), и вам не нужно выполнять calcGyroOffsets(), так что вы можете запустить программу быстро.

#include <MPU6050_tockn>
#include <Wire.h>

MPU6050 mpu6050(Wire);

void setup(){
  Serial.begin(9600);
  Wire.begin();
  mpu6050.begin();
  mpu6050.setGyroOffsets(1.45, 1.23, -1.32);
}

Но если вы хотите сделать это с фильтром Калмана, перейдите на https://github.com /jarzebski/Arduino-KalmanFilter/blob/master/KalmanFilter_MPU6050/KalmanFilter_MPU6050.ino Это поможет вам.

,

Спасибо за ваш ответ, в библиотеке MPU6050_tockn используется дополнительный фильтр, но я хочу использовать фильтр Калмана, так что можете ли вы объяснить, как калибровать с помощью этой библиотеки?, @srilakshmikanthanp

Я только что отредактировал ответ для этого. Но он использует KalmanFilter.h, а не kalman.h., @Osadhi Virochana