Пролог
В этой заметке я бы хотел решить одну очень полезную с практической точки зрения задачу.
На 12й год работы по специальности настал тот самый первый день, когда в профессии программист-микроконтроллеров понадобилось решить задачку по стереометрии. Это задачка уровня ЕГЭ самого высшего класса: A3. То есть по классификации НАТО она котируется, как задача наивысшей сложности!
Что ж, попробуем вспомнить молодость и решить эту задачку по геометрии.
Постановка задачи
Дана вот такая трёхгранная прямоугольная пирамида
Отрезок CB параллелен оси Y. Верху прямой угол. Можно сказать, взяли коробку, циркулярной пилой отрезали угол и положили на пол. Вот и получилась эта пирамида.
найти:
1 угол OFD.
2 Проекцию OD на оси OB OC OA
3 Углы OCD OBD OAD
Эта задача взялась не из воздуха. Эта иллюстрация - не что иное, как чертёж конструктива стенда для калибровки MEMS акселерометров. Цель стенда сделать так, чтобы ускорение свободного падения (вектор g) равномерно проецировался на каждую ось в системе координат акселерометра: x` y` z`.
Обеспечивается это за счет специфического конструктива стенда. Но об этом позже.
Теоретический минимум
Что нам понадобится из фундаментальных знаний из геометрии? А вот что:
Сумма всех углов в треугольнике равна 180 градусов (или pi радиан)
-
Теорема Пифагора - в прямоугольном треугольнике сумма квадратов длин катетов (a, b) равна квадрату длины гипотенузы (с)
Теорема косинусов - Для плоского треугольника со сторонами a , b , c и углом α (альфа) противолежащим стороне a , справедливо соотношение:
иллюстрация к теореме косинусов
Можно заметить, что при альфа равному 90 градусов, cos(alfa) обнуляется и теорема косинусов фактически вырождается в теорему Пифагора. Вот так...
Решение
Если честно, то я не знаю решения этой задачи. Поэтому ничего не остается как взять эту задачу штурмом. То есть находить всё подряд пока не наткнешься на решение.
Следите за руками... Для лучшего понимания фигуры можно даже распечатать эту трёхгранную прямоугольную пирамидку на плотной бумаге, продавить ребра непишущей ручкой (чтобы бумага гнулась по линии), вырезать края и склеить скотчем грани.
Фаза 1: Собрать Физическую Модель Пирамиды
Для лучшего понимания происходящего надо вырезать эту фигуру из плотной бумаги.
получится что-то такое.
Фаза 2 Вычисление основания пирамиды
Взглянем на фигуру снизу. Тут есть всё необходимое, чтобы вычислить DH и AD. Обсчитаем тут всё что можно.
Рассмотрев треугольник BHC по теореме косинусов мы находим отрезок BH. Рассмотрим треугольник DFC. По свойствам прямоугольного треугольника находим DF
Фаза 3: Вычисление высоты пирамиды.
Рассмотрев ODF по теореме Пифагора находим OD.
Фаза 4: Вычислить опорные углы пирамиды
Вычислим угол OCD согласно свойствам прямоугольного треугольника OCD.
Фаза 5: Переход в систему координат связанную с акселерометром X` Y` Z`.
А теперь самый важный момент. То ради чего всё делалось. Допустим, что отрезок OD имеет единичную длину (вектор g). На какие компоненты вектор g будет проецироваться (расщепляться) на оси X`Y`Z` ? Надо убедиться, что коэффициенты на каждую из осей акселерометра будут идентичные.
По хорошему для перехода между системами координат тут надо применить тензорное исчисление, но я попробую обойтись обыкновенной школьной тригонометрией.
Ввиду симметрии задачи на вершине этой пирамиды акселерометр всегда будет показывать по каждой координате 0.577g! Совпадение? Не думаю...
Ответы
Итак, просуммируем разведданные... Длины отрезков выражены в единицах e. Где e - это длинна ребра пирамиды. e - это то ребро, которое не касается земли. Те что касаются земли они подлиннее.
Точки
Вот координаты всех ключевых точек для данной фигуры. Вычисления произведены из расчета, что длина грани пирамиды равна единице (e=1).
Отрезки трёхгранной пирамиды:
Ниже приведены основные отрезки данной пирамиды.
№ |
Отрезок |
общий вид |
численное решение |
1 |
BH |
e*sqrt(3)/3 |
e*0.86602... |
2 |
DC |
e/sqrt(3) |
e*0.57735 |
3 |
DB |
e/sqrt(3) |
e*0.57735 |
4 |
DA |
e/sqrt(3) |
e*0.57735 |
5* |
DF |
e/(2*sqrt(3)) |
e*0.2886751 |
6* |
OD |
e/sqrt(3) |
e*0.5773502692 |
7 |
AC=CA |
e*sqrt(2) |
e*1.414213562 |
8 |
CB=BC |
e*sqrt(2) |
e*1.414213562 |
9 |
AB=BA |
e*sqrt(2) |
e*1.414213562 |
10 |
OA |
e |
e |
11 |
OC |
e |
e |
12 |
OB |
e |
e |
Углы трёхгранной пирамиды:
В общем, ключевые для нас углы получились действительными числами.
№ |
Угол |
формула |
Градусы |
1 |
OFD |
acos(1/sqrt(3)) |
54.73561032..... |
2 |
OCD |
acos(sqrt(2/3)) |
35.26438968...... |
3 |
AOC |
-- |
90 |
4 |
COB |
-- |
90 |
5 |
AOB |
-- |
90 |
6 |
BAC |
-- |
60 |
7 |
ACB |
-- |
60 |
8 |
ABC |
-- |
60 |
9 |
HBC |
-- |
30 |
10 |
GCB |
-- |
30 |
Практическая часть
А вот так этот агрегат выглядит в натуре. Наклон относительно плоскости стола - это угол OFD 54 градуса.
Идея самой калибровки в следующем:
1—Пристегнуть электронную плату с акселерометром в ячейку №1 красной скрепой
2—Обмерять вектор ускорения A1 = (A1x,A1y,A1z),
3—Вмонтировать электронную плату с акселерометром в ячейку №2
4—Обмерять вектор ускорения A2 = (A2x,A2y,A2z)
5—Что-то посчитать... Это вообще отдельная история. Пока положим, что это мы получаем с помощью волшебной палочки.
6—Получить вектор смещения нуля A_offset = (Ax_o,Ay_o,Az_o)
Можно и вовсе запрограммировать робот KUKA для того, чтобы вертеть эту плату, так и сяк для калибровки.
Фактически надо сделать два измерения. В левой ориентации и в правой ориентации. Модули ускорения свободного падения на каждую ось будут одинаковые. Просто на каждой оси будет противоположный знак
Знаки ускорения
Кода калибровка выполнена, ко всем показаниям акселерометра прошивка микроконтроллера прибавляет этот вектор смещения нуля A_offset.
Откалиброванный акселерометр в обоих измерениях покажет значения по модулю 0,577g. Тут в цветных ячейках единицы g. Так как MEMS акселерометры показывают ускорение в единицах g.
Достоинства пирамидального стенда
++Благодаря таким пирамидальным стендам можно калибровать MEMS акселерометры не по 6-ти измерениям (как обычно предлагают вендоры акселерометров), а по двум измерениям. Это существенно сокращает время на расчет и загрузку калибровочных данных в условиях массового производства.
Недостатки калибровки пирамидальным стендом
--Если вы считаете коэффициенты с помощью этой пирамиды, то вы очень сильно полагаетесь на точность расположения и ортогональность внутренней системы координат акселерометра, на точность запайки акселерометра и на точность закрепления. Проще говоря надо с прецизионной точностью изготовить этот калибровочный стенд. Надо точно припаять ASIC. Ставить стенд на ровный как водная гладь стол.
Итоги
Удалось рассчитать конструктив стенда для калибровки акселерометра. Удалось понять какие нужны углы в наклонном штативе для снятия нужных метрик.
Оказывается уроки математике в 7ом классе не прошли для меня даром.
Как видите для калибровки аксов надо проявить нешаблонное мышление.
Как оказалось, наклон основной плоскости пирамиды составляет 54.73 градуса. Что ни разу не очевидно, глядя на стенд с непривычки впервые. При этом компоненты ускорения проецируются на оси с коэффициентом 0,577.
На этом этапе нам удалось понять почему стенд калибровки акселерометров выглядит именно так, а не иначе.
Надеюсь этот текст поможет другим программистам микроконтроллеров тоже понять геометрию стендов для калибровки MEMS акселерометров.
Если найдете ошибку в вычислениях, то пишите в комментариях.
Ссылки
# |
Гиперссылка |
URL |
1 |
||
2 |
||
4 |
||
3 |
https://docs.google.com/spreadsheets/d/1Sa_GDbpAMnRX8AOHKC_KY8s6BvyfKSK_M9hjgfq6CRI/edit?gid=0#gid=0 |
|
5 |
||
6 |
Вопросы:
--Сколько чисел выдает алгоритм калибровки акселерометра: 3, 6, 9, 12?
--Какова формула для вычисления калибровочных коэффициентов по двум измерениям?
Комментарии (38)
da-nie
14.11.2024 14:27Цель стенда сделать так, чтобы ускорение свободного падения (вектор g) равномерно проецировался на каждую ось в системе координат акселерометра: x` y` z`.
Зачем? Калибровка акселерометра - это установка его на поворотный стол и вращение в трёх плоскостях с подбором углов матриц привязки каждой оси к единой базе. Попутно определяется масштабный коэффициент (подгонка под g) и смещение (полусумма показаний в двух вертикальных ориентациях).
aabzel Автор
14.11.2024 14:27Зачем?
Всё намного проще..
Благодаря таким пирамидальным стендам можно калибровать MEMS акселерометры не по 6-ти измерениям (как обычно предлагают вендоры акселерометров), а по двум измерениям.Это существенно сокращает время на расчет и загрузку калибровочных данных в условиях массового производства радио электронной аппаратуры (РЭА).
da-nie
14.11.2024 14:27Это какие-то низкоточные акселерометры, что вы даже не смотрите, ортогональны ли оси?
Andy_U
14.11.2024 14:27Это какие-то низкоточные акселерометры, что вы даже не смотрите, ортогональны ли оси?
Да автор даже не проверяет, насколько криво микросхема припаяна к плате.
aabzel Автор
14.11.2024 14:27автор даже не проверяет, насколько криво микросхема припаяна к плате.
Да что уж мелочиться...
Автор даже не проверяет насколько криво кристалл кремния с MEMS структурой загерметизирован в корпус LGA-16.da-nie
14.11.2024 14:27Вообще, совмещать системы координат необходимо. Другое дело, что у вас в проектах хватает точности в лаптях, а потому этого и не требуется.
yappari
14.11.2024 14:27не по 6-ти измерениям (как обычно предлагают вендоры акселерометров), а по двум измерениям. Это существенно сокращает время на расчет и загрузку калибровочных данных в условиях массового производства.
Очевидно, всё вот ради этого вот. Хотя, если такая прям нужда, можно было вообще вешать платки гроздьями.
yappari
14.11.2024 14:27К слову, если вспомнить, что модуль трёх проекций кажущегося ускорения, измеренных калиброванным акселерометром при любых поворотах даст единицу, то можно прийти к тому, что для калибровки достаточно задать серию произвольных наклонов (главное, чтобы они заметно отличались друг от друга) и по ним найти как смещения нуля, так и масштабники. А бонусом, и углы неортогональности осей. И не нужны ни угольники, ни стенды. Можно хоть на гибкой руке крутить (повторяемость не требуется), но на поворотной платформе (типа УПГ), конечно, проще.
aabzel Автор
14.11.2024 14:27И не нужны ни угольники, ни стенды. Можно хоть на гибкой руке крутить (повторяемость не требуется)
То, что мы сейчас прочитали, - это именно то, что нужно для решения всей проблемы.
Я предлагаю Вам @yappari до конца месяца составить публикацию на habr о том как калибровать акселерометры.
Чтобы уже в ближайшее время можно было получить работающий алгоритм калибровки акселерометров новым "правильным" способом.
yappari
14.11.2024 14:27Нет правильного способа. Статью тоже нет смысла пионерить, всё уже давным-давно описано и легко находится.
aabzel Автор
14.11.2024 14:27для калибровки достаточно задать серию произвольных наклонов (главное, чтобы они заметно отличались друг от друга) и по ним найти как смещения нуля, так и масштабники
Тут так и делается
Ракета с инерциальной навигацией и GPS: сборка и запуск || Ракетостроение, часть 7
https://youtu.be/yR8BGlCN9ug&t=436Но тогда надо будет для поиска коэффициентов численный метод применять.
А с пирамидой - простая формула.yappari
14.11.2024 14:27Посылка та же (модуль проекций), метод - другой (видимо, автор тоже не сторонник получения высшего образования). Для нахождения используется МНК (мне думалось, это первое, что должно было прийти на ум, тем более, тут давали хинт). Короче, как я говорил выше, всё уже описано, мало того - есть опенсорс (вроде, хотя не уверен. И даже если не, никаких препятствий написать самому нет) библиотечка. Смотреть тут https://www.nxp.com/docs/en/application-note/AN5286.pdf
Что расчёт сложнее - не аргумент, считать вручную или на арифмометре никто не заставляет.
aabzel Автор
14.11.2024 14:27yappari
14.11.2024 14:27Неужели надо учить пользоваться впном?
aabzel Автор
14.11.2024 14:27У нас на работе VPN запрещен. Как и многое другое.
yappari
14.11.2024 14:27Сочувствую. Но дома? Дома впн тоже запрещён?
aabzel Автор
14.11.2024 14:27У ростелекома в Москве Tor browser не работает уже больше двух лет. А Planet VPN включается раз в неделю. Наудачу. Так что едва ли я увижу вашу ссылку. Даже дома.
yappari
14.11.2024 14:27Раз в неделю это очень и очень неплохо, я бы не говорил о "едва". Но на ртк и планетвпн свет клином не сошёлся, есть мобильный инет и другие провайдеры впн. Плюс на этот предмет было полно статей, как здесь, так и вообще.
randomsimplenumber
14.11.2024 14:27И не нужны ни угольники, ни стенды.
Но тогда придется задействовать не математику за 7 класс по классификации NATO, а линейную алгебру за 2 курс по классификации ВОЗ.
randomsimplenumber
14.11.2024 14:27Няп, калибровка по 6 измерениям, как
докторвендор прописал, позволяет компенсировать кривизну стенда А калибровка по 2 направлениям экономит 5 секунд времени.Andy_U
14.11.2024 14:27Да почему 6? 9 как минимум. Да и то вы не разделите кривизну стенда и кривизну припайки микросхемы к плате.
randomsimplenumber
14.11.2024 14:27Я исхожу из того, что вендор, наверное, что то знает о своем продукте. Если по документации достаточно 6 измерений, то 9 ничего не добавят, кроме сложности.
Andy_U
14.11.2024 14:27Я исхожу из того, что вендор, наверное, что то знает о своем продукте. Если по документации достаточно 6 измерений, то 9 ничего не добавят, кроме сложности.
Вопрос в требуемой точности. Если нет никаких требований, то вообще можно не калибровать.
И еще, как бы мы не понимали под измерением разные вещи. Я считаю измерения величины трех сигналов от микросхемы при заданном пространственном ее положении за три скалярных измерения. А вы?
kuzzdra
14.11.2024 14:27Не хватает самого важного: чего достигнуто в результате?
Скрытый текст
Раньше калибровкой занимался целый отдел ДТН с логарифмическими линейками, а сейчас это делает уборщица?
ZEvS_Poisk
Весьма интересно. Однако, замечу, что акселерометр не способен обнаружить вектор G, он видит силу реакции опоры.
maks_strachilov
правильнее сказать, "кажущееся ускорение"
ZEvS_Poisk
Не совсем так. Если бы акселерометр находился в свободном падении (и ускорялся конечно), то он показывал бы ноль совсем осям. Но он не падает, поскольку лежит на столе. Поэтому, он показывает, что именно и с какой стороны мешает ему падать. А это называется "реакцией опоры". Если бы, можно было бы, обнаружить "с какой стороны гравитация", то тогда не потребовались бы сложные гироплатформы, применяемые для авиагоризонта в летательных аппаратах.
aabzel Автор
Это из рубрики "почему для авиагоризонта не используют стакан с водкой?"
https://dzen.ru/a/YU1sM5vZ70i9oM_O
ZEvS_Poisk
Именно!
yappari
А не потому, что в летательных аппаратах действуют некислые ускорения, и определить направление гравитации с помощью только лишь акселерометров будет немного затруднительно?
Как и сказал товарищ выше, это действительно "кажущееся ускорение". Или, по-буржуйски, specific force.
aabzel Автор
Да. Если акселерометр раскрутить на верёвке, то он будет показывать центробежное ускорение, а не направление в центр Земли.