2015-06-28 7 views
0

Вчера я столкнулся с серьезной проблемой. Я пытаюсь найти абсолютное положение объекта, используя MPU9150. Он оснащен гироскопом, акселерометром и магнитометром. Каждый из них предоставляет информацию в 3-х осях (x, y, z). Я ищу, как преобразовать эти 9 чисел в Quaternion, которые я позже перейду на углы Эйлера. Я нашел некоторые библиотеки, но .... Я искал объяснение, что делать с необработанными данными от датчика, потому что в каждом lib они обрабатывают данные с магнитометра по-разному.Данные MPU9150 (гироскопия, mag, acce, например 9DoF) до Quaternion

Для получения данных от датчика Я использую некоторые LIB который только чтение данных в соответствии с кодом ниже:

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; 
+0

Может быть, я не понял вопрос, но согласно спецификации, скорость изменения отношения уже углы Эйлера. – Artium

+0

Я пропустил эту часть документации. Не могли бы вы дать мне ссылку? –

ответ