Перейти к основному содержимому

IMU-модули

IMU объединяет акселерометр, гироскоп и магнитометр

Когда робот разгоняется, наклоняется или поворачивает, колёса не рассказывают всей истории. Они могут проскальзывать, а корпус — качаться независимо от пройденного пути. Инерциальный модуль быстро замечает движение самого корпуса, но его числа нужно читать в правильных единицах, осях и системе координат.

Коротко

IMU — инерциальный измерительный модуль. Обычно в нём есть трёхосевой акселерометр и трёхосевой гироскоп; магнитометр может находиться в том же корпусе или подключаться отдельно. Акселерометр выдаёт вектор удельной силы, гироскоп — угловую скорость, магнитометр — локальное магнитное поле. Ориентация получается после обработки этих измерений, а не напрямую из одного идеального датчика.

Зачем это нужно

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

IMU помогает:

  • оценивать крен и тангаж корпуса;
  • измерять скорость поворота;
  • обнаруживать удар, вибрацию и резкий разгон;
  • стабилизировать балансирующую платформу или летательный аппарат;
  • дополнять энкодеры, камеру и спутниковую навигацию;
  • отмечать движение даже там, где внешнего ориентира временно не видно.

Но IMU не является готовым датчиком координаты. Ошибки при интегрировании накапливаются, направление «север» искажается рядом с металлом и токами, а акселерометр во время разгона не отделяет гравитационную составляющую простым взглядом на одно число.

Главная идея

Три типа чувствительных элементов отвечают на три разных физических вопроса.

КаналНепосредственное измерениеТипичные единицы в ПОЧто можно оцениватьГлавная ловушка
акселерометрудельная сила по осямm/s² или gнаклон в спокойном режиме, разгон, ударсчитать любой вектор только гравитацией
гироскопугловая скоростьrad/s или °/sбыстрый поворот, изменение угла после интегрированиясчитать скорость готовым абсолютным углом
магнитометрлокальный вектор магнитного полятесла, часто микротесла в низкоуровневом APIмагнитный курс при подходящих условияхсчитать любой локальный вектор чистым полем Земли

Обработка строит оценку состояния:

сырые отсчёты + время + калибровка + оси -> объединение измерений -> ориентация и признаки движения

Если потерять один элемент этой цепочки, правдоподобные числа могут описывать не то движение. Например, знак оси окажется перевёрнут, градусы в секунду будут приняты за радианы, а старый пакет данных — за текущий.

Какие блоки находятся в IMU

Название «шестиосевая IMU» означает три оси акселерометра и три оси гироскопа: это шесть каналов, а не уже восстановленные степени свободы. С магнитометром набор часто неформально называют девятиосевым. Модуль также может иметь датчик температуры, очередь FIFO, прерывания и внутренний фильтр. Для встроенной ориентации всё равно проверяют используемые каналы, систему координат и сообщение о качестве.

Акселерометр: почему на столе не ноль

MEMS-акселерометр содержит микроскопическую подвижную массу. Опора корпуса вызывает её смещение относительно рамки, а электроника измеряет это смещение. Выход корректнее называть вектором удельной силы.

По соглашению ROS REP-145 неподвижная IMU, у которой ось Z корпуса направлена вверх, должна сообщать примерно +g по Z. Это не означает, что плата разгоняется вверх. Стол не даёт датчику свободно падать, и опорная сила проявляется в измерении. В свободном падении идеальный акселерометр показал бы около нуля, хотя его скорость относительно Земли менялась бы.

Модуль в спокойном режиме можно проверить:

|a| = sqrt(aₓ² + aᵧ² + a_z²) ≈ g

При aₓ = 0, aᵧ = 0, a_z = 9,81 m/s² модуль равен 9,81 m/s². Если повернуть плату на бок без рывка, вектор перераспределится между осями, но его модуль останется около g в пределах ошибок.

Для спокойного или медленного движения направление вектора служит вертикальной опорой. Так оценивают крен и тангаж. Во время разгона мотором измерение содержит и динамическую составляющую. Тогда алгоритм, считающий весь вектор гравитацией, временно ошибается.

Удельная сила

Это сила на единицу массы, которую чувствует датчик относительно свободного падения. Поэтому неподвижный датчик на опоре показывает около 1 g, а идеальный датчик в свободном падении — около нуля. Знак отдельных компонент зависит от соглашения об осях.

Гироскоп: скорость, из которой получают угол

MEMS-гироскоп измеряет угловую скорость вокруг осей. Если плата вращается вокруг Z, основной отклик ожидается в канале ω_z. Угол можно обновлять дискретно:

θₖ = θₖ₋₁ + (ωₖ - b) × Δt

Здесь b — оценка смещения нуля, а Δt — время между отсчётами. Размерность согласована: rad/s × s = rad.

Даже у неподвижного гироскопа среднее редко равно идеальному нулю. Если смещение составляет всего 0,2 °/s и его не вычесть, простая модель накопит около 12° ошибки за минуту:

0,2 °/s × 60 s = 12°

Это иллюстрация вычисления, а не характеристика любого модуля. Реальные смещение и шум зависят от экземпляра, диапазона, температуры, питания, крепления и режима фильтра. Смещение оценивают на неподвижном стенде, а затем контролируют во время работы.

Гироскоп хорошо передаёт быстрые изменения ориентации: линейный разгон не выглядит для него наклоном. Но интеграл нуждается в начальном угле и постепенно дрейфует. Поэтому гироскопу дают кратковременный приоритет, а медленную опору получают из других наблюдений.

Магнитометр: не встроенный компас

Трёхосевой магнитометр измеряет локальный вектор магнитного поля. В спокойной среде после калибровки направление горизонтальной составляющей можно связать с магнитным курсом. Но моторы, стальные детали и силовые токи искажают поле рядом с роботом.

Различают два распространённых типа искажения:

  • hard iron — постоянное смещение облака измерений из-за собственного магнитного поля системы;
  • soft iron — растяжение и поворот облака из-за намагничиваемых материалов.

Калибровка по поворотам помогает оценить эти искажения, если они связаны с самим роботом и остаются стабильными. Она не отменяет переменное поле от включившегося двигателя или внешней стальной конструкции.

Магнитный курс не равен автоматически географическому: между магнитным и истинным севером есть зависящее от места и времени склонение.

Оси и системы координат

У IMU есть оси чувствительного элемента, у платы — ориентация монтажа, у корпуса — свои направления, а у карты или мира — ещё одна система координат. На рисунке стрелка X на плате может не совпасть с направлением «вперёд» робота.

REP-145 использует правую систему координат. Для корпуса в соглашениях ROS обычно:

  • X направлена вперёд;
  • Y — влево;
  • Z — вверх;
  • положительное вращение определяется правилом правой руки.

Драйвер должен выдавать согласованные данные в заявленной системе сенсора, а дальнейшее преобразование переносит их в систему корпуса. Нельзя исправлять монтаж тремя случайными сменами знака: лучше записать поворот и проверить его известными движениями.

ИспытаниеОжидаемый основной откликЧто проверяется
плата лежит горизонтально, Z вверхакселерометр около +g по Zзнак, единицы, соглашение драйвера
корпус разгоняют вперёд без заметного поворотаизменяется компонент удельной силы вдоль продольной осисоответствие оси платы оси корпуса
корпус поворачивают против часовой стрелки при взгляде сверхуположительный ω_z после преобразования в указанную систему корпуса; до преобразования знак зависит от монтажаправило знака вращения и преобразование осей
модуль вращают в разных ориентациях вдали от мотораконец вектора магнитного поля описывает калибруемое облакомагнитные искажения и насыщение

Оси IMU должны быть явно преобразованы в оси корпуса робота

Время тоже часть координат

Пакет IMU должен иметь временную метку момента измерения. Использовать время получения в медленном цикле программы хуже: очередь и шина добавляют меняющуюся задержку. Для интегрирования Δt получают из соседних меток, проверяют монотонность и отбрасывают слишком большой разрыв.

В ROS сообщение sensor_msgs/Imu содержит временную метку, ориентацию, угловую скорость, линейное ускорение и ковариации. Матрица ковариации из одних нулей означает, что ковариация неизвестна, а -1 в её первом элементе — что соответствующей оценки нет. Магнитное поле публикуется отдельным sensor_msgs/MagneticField. Эти специальные состояния нельзя заменять уверенным нулём.

Ошибки: шум, смещение и дрейф

Эти слова обозначают разные явления.

ЯвлениеКак выглядитПочему мешаетЧто проверяют
шумбыстрый разброс около среднегодрожание оценки и ложные событиянеподвижную запись и спектр/разброс
смещение biasсреднее отличается от ожидаемогоинтеграл растёт даже без движениясреднее на неподвижном участке
ошибка масштабаизменение систематически больше или меньше эталонаневерный угол или ускорениенесколько известных положений/скоростей
несоосностьдвижение одной оси попадает в другиесмешение крена, тангажа и рысканияповорот отдельно вокруг каждой оси
насыщениезначение упирается в пределформа быстрого движения теряетсямаксимумы и флаги диапазона
дрейф оценкиошибка интеграла растёт со временемугол, скорость или позиция уходятдлительный неподвижный и замкнутый тест

Фильтр может уменьшить шум, но не восстановит отсечённый насыщением сигнал. Вычитание постоянного смещения не исправит изменившийся температурный режим. Калибровка магнитометра не защитит от включившегося рядом мотора. Для каждой ошибки нужен свой опыт.

Зачем объединяют каналы

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

Простой комплементарный фильтр для одного угла записывают так:

угол = α × (предыдущий_угол + гироскоп × Δt)
+ (1 - α) × угол_по_акселерометру

Коэффициент α связывают с частотой обновления и постоянной времени. Коррекцию по акселерометру ослабляют, когда модуль вектора сильно отличается от g. Трёхмерную ориентацию обычно представляют кватернионом, а не тремя независимо сложенными углами.

Даже хороший фильтр не создаёт отсутствующий ориентир. Без внешних наблюдений интегрирование ускорения в скорость и координату быстро накапливает ошибку смещения. Положение мобильного робота обычно уточняют энкодерами, камерой, лидаром, GNSS или маяками.

Минимальная обработка потока

Учебный фрагмент интегрирует одну ось гироскопа и защищается от неверного времени:

def update_angle(angle_rad, gyro_rad_s, bias_rad_s, dt_s):
if not 0 < dt_s <= 0.1:
raise ValueError("недопустимый шаг времени")
return angle_rad + (gyro_rad_s - bias_rad_s) * dt_s


angle = 0.0
bias = 0.003

for gyro, dt in [(0.50, 0.02), (0.48, 0.02), (0.02, 0.02)]:
angle = update_angle(angle, gyro, bias, dt)

print(round(angle, 5))

Это не готовый фильтр ориентации. В проекте проверяют метки времени, NaN, насыщение, пропуски и калибровку; начальный угол задают внешним условием.

Примеры в роботе

Балансирующее шасси

Гироскоп быстро замечает угловую скорость падения. Акселерометр медленно возвращает оценку наклона к вертикальной опоре. При ударе или резком разгоне контроллер временно меньше доверяет акселерометру, но всё равно проверяет предельный наклон и останавливает моторы при недостоверном состоянии.

Поворот мобильного робота

Энкодеры предсказывают поворот по колёсам, а гироскоп измеряет вращение корпуса. На скользком полу показания расходятся. Алгоритм не выбирает один «истинный» канал навсегда: он проверяет метки времени, качество и физически допустимую скорость, затем объединяет наблюдения.

Что запомнить про IMU

IMU выдаёт быстрые локальные измерения движения, а не готовую безошибочную позу. Акселерометр измеряет удельную силу, гироскоп — угловую скорость, магнитометр — магнитное поле. Результат зависит от единиц, времени, смещения, диапазона и преобразования осей. Объединение каналов уменьшает некоторые ошибки, но не отменяет их физических ограничений.

Практика

Задание 1. Шесть положений

Закрепи выключенную или безопасно питаемую IMU поочерёдно каждой гранью вверх. Для каждого положения заранее запишите ожидаемые знаки компонент акселерометра, затем соберите среднее и разброс. Определите преобразование из осей платы в оси корпуса.

Задание 2. Смещение гироскопа

Запишите несколько минут неподвижных показаний после включения и после прогрева. Рассчитайте среднее по каждой оси и интеграл с вычитанием и без вычитания среднего. Не называй один результат постоянной характеристикой всех экземпляров.

Задание 3. Магнитные помехи

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

Задание 4. Метки времени

Дополни функцию интегрирования временными метками. Обнаруживай повторную метку, обратный ход времени и большой разрыв; подготовьте тесты для каждой ветви.

Проверьте себя

  • Что непосредственно измеряет акселерометр?
  • Почему неподвижная IMU на столе обычно показывает около 1 g?
  • Что произойдёт с идеальным показанием акселерометра в свободном падении?
  • Чем угловая скорость отличается от угла?
  • Как постоянное смещение гироскопа превращается в дрейф угла?
  • Почему магнитометр рядом с мотором нельзя считать безусловным компасом?
  • Зачем преобразовывать оси платы в оси корпуса?
  • Почему для интегрирования нужна метка времени измерения?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

  • формулируете основную мысль своими словами;
  • называете важные условия, ограничения или меры безопасности;
  • для схемы, кода или расчёта показываете ход решения и ожидаемый результат.

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

  • IMU — модуль инерциальных измерений, обычно содержащий акселерометр и гироскоп.
  • Акселерометр — датчик компонент удельной силы.
  • Гироскоп — датчик угловой скорости.
  • Магнитометр — датчик локального вектора магнитного поля.
  • Удельная сила — негравитационная сила на единицу массы относительно свободного падения, воспринимаемая акселерометром.
  • Bias, смещение — систематическое отклонение среднего показания от ожидаемого.
  • Дрейф — накопление ошибки оценки со временем, особенно после интегрирования.
  • Система координат — выбранные начало, оси и направления знаков для описания векторов.
  • Ковариация — численное описание неопределённости и связи ошибок компонент.
  • Слияние датчиков — совместная оценка состояния по нескольким измерительным каналам.
  • Кватернион — представление пространственного поворота без особых положений углов Эйлера.

Связанные темы

Источники