roboforum.ru

Технический форум по робототехнике.

Как оцифровать видео AVR-кой. Схема макетика и исходники.

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

Как оцифровать видео AVR-кой. Схема макетика и исходники.

Сообщение Michael_K » 19 окт 2009, 23:43

По просьбе EdGull выкладываю для желающих поизгаляться...

Исходники и хекс для AVR на GCC (пользуюсь версией 20080512) - тупая хваталка с камеры 80х60 пикселей.
Посылает данные через FTDI на комп.
Исходники и экзешник для компа на VB - ловит данные и показывает.

Картинка:
6f377835e4a8.jpg

Схема:
sch.GIF


Питание 5 вольт.
Кварцы: на меге - 20Мгц, на FTDI - 6МГц.
Все конденсаторы - 0.1мкф
Резисторы слева направо 1.5к, 470, 470...
два делителя справа - у меня стоят подстроечники на 4к7

ОФФТОПИКОМ в этой теме будет считаться:
- зачем это надо автору,
- на чем и как это сделать будет лучше,
- обсуждение кривизны схемотехники и кода.
( Это я и так знаю :) - делал быстрый макет. )


Частота проца 20МГц, предделитель АЦП - 4.
Получаем оцифровку с периодом 2.6 микросекунды.
Строка видеосигнала - 64 микросекунды (видеоданных меньше)
Строк 252.
Получается порядка 20 точек на строку растра.
То есть, если подходить тупо, то можно получить разрешение
20(ширина кадра)x280(высота) - это неудобно.

Поэтому я делаю выборки по принципу "шахматной доски":
Выборки из строк выбираются со смещением относительно строба.

images.jpg
images.jpg (12.03 КиБ) Просмотров: 120578


AVR-ка может выделить на обработку порядка пятидесяти тактов на каждый пиксель.

А вот узнать хотелось бы следующее:
- Что в эти 50 тактов хочется поместить и что туда удастся поместить?


На вопросы по схеме и исходникам отвечу.


Вложения
Send_to_comp_80x60.zip
Исходники
(72.68 КиБ) Скачиваний: 323
Последний раз редактировалось Michael_K 13 янв 2010, 16:31, всего редактировалось 2 раз(а).
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение EdGull » 20 окт 2009, 13:06

=DeaD= писал(а):Ээээ.... в чем? там был поиск мусора, а тут сканирование местности на тему препятствий

вообще-то мусор который мы не можем переехать является препятствием.

Michael_K а что если вместо ИК-подстведки вспышкой от фотоаппарта пыхать? Тогда ближайшие препядствия в независимости от цвета будут белыми пятнами на картинке
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение =DeaD= » 20 окт 2009, 13:17

2EdGull: Читер ты :) и нафига вспышку? Она будет как ИК-бампер только (т.е. в зависимости от отражающей способности препятствия работать) + ослеплять будет и кошку и детей. Я бы офигел, если бы у меня фотик по полу гонял и пыхал :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Michael_K » 20 окт 2009, 13:34

Для ленивых результаты опытов:
Камера телефона 640х480 на высоте 180мм от пола
(и это,по моему, многовато - зависит от размеров робота).
Расстояние до медведя 350мм (что при высоте робота 200, имхо, маловато)
Лазерная указка с новыми батарейками развернута в линию стеклянной палочкой.
(угол небольшой, поэтому на все поле не раворачивает - зато яркость больше)
Лазер - под камерой на высоте 10-15мм от пола. Смотрит чуть вверх.
(прижат к полу и чуть приподнят).
Высота медведя - 150мм, мячика - 70мм, книжки - 100мм

Задания:
1. Найти алгоритмически (не глазами - так и я могу :) ) на картинках лазерную линию.
2. Определить расстояние до объектов.
3. Повторить пункты 1 и 2, переведя картинки в грейскейл.

Картинки приложены:
Изображение
Изображение
Последний раз редактировалось Michael_K 20 окт 2009, 13:42, всего редактировалось 1 раз.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение =DeaD= » 20 окт 2009, 13:41

2Michael_K: Предлагаю забить в этой теме на лазерную линию, раз она всё равно теряется за помехами, а в другой теме можно обсудить алгоритмы для поиска этой линии в кадре.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Michael_K » 20 окт 2009, 14:22

Предлагаю забить в этой теме на лазерную линию, раз она всё равно теряется за помехами

Согласен.

Вообще, тема про то, как наиболее эффективно (и для чего)
использовать несколько десятков команд на пиксель для реал-тайм обработки.

Я предлагаю не ограничиваться пылесосами, а рассмотреть и другие задачи.
Например, позиционирование по краю ринга в минисумо, поиск движения (например для того же сумо),
позиционирование относительно маяков или заведомо удаленных объектов, та же линия или команды
закодированные рисунками на полу... - что угодно.
Да хоть градиентно колеса покрасить и заменить энкодеры :)

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

Интересуют именно легкие налетушные алгоритмы.

Добавлено спустя 22 минуты 58 секунд:
=DeaD= писал(а):2EdGull: Читер ты :) и нафига вспышку?

Согласен - это перебор. Светодиодного фонарика хватит за глаза.
(результаты опытов приводил).

=DeaD= писал(а):Она будет как ИК-бампер только (т.е. в зависимости от отражающей способности препятствия работать)

Даже если так - направление на препятствие она определит точнее ИК-бампера.
А если еще и расстояние грубо оценит (не знаю как) пусть даже с точностью десять сантиметров
в "ближней зоне" - это уже будет кое-что.

У нас робот с какой точностью поворачивать может? Пять-десять градусов?
А тормозить? Два сантиметра? Ну вот вам реальное механическое разрешение...
Последний раз редактировалось Michael_K 20 окт 2009, 14:59, всего редактировалось 2 раз(а).
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Myp » 20 окт 2009, 14:27

=DeaD= писал(а):
Myp писал(а):каждый непрерывный отрезок лазерной линии(белая линия на чёрном фоне) окружаем виртуальным зелёным прямоугольником

Очень хочется увидеть быстрый алгоритм для этой задачи :oops:
Не использующий мой подход с набором чисел :oops:

незнаю про подход с набором чисел (((
наверно там чото скучное и я пропустил))

имеем набор точек на картинке
методом перебора устанавливаем смежные точки, если 2 точки имеют соседние координаты по какой либо оси значит они смежные
типа точка а1 и точка в3 не смежные
а точки а1 и а2 смежные
равно как и а1 и б1 смежные
тогда пусть эти смежные точки образуют виртуальный массив

.JPG
.JPG (38.13 КиБ) Просмотров: 13038


массив:
б1
б2
б3
б4
в5
г6
в7

нам надо найти крайнюю левую границу "препятствия"
она будет очевидно столбец 1(мин цифра из правого столбика в массиве)
теперь надо найти крайнюю нижнюю границу "препятствия"
она будет очевидно буква Б(мин буква из левого столбика в массиве)
теперь надо найти длину "препятствия"
она будет очевидно 7 (максимальная цифра из 2 столбика в массиве)
итого первый массив точек от лазера это препятствие Б-1-7

в паузе(или прямо в процессе..?? между АЦП и усреднением строки есть свободные такты? хватит на сравнение 3х чисел и сохранение результата?) сканирования строки сравниваем прошлую строку с текущей
и так далее до конца кадра сравниваем полученную строку с предыдущей
к концу кадра получим массивы смежных точек на картинке
время между кадрами тратим на сортировку точек в массиве чтобы найти координаты начала препятствия и его длину

тоесть с частотой снятия кадров имеем карту препятствий

Добавлено спустя 22 секунды:
Michael_K писал(а):
моя цветная минирадиокамера в разрешении 640х480 отлично видит пятно лазера по всей квартире

Подозреваю, что это не камера, а ВЫ видите его на картинке.
Вы свои мозги с процом не сравнивайте - не нужно прибедняться :)

софтинка оч приятная, робореалм называется
с лёгкостью справлялась с отслеживанием лазерной точки по всей квартире
камера дефолтная миникамера видеонаблюдения самая дешовая.
отсюда я делаю вывод что яркость точки достаточна чтобы её увидеть.
однако это говорит только о том что на АВР такое нереально.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Michael_K » 20 окт 2009, 14:43

софтинка оч приятная, робореалм называется

Хм...
А можете попробовать скормить ей картинки "с медведем"?
(в моем сообщении чуть выше) Интересно.

Добавлено спустя 6 минут 17 секунд:
Myp писал(а):между АЦП и усреднением строки есть свободные такты?

Не очень понял про что...

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

В конце кадра - много. Там бланки всякие, синхры идут.
Это время хорошо (имхо) использовать для окончательных расчетов,
апдейтов всяких ШИМов, обмена, собственно верхнеуровневого алгоритма
управления роботом и т.д.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Myp » 20 окт 2009, 15:00

вот засунул картинку туда
.jpg

это работа отдельного модуля поиска линии лазерной
распознанная линия отрисовалась чёрнобелой полоской
в принципе видно тока на блестящей поверхности

можно тож самое делать пошагово из разных модулей с гибкими настройками, результат будет немного лучше
включая и выключая линию + сравнивая кадры избавимся от случайных бликов
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Michael_K » 20 окт 2009, 15:13

=DeaD= писал(а):В естественном окружении нету полновесной ИК-засветки (иначе бы телевизор от пульта фигово работал ;))


Вы бы еще сказали, что в естествееном окружении нет ЭМ полей,
иначе бы вайфай не работал...
А лампочка накаливания - это что, по вашему?
Мне казалось, что у телевизора фишка в модуляции, разве нет? :)

Добавлено спустя 4 минуты 34 секунды:
Myp писал(а):вот засунул картинку туда
распознанная линия отрисовалась чёрнобелой полоской

А что - неплохо. Я думал хуже будет.
Даже на мячике точка поймалась. А вот на табуретке непонятно, почему разрыв...
Ну да ладно.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение =DeaD= » 20 окт 2009, 15:52

Модуляция это чтобы не сработал левый сигнал, она не гарантирует передачу сигнала при сильной засветке.
Это всё равно что показывать условный знак человеку, которого только что ослепили "дальним светом" ;)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Myp » 20 окт 2009, 16:17

Michael_K писал(а):А что - неплохо. Я думал хуже будет.
Даже на мячике точка поймалась. А вот на табуретке непонятно, почему разрыв...
Ну да ладно.

табуретка под углом потому что
там отражённый сигнал ещё более слабый.



поиск движения тож интересно
было бы интересно узнать вектор движения группы пикселей в кадре.
есть ли быстрый алгоритм для этого???
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение =DeaD= » 20 окт 2009, 16:22

2Мур: быстрого нет, в целом семейство алгоритмов, решающих эту задачу называется оптикал-флоу.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Myp » 20 окт 2009, 16:35

оптикал флоу знаю

но мб есть чтонить более дружелюбное к АВР?
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение Michael_K » 20 окт 2009, 17:08

=DeaD= писал(а):Модуляция это чтобы не сработал левый сигнал, она не гарантирует передачу сигнала при сильной засветке.


Нет, не так. Чтобы вогнать входной каскад или фотосенсор в насыщение - надо из пушки в него палить - у него
динамический диапазон огромный по сравнению с уровнем сигнала. Он работает на выделении и усилении известной
частоты. Это как определить есть ли волны на поверхности пруда можно независимо от того много в пруду воды или
мало.

(Так же и радиоприемник - несмотря на то, что кругом много разных каналов "засветки" выделяет только свою частоту.)

По даташиту у тсопа чувствительность падает всего в восемь раз при изменении уровня общей засветки от нуля до 100 ватт на квадратный метр. (100 ватт _ИЗЛУЧЕНИЯ_ на кв. метр - это, я вам скажу, до фига)
При этом он видит свои 38килогерц с мощностью 4 МИЛЛИватта на кв. метр.

=DeaD= писал(а):Это всё равно что показывать условный знак человеку, которого только что ослепили "дальним светом" ;)
Некорректное сравнение.


К сожалению, динамический диапазон обычных камер - сильно ограничен, но и в этом случае модуляция сигнала
(моргание подсветкой через кадр) может помочь.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Как поймать видео на AVR-ке. Схема макетика и исходники.

Сообщение =DeaD= » 20 окт 2009, 17:09

2Мур: То что ты просишь - это по определению оптикал-флоу :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Пред.След.

Вернуться в Золотой фонд

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5