Пролог
В этой заметке я бы хотел решить одну очень полезную с практической точки зрения задачу.
На 12й год работы по специальности настал тот самый первый день, когда в профессии программист-микроконтроллеров понадобилось решить задачку по стереометрии. Это задачка уровня ЕГЭ самого высшего класса: A3. То есть по классификации НАТО она котируется, как задача высшей сложности!
Что ж, попробуем вспомнить молодость и решить эту задачку по геометрии.
Постановка задачи
Дана вот такая трёхгранная прямоугольная пирамида
Отрезок CB параллелен оси Y. Верху прямой угол. Можно сказать, взяли коробку, циркулярной пилой отрезали угол и положили на пол. Вот и получилась эта пирамида.
Эта задача взялась не из воздуха. Эта иллюстрация - не что иное, как чертёж конструктива стенда для калибровки 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(6) |
e*0.4082482905 |
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 |
Практическая часть
А вот так этот стенд выглядит в натуре.
Идея самой калибровки в следующем:
1—Приложить электронную плату с акселерометром в ячейку 1
2—Прочитать вектор ускорения A1 = (A1x,A1y,A1z),
3—Прижать электронную плату с акселерометром в ячейку 2
4—Прочитать вектор ускорения A2 = (A2x,A2y,A2z)
5—Что-то посчитать... Но это отдельная история.
6—Получить вектор смещения нуля A_offset = (Ax_o,Ay_o,Az_o)
Фактически надо сделать два измерения. В левой ориентации и в правой ориентации. Модули ускорения свободного падения на каждую ось будут одинаковые. Просто на каждой оси будет противоположный знак
Знаки ускорения
Кода калибровка выполнена, ко всем показаниям акселерометра прошивка микроконтроллера прибавляет этот вектор смещения нуля A_offset.
Откалиброванный акселерометр в обоих измерениях покажет значения по модулю 0,577g. Тут в цветных ячейках единицы g. Так как MEMS акселерометры показывают ускорение в единицах g.
Достоинства пирамидального стенда
++Благодаря таким пирамидальным стендам можно калибровать MEMS акселерометры не по 6-ти измерениям (как обычно предлагают вендоры акселерометров), а по двум измерениям. Это существенно сокращает время на расчет и загрузку калибровочных данных в условиях массового производства.
Итоги
Удалось рассчитать конструктив стенда для калибровки акселерометра. Удалось понять какие нужны углы в наклонном штативе для снятия нужных метрик.
Оказывается уроки математике в 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 |
Вопросы:
--Сколько чисел выдает алгоритм калибровки акселерометра: 3, 6, 9, 12?
--Какова формула для вычисления калибровочных коэффициентов по двум измерениям?
Автор: aabzel