/ / Dane MPU9150 (żyro, mag, acce, np. 9DoF) do kwaternionu - algorytm, arduino, mpu

Dane MPU9150 (żyro, mag, acce, np. 9DoF) do kwaternionu - algorytm, arduino, mpu

Wczoraj spotkałem się z poważnym problemem. Próbuję znaleźć absolutną pozycję obiektu przy użyciu MPU9150. Posiada żyroskop, akcelerometr i magnetometr. Każda z nich dostarcza informacji w 3 osiach (x, y, z). Zastanawiam się, jak przekonwertować te 9 liczb na ćwiartki, które później przekonwertuję na kąty Eulera. Znalazłem kilka bibliotek, ale ... Szukam wyjaśnienia, co zrobić z surowymi danymi z czujnika, ponieważ w każdej bibliotece przetwarzają one dane z magnetometru w inny sposób.

Aby uzyskać dane z czujnika, używam biblioteki lib, która odczytuje dane zgodnie z poniższym kodem:

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;

Przyspieszenie mierzy się w G, a nie w m / s / s.

Używając tego kodu uzyskuję następujące dane:

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;

Następnie próbowałem obrócić obiekt o 180 stopni (wokół Z), a dane są następujące:

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;

Odpowiedzi:

0 dla odpowiedzi № 1

Mam nadzieję że to pomoże,

To nie jest proste.

https://learn.adafruit.com/ahrs-for-adafruits-9-dof-10-dof-breakout/sensor-fusion-algorithms