Перейти к содержанию

Слияние данных датчиков (sensor fusion)

Акселерометр знает, где низ, но путается при движении. Гироскоп точно отслеживает поворот, но со временем уплывает. Магнитометр показывает север, но боится железа рядом. Слияние данных объединяет их так, чтобы недостатки одного перекрывались достоинствами другого.

Обновлено Редакция GAW

Слияние данных (sensor fusion) — объединение показаний нескольких датчиков в одну оценку величины, точнее любой из исходных. В электронике чаще всего так определяют ориентацию: наклон, поворот и курс по акселерометру, гироскопу и магнитометру.

Почему одного датчика мало:

ДатчикЧто измеряет хорошоЧем плох
Акселерометрнаправление силы тяжести в покое — наклонпри движении к гравитации добавляются ускорения
Гироскопбыстрые поворотысмещение нуля накапливается при интегрировании
Магнитометрнаправление на север — курсискажения от железа и токов рядом

Смещение нуля гироскопа — главная причина. У BMI270 по даташиту оно до ±0,5 °/с, и угол, полученный интегрированием, уходит на 30° за минуту. Акселерометр не уплывает, но шумит и реагирует на любое движение. Слияние доверяет гироскопу на коротких отрезках времени, а акселерометру и магнитометру — на длинных, исправляя медленный уход.

Внутри датчика. BNO055 по даташиту Bosch — 9-осевой модуль со своим процессором. В режимах слияния он сам выдаёт кватернион, углы Эйлера, вектор поворота, линейное ускорение без гравитации, вектор гравитации и курс — 100 раз в секунду. Режимы различаются набором датчиков:

Режим BNO055ДатчикиЧто даёт
IMUакселерометр и гироскопотносительная ориентация без курса на север
COMPASSакселерометр и магнитометркурс как у компаса
M4Gакселерометр и магнитометр, вращение — по магнитометруориентация без гироскопа
NDOFвсе триабсолютная ориентация

После включения BNO055 находится в режиме настройки CONFIGMODE, а качество калибровки каждого датчика показывает регистр CALIB_STAT.

В микроконтроллере. 6-осевые датчики вроде BMI270 выдают сырые ускорения и угловые скорости, а слияние считает программа. Это экономнее — сам BMI270 потребляет сотни микроампер против миллиампер у BNO055, — но нужно подобрать фильтр и откалибровать датчики. Курс при этом недоступен без магнитометра: BMI270 по даташиту умеет подключать его через свой вспомогательный интерфейс I²C. Шум датчиков задают плотностью шума, и от неё зависит, насколько плавной получится оценка.

Подробнее о датчиках — в статье об акселерометрах и гироскопах.

Частые вопросы

Зачем объединять акселерометр и гироскоп?

Потому что у каждого свой недостаток. Угол по гироскопу получают интегрированием скорости, и смещение нуля накапливается: у BMI270 по даташиту до ±0,5 °/с — до 30° за минуту. Акселерометр в покое точно показывает направление силы тяжести, но при движении к ней добавляются ускорения. Слияние берёт у гироскопа быструю реакцию, а у акселерометра — долгосрочную точность наклона.

Зачем нужен магнитометр?

Чтобы знать курс — поворот вокруг вертикали. Акселерометр его не видит: сила тяжести при таком повороте не меняет направления. Поэтому в BNO055 режимы с курсом — COMPASS, M4G и NDOF — используют магнитометр, а режим IMU, только с акселерометром и гироскопом, даёт относительную ориентацию.

Где считать слияние — в датчике или в микроконтроллере?

BNO055 по даташиту делает это сам и выдаёт готовые углы и кватернион 100 раз в секунду, но потребляет до 12,3 мА. С 6-осевыми BMI270 и подобными слияние считает микроконтроллер: это экономнее по току и гибче, но требует вычислений и настройки фильтра.

Источники

  1. Bosch Sensortec. BNO055 Data Sheet (BST-BNO055-DS000-18, Revision 1.8, October 2021) — 9-осевой модуль с процессором, выдаёт кватернион, углы Эйлера, вектор поворота, линейное ускорение, гравитацию и курс 100 раз в секунду; режимы без слияния (ACCONLY, MAGONLY, GYROONLY, ACCMAG, ACCGYRO, MAGGYRO, AMG) и со слиянием (IMU — акселерометр и гироскоп, COMPASS, M4G, NDOF_FMC_OFF, NDOF — все три датчика); после включения режим CONFIGMODE; в регистре CALIB_STAT — состояние калибровки датчиков
  2. Bosch Sensortec. BMI270 Data Sheet (BST-BMI270-DS000-08, Revision 1.6) — 6-осевой IMU без встроенного слияния; вспомогательный интерфейс I²C для внешнего магнитометра или датчика давления; смещение нуля гироскопа ±0,5 °/с

Нашли ошибку?