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 должен иметь временную метку момента измерения. Использовать время получения в медленном цикле программы хуже: очередь и шина добавляют меняющуюся задержку. Для интегрирования Δ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, смещение — систематическое отклонение среднего показания от ожидаемого.- Дрейф — накопление ошибки оценки со временем, особенно после интегрирования.
- Система координат — выбранные начало, оси и направления знаков для описания векторов.
- Ковариация — численное описание неопределённости и связи ошибок компонент.
- Слияние датчиков — совместная оценка состояния по нескольким измерительным каналам.
- Кватернион — представление пространственного поворота без особых положений углов Эйлера.
Связанные темы
- Лидары — как получить внешнюю геометрическую опору для локализации.
- Фильтрация данных с датчиков — как синхронизировать потоки и объединять наблюдения.
- Ограничения сложных сенсоров — как вибрация, частота и вычислительная задержка влияют на результат.
- Камеры глубины — как получить внешнее геометрическое наблюдение для робота.