?

Log in

No account? Create an account

Ликбез по кватернионам, часть 15 1/2 - проверка и усреднение кватернионов
nabbla1
Часть 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-го порядка
Часть 11 - интегрирование угловых скоростей, методы высших порядков (в разработке)
Часть 12 - навигационная задача
Часть 13 - Дэвенпорт берёт след!
Часть 14 - линейный метод Мортари-Маркли
Часть 15 - среднее от двух кватернионов
Часть 15 1/2 - проверка и усреднение кватернионов
Часть 16 - разложение кватерниона на повороты

Мехмат МГУ отзывает 500 000 своих выпускников. Причина отзыва: во втором томе Фихтенгольца на странице 187 в формуле XVIII.56 отсутствует нормирующий оператор


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

Методика "проверки на вшивость" и усреднения, приведённая в конце части 15, хорошо работает, если мы задаём достаточно большой допустимый угол рассогласования, хотя бы 10° и выше. В таком случае, cos(10°/2)=0,996, при проверке мы будем по сути смотреть на 3-й значащий разряд, который будет представлен с хорошей точностью.

Но если у нас речь идёт о точности в 1° или 0,1° или ещё лучше (что для звёздных датчиков и систем стыковки совсем не редкость!), то такой метод будет раз за разом ошибаться, иногда отбраковывая вполне себе корректные кватернионы (действительно отличающиеся менее чем на 0,1°), а иногда пропуская откровенный мусор. Причина, как всегда, очень проста: подсчитывая скалярное произведение кватернионов близких поворотов, мы будем получать значения, очень близкие к 1 или -1, и сравнивать их с cos(α/2)≈1-α2/8, поэтому и плохая нормировка (в том числе из-за непредставимости правильно нормированного кватерниона в имеющейся разрядной сетке), и ошибки вычислений способны полностью забить собой "полезный сигнал", выражающий угол.

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

Read more...Collapse )

Раздалбываем компрессор холодильника
nabbla1
Около месяца назад у холодильника Stinol 102, купленного в 1997 году, накрылся компрессор: в пусковой обмотке обрыв, в рабочей где-то нарушена изоляция, из-за чего её сопротивление 9 Ом, сильно меньше, чем у соседнего, рабочего компрессора. (номинал 13 Ом).

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

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



Read more...Collapse )

Ликбез по кватернионам, часть 16: разложение кватерниона на повороты
nabbla1
Часть 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-го порядка
Часть 11 - интегрирование угловых скоростей, методы высших порядков (в разработке)
Часть 12 - навигационная задача
Часть 13 - Дэвенпорт берёт след!
Часть 14 - линейный метод Мортари-Маркли
Часть 15 - среднее от двух кватернионов
Часть 15 1/2 - проверка и усреднение кватернионов
Часть 16 - разложение кватерниона на повороты

Могло сложиться впечатление, что кватернионы – «вещь в себе». Мы зачем-то их обрабатываем, получая из одних кватернионов другие кватернионы, или строя кватернионы из набора векторов (как в главах 6,9-14), но читатель вправе задать вопрос – а зачем это всё вообще надо? На табло кватернион не покажешь (показать можно, но не поймут), на двигатель не подашь, даже опорно-поворотное устройство нас не поймёт.

Вопрос вполне законный, это упущение автора, связанное со спецификой его работы.

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

В другой разработке самой задачей прибора является выдать кватернион, а что с ним дальше будут делать – не наше дело.


Наверное, поэтому в этом ликбезе много посвящено измерительной части, но «просела» исполнительная часть – как правильно распорядиться кватернионом!

Основной способ приведения кватерниона назад, к «осязаемым» величинам – через преобразование (поворот) векторов. В конце концов, мы можем брать произвольный вектор и смотреть – куда он повернётся, и уже на основе преобразованных координат определять, что нам надо делать.

В этой главе мы покажем, как из кватерниона можно вычленить определённые углы, то есть разложить его на повороты вокруг заданных осей.

Read more...Collapse )

В следующей части приведём практический пример, как вообще с этим всем обращаться. Очень скучный, но познавательный.

PS. Принимаются пожелания, в каком порядке должны излагаться главы этого ликбеза. Возможно, часть из них надо переставить местами. Всякие "дополнения 3" сейчас переименую во что-то более осмысленное.

Ликбез по кватернионам, часть 15 - среднее от двух кватернионов
nabbla1
Часть 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-го порядка
Часть 11 - интегрирование угловых скоростей, методы высших порядков (в разработке)
Часть 12 - навигационная задача
Часть 13 - Дэвенпорт берёт след!
Часть 14 - линейный метод Мортари-Маркли
Часть 15 - среднее от двух кватернионов
Часть 15 1/2 - проверка и усреднение кватернионов
Часть 16 - разложение кватерниона на повороты

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

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

Вопрос: если мы считаем, что оба кватерниона Λ, Μ были выданы с одинаковой точностью, как их правильно усреднить, получить из них новый кватернион Ν, который должен шуметь меньше?

Read more...Collapse )

Спиноры в повседневной жизни
nabbla1
Спинор - это объект, который при повороте на 360° меняет своё состояние на "противоположное", и лишь поворот на 720° (то есть, два полных оборота) возвращает его в исходное состояние.

Так ведут себя фермионы, в т.ч. электроны, и ровно такое же свойство есть у кватернионов (см. кватернионы и спиноры).

В повседневной жизни такое поведение довольно редко, но иногда всё-таки встречается.

Один из самых известных примеров - лента, закреплённая с одного конца, так называемая "лента Дирака" (Dirac belt). На статичных картинках не вполне понятно, что происходит, лучше видео, особенно с красивой девушкой:



Другой пример - четырёхтактный двигатель внутреннего сгорания!



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

А третий пример, наверное, знаком вообще всем:
Read more...Collapse )

Мучаем 5576ХС4Т - часть 'h10 - передатчик сообщений МКО
nabbla1
Часть 0 - покупаем, паяем, ставим драйвера и софт
Часть 1 - что это вообще за зверь?
Часть 2 - наша первая схема!
Часть 3 - кнопочки и лампочки
Часть 4 - делитель частоты
Часть 5 - подавление дребезга кнопки
Часть 6 - заканчиваем кнопочки и лампочки
Часть 7 - счетчики и жаба
Часть 8 - передатчик UART
Часть 9 - Hello, wolf!
Часть 'hA - приёмник UART
Часть 'hB - UART и жаба
Часть 'hC - полудуплексный UART
Часть 'hD - МКО (МКИО, Mil-Std 1553) для бедных, введение
часть 'hE - приёмопередатчик МКО "из подручных материалов" (в процессе)
часть 'hF - модуль передатчика МКО
часть 'h10 - передатчик сообщений МКО

В прошлый раз мы написали код для модуля передатчика слов МКО, который автоматически менял полярность синхроимпульса: в первом слове он положительный, во всех последующих (передающихся без паузы) - отрицательный, что соответствует наиболее ходовой ситуации - сначала идёт командное/ответное слово, затем слова данных.

Сейчас дополним его модулем для передачи целых сообщений, пока что применительно к контроллеру шины.

По ходу дела задействуем ключевые слова generate / endgenerate языка verilog. Как оказывается, Quartus II их понимает и позволяет применять в модулях для синтеза.

Снова тот же скриншот, что и в прошлом посте - удобнее было отрабатывать эти модули совместно, чтобы проверить полярность синхроимпульса на следующем слове.


Read more...Collapse )

Сейчас возьму некоторый перерыв, а потом - вернёмся к аппаратной реализации приёмопередатчика МКО "из подручных средств", а затем - к модулю приёмника.

Мучаем 5576ХС4Т - часть 'hF - модуль передатчика МКО
nabbla1
Часть 0 - покупаем, паяем, ставим драйвера и софт
Часть 1 - что это вообще за зверь?
Часть 2 - наша первая схема!
Часть 3 - кнопочки и лампочки
Часть 4 - делитель частоты
Часть 5 - подавление дребезга кнопки
Часть 6 - заканчиваем кнопочки и лампочки
Часть 7 - счетчики и жаба
Часть 8 - передатчик UART
Часть 9 - Hello, wolf!
Часть 'hA - приёмник UART
Часть 'hB - UART и жаба
Часть 'hC - полудуплексный UART
Часть 'hD - МКО (МКИО, Mil-Std 1553) для бедных, введение
часть 'hE - приёмопередатчик МКО "из подручных материалов" (в процессе)
часть 'hF - модуль передатчика МКО
часть 'h10 - передатчик сообщений МКО

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

А сейчас - потихоньку приступим к написанию модулей на verilog, которые в совокупности называют протокольным контроллером МКО.

Для начала - передатчик. Один модуль будет передавать отдельные слова, второй - управлять первым для передачи целых сообщений, определённым образом размещённых в памяти.


Read more...Collapse )

Традиционная надежда: если знаете более компактный код, и если он не составляет военной или коммерческой тайны, пришлите его, пожалуйста, с меня пиво и орешки, а можно тортик.

Мучаем 5576ХС4Т, часть 'hD - МКО (МКИО, Mil-Std 1553) для бедных, введение
nabbla1
Часть 0 - покупаем, паяем, ставим драйвера и софт
Часть 1 - что это вообще за зверь?
Часть 2 - наша первая схема!
Часть 3 - кнопочки и лампочки
Часть 4 - делитель частоты
Часть 5 - подавление дребезга кнопки
Часть 6 - заканчиваем кнопочки и лампочки
Часть 7 - счетчики и жаба
Часть 8 - передатчик UART
Часть 9 - Hello, wolf!
Часть 'hA - приёмник UART
Часть 'hB - UART и жаба
Часть 'hC - полудуплексный UART
Часть 'hD - МКО (МКИО, Mil-Std 1553) для бедных, введение.
часть 'hE - приёмопередатчик МКО "из подручных материалов" (в процессе)
часть 'hF - модуль передатчика МКО
часть 'h10 - передатчик сообщений МКО

Возьмёмся, наконец, за Мультиплексный Канал (информационного) Обмена, ГОСТ Р 52070-2003 или, говоря русским языком, Mil-Std 1553B. Штука эта разработана довольно давно, в семидесятых годах, но используется до сих пор в авиации и космонавтике, причём далеко не только в России. Как говорится, работает - не лезь!

Read more...Collapse )

Мучаем 5576ХС4Т, часть 'hC - полудуплексный UART
nabbla1
Часть 0 - покупаем, паяем, ставим драйвера и софт
Часть 1 - что это вообще за зверь?
Часть 2 - наша первая схема!
Часть 3 - кнопочки и лампочки
Часть 4 - делитель частоты
Часть 5 - подавление дребезга кнопки
Часть 6 - заканчиваем кнопочки и лампочки
Часть 7 - счетчики и жаба
Часть 8 - передатчик UART
Часть 9 - Hello, wolf!
Часть 'hA - приёмник UART
Часть 'hB - UART и жаба
Часть 'hC - полудуплексный UART.
Часть 'hD - МКО (МКИО, Mil-Std 1553) для бедных, введение.
часть 'hE - приёмопередатчик МКО "из подручных материалов" (в процессе)
часть 'hF - модуль передатчика МКО
часть 'h10 - передатчик сообщений МКО



В прошлый раз мы по сути реализовали дуплексный канал обмена - приёмник и передатчик выступали как два независимых устройства, способных работать одновременно. Такая одновременная работа возможна, когда мы имеем дело с преобразователями USB в UART, наподобие cp2102, или при использовании RS232 / реального COM-порта - во всех этих случаях у нас есть отдельный провод на передачу и отдельный на приём.

RS485, с другой стороны, допускает только полудуплексный режим работы - одна и та же линия с дифференциальным сигналом попеременно передаёт данные то в одну сторону, то в другую, но уж точно не одновременно!

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

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

Ох, и доставил же он мне проблем, до 6 утра его отлаживал, зато "многое понял".

Но первым делом небольшой должок с передатчиком UART...

Read more...Collapse )

Пожалуй, с UART мы наконец-то наигрались, ужались до 46 логических ячеек на весь приёмопередатчик, пора приниматься за МКО (Mil-std 1553).

Мучаем 5576ХС4Т, часть 'hB - UART и жаба
nabbla1
Часть 0 - покупаем, паяем, ставим драйвера и софт
Часть 1 - что это вообще за зверь?
Часть 2 - наша первая схема!
Часть 3 - кнопочки и лампочки
Часть 4 - делитель частоты
Часть 5 - подавление дребезга кнопки
Часть 6 - заканчиваем кнопочки и лампочки
Часть 7 - счетчики и жаба
Часть 8 - передатчик UART
Часть 9 - Hello, wolf!
Часть 'hA - приёмник UART
Часть 'hB - UART и жаба
Часть 'hC - полудуплексный UART.
Часть 'hD - МКО (МКИО, Mil-Std 1553) для бедных, введение.
часть 'hE - приёмопередатчик МКО "из подручных материалов" (в процессе)
часть 'hF - модуль передатчика МКО
часть 'h10 - передатчик сообщений МКО



Посмотрим, к чему приведёт использование счётчиков в явном виде для приёмника UART, после чего наконец-то прошьём в ПЛИС приёмопередатчик и испытаем его.

Read more...Collapse )

В следующей части мы ещё немножко доработаем передатчик UART (к нему накопилось удивительно много претензий!), а также реализуем "полудуплексный" приёмопередатчик а-ля RS485. Всё это - разминка перед протоколом МКО.

Poll #2086785 Стиль кода на verilog

Какой стиль кода вам нравится больше всего?

Последовательная логика в явном виде (какие значения присвоить регистрам к следующему такту)
0(0.0%)
Конечный автомат: набор состояний и простыня case / if /else
2(50.0%)
"Схемотехника": соединяем между собой отдельные модули
1(25.0%)
Всё плохо
1(25.0%)