Ориентация с помощью гироскопа и акселерометра

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

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

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

Спасибо


person CL22    schedule 19.03.2013    source источник
comment
Попробуйте найти в Google запрос "слияние данных гироскопа акселерометра". Это довольно обычная задача для IMU, и она определенно выполнима. (Вы могли бы настроить фильтр Калмана / просто сделать HPF на акселерометре и LPF на гироскопе, но у меня нет каких-либо деталей реализации под рукой).   -  person sapi    schedule 19.03.2013


Ответы (1)


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

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

угол = 0,98 * (угол + данные гироскопа * dt) + 0,02 * угол

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

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

person Pieter-Jan    schedule 18.05.2013