В этом тексте я накропал про то, какая математика скрыта за алгоритмом калибровки трёх осевых MEMS акселерометров.
Этот текст является непрерывным продолжением предыдущего текста Геометрия Стенда для Калибровки MEMS Акселерометра. Настоятельно рекомендую его прочесть. Иначе всё, что вы увидите ниже окажется просто пустым звуком.
В прошлом тексте мы научились конструировать прямоугольный пирамидальный калибровочный стенд, который обладает одним чудо свойством. Вот так оно записывается на языке математики.
Переводя на кухонный язык, - все компоненты вектора ускорения (A_x, A_y, A_z) свободного падения расщепляются на оси акселерометра с одинаковым модулем 0.577g. Эта лемма как раз и доказана в предыдущем тексте Геометрия Стенда для Калибровки MEMS Акселерометра.
Когда надо калибровать акселерометры?
MEMS акселерометры надо калибровать, когда измерения g вдоль одной и той же оси в разных знаках не равны по модулю. Это яркий признак того, что акселерометр надо калибровать. Обычно у акселерометра три оси. Поэтому надо проверять все эти оси.
Теоретический минимум.
То что мы считываем из ASIC акселерометра это вот этот вектор. (1) это даже еще не ускорение, а просто абстрактный сигнал.
Реальный же вектор ускорения это вектор (2). Ускорение со звёздочкой.
Как связаны прочитанный из ASICа сигнал и реальный вектор ускорения? По сути в микросхеме акселерометра три независимых акселерометра. На каждую ось. И каждый акселерометр обладает смещением нуля и искаженной чувствительностью. Поэтому реальное ускорение и прочитанный сигнал связаны линейным отображением (4).
Даешь сигнал и калибровочные коэффициенты, получаешь реальное ускорение. Всё по честному. В случае, если акселерометр был бы идеальный, то k_j обратятся в 1, а b_j в нули.
Постановка задачи
Даны два вектора сырых значений, который прочитаны из акселерометра, установленного на том пирамидальном стенде.
Найти калибровочные коэффициенты k_j и b_j.
Решение
В систему уравнений (1) вмонтируем уравнения (4). Получится система уравнений (5)
Поиск калибровочных коэффициентов сводится к тому, что надо просто решить систему линейных уравнений (5). Шесть уравнений и шесть неизвестных. Как же решить эту СЛАУ?
Если из первого и 4го уравнения выразить b_x и приравнять, то можно вычислить k_x. Аналогичное можно проделать для b_y и b_z. Таким образом мы получаем все масштабные калибровочные коэффициенты.
Аналогичным образом добываются коэффициенты смещения b. Надо из каждого уравнения выразить то, что мы не знаем и то, что нам не нужно. То есть k_j. Затем приравниваем k_j и алгебраическими преобразованиями выводим b_j. Easy!
Мы получили формулы для вычисления калибровочных коэффициентов. Вот так просто и не затейливо..
Практическая часть.
Идея самой калибровки в следующем. У нас есть вот такой стенд. Коллеги почему-то называют его словом раскоряка.
Надо выполнить следующие шаги:
1—Пристегнуть твердотельную электронную плату с акселерометром в ячейку №1 красной скрепой
2—Прочитать вектор ускорения A1 = (A1x, A1y, A1z),
3—Вмонтировать ту же электронную плату с акселерометром в контрольную позицию №2
4—Прочитать вектор ускорения A2 = (A2x, A2y, A2z)
5—Посчитать коэффициенты по формуле (6) и (7).
6—Получить вектор смещения нуля B и вектор чувствительности K
7--Применить данные коэффициенты в драйвер акселерометра.
Можно и вовсе запрограммировать робот KUKA для того, чтобы вертеть эту плату, так и сяк для калибровки. Это уже зависит от вашего бюджета.
Фактически надо сделать два измерения. В левой ориентации и в правой ориентации. Модули ускорения свободного падения на каждую ось будут одинаковые. Просто на каждой оси будет противоположный знак. Только и всего...
Прежде чем устанавливать электронную плату надо выровнять плоскость стенда. Для этого надо подкладывать под стенд листки до тех пор пока пузырек уровня по X и Y не станет показывать ноль. Только после этого можно смело читать акселерометр в электронной плате.
Я прочитал несколько значений вектора A1 и A2. Взял среднее арифметическое по 5 измерениям и подал эти значение на вход алгоритма пирамидальной калибровки. Получил вот такие коэффициенты. Похоже на правду.
Сам микроконтроллер по входным значениям двух векторов A1 и A2 рассчитал мне калибровки. Это же в виде текста
Скрытый текст
-->
--> pac 0.58 0.53 -0.54 -0.58 -0.58 0.50
336 I,[PyramidAccelCalib] A1:dx: 0.58,dy: 0.53,dz: -0.54
337 I,[PyramidAccelCalib] A2:dx: -0.58,dy: -0.58,dz: 0.50
338 I,[PyramidAccelCalib] AccelCalibOk
339 I,[PyramidAccelCalib]
A1:dx: 0.58,dy: 0.53,dz: -0.54,
A2:dx: -0.58,dy: -0.58,dz: 0.50,
Kx:0.995431,Ky:1.040271,Kz:1.110289,
Bx:-0.000000,By:0.026007,Bz:0.022206,
-->
Тут сразу надо учесть, что precision у данного акселерометра +/-40mg. Поэтому калибровка по смещению нам погоду особо не поменяет. Однако тем не менее пусть будет.
Итоги
Удалось получить простые аналитические формулы для калибровочных коэффициентов для случая калибровки на пирамидальном стенде. Вот они, родимые, перед вами.
Формулы (8) справедливы только для измерений проделанных на пирамидальном стенде.
Как можно заметить, калибровка акселерометров - эта задача на стыке программирования, тригонометрии, линейной алгебры, метрологии, черчения, стереометрии. В общем куча всего...
Надеюсь этот текст поможет другим программистам микроконтроллеров быстрее вникнуть в физику происходящего и корректно откалибровать свои MEMS акселерометры.
Если найдете ошибку в расчетах, то пишите в комментариях.
Словарь
Акроним |
Расшифровка |
СЛАУ |
Система линейных алгебраических уравнений |
MEMS |
micro-electromechanical system |
ASIC |
application-specific integrated circuit |
Ссылки
Комментарии (25)
ZEvS_Poisk
15.11.2024 19:49Отличная статья! И ещё добавлю: может стоит на основание стенда установить другой (несколько) акселерометров, чтобы не упираться в точность ватерпаса? Правда их тоже придется поверять, но можно придумать способ их ротационной замены. Не думали над этим?
aabzel Автор
15.11.2024 19:49И ещё добавлю: может стоит на основание стенда установить другой (несколько) акселерометров, чтобы не упираться в точность ватерпаса?
На самом деле мы и стенд под горизонт подгоняем тоже электронным инклинометром.
gleb_l
15.11.2024 19:49Меня всегда подмывало положить айфон в равномерно ускоряющийся автомобиль (с небольшим ускорением, 0.1g хватит), откалибровать его прямо там, а потом посмотреть, что он покажет в покое, когда увидит, что длина вектора ускорения, синтезированная по осям, окажется меньше g ;)
mikelavr
15.11.2024 19:49Это калибровка акселерометра при одном ускорении (равном 1G) и при одной температуре (предположительно +20C).
Как он будет себя вести на других ускорениях и при другой температуре?
Вопрос весьма практический, связан с несистематическими ошибками в работе датчиков для бега - Foot Pod. Как конкретный пример - Stryd. Там показываемый темп плавает от чего угодно - скорости бега, техники бега, модели кроссовок, температуры на улице.
Ускорение больше 1G можно смоделировать, установив акселерометр на краю платформы, которая вращается с известной скоростью. Можно сравнить расчетное значение ускорения, и фактическое.
Можно также смоделировать невесомость, подбросив изделие. Во время свободного падения в значениях должен быть ноль.zebulon_stumpf
15.11.2024 19:49В воздухе ноль будет только в когда скорость будет ноль, иначе есть небольшое торможение о воздух
mikelavr
15.11.2024 19:49Согласен. Значит подбросить, и смотреть значения около верхней точки траектории.
randomsimplenumber
15.11.2024 19:49Если подбросить - в любой точке будет около 0.
Zenitchik
15.11.2024 19:49В воздухе ноль будет только в когда скорость будет ноль, иначе есть небольшое торможение о воздух
Читать надо ветку, а не только последний пост.
kuzzdra
15.11.2024 19:49Не уверен, что этот акселерометр сможет уловить торможение об воздух, разве что его из пушки подбросят. Также не уверен, что в процессе подбрасыванния его не закрутят, и что он не будет показывать какое-то рандомное центростремительное ускороение.
zebulon_stumpf
15.11.2024 19:49Уловить можно все, при наличии достаточного шума и времени для наблюдения
aabzel Автор
15.11.2024 19:49Даже когда спутник удаляется от земли двигаясь по вытянутой эллиптической орбите он формально тоже падает на землю.
utya
15.11.2024 19:49Хорошая статья. Метод 6 позиционной калибровки, только модифицированный. Лет 7 назад писал диссер на эту тему. Температурный дрейф многие решают, просто используя подогрев для мемс датчиков
kuzzdra
15.11.2024 19:49С этой статьи нужно было начинать. Описание проблемы, постановка задачи, уравнения эти.. Переход к частному случаю с 2 измерениями вместо 6 - наверное в уравнениях какие то коеффициенты становятся константами.. А уже потом строить пирамиду.
Точность измерений неплохо бы учесть. Если 10 раз подряд с интервалом в полчаса выполнить измерения с 2 платами по очереди - они будут такими же?
AlexGfr
15.11.2024 19:49Ваш метод не учитывает, что направления осей акселерометра могут по разным причинам не точно соответствовать осям устройства (платы). В результате, ах* зависит не только от ax, но и от ay и az
Borjomy
15.11.2024 19:49В свое время отказались от использования обычных акселерометров для определения наклона платформы. Причина большие температурные дрейфы, которые напрочь убивают всю идею. При этом точный температурный датчик в MEMS акселерометрах не предусмотрен, да и вообще никакой.
aabzel Автор
15.11.2024 19:49В свое время отказались от использования обычных акселерометров для определения наклона платформы
И что же Вы в итоге выбрали? Механический гироскоп? GNSS RTK?
Zenitchik
Я краем уха слышал, что у датчиков бывает нелинейность. Если такая проблема правда есть, то как с ней борются?