Инерциальные датчики: IMU

Урок про инерциальный измерительный блок: акселерометр меряет ускорение и наклон, гироскоп — скорость вращения.

IMU (Inertial Measurement Unit) — модуль с акселерометром (ускорение по 3 осям) и гироскопом (угловая скорость по 3 осям), часто плюс магнитометр.

IMU — это «вестибулярный аппарат» дрона, телефона и робота. Акселерометр в покое чувствует гравитацию и по её проекциям даёт наклон. Гироскоп даёт скорость поворота. По отдельности оба врут, вместе — дают надёжную ориентацию (раздел 6).

Наклон из акселерометра

В покое акселерометр меряет вектор $g$. Углы тангажа (pitch) и крена (roll) получаются из проекций:

$$ \theta_{pitch} = \arctan\!\frac{a_x}{\sqrt{a_y^2 + a_z^2}}, \qquad \theta_{roll} = \arctan\!\frac{a_y}{a_z} $$

import math

def tilt(ax, ay, az):
    pitch = math.degrees(math.atan2(ax, math.sqrt(ay*ay + az*az)))
    roll  = math.degrees(math.atan2(ay, az))
    return round(pitch, 2), round(roll, 2)

print(tilt(0.0, 0.0, 9.81))   # ровно
print(tilt(4.9, 0.0, 8.5))    # наклон вперёд

Вывод:

(0.0, 0.0)
(29.96, 0.0)

Гироскоп: интегрирование скорости

Гироскоп даёт угловую скорость $\omega$. Чтобы получить угол, скорость интегрируют по времени:

$$ \theta(t) = \theta_0 + \int_0^t \omega(\tau)\,d\tau \approx \theta_0 + \sum_k \omega_k \,\Delta t $$

# интегрируем угловую скорость (град/с) с шагом dt
omega = [2.0, 2.1, 1.9, 2.0, 2.0]   # град/с
dt = 0.1

angle = 0.0
for w in omega:
    angle += w * dt
    print("угол =", round(angle, 3), "°")

Вывод:

угол = 0.2 °
угол = 0.41 °
угол = 0.6 °
угол = 0.8 °
угол = 1.0 °

Как работает под капотом

Акселерометр и гироскоп MEMS — это микроскопические подвижные массы на кремнии: ускорение смещает массу, ёмкость меняется, схема выдаёт число. Беда акселерометра — он чувствует любое ускорение, не только гравитацию: тряска и вибрация портят оценку наклона, зато в среднем он не «уплывает». Гироскоп, наоборот, мгновенно точен, но интегрирование накапливает дрейф нуля — угол медленно «уезжает». Поэтому их данные сливают: быстрый гироскоп плюс стабильный акселерометр (раздел 6).

Частые ошибки

  • Доверять акселерометру при тряске — он покажет ложный наклон.
  • Интегрировать гироскоп без коррекции — угол неизбежно уплывёт из-за дрейфа.
  • Путать ускорение (м/с²) и угловую скорость (град/с) — это разные физические величины.

Итог

  • Акселерометр в покое даёт наклон через arctan проекций гравитации.
  • Гироскоп даёт угол интегрированием угловой скорости.
  • По отдельности оба ненадёжны; их сливают (комплементарный фильтр, Калман).
Проверьте себя
1. Почему угол из гироскопа со временем «уплывает»?
AГироскоп ломается
BИнтегрирование накапливает дрейф нуля
CГравитация меняется
DИз-за магнитного поля
2. В каком случае акселерометр даёт неверную оценку наклона?
AВ полном покое
BПри тряске и вибрации (есть лишнее ускорение)
CНочью
DПри низкой температуре