МЭМС акселерометры, магнитометры и углы ориентации

Global Positioning SystemsAlgorithmsMathematicsRobotics
Sandbox


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

Чтобы понять, на какие точности углов мы можем рассчитывать, нужно приложить некоторое количество усилий.

TL;DR: Описан небольшой скрипт для Octave/MATLAB, позволяющий оценить ошибки расчёта углов ориентации по измерениям МЭМС акселерометров и магнитометров. На входе скрипта — параметры датчиков из даташитов (и/или погрешности калибровки). Статья может быть полезна тем, кто начинает использовать инерциальные датчики в своих устройствах. Небольшой ликбез по датчикам прилагается. Ссылка на гитхаб тоже.

Сходу примем такие условия:

  • Мы хотим оценить углы ориентации неподвижного устройства.

    Почему?
    Ориентацию подвижного устройства просто по формулам не посчитать, нужно использовать хитрые алгоритмы.
  • Для оценки углов мы будем использовать измерения МЭМС акселерометров и магнитометров.

1. Краткий ликбез


Углы ориентации




Будем понимать под углами ориентации объекта углы Эйлера — крен (roll), тангаж (pitch), рыскание (yaw), связывающие собственную систему координат XYZ объекта и локальную систему координат восток-север-верх (ENU — East North Up). Углы roll, pitch, yaw обозначают поворот, который нужно совершить осям XYZ чтобы перейти в оси ENU. Соответственно, нулевые углы означают, что ось X объекта смотрит на восток, ось Y объекта смотрит на север, ось Z — вверх.

Порядок поворота осей — начиная с последнего угла: сначала на yaw (вокруг оси Z), потом на pitch (вокруг оси Y), потом на roll (вокруг оси X).

Акселерометр


Это датчик, измеряющий проекцию кажущегося ускорения на ось чувствительности. Кажущегося — потому что измеряет и силу тяжести тоже, даже в то время как акселерометр неподвижен. Проще всего представить акселерометр как грузик на пружинке, его выдаваемые измерения пропорциональны степени растяжения пружины. Если акселерометр покоится — пружина растянута лишь силой тяжести. Если ускоряется — то будет сумма сил: инерции грузика $\left (F=m\overrightarrow{a}\right )$ и силы тяжести $\left (F_{g}=m\overrightarrow{g}\right )$

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

$a_{XYZ}= m_{a} \cdot A_{XYZ}+b_{a}+n_{a},$

где $a_{XYZ}$ – измеряемое ускорение в ССК (собственной системе координат) XYZ, $m_{a}$ – матрица перекоса осей и масштабных коэффициентов акселерометра, $A_{XYZ}$ – вектор истинного ускорения в ССК XYZ, $b_{a}$ – вектор смещения нуля акселерометра, $n_{a}$ – шум измерений.

Матрица перекоса осей и масштабных коэффициентов выглядит следующим образом:

$m_{a}=\begin{bmatrix}1+m_{a,1,1} & m_{a,1,2} & m_{a,1,3}\\ m_{a,2,1}& 1+m_{a,2,2} & m_{a,2,3}\\ m_{a,3,1} & m_{a,3,2} & 1+m_{a,3,3} \end{bmatrix},$

где элементы, расположенные по главной диагонали ($ 1+m_{a,1,1}, 1+m_{a,2,2}, 1+m_{a,3,3}$) — это масштабные коэффициенты и их погрешности по трём осям акселерометра, а остальные элементы матрицы — перекосы осей акселерометра.

Выбор параметров акселерометра из даташита

Акселерометр MPU-9250


  • Смещение нуля акселерометра — Zero-G Initial Calibration Tolerance ($\pm60mg$ для компонент $X, Y$, $\pm80mg$ для компоненты $Z$) — для расчётов переводим в единицы $g$ домножив на $10^{-3};$
  • Погрешность масштабного коэффициента — Initial Tolerance ($\pm3\%$) — выражается в процентах. Для расчётов надо перевести в разы, домножив на $10^{-2};$
  • Перекосы осей — Cross Axis Sensitivity ($\pm2\%$) — также умножаем на $10^{-2};$
  • Спектральная плотность мощности шума акселерометра — Noise Power Spectral Density $\left (300\frac{\mu g}{\sqrt{Hz}} \right )$ — переводим числитель в $g$ домножая все на $10^{-6};$
  • Полоса пропускания — Low Pass Filter Response $\left (5-260 Hz\right )$ — приведены границы, в пределах которых её можно изменять. Установим максимальную полосу. Все равно ошибки будут определяться не шумами;

Зная спектральную плотность мощности шума и полосу пропускания датчика можно рассчитать СКО шума на выходе датчика:

$\sigma _{noise}=G_{0}\cdot\sqrt{\Pi_{noise}};$


Акселерометр ADIS16488A:


  • Смещение нуля — Bias Repeatability ($\pm 16mg$) — переводим в $g$ домножая на $10^{-3};$
  • Погрешность масштабного коэффициента — (Sensitivity) Repeatability ($\pm 0.5\%$) — переводим из процентов в разы;
  • Перекосы осей — Misalignment Axis to frame ($\pm1^{\circ}$) — в градусах, переводим в разы (радианы, поскольку величины малые);
  • Спектральная плотность мощности шума — Noise Density $\left ( 0.063\frac{mg}{\sqrt{Hz}}rms \right )$ — переводим числитель в $g;$
  • Полоса пропускания — $\left (3dB Bandwidth\right)$ — выберем такой же, как у MPU-9250;


Магнитометр


Датчик, который измеряет проекцию индукции магнитного поля на ось чувствительности. Магнитометру свойственны искажения hard-iron и soft-iron. Hard-iron искажение — это аддитивный эффект, когда к измеряемому полю добавляется постоянная составляющая. Причиной может быть, например, действие постоянного магнита или собственное смещение нуля датчика. Искажение soft-iron — мультипликативный эффект, отражающий изменение направления и/или ослабление вектора магнитной индукции. Этот эффект может быть вызван наличием металлического предмета в непосредственной близости от магнитометра или же собственными искажениями датчика — погрешностью масштабного коэффициента или перекосом его оси чувствительности.
Примем модель измерений триады магнитометров:

$m_{XYZ}=S_{m}\cdot M_{XYZ}+b_{m}+n_{m},$

где $m_{XYZ}$ – измерения магнитометра в ССК XYZ, $S_{m}$ – диагональная матрица перекоса осей и масштабных коэффициентов (которая описывает эффект soft–iron), $M_{XYZ}$ – вектор истинной магнитной индукции в ССК, $b_{m}$ – смещение нулей магнитометра (описывает эффект hard–iron), $n_{m}$ – шум измерений.
Матрица перекоса осей и масштабных коэффициентов магнитометра:

$S_{m}=\begin{bmatrix}1+S_{m,1,1} & S_{m,1,2} &S_{m,1,3}\\ S_{m,2,1}& 1+S_{m,2,2} & S_{m,2,3}\\ S_{m,3,1} & S_{m,3,2}&1+ S_{m,3,3} \end{bmatrix},$

элементы, расположенные на главной диагонали ($S_{m,1,1}, S_{m,2,2}, S_{m,3,3}$) — масштабные коэффициенты и их погрешности по трём осям магнитометра, остальные элементы матрицы — перекосы осей магнитометра. Все элементы матрицы также учитывают эффект soft-iron.

Выбор параметров магнитометра из даташита

Магнитометр MPU-9250


В даташите нужных нам параметров нет, поэтому предположим, что магнитометр откалиброван и возьмем следующие числа:

  • смещение нуля — $(1\mu T);$
  • погрешность масштабных коэффициентов — $(5\%);$
  • перекосы осей — предположим, что они такие же, как у акселерометров — $(\pm2\%);$
  • шум на выходе — $(0.6\mu T);$

Магнитометр ADIS16488A


  • Смещение нуля — Initial Bias Error $\left (\pm15 mgauss = 1.5 \mu T \right )$ — будем считать, что мы его откалибровали до $(0.5 \mu T)$;
  • Погрешность масштабного коэффициента — Initial Sensitivity Tolerance $\left (2\% \right );$
  • Перекосы осей — Misalignment Axis to axis $\left (0.35^{\circ} \right )$ — в градусах, переводим в разы (радианы, так как величина маленькая);
  • Спектральная плотность мощности шума — Noise Density $\left (0.042\frac{mgauss}{\sqrt{Hz}} \right )$ — переводим в $\left (\frac{Tesla}{\sqrt{Hz}} \right );$
  • Полоса пропускания — возьмем для модели значение $260 Hz;$


Расчет углов ориентации


Благодаря наличию на Земле силы тяжести, акселерометры «чувствуют» направление вниз. Их измерения используются для расчета углов крена и тангажа. Формулы для расчёта можно найти тут. Третий — угол рыскания (а в данном случае — магнитного азимута), может быть определен благодаря наличию у Земли магнитного поля. Вектор индукции магнитного поля измеряется магнитометрами и их измерения участвуют в расчете угла рыскания. Нужно отметить, что в расчёте магнитного азимута используются измерения магнитометра, пересчитанные в плоскость. Здесь можно найти формулу для расчёта магнитного азимута.

$roll=atan\left ( \frac{a_{Y}}{a_{Z}} \right ),$

$pitch=atan\left ( \frac{-a_{X}}{\sqrt{a_{Y}^{2}+a_{Z}^{2}}} \right ),$

$yaw=atan2\left ( \frac{m_{E}}{m_{N}} \right ),$

где $atan2$ — функция полного арктангенса, $a_{X}$, $a_{Y}$, $a_{Z}$ — измерения акселерометра по трём осям в ССК, $m_{E}$, $m_{N}$ — измерения магнитометра по осям X', Y' (измерения магнитометров пересчитаны в плоскость).

2. Ошибки оценивания углов ориентации


Описание алгоритма




  • Сформируем массивы случайных углов Эйлера roll, pitch, yaw. Они будут задавать наборы вариантов истинной ориентации объекта в модели.
    Зачем много углов?
    Потому что ошибки зависят от значения углов ориентации, и если мы хотим получить представление об их величине во всем диапазоне изменения — то это самый простой способ.
  • Из случайных углов roll, pitch, yaw формируется матрица преобразования из ССК XYZ в ЛСК ENU:

    $C_{XYZ}^{ENU}=\begin{vmatrix} cy\cdot cp &-cr\cdot sy+sr\cdot cy\cdot sp &sr\cdot sy+cr\cdot cy\cdot sp \\ sy\cdot cp &cr\cdot cy+sr\cdot sy\cdot sp & -sr\cdot cy+cr\cdot sy\cdot sp \\ -sp &sr\cdot cp &cr\cdot cp \end{vmatrix},$

    где $cr=\cos (roll)$, $sr=\sin(roll)$, $cp=\cos(pitch)$, $sp=\sin(pitch)$, $cy=\cos(yaw)$, $sy=\sin(yaw)$.
  • Используя данную матрицу можно получить выражение для истинных ускорений в ССК:

    $A_{XYZ}=\left ( C_{XYZ}^{ENU} \right )^{T}\cdot \begin{vmatrix} 0\\ 0\\ -1\\ \end{vmatrix},$


    $\begin{vmatrix} 0\\ 0\\ -1\\ \end{vmatrix}$ — вектор, определяющий направление гравитационного ускорения, выраженный в единицах g, ${(C_{XYZ}^{ENU} )}^{T}$ — матрица преобразования координат из ЛСК в ССК (обратная матрице преобразования из ССК в ЛСК).
  • Применяем модель измерения акселерометра:

    $a_{XYZ}=\left ( I+m_{a} \right )\cdot A_{XYZ}+b_{a}+n_{a},$

  • По измерениям акселерометра рассчитываются новые углы крена и тангажа (оценки) по формулам:

    $roll'=atan \left ( \frac{a_{Y}}{a_{Z}} \right ),$

    $pitch'=atan\left ( \frac{-a_{X}}{\sqrt{a_{Y}^{2}+a_{Z}^{2}}} \right ).$

  • Также необходимо сформировать матрицу пересчета в «горизонт» из этих углов, для этого воспользуемся функцией rpy2mat:

    $C_{XYZ}^{XYZ'}=rpy2mat\left ( \begin{bmatrix} roll'\\ pitch'\\ 0 \end{bmatrix}^{T} \right ),$

    где углы roll' и pitch' — это углы, рассчитанные по измерениям акселерометра, а третий угол — нулевой.
  • Возьмем вектор истинных магнитных плотностей в ЛСК ENU и пересчитаем его в ССК XYZ:

    $M_{XYZ}= {(C_{XYZ}^{ENU} )}^{T}\cdot M_{ENU}.$

  • Применяем модель измерений магнитометра:

    $m_{XYZ}=S_{m}\cdot M_{XYZ}+b_{m}+n_{m}.$

  • Осталось пересчитать измерения магнитометра из ССК в «горизонт»:

    $m_{XYZ'}=C_{XYZ}^{XYZ'}\cdot m_{XYZ}.$

  • По «горизонтированным» измерениям магнитометра расcчитывается угол магнитного азимута:

    $yaw'=atan2\left ( \frac{m_{Y'}}{m_{X'}} \right ).$

  • Ошибки оценивания углов ориентации рассчитываются как разность между истинными углами roll, pitch, yaw и рассчитанными по измерениям датчиков — roll', pitch', yaw'.

3. Результаты — расчет погрешностей оценки углов


Для двух датчиков, которые мы взяли для примера — ADIS16488A и MPU-9250, получены предельные ошибки оценивания углов ориентации при совместном влиянии погрешностей акселерометра и магнитометра.

В таблице ниже — максимальные значения полученных ошибок:
Угол MPU-9250 ADIS16488A
Крен

$30^{\circ}$

$8^{\circ}$

Тангаж

$10^{\circ}$

$2^{\circ}$

Магнитный азимут

$30^{\circ}$

$20^{\circ}$


Совместное влияние погрешностей акселерометра и магнитометра на ошибки оценивания углов ориентации:

  • Вот так выглядят ошибки оценивания крена в зависимости от значений крена и тангажа:

  • Ошибки оценивания тангажа в зависимости от значений крена и тангажа:

  • Ошибки оценивания магнитного азимута от углов крена и тангажа:

  • Ошибки оценивания магнитного азимута от углов крена и магнитного азимута:

  • Ошибки оценивания магнитного азимута от углов тангажа и магнитного азимута:


Как можно заметить - величина ошибок растёт с приближением к границе диапазонов измерений углов. Почему?
Это можно понять из рисунка ниже.



Допустим мы поворачиваем ось чувствительности Z ($z1\rightarrow z2$) акселерометра так, чтобы проекция силы тяжести на эту ось стала меньше ($g'\rightarrow g"$). Значение проекции силы тяжести плюс погрешность акселерометра дадут область возможных значений измерения (розовая область). Погрешность оценки угла при этом возрастает ($\Delta _{1}\rightarrow \Delta _{2}$). Таким образом, при уменьшении проекции вектора силы тяжести на ось чувствительности ошибка акселерометра начинает вносить бОльшую ошибку в оценку угла.

Поиграем с входными параметрами чтобы понять чем определяются ошибки
Влияние только погрешностей акселерометра (магнитометр считаем идеальным) на ошибки оценивания углов ориентации:

  • Влияние погрешностей акселерометра на ошибки оценивания крена от крена и тангажа
  • Влияние погрешностей акселерометра на ошибки оценивания тангажа от крена и тангажа
  • Влияние погрешностей акселерометра на ошибки оценивания магнитного азимута от крена и тангажа

  • Влияние погрешностей акселерометра на ошибки оценивания магнитного азимута от крена и магнитного азимута
  • Влияние погрешностей акселерометра на ошибки оценивания магнитного азимута от тангажа и магнитного азимута


Влияние погрешностей только магнитометра (акселерометр считаем идеальным) на ошибки оценивания углов ориентации:

  • Влияние погрешностей магнитометра на ошибки оценивания крена от крена и тангажа
  • Влияние погрешностей магнитометра на ошибки оценивания тангажа от крена и тангажа
  • Влияние погрешностей магнитометра на ошибки оценивания магнитного азимута от крена и тангажа
  • Влияние погрешностей магнитометра на ошибки оценивания магнитного азимута от крена и магнитного азимута
  • Влияние погрешностей магнитометра на ошибки оценивания магнитного азимута от тангажа магнитного азимута


Итог


  • Разработана модель, позволяющая оценивать погрешности расчёта углов ориентации. Углы ориентации рассчитаны по измерениям акселерометров и магнитометров. В расчете погрешности углов учитываются модели погрешностей этих датчиков.
  • Ошибки оценивания углов ориентации являются функциями одновременно всех углов ориентации. При этом максимальные значения ошибок наблюдаются на границах диапазонов измерений углов.

Спойлер - дисклеймер:
  • Не рекламируем и не рекомендуем покупать эти датчики (они уже довольно старые).
  • Не учитываем влияние нелинейности измерений, влияние вибрации, нестабильности и т.д. — используем лишь первое приближение к модели ошибок датчиков.

Литература



Авторы

  • Илья Нагин — Stormgazer
  • Дарья Малафеева

Московский Энергетический Институт, Кафедра Радиотехнических Систем
Tags:мэмсmemsакселерометрмагнитометруглы эйлера
Hubs: Global Positioning Systems Algorithms Mathematics Robotics
+26
12k 92
Comments 23

Popular right now

Профессия Product Manager
January 27, 2021108,500 ₽Нетология
Аналитика для руководителей
January 27, 202167,500 ₽Нетология
Product Manager IT-проектов
January 28, 202160,000 ₽OTUS
JavaScript Developer. Professional
January 28, 202170,000 ₽OTUS
Тренажер product-менеджера
January 28, 202128,500 ₽SkillFactory