Category: литература

Category was added automatically. Read all entries about "литература".

Ликбез по кватернионам, часть 17 - лидарная задача

Часть 1 - история вопроса
Часть 2 - основные операции
Часть 3 - запись вращения через кватернионы
Часть 4 - кватернионы и спиноры; порядок перемножения
Часть 5 - практическая реализация поворота
Часть 5 1/2 - введение метрики, "расстояния" между поворотами
Часть 6 - поворот по кратчайшему пути
Часть 6 1/4 - кратчайший поворот в общем случае
Часть 6 2/4 - поворот, совмещающий два направления
Часть 6 3/4 - кватернион из синуса и косинуса угла
Часть 7 - интегрирование угловых скоростей, углы Эйлера-Крылова
Часть 8 - интегрирование угловых скоростей, матрицы поворота
Часть 8 1/2 - ортонормирование матрицы и уравнения Пуассона
Часть 9 - интегрирование угловых скоростей с помощью кватернионов
Часть 10 - интегрирование угловых скоростей, методы 2-го порядка
Часть 10 1/2 - интегрирование с поддержанием нормы
Часть 11 - интегрирование угловых скоростей, методы высших порядков (в разработке)
Часть 12 - навигационная задача
Часть 13 - Дэвенпорт берёт след!
Часть 14 - линейный метод Мортари-Маркли
Часть 15 - среднее от двух кватернионов
Часть 15 1/2 - проверка и усреднение кватернионов
Часть 16 - разложение кватерниона на повороты
Часть 17 - лидарная задача

У данной задачи много имён. В английской литературе встретил Absolute orientation, Point set registration, а также Point cloud registration, scan matching.

Суть вот в чём: имеется твёрдое тело, на котором жёстко расположено N точек. Введена некая система координат, также жёстко связанная с этим твёрдым телом, и даны координаты N точек в этой системе, rk (rkx,rky,rkz), от слова reference - "эталонный".

А далее мы измерили координаты этих N точек в другой системе координат, mk (mkx,mky,mkz), от слова measured - "измеренный".

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

Я столкнулся с этой задачей в связи с юстировкой прибора, с использованием лазерного трекера. Лазерный трекер - это "адская смесь" дальномера и теодолита: наводишь его на определённую точку, он измеряет два угла (азимут и угол места), дальность и автоматически преобразует это в трёхмерные координаты точки, получая точность лучше десятых долей миллиметра. С его помощью можно узнать координаты всех моих уголковых отражателей, а потом координаты неких характерных точек моего прибора, и затем, дважды решив рассмотренную здесь задачу - узнать, что должен показать мой прибор, будучи идеально откалиброванным.

Подозреваю, что где-то в программном обеспечении для лазерного трекера данная задача давным-давно "зашита", вместе с решением, но точно сказать не могу - "зависит от комплектации", а приобретать такой приборчик себе точно не буду по причине его запредельной цены. Пока знаю лишь, что такой наличествует у РКК Энергия, и нынче они практически отказались от более классических измерительных приборов вроде автотеодолита и плоских зеркал, наклеиваемых на различные части космического аппарата.


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

Collapse )

В следующей части (которая в книге "уползёт" в упражнения и ответы к ним) попробую всё это применить "на практике".
QuatCore

atan на ЧЕТЫРЁХ умножениях

Мишка такой человек — ему обязательно надо, чтоб от всего была польза. Когда у него бывают лишние деньги, он идёт в магазин и покупает какую-нибудь полезную книжку. Один раз он купил книгу, которая называется «Обратные тригонометрические функции и полиномы Чебышева». Конечно, он ни слова в этой книжке не понял и решил прочитать её потом, когда немножко поумнеет. С тех пор эта книга лежит у него на полке — ждёт, когда он поумнеет.
Николай Носов, "Весёлая семейка"


Пока не стал пытаться ещё сильнее оптимизировать коэффициенты для арктангенса на ДВУХ умножениях, поскольку подозреваю, что чудес не бывает - какие-то проценты ещё можно выжать, но мне бы хотелось повысить точность НА ПОРЯДОК. Так что, скрепя сердце, добавил ещё одно слагаемое и нашёл коэффициенты с помощью интерполяции по узлам Чебышёва.

Получил такой результат:



Напомню: мы имеем дело уже с отнормированным вектором, т.е x2+y2=1, и это офигительно упрощает дело! Плюс две формулы приведения, сначала к x≥0, затем к x≥|y|, т.е к углам от -45° до +45°.

В таких условиях данная формула даёт ошибку не более 4,9 угловой секунды! Этого более, чем достаточно для наших 16-битных вычислений, где цена младшего разряда углов составляет 12 угловых секунд.

График ошибки:


И в отличие от того нашего алгоритма с поворотами комплексных чисел, тут и вычислительных ошибок может набраться сильно меньше, за счёт 32-битного аккумулятора и "байпаса".

Collapse )

Наверное, так в итоге и сделаю. Ну, ещё сейчас надо глянуть, не слишком ли криво формулы приведения ложатся, надеюсь, что как-нибудь ляжет, может прям через i^k и регистр Inv, они же позволяют поменять два значения местами "виртуально", а также знаки поменять, не прибегая к убийственным ветвлениям... Забавно, как старая реализация, практически дошедшая до железа, устарела ещё до того, как хоть раз заработала. А всё потому, что МИША ПОУМНЕЛ.

Ещё забавно, что на вычислительной математике, на втором курсе, нам рассказывали, что интерполировать иногда лучше не через равные интервалы, а по узлам Чебышёва, но не стали особенно подчёркивать факт, НАСКОЛЬКО ЭТО КРУЧЕ! Даже тот пример, что был там приведён, оказывался каким-то беззубым - там что в лоб, что по лбу - примерно одно и то же получалось. Ну ладно, лучше поздно, чем никогда :)
Sidious

Новая ошибка HTTP

В продолжение о машине голосования и её код-ревью

Недавно Mozilla сделала "программное заявление", что банить в соцсетях это очень демократично и инклюзивно, но ЭТО ТОЛЬКО НАЧАЛО (We need more than deplatforming)

Правда, они не особенно распространялись, какие именно шаги собираются сделать. Но кое-чего всплыло: их больше всего пугает, что НАРОД ВСПОМНИТ О ВЕБЕ 1.0, где ты заводишь собственный сайтик с гостевой книгой - и совершенно спокойно пишешь там всё, что захочется, и никакой цукерберг тебя не остановит, и даже безос удавится от злости, не в силах отключить ваш небольшой веб-сервер, крутящийся на домашнем сервере - вот же дикари, AWS же есть! Мы вам скидку дадим!

Так что готовятся изменения веб-протоколов, чтобы и самые обычные веб-странички в любой момент можно было "отфильтровать" независимо от того, где они сидят. Конкретное исполнение пока ещё не определено, однако новую ошибку HTTP они под это уже зарезервировали:



Хм, только сейчас сообразил, что 2020 = 404 * 5, и это многое объясняет :) (да, я знаю что forbidden это 403, но я в целом про весёлый год, а 404 куда известнее)

[На всякий случай]
Ошибка 2020: "За Байдена!" - это шутка, по крайней мере на данный момент. Подумалось просто, фамилия говорящая получается, характеризующая, что будет дальше.

А вот заявление Мозиллы - это чистая правда...
slow loris

Учение не создал, учеников разбазарил

Зато успешно переквалифицировался в понтифики, что дословно означает "строители мостов" :)

И постиг таинство, как из простых логических элементов, сумматоров, триггеров, мультиплексоров и т.д. собирается процессор! Как-то во многих книжках этот момент упускается - вот чрезвычайно подробно рассматриваются всякие дизьюнктивные и коньюнктивные нормальные формы, диаграммы Карно, всё разнообразие триггеров, а через некоторое время - оп-па "узлы вычислительных устройств", где процессор - это уже готовая штука, и рассказывается лишь как к нему всё подключать.

Ещё бы сейчас закончить свой проект - и пойти в отпуск, а то с августа 2019 года в отпуске не был, разве что месяц на самоизоляции на даче, но там я вкалывал вовсю, по-моему самую сложную часть сделал именно там, в полном сосредоточении и невообразимой тишине :)

А потом ещё книжку о кватернионах всё-таки дописать и сдать в печать - и жизнь потихоньку начнёт удаваться.


Отмечать день рождения собираюсь в пятницу вечером 30 октября, с 19:00, ориентировочно в кафе "Кулибин", если только они не закрылись, проверю.

А потом в воскресенье, 1-го ноября, уже дома, где-нибудь с 2 часов дня. Пишите в личку!
QuatCore

Проверяем "библиотеки" и вывод чисел в десятичной форме

Для начала мы ещё чуть доработали компилятор: он должен вести список файлов, которые он прочитал (т.е основной + все, загруженные через %include) и понимать, к какому из них относится текущая обрабатываемая строка, чтобы в сообщении об ошибке сказать, в каком файле эта ошибка.

Для вчерашнего примера TestBCD.asm, которая подключает Win1251.inc и QuatCoreConsts.inc, а также print.asm (в свою очередь подключающий QuatCoreConsts.inc) и Bin2Bcd.asm, мы получили успешную компиляцию - раньше мы получали жалобы на повторное определение метки UART (из QuatCoreConsts.inc) и пр. Сейчас повторно QuatCoreConsts.inc не подключается, что не может не радовать.

Единственно предупреждение, что мы получили, касается Hazard'ов:

Обрабатываем файл TestBin2BcdLib.asm
Конфликт (Hazard) между командами [SP+1] и [SP], файл Bin2Bcd.asm, процедура BetterBin2Bcd, строки:
				[SP+1]	0
				Acc	[SP]
Вставляем NOP


Да, теперь указывается не только процедура, но и файл, что упростит нам жизнь.

Надо попробовать убрать этот Hazard - и прошить всё это в ПЛИС!

Collapse )


С первого раза :)

Дальше на очереди - прошить программу обнаружения точек с выводом результатов работы по UART. Вот это и называется "Стремительным домкратом".

UPD. Ещё сделали файлик SetClock.asm с кодом для настройки тактовой частоты в 25 МГц. Подключили его в самом начале процедуры main. Всё в порядке, выдаёт то же самое, но на скорости 921 600.
QuatCore

Создание библиотек - QuatCore style

Настаёт время соединить толпу ранее написанного кода: обнаружение точек, аффинный алгоритм и процедуры для вывода в терминал или на ЖК-экранчик в "удобочитаемом виде".

И что-то мне кажется, пора уже не копипастить всё это в один файл, а попытаться всё-таки написать "библиотеки" с наиболее часто используемыми функциями - и подключать их к файлу.

Пока что мне кажется, что для этого достаточно уже имеющихся возможностей компилятора QuatCore, а именно простейшей директивы %include...

Collapse )
PhysUnitCalc

TeX-калькулятор?

Очень давно не занимался своим PhysUnitCalc, и не знаю, когда займусь - без того дела есть. Но сейчас вдруг новая идея оформилась:

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

Скажем, вбиваешь в окошке

\frac{1}{\sqrt{3}}


а тебе выдаётся ответ:


(Кстати, недавно узнал: если нужно, чтобы после запятой в формуле не делался отступ, проще всего заключить её в фигурные скобки. Пока книжку верстали, использовали более злой синтаксис)

Мельком посмотрел - пока такого не увидел. Есть онлайн-калькуляторы, которые как-то реагируют на этот синтаксис, но пытаются прямо на ходу его строить, так что гляди в оба, как \frac сразу же стал дробной чертой, и теперь вместо фигурных скобок пиши наверху, потом пиши внизу, перемещаясь стрелочками и пр.

Есть примочка для TeX, которая делает какие-то вычисления в процессе формирования документа, но это совсем другое применение.

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

Ну и с размерностями, чего уж там, понравилось мне это дело.

Радиофизика и электроника для начинающих - 2-е издание

Хорошая новость - первое издание "Радиофизики и электроники для начинающих" за авторством 2born и вашего покорного слуги было раскуплено целиком, и сейчас было напечатано 2-е издание, исправленное и дополненное.



И оно уже в продаже.

Дополнений не так уж много - буквально на страницу-другую, ну и очепятки были замучены.

Спешите приобрести!

Сказки роботов о настоящем человеке

Побывал в субботу на этом спектакле - просто восторг!

Всем поклонникам роботов и творчества Станислава Лема - смотреть обязательно.

Как оно примерно выглядит, можно посмотреть в этом 23-минутном ролике, но сам спектакль длится около часа, и не ограничивается одной лишь сказкой о королевиче Ферриции и королевне Кристалле.


Collapse )

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

Чаще всего они выступают в центре драматургии и режиссуры на беговой:
http://teatrcdr.ru/skazki-robotov-o-nastoyashhem-cheloveke/

Ближайший спектакль - сегодня в 18:00, остался аж 1 билет, может какой счастливчик сейчас прибежит!?

Следующие - 1 декабря, 13 и 27 января в 18:00.

Если кто хочет пойти - напишите, пожалуйста, может вместе сходим.

UPD. Голливудский трейлер:


и механический трейлер:


UPD2. Спектакль и детям должен понравиться, по кр. мере с 8 лет, как и указывается в афише.

Ликбез по кватернионам, часть 13: Дэвенпорт берёт след!

Часть 1 - история вопроса
Часть 2 - основные операции
Часть 3 - запись вращения через кватернионы
Часть 4 - кватернионы и спиноры; порядок перемножения
Часть 5 - практическая реализация поворота
Часть 5 1/2 - введение метрики, "расстояния" между поворотами
Часть 6 - поворот по кратчайшему пути
Часть 6 1/4 - кратчайший поворот в общем случае
Часть 6 2/4 - поворот, совмещающий два направления
Часть 6 3/4 - кватернион из синуса и косинуса угла
Часть 7 - интегрирование угловых скоростей, углы Эйлера-Крылова
Часть 8 - интегрирование угловых скоростей, матрицы поворота
Часть 8 1/2 - ортонормирование матрицы и уравнения Пуассона
Часть 9 - интегрирование угловых скоростей с помощью кватернионов
Часть 10 - интегрирование угловых скоростей, методы 2-го порядка
Часть 10 1/2 - интегрирование с поддержанием нормы
Часть 11 - интегрирование угловых скоростей, методы высших порядков (в разработке)
Часть 12 - навигационная задача
Часть 13 - Дэвенпорт берёт след!
Часть 14 - линейный метод Мортари-Маркли
Часть 15 - среднее от двух кватернионов
Часть 15 1/2 - проверка и усреднение кватернионов
Часть 16 - разложение кватерниона на повороты

Не зря эта часть 13-я по счёту: она самая сложная, но дело того стоит. Освоив её, вы сможете без особенных проблем осилить 90% всей литературы по астронавигации. Это и есть всем известные тернии, через которые лежит дорога к звёздам!

Итак:

Дэвенпорт берёт след!

Дойдя до 13-й части «ликбеза по кватернионам» читатель вправе предположить: и в навигационной задаче кватернионы должны быть полезны! Действительно, львиная доля всех методов, которые применяются для решения данной задачи, используют кватернионы, и все опираются на труд Дэвенпорта, который, однако, так и не был по-нормальному опубликован. Как правило, все ссылаются на доклад «Для служебного пользования» [A Vector Approach to the Algebra of Rotations with Applications by Paul B. Davenport, Goddard Space Flight Center, Greenbelt, Md, 1968]. Уже название немножко смущает – почему же это «векторный подход», если он должен быть кватернионным?

Оказывается, начальник Дэвенпорта на дух не переносил двух вещей: кватернионов и фильтры Калмана, и, в общем-то, его можно понять. И те, и другие только начинали свой путь в космическую технику, и амбиции были гораздо выше реальных результатов. Математики били себя кулаком в грудь – «фильтр Калмана из любого мусора получит точные измерения», «кватернионы – самый естественный способ описания вращения», но оказывалось, что принцип «мусор на входе – мусор на выходе» никто не отменял, а всем причастным куда как ближе по духу были курс-крен-тангаж, а не «эти ваши кватернионы».

Collapse )

В следующей части: Линейный (!) метод Мортари-Маркли.