Данные MPU9150 (гироскоп, магнит, ускорение, например, 9DoF) в Quaternion
Вчера я столкнулся с серьезной проблемой. Я пытаюсь найти абсолютное положение объекта с помощью MPU9150. Имеет гироскоп, акселерометр и магнитометр. Каждый из них предоставляет информацию по 3 осям (x, y, z). Я смотрю, как преобразовать эти 9 чисел в кватернионы, которые я позже буду преобразовывать в углы Эйлера. Я нашел несколько библиотек, но... Я ищу объяснения, что делать с необработанными данными с датчика, потому что в каждой библиотеке они обрабатывают данные с магнитометра по-разному.
Для получения данных от датчика я использую некоторую библиотеку, которая просто читает данные в соответствии с кодом ниже:
mx = MPU9150_readSensor(MPU9150_CMPS_XOUT_L,MPU9150_CMPS_XOUT_H);
my = MPU9150_readSensor(MPU9150_CMPS_YOUT_L,MPU9150_CMPS_YOUT_H);
mz = MPU9150_readSensor(MPU9150_CMPS_ZOUT_L,MPU9150_CMPS_ZOUT_H);
gx = (MPU9150_readSensor(MPU9150_GYRO_XOUT_L,MPU9150_GYRO_XOUT_H)/32768.0)*250.0;
gy = (MPU9150_readSensor(MPU9150_GYRO_YOUT_L,MPU9150_GYRO_YOUT_H)/32768.0)*250.0;
gz = (MPU9150_readSensor(MPU9150_GYRO_ZOUT_L,MPU9150_GYRO_ZOUT_H)/32768.0)*250.0;
ax = (MPU9150_readSensor(MPU9150_ACCEL_XOUT_L,MPU9150_ACCEL_XOUT_H)/32768.0)*2.0;
ay = (MPU9150_readSensor(MPU9150_ACCEL_YOUT_L,MPU9150_ACCEL_YOUT_H)/32768.0)*2.0;
az = (MPU9150_readSensor(MPU9150_ACCEL_ZOUT_L,MPU9150_ACCEL_ZOUT_H)/32768.0)*2.0;
Ускорение измеряется в G, а не в м / с / с.
Таким образом, используя этот код, я получаю следующие данные:
mx = 104.0f; my = 104.0f; mz = 106.0f;
gx = -1.62f; gy = 0.12f; gz = 0.32f;
ax = -0.01f; ay = -0.1f; az = 1.0f;
Затем я попытался повернуть объект на 180 градусов (вокруг Z) и данные выглядят следующим образом:
mx = 116.f; my = 116.f; mz = 115.f;
gx = -1.63f; gy = 0.18f; gz = 0.58f;
ax = -0.02f; ay = -0.06f; az = 1.01f;
1 ответ
Надеюсь это поможет,
Это не просто.
https://learn.adafruit.com/ahrs-for-adafruits-9-dof-10-dof-breakout/sensor-fusion-algorithms