Получение ориентации с использованием гироскопа и акселерометра

  • Я хочу контролировать ориентацию устройства на 2 оси: очень просто: какой путь вниз.
  • Он должен поддерживать точность в течение длительного периода времени (12 часов).
  • Он будет подвергаться вращениям и ускорениям вокруг всех осей

Устройство будет телефоном Android со стандартным гироскопом/акселерометром. С этими двумя типами датчиков можно удовлетворить вышеуказанные требования?

Мои мысли до сих пор: Один только акселерометр не может этого достичь, поскольку с учетом любого набора значений на мгновение во времени невозможно разделить компоненты гравитационного и пространственного ускорения. И я не могу разглядеть, как гироскоп может помочь разрешить это. Есть ли какие-нибудь умные формулы/алгоритмы, которые бы справились с этим?

Спасибо

Ответ 1

Простым способом объединения данных акселерометра и гироскопа является использование дополнительного фильтра. Таким образом, у вас нет проблем с дрейфом от гироскопа и шумом от акселерометра. Это также намного легче понять и использовать, чем фильтр Калмана.

Вы вычислите угол из гироскопа с помощью интеграла. А для акселерометра вы будете использовать функцию tan2 для определения положения вектора силы тяжести. Затем дополнительный фильтр объединял бы эти два угла следующим образом:

angle = 0.98 * (angle + gyroData * dt) + 0,02 * accAngle

Обратите внимание, что вы берете только часть данных акселерометра (достаточно для компенсации дрейфа). Таким образом, вы используете данные гироскопа для быстрых изменений, но в долгосрочной перспективе вы будете следить за средним значением вычисления угла акселерометра, чтобы вы не дрейфовали.

Надеюсь, это поможет. Если вам нужна дополнительная информация и пример кода C, я написал статью об этом здесь