Получение курса / направления от MPU-9250 - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь получить курс от датчика MPU-9250, который содержит гироскоп, акселератометр и магнитометр, используя Arduino.

Для моего продукта мне нужно получить рулон и курс от устройства,Я уже понял, как получить рулон.Используя библиотеку Boulderflight MPU-9250, я смог определить бросок, используя:

roll = 180 * atan(accY/sqrt(accX*accX + accZ*accZ))/M_PI;

Я нашел этот расчет где-то, и он, кажется, работает хорошо, я должен признать, что на самом деле не знаю, как онработает.

Для заголовка, который я нашел:

  if (magY > 0) { heading = 90 - atan(magX/magY)*(180/M_PI); }
  else if (magY < 0) { heading = 270 - atan(magX/magY)*(180/M_PI); }
  else if (magY == 0 && magX < 0) { heading = 180; }
  else if (magY == 0 && magX > 0) { heading = 0; }

Сначала это, похоже, сработало, но как только вы «свернули» устройство, сохранив заголовок, значениязаголовок повсюду.

Есть ли у кого-нибудь хороший фрагмент кода для определения заголовка с помощью гироскопа, акселерометра или магнитометра (в C ++, с использованием Arduino)?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Для тех, кто все еще может найти это полезным, плохие результаты были вызваны использованием Sleep() s в коде.Видимо это портит измерения.Я использовал их для создания светодиодного рисунка.Я полагаю, что следующим лучшим вариантом было бы использовать millis() в комбинации с if -составлениями для воспроизведения Sleep() s.

0 голосов
/ 12 ноября 2018

Взгляните на https://github.com/kriswiner/MPU9250
В частности, MPU9250BasicAHRS.ino имеет расчеты на Arduino для крена, шага и рыскания.

...