nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

Техническое зрение в реальном времени "для бедных"

У многих мог возникнуть вопрос - зачем было столько времени возиться с процессорным ядром для ПЛИС, притом очень маленьким ядром- не проще ли было бы взять готовый микроконтроллер?

И если бы те задачи, которые мы решали с помощью этого ядра (выполнение некоего математического алгоритма, общение с пользователями по UART и через ЖК-экранчик, работа с microSD-карточкой), были единственными - то так оно и есть, пустая трата времени.

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

Потоки здесь могут получаться довольно зверскими. Так, фотоприёмная матрица 1205ХВ014, которая, скорее всего, будет стоять в готовом изделии, имеет номинальную тактовую частоту 50 МГц и посылает по два пикселя за такт, один из верхней половины активной зоны, второй - из нижней. Каждый пиксель оцифровывается в 12 бит, и мы получаем поток 1,2 ГБит/с. Удачи такое обработать на микроконтроллере :) А ПЛИС съест и не подавится!

Но пока у меня нет на руках этой матрицы и объектива для неё, нужно тренироваться на кошках, найти что-нибудь предельно дешёвое и доступное, что получится хорошо "подружить" с ПЛИС.



Я утверждаю: USB-камеры ("вебки") и IP-камеры (за кое-какими исключениями) - полный отстой, а АНАЛОГОВЫЕ КАМЕРЫ НАБЛЮДЕНИЯ ВЫСОКОЙ ЧЁТКОСТИ - наше всё, и стоят очень смешных денег :)


Проблема большинства IP-камер в том, что они проектируются с расчётом дать достаточно низкую нагрузку на сеть, чтобы можно было поставить на объект десятки, если не сотни таких камер и обойтись довольно-таки бюджетной сетью. Для реализации этого ставят очень мощный кодек, который не просто каждый кадр зажимает в некое подобие JPEG, а вовсю использует информацию между кадрами. Но чтобы её использовать - надо её набрать, поэтому имеем задержку только на кодеке в 10-20 кадров, а это уже почти секунда! Для наших задач это слишком много, хочется обеспечить реакцию в районе 200 мс, а лучше и того меньше. Ну и не говоря о том, что мы должны развернуть целый "стек технологий" у себя на ПЛИС - принимать пакеты Ethernet, отсеивать нужные, склеивать их в единый поток, декодировать хитрючие кодеки и т.д.

Есть исключения, я их пока видел только на картинках:

вот они выдают по Ethernet гигабитный несжатый поток, но цены на это по-моему просто космические. (там и ПЛИС внутри встроена, с какими-то проприетарными средствами разработки видеообработчиков из готовых блоков)

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

И остаётся, пожалуй, ещё два варианта, оба приведены на фото в начале поста.

В центре фотографии имеем "потроха" от камеры наблюдения Orient, которая целиком выглядит примерно так:


Когда-то купил её примерно за тыщу рублей, причём можно было подобрать подходящее для задачи поле зрения. Её можно переключить из формата стандартного телевизионного сигнала (CVBS) и сигнал высокой чёткости стандартов AHD, TVI или CVI. У этой конкретной камеры получается разрешение 720p, но есть более дорогие с разрешением 1080p. Эти стандарты даже проще, чем обычный CVBS в том плане, что отсутствуют хитрости с чересстрочной развёрткой, здесь она прогрессивная.

Ещё из приятного - сразу есть светодиоды подсветки, а их в задачах технического зрения можно использовать очень интересно. В моей конкретной задаче - они вспыхивают на один кадр и гаснут на следующий, благодаря чему можно из всего кадра отсеять только уголковые отражатели / катафоты. Что приятно, поскольку аналоговый сигнал идёт без задержки (скажем, она не более пары СТРОК изображения), мы можем элементарно заставить светодиоды мигать по нужному нам закону.

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

Первоначально, для работы с этими аналоговыми сигналами я поставил как быстродействующий АЦП AD9283BRS-100 (8 бит, до 100 МГц), так и селектор синхроимпульсов LM1881, и запитывал всё это безобразие первоначально от 12 вольт:



поскольку именно 12 вольт заявлено для питания таких камер.

Потом оказалось, что 12 вольт нужны только для подсветки - там стоит 3 параллельные ветви, по 6 ИК светодиодов в каждой. А вот для всего остального в камере стоит понижающий преобразователь в 3,3 вольта.

С LM1881 пришлось повозиться - она работает от 5 вольт или выше, а мне нужны были логические уровни в 3,3 вольта. Я решил поставить честно делители напряжения, и со второго раза они заработали. Я не обратил внимания, но 4 выхода данной микросхемы неравнозначны. Два из них, комбинированной и кадровой развёртки, являются двухтактными, т.е способны выдать хороший ток и "вверх", и "вниз". Два других, "чет-нечет" и "вспышки" - однотактные, с подтягивающими резисторами очень большого сопротивления. Поэтому, если посмотреть на мою схему, мощные выходы идут на делитель "1k8 - 3k3", а два других - на делитель "1k8 - 27k". Именно тогда мы получаем сигналы 3,3-вольтовой логики.

Но в итоге обнаружилось, что можно сделать селектор синхроимпульсов внутри самой ПЛИС, и такой модуль выходит весьма компактным, всего 47 ЛЭ, причём он ещё и освобождает нас от неоходимости синхронизировать выходы от LM1881 с тактовой частотой, что потребовало бы цепочек по 2-3 регистра на каждый из входов, чтобы избежать метастабильности.

Мы можем тогда вообще обойтись без 5 вольт, и запитать всё это безобразие от одного-единственного литий-ионного аккумулятора. На камеру идёт нестабилизированное напряжение напрямую с него, т.к там стоит преобразователь на 3,3 вольта. Для питания ПЛИС используем преобразователи, стоящие на отладочной плате - обычно они получают +5 вольт откуда-нибудь, но и от аккумулятора чувствуют себя вполне вольготно.

Для маленького демонстрационного макета это может оказаться очень полезным.

Другой вариант (слева на верхней фотографии) - это купить готовый модуль цифровой камеры с параллельным интерфейсом. Я взял на терраэлектронике. Параллельный интерфейс - наше спасение :) К сожалению, он потихоньку отмирает в пользу мерзопакостного MIPI CSI с безумными частотами (свыше 1 ГГц) и напрочь закрытой спецификацией, за которую запрашивают бешеные бабки.

Чем эти камеры мне не очень нравятся - объективы совсем игрушечные, и сенсор им под стать - света соберёт еле-еле, и выбора особого нет, ни по диаметру, ни по фокусному расстоянию (все сплошь широкопольные!).

Общаться с этой камерой я пока ещё не пробовал, её нужно конфигурировать по I2C, пока ещё не закапывался глубоко.


Дальше поговорим об аналоговых сигналах высокой чёткости и селекторе синхроимпульсов для них, а ещё про имитацию "джойстика" для настройки камеры.
Tags: ПЛИС, программки, работа, странные девайсы
Subscribe

Recent Posts from This Journal

  • Ремонт лыжных мостиков

    Вернулся с сегодняшнего субботника. Очень продуктивно: отремонтировали все ТРИ мостика! Правда, для этого надо было разделиться, благо народу…

  • Гетто-байк

    В субботу во время Великой Октябрьской резни бензопилой умудрился петуха сломать в велосипеде. По счастью, уже на следующий день удалось купить…

  • А всё-таки есть польза от ковариаций

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

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 11 comments

Recent Posts from This Journal

  • Ремонт лыжных мостиков

    Вернулся с сегодняшнего субботника. Очень продуктивно: отремонтировали все ТРИ мостика! Правда, для этого надо было разделиться, благо народу…

  • Гетто-байк

    В субботу во время Великой Октябрьской резни бензопилой умудрился петуха сломать в велосипеде. По счастью, уже на следующий день удалось купить…

  • А всё-таки есть польза от ковариаций

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