Привет хабр — в этой статье я собираюсь поделиться своими успехами в освоении ПЛИС Altera Cyclone III. После мигания лампочками и игр со счетчиками — решил сделать что то более серьезное. Сделал я простейший VGA адаптер. Об основных его частях и пойдет речь. Статья больше ориентирована на начинающих, так как для опытных эта задача не составит труда, но для освоения, на мой взгляд — хорошая тренировочная задача. Эксперименты я свои провожу на отладочной плате Altera DE0. Описывать схему я буду на Verilog, Среда — Quartus II v 12.0. Итак — добро пожаловать под кат:
Болгарская компания Olimex на днях представила мини-ПК, который получил название OLinuXino. На первый взгляд, OLinuXino очень похож на своего «коллегу», Raspberry Pi. Но у болгарского мини-ПК более быстрый процессор, больше портов, плюс весь этот проект полностью соответствует стандарту open-source, включая как железо, так и программное обеспечение.
— Ты пил пиво, — тихо заговорил Джо. — Плохо работал консервный нож.
Ты сказал, что сам смастеришь консервный нож, побольше и получше. Это я и есть.
Генри Каттнер, «Робот-зазнайка»
Кто-бы мог подумать, что мы своими руками сможем разработать такую красавицу и умницу. Мало того — не просто разработать на бумаге, а ещё и получить десяток работающих образцов.
Картинка Для Привлечения Внимания
Пролог
Давным-давно мы с коллегой начали заниматься управлением через Интернет всякими штуковинами типа вебкамер и маленьких машинок. Чуть позже у нас появились ездящие девайсы посерьёзнее, способные нести на борту свой контроллер и ёмкую батарею. К тому же я увлёкся всякими летающими штуковинами — самолётами и коптерами, что внесло дополнительную лепту в список хотелок.
Не покидала мысль о том что хорошо бы сделать видео не «вид сбоку или сверху», а вид с борта девайса, от первого лица. То что самолётчики/коптеристы называют FPV. Было это примерно пару лет назад. Пробовали ставить на машинку аналоговую камеру и передатчик, принимали видео на ТВ-тюнер, далее отдавали на видеосервер для раздачи рулящим машинками. Но сразу всплыли нюансы — одновременно можно транслировать только 3-4 видеопотока, иначе появляются наводки с одного канала на другой. Плюс дороговизна такого решения, плюс проблемы с разрешёнными частотами, плюс паршивое качество картинки с постоянно появляющимися помехами… В общем, попробовали и забили на это дело. К тому же, возможностей управляющего контроллера (тогда всё было сделано на базе всем известной Ардуинки) начало нехватать. Стали искать другие варианты, чтоб было недорого, дёшево, удобно и практично. Но имеющиеся в продаже (за границей, само собой и с довольно высокой стомостью) на тот момент железки для нужд не подходили. Одни умели всё кроме видео, другие умели только видео, но не позволяли подключать периферию, и т.д. и т.п.
Роль компьютеров в «королевских гонках» вряд ли сложно недооценить. Шутка ли: без лэптопа сегодня вы даже не сможете завести болид. Да, это уже совершенно другой спорт, совсем не такой, каким его представляли в 50-х. IT-технологии проникли в каждый уголок этого невероятного спорта, создав машины, похожие на истребители, и сделав из водителей настоящих пилотов. Только представьте себе: внушительные суперкомпьютеры размером с несколько холодильников, позволяющие инженерам перебрать десятки вариантов конструкций любого узла за считанные часы и выбрать лучший, который и отправится на «распечатку». Мобильные сервера, развёрнутые в «походных» ЦОДах, пуленепробиваемые ноутбуки, гигабайты данных, курсирующие через полмира уже спустя несколько миллисекунд после того, как были собраны с сотен датчиков болида. Всё это — реальный мир Формулы 1. А знаете, что ещё очень важно в этом виде спорта? Команда. И сегодня мы хотим рассказать о том, как команды Dell и Intel помогли команде Caterham достойно войти в удивительный мир гонок F1.
Перед вами оригинальный снимок, без обработки в фоторедакторе или применения каких-то художественных эффектов. Исключительно точное документальное фото. Только это не картина одного момента, как в обычной фотографии. В кадре вместились события, которые происходили в течение около 30 секунд на промежутке пространства шириной 1 пиксел. Снимок сделан методом щелевой фотографии.
Алгоритм Particle Filter замечателен своей простотой и интуитивной понятностью. Предлагаю собственный вариант его использования в задаче стереоскопического зрения для сопоставления «одной и той же точки» на двух изображениях — с левой и правой камеры. Для реализации (исключительно в целях развлечения) использован Python с библиотеками numpy (матричные вычисления) и pygame (графика и обработка событий мышки). Сам алгоритм Particle Filter без изменений взят из курса Programming a Robotic Car на Udacity. Меня извиняет лишь то, что я честно прослушал весь курс и сделал все домашние работы, включая и реализацию этого алгоритма.
В задаче стереоскопического зрения нужно сопоставлять малые области (например, 8х8 пикселей) на левом и правом кадре. При идеальном расположении камер строго горизонтально, зная разность координаты по оси Х одинаковой области между левым и правым кадром, можно вычислить расстояние до объекта, который изображен в этой области. Понимаю, что звучит запутанно, но на самом деле это легко выводится простейшими геометрическими построениями по правилу подобных треугольников. Например, на видео с недостроенной колокольней, мы видим уходящий вдаль забор с одинаковыми ромбами. Ближний к нам ромб наиболее сильно смещен на правом кадре относительно левого, следующий — чуть меньше и т.д.
Стандартная схема решения такой задачи довольно тяжелая в вычислительном плане. Нужно откалибровать погрешности взаимного расположения камер так, чтобы гарантировать, что горизонтальная линия с координатой Y на левом кадре точно соответствует горизонтали с той же координатой на правом кадре. Затем сопоставить каждой точке (или области ) вдоль горизонтальной линии на левом кадре наилучшую точку на правом кадре (это решается, например, методом динамического программирования, имеющем квадратическую сложность). Тогда у нас будут вычислены смещения по Ох для каждой точки вдоль рассматриваемой горизонтали. И повторить процедуру для каждой горизонтальной линии. Немного сложновато, и уж совсем не похоже на то, как это работает в мозге (мы ведь знаем это, правда?)
Посмотрите, как алгорим Particle Filter решает эту же задачу. На мой взгляд, это очень похоже на биологическую модель, по крайней мере имитируются микро-движения глаза для фокусировки внимания на отдельных фрагментах изображения, и учитывается «предыстория» таких микро-движений.
Во время спасательных и поисковых операций спастелям жизненно важно всегда чётко представлять, в какой части здания они находятся, каковы кратчайшие пути эвакуации, какие помещения уже обследованы и где в эту секунду работают их коллеги. Особенно остро эта задача стоит при пожаре и задымлении. В MIT создали индивидуальную систему автоматического построения карты помещения, которая позволяет спасателю всегда знать, где он находится.
Часть 1
Вчера я рассказал, как собрать USB-IRPC на основе Arduino. Зачем? Чтобы показать, как быстро собрать макет и сложности особой тут нет.
Сегодня сделаем все как положено. С самого начала — с принципиальной схемы, PCB, ЛУТ. Кусочек фольгированного стеклотекстолита превратим с помощью кучки деталек в готовое устройство. Разумеется с корпусом, мы же хотим аккуратно, правда?
Вот наша цель:
«USB-IRPC Bare Front»
«USB-IRPC Finished»
Собрать робота, заказав готовый конструктор на каком – нибудь сайте дело не хитрое. Соединил разъемы по инструкции, скрутил винты и гайки, минимум пайки, чудо устройство готово!
Однако мы не ищем легких путей, и для того чтобы пройти все круги ада, поняв, как же работает вся электроника, взаимодействие модулей, движение механики; что еще коварнее – рассчитать все это средствами ТАУ, идентификации, термеха, это верх мастерства. Почему? Да потому что при очередной неисправности Вы не забросите своего питомца на верхнюю полку, а как минимум попытаетесь разобраться, а максимум – исправите эту неисправность. Но, что еще интересней Вы сможете сделать апгрейд вашего киборга до действительно стоящего аппарата.
Окончив институт и устроившись на работу, я осознал, что совершенно не создан для офисной или выездной работы, четких распорядков, начальников и прочей рутины. А ходить на работу каждый день было ну совсем невыносимо. Хватило меня на пол года :) Потому, несмотря на не пыльную работу, весьма высокую зарплату, а по меркам вчерашнего студента, так вообще шикарную, я дождался первого же срача с начальством и красиво хлопнул дверью. С тех пор развлекаю себя сам и доволен жизнью. О нюансах вольной жизни бывшего фрилансера электронщика я и хочу поведать в этом посте.
Все нижеследующее это исключительно мой практический опыт и я не уверен, что у вас все получится именно так.
Бабло
Начну с самого интересного, с денег. Скажем так, под конец моей деятельности (примерно 2010), не особо напрягаясь, работая около двух-трех дней в неделю, можно было смело делать тысяч по 50-70 рублей. Это в Челябинске. Если работать каждый день, то легко было делать от 150 тысяч рублей в месяц и более, но я для этого был слишком ленив. А теперь по порядку.
Однажды мне понадобилось связать между собой больше двух контроллеров, да еще и сделать это на довольно приличном расстоянии. В процессе гугления выбор пал на протокол ModBus в реализации поверх интерфейса RS485. Описания ModBus-а встречаются повсеместно, и в данной статье не рассматриваются. Остановимся более подробно на интерфейсе RS485.