Пролог

В этой заметке я бы хотел решить одну очень полезную с практической точки зрения задачу.

На 12й год работы по специальности настал тот самый первый день, когда в профессии программист-микроконтроллеров понадобилось решить задачку по стереометрии. Это задачка уровня ЕГЭ самого высшего класса: A3. То есть по классификации НАТО она котируется, как задача наивысшей сложности!

Что ж, попробуем вспомнить молодость и решить эту задачку по геометрии.

Постановка задачи

Дана вот такая трёхгранная прямоугольная пирамида

Отрезок CB параллелен оси Y. Верху прямой угол. Можно сказать, взяли коробку, циркулярной пилой отрезали угол и положили на пол. Вот и получилась эта пирамида.

найти:
1 угол OFD.

2 Проекцию OD на оси OB OC OA

3 Углы OCD OBD OAD

Эта задача взялась не из воздуха. Эта иллюстрация - не что иное, как чертёж конструктива стенда для калибровки MEMS акселерометров. Цель стенда сделать так, чтобы ускорение свободного падения (вектор g) равномерно проецировался на каждую ось в системе координат акселерометра: x` y` z`.

Обеспечивается это за счет специфического конструктива стенда. Но об этом позже.

Теоретический минимум

Что нам понадобится из фундаментальных знаний из геометрии? А вот что:

  1. Сумма всех углов в треугольнике равна 180 градусов (или pi радиан)

  2. Теорема Пифагора - в прямоугольном треугольнике сумма квадратов длин катетов (a, b) равна квадрату длины гипотенузы (с)

  3. Теорема косинусов - Для плоского треугольника со сторонами 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 акселерометров.

Если найдете ошибку в вычислениях, то пишите в комментариях.

Ссылки

Вопросы:

--Сколько чисел выдает алгоритм калибровки акселерометра: 3, 6, 9, 12?

--Какова формула для вычисления калибровочных коэффициентов по двум измерениям?

Комментарии (38)


  1. ZEvS_Poisk
    14.11.2024 14:27

    Весьма интересно. Однако, замечу, что акселерометр не способен обнаружить вектор G, он видит силу реакции опоры.


    1. maks_strachilov
      14.11.2024 14:27

      правильнее сказать, "кажущееся ускорение"


      1. ZEvS_Poisk
        14.11.2024 14:27

        Не совсем так. Если бы акселерометр находился в свободном падении (и ускорялся конечно), то он показывал бы ноль совсем осям. Но он не падает, поскольку лежит на столе. Поэтому, он показывает, что именно и с какой стороны мешает ему падать. А это называется "реакцией опоры". Если бы, можно было бы, обнаружить "с какой стороны гравитация", то тогда не потребовались бы сложные гироплатформы, применяемые для авиагоризонта в летательных аппаратах.


        1. aabzel Автор
          14.11.2024 14:27

          Это из рубрики "почему для авиагоризонта не используют стакан с водкой?"

          https://dzen.ru/a/YU1sM5vZ70i9oM_O


          1. ZEvS_Poisk
            14.11.2024 14:27

            Именно!


        1. yappari
          14.11.2024 14:27

          А не потому, что в летательных аппаратах действуют некислые ускорения, и определить направление гравитации с помощью только лишь акселерометров будет немного затруднительно?

          Как и сказал товарищ выше, это действительно "кажущееся ускорение". Или, по-буржуйски, specific force.


    1. aabzel Автор
      14.11.2024 14:27

      Да. Если акселерометр раскрутить на верёвке, то он будет показывать центробежное ускорение, а не направление в центр Земли.


  1. HOMPAIN
    14.11.2024 14:27

    У вас в постановке задачи не написано что нужно найти. Не понятно какая задача.


    1. aabzel Автор
      14.11.2024 14:27

      Добавил


    1. aabzel Автор
      14.11.2024 14:27

      В идеале вообще все надо рассчитать. Все углы и все отрезки в этой простой конструкции.


  1. da-nie
    14.11.2024 14:27

    Цель стенда сделать так, чтобы ускорение свободного падения (вектор g) равномерно проецировался на каждую ось в системе координат акселерометра: x` y` z`.

    Зачем? Калибровка акселерометра - это установка его на поворотный стол и вращение в трёх плоскостях с подбором углов матриц привязки каждой оси к единой базе. Попутно определяется масштабный коэффициент (подгонка под g) и смещение (полусумма показаний в двух вертикальных ориентациях).


    1. aabzel Автор
      14.11.2024 14:27

      Зачем?

      Всё намного проще..

      Благодаря таким пирамидальным стендам можно калибровать MEMS акселерометры не по 6-ти измерениям (как обычно предлагают вендоры акселерометров), а по двум измерениям.

      Это существенно сокращает время на расчет и загрузку калибровочных данных в условиях массового производства радио электронной аппаратуры (РЭА).


      1. da-nie
        14.11.2024 14:27

        Это какие-то низкоточные акселерометры, что вы даже не смотрите, ортогональны ли оси?


        1. aabzel Автор
          14.11.2024 14:27

          мы работаем с LIS3DH
          https://habr.com/ru/articles/851180/


        1. Andy_U
          14.11.2024 14:27

          Это какие-то низкоточные акселерометры, что вы даже не смотрите, ортогональны ли оси?

          Да автор даже не проверяет, насколько криво микросхема припаяна к плате.


          1. aabzel Автор
            14.11.2024 14:27

            автор даже не проверяет, насколько криво микросхема припаяна к плате.

            Да что уж мелочиться...
            Автор даже не проверяет насколько криво кристалл кремния с MEMS структурой загерметизирован в корпус LGA-16.


            1. da-nie
              14.11.2024 14:27

              Вообще, совмещать системы координат необходимо. Другое дело, что у вас в проектах хватает точности в лаптях, а потому этого и не требуется.


    1. yappari
      14.11.2024 14:27

      не по 6-ти измерениям (как обычно предлагают вендоры акселерометров), а по двум измерениям. Это существенно сокращает время на расчет и загрузку калибровочных данных в условиях массового производства.

      Очевидно, всё вот ради этого вот. Хотя, если такая прям нужда, можно было вообще вешать платки гроздьями.


  1. yappari
    14.11.2024 14:27

    К слову, если вспомнить, что модуль трёх проекций кажущегося ускорения, измеренных калиброванным акселерометром при любых поворотах даст единицу, то можно прийти к тому, что для калибровки достаточно задать серию произвольных наклонов (главное, чтобы они заметно отличались друг от друга) и по ним найти как смещения нуля, так и масштабники. А бонусом, и углы неортогональности осей. И не нужны ни угольники, ни стенды. Можно хоть на гибкой руке крутить (повторяемость не требуется), но на поворотной платформе (типа УПГ), конечно, проще.


    1. aabzel Автор
      14.11.2024 14:27

      И не нужны ни угольники, ни стенды. Можно хоть на гибкой руке крутить (повторяемость не требуется)

      То, что мы сейчас прочитали, - это именно то, что нужно для решения всей проблемы.

      Я предлагаю Вам @yappari до конца месяца составить публикацию на habr о том как калибровать акселерометры.

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


      1. yappari
        14.11.2024 14:27

        Нет правильного способа. Статью тоже нет смысла пионерить, всё уже давным-давно описано и легко находится.


        1. aabzel Автор
          14.11.2024 14:27

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


          Тут так и делается
          Ракета с инерциальной навигацией и GPS: сборка и запуск || Ракетостроение, часть 7
          https://youtu.be/yR8BGlCN9ug&t=436

          Но тогда надо будет для поиска коэффициентов численный метод применять.
          А с пирамидой - простая формула.


          1. yappari
            14.11.2024 14:27

            Посылка та же (модуль проекций), метод - другой (видимо, автор тоже не сторонник получения высшего образования). Для нахождения используется МНК (мне думалось, это первое, что должно было прийти на ум, тем более, тут давали хинт). Короче, как я говорил выше, всё уже описано, мало того - есть опенсорс (вроде, хотя не уверен. И даже если не, никаких препятствий написать самому нет) библиотечка. Смотреть тут https://www.nxp.com/docs/en/application-note/AN5286.pdf

            Что расчёт сложнее - не аргумент, считать вручную или на арифмометре никто не заставляет.


            1. aabzel Автор
              14.11.2024 14:27


              1. yappari
                14.11.2024 14:27

                Неужели надо учить пользоваться впном?


                1. aabzel Автор
                  14.11.2024 14:27

                  У нас на работе VPN запрещен. Как и многое другое.


                  1. yappari
                    14.11.2024 14:27

                    Сочувствую. Но дома? Дома впн тоже запрещён?


                    1. aabzel Автор
                      14.11.2024 14:27

                      У ростелекома в Москве Tor browser не работает уже больше двух лет. А Planet VPN включается раз в неделю. Наудачу. Так что едва ли я увижу вашу ссылку. Даже дома.


                      1. yappari
                        14.11.2024 14:27

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


              1. fivlabor
                14.11.2024 14:27

                В телеграмм ссылку копируете, например, в чат "сохраненные сообщения" и появляется "предпросмотр" откуда pdf уже можно скачать


                1. aabzel Автор
                  14.11.2024 14:27

                  Гениально! Благодарю Вас @fivlabor за этот трюк. Кто бы мог подумать, что есть такая вот лазейка...


    1. randomsimplenumber
      14.11.2024 14:27

      И не нужны ни угольники, ни стенды.

      Но тогда придется задействовать не математику за 7 класс по классификации NATO, а линейную алгебру за 2 курс по классификации ВОЗ.


  1. northzen
    14.11.2024 14:27

    Эх, если бы линейная алгебра и векторные вычисления бы существовали...


  1. randomsimplenumber
    14.11.2024 14:27

    Няп, калибровка по 6 измерениям, как доктор вендор прописал, позволяет компенсировать кривизну стенда А калибровка по 2 направлениям экономит 5 секунд времени.


    1. Andy_U
      14.11.2024 14:27

      Да почему 6? 9 как минимум. Да и то вы не разделите кривизну стенда и кривизну припайки микросхемы к плате.


      1. randomsimplenumber
        14.11.2024 14:27

        Я исхожу из того, что вендор, наверное, что то знает о своем продукте. Если по документации достаточно 6 измерений, то 9 ничего не добавят, кроме сложности.


        1. Andy_U
          14.11.2024 14:27

          Я исхожу из того, что вендор, наверное, что то знает о своем продукте. Если по документации достаточно 6 измерений, то 9 ничего не добавят, кроме сложности.

          Вопрос в требуемой точности. Если нет никаких требований, то вообще можно не калибровать.

          И еще, как бы мы не понимали под измерением разные вещи. Я считаю измерения величины трех сигналов от микросхемы при заданном пространственном ее положении за три скалярных измерения. А вы?


  1. kuzzdra
    14.11.2024 14:27

    Не хватает самого важного: чего достигнуто в результате?

    Скрытый текст

    Раньше калибровкой занимался целый отдел ДТН с логарифмическими линейками, а сейчас это делает уборщица?