nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

О "переходном процессе" в видеоизмерителе параметров сближения

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

50mm_without.png

И говорил: "выброс" в районе 15 метров - это переходный процесс, когда мы с работы по мишеням дальней дистанции переходим на мишень ближней дистанции.

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


Так что пришло время разобраться, что же там творится. Оказалось, это вовсе не переходный процесс...


Первым делом я попытался снизить "скорость сближения" - подкорректировал модель, чтобы можно было её задать. Если раньше я себе моделировал "наихудший случай", где с 30 метров сближение идёт на 0,2 м/с, то теперь снизил скорость аж до 0,01 м/с, в надежде, что картинка будет меняться очень медленно, и алгоритм сопровождение успеет "втянуться" в правильное решение. Он итеративный, вот я и подумал, он "не поспевает" за меняющейся обстановкой.

Но как ни странно, график от этого не поменялся ни на йоту. Также он не шибко поменялся, когда я включил флажок "использовать 2 итерации на каждом кадре", хотя казалось бы, и это должно было помочь, весь этот выброс как минимум стянуть в тоненький пичок где-то на 15 метрах, за которым уже последует точная работа. (Небольшие выбросы, в 1-2 кадра, ещё допустимы, особенно если мы напишем, что нихрена не поняли на этом кадре, а это мы можем написать, проверив "невязку")

Далее, я стал искать ошибку у себя в программе, в конце концов, недавно пришлось вносить в неё изменения, убирать некоторый "хардкод", типа массива точек, где первые 15 заведомо означали мишени дальней дистанции (по 5 точек на каждую), и при замене 5 уголковых отражателей на 7 пришлось такого рода "магические числа" оттуда убирать:


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

Но потом, когда начал задумываться о целочисленной реализации на 16-битном QuatCore, понял: начало координат (по крайней мере, в "потрохах" вычислительных алгоритмов) надо всё-таки поместить в центр МИШЕНИ БЛИЖНЕЙ ДИСТАНЦИИ, потому как иначе, для задания позиции каждого уголка с точностью хотя бы 0,1 мм (а лучше бы и того точнее, чтобы "было где" накапливаться ошибкам вычислений при поворотах этих векторов с помощью кватернионов) нам гарантированно не хватило бы 16 бит, т.к отступ вверх на 848 мм, при нашей "основной единице" в 1 метр, заставил бы выбрать числа формата Q1.15 (от -1 до 1-2-15) с ценой младшего разряда 0,03 мм. Кое-где это уже начинало чувствоваться, поэтому начало координат было перенесено...

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

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


По величине всё в порядке: эти углы должны измеряться с погрешностью не более 0,1°, а здесь оно и до 0,03° не доходит. Тем не менее, в старой мишени тут вообще всё шло в виде совсем небольшого случайного шума вблизи нуля, а тут мы наблюдаем интересную картину, особенно, по тангажу, который в "злополучном" регионе меняется ступенчато.

Следующий график: ошибки измерения дальности.


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

И наконец, рассмотрим 3 компонента кватерниона взаимной ориентации, чтобы сообразить, по какому из углов у нас происходит ошибка:


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

Методом пристального взгляда на всё это безобразие, я предположил, что новая мишень чересчур симметрична, и это сыграло с нами злую шутку!

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


Ну, кстати, и здесь "выброс" есть, но не такой зверский...

У той, старой мишени, один из уголков был намерено сдвинут на 5 мм, чтобы создать асимметрию. Как считалось, это позволит нам понять, смотрим ли мы на мишень правильно, или она перевёрнута на 180 градусов.

Здесь же мишени придали зеркальную симметрию: если её отразить вокруг "вертикальной" линии, она останется неизменной.


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

Что, если в такой мишени присутствует неоднозначность, и можно в точности такую же картинку получить при других углах и дальности???

Чтобы проверить это, я не нашёл ничего лучше, как всю эту "математику" пересчитать в экселе. Начал с координат всех 8 уголковых отражателей, в миллиметрах (ось X - "на нас", ось Y - "вправо", ось Z - "вверх"):


Затем "спроецировал" их на экран, по формулам
,


Здесь индекс f значит focal, "фокальная плоскость". tx, ty - компоненты вектора параллельного переноса, задающего положение камеры относительно мишени. В данном случае она стоит чуть меньше чем в 15 метрах от мишени, и сдвинута влево, поскольку это наш "левый глаз". Ответ эти формулы дают примерно в радианах (хотя на больших углах не помешало бы арктангенс взять, но тут у нас всё меньше градуса), а мы переводим в градусы, так оно понятнее до сих пор. Поле зрения нашей камеры: 12 градусов по горизонтали и столько же по вертикали. (ШТАТНОЙ камеры, а не той, что в макете)



Теперь попробуем получить ровно те же координаты точек, взяв те параметры сближения, что намерил нам алгоритм, а именно:
пассивный тангаж -2,1967°, пассивный курс -1,2319°, крен 0° (он не активный и не пассивный - по сути ВЗАИМНЫЙ крен. Вообще, и он был не нулевой, но попытаемся им пренебречь...), дальность 14,9204 метра (вместо "реальной" дальности 14,94288 метра), активный курс 0,0011° и активный тангаж 0,00018°.

Сначала повернём по углу пассивного тангажа:


Координата Y ("вправо") здесь остаётся неизменной, меняются только X и Z. Положительным углом тангажа (поскольку он взят из кватерниона взаимной ориентации) назовём такой, который крутит по часовой стрелке, если смотреть из начала вектора Y в сторону его "стрелочки". При этом, если вынесенный вперёд уголок (т.е X>0) имел нулевую координату Z, он должен опуститься вниз, т.е получить отрицательную координату. И наоборот, если X=0 и Z>0, то должно получиться X>0. Исходя из этого подбираем знаки:




Затем повернём по углу пассивного курса:


Здесь не меняется высота, Z. Положительным направлением курса называем такое, которое поворачивает по часовой стрелке, если из начала вектора Z (идущего "вверх") взглянуть на его "стрелочку". То есть, вынесенный вперёд уголок при положительном курсе должен повернуться вправо, приобретя положительное значение Y. Отсюда расставляем знаки:




Понятно, мы сейчас филькин труд делаем, вообще таким способом поворачивать, когда кватернион есть - категорически не стоит! Но хотелось пойти совсем напролом, чтобы не осталось сомнений, как оно всё фурычит! Здесь проблем с порядком поворотов не ожидается - всё-таки они очень малы.

И теперь снова "проецируем точки на фотоприёмную матрицу", только теперь с другой дальностью:


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



На первый взгляд может показаться, что действительно картинки почти совпадают - ошибка не более 1/3 пикселя. Но на самом деле, мы должны довольно чётко чувствовать смещение на 1/10 пикселя, если не на 1/20, так что принципиальной неоднозначности мы здесь не увидели!

Собственно, когда мы поворачиваем мишень по тангажу на 2,2 градуса, самый явный эффект - когда вынесенный вперёд уголок уходит вверх аж на 2,3 миллиметра. При взгляде с 15 метров, это приводит к смещению точки на 0,0088°. Небольшое значение, но при матрице 1024х1024, где 1024 пикселям соответствует 24 градуса, это получается смещение в 0,37 пикселя. Да, из-за совместного изменения всех остальных параметров сближения это смещение чуть снизилось, аж до 0,33 пикселя, но всё равно осталось вполне заметным!

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

Но почему-то не приходим.


Продолжение следует...
Tags: ПЛИС, математика, работа, странные девайсы
Subscribe

  • Мартовское велосипедное

    Продолжаю кататься на работу и с работы на велосипеде, а также в РКК Энергию и на дачу. Хотя на две недели случился перерыв, очередная поломка,…

  • Февральское велосипедное

    Продолжаю приезжать на работу на велосипеде, а вот назад всё же сажусь в Ласточку МЦК, на две полноценные поездки в день меня пока не хватает.…

  • Вход в каске и перчатках!

    После нервного возвращения с работы 29 декабря на велосипеде устроил небольшой перерыв - добирался до работы на метро. Но на прошлой неделе заболел…

  • Лыжная прогулка Калистово-Радонеж

    В воскресенье прокатились на лыжах, бензопилу брать не стал, самочувствие было не очень. Конечно, самую малость пожалел об этом - всегда есть что…

  • Зимний водопровод, динамо и макет

    В эти выходные так и не открыл лыжный сезон, хотя мог. Зато впервые наладил холодную и горячую воду на даче ЗИМОЙ, в минусовую температуру! И…

  • Продолжим покатушки

    Велосипед снова "на ходу". Выточил нового "петуха" из той заготовки. Хехе, я на работе. Чего-то количество велосипедистов поредело, летом здесь…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 3 comments