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