Получение курса/направления от MPU-9250

Я пытаюсь получить направление от датчика 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; }

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

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


person Jancoz    schedule 14.10.2018    source источник


Ответы (2)


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

person Brian    schedule 12.11.2018

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

person Jancoz    schedule 14.04.2019
comment
Пожалуйста, постарайтесь дать как можно более полный ответ. Можете ли вы привести рабочий пример? - person JJJ; 15.04.2019