LINUX.ORG.RU

Камера для MB 77.07

 ,


2

2

Скоро должна прийти долгожданная платка. Хочется интегрировать ее в робота вместо RPi. Робот передает видеопоток на хост. Для RPi это делалось через Raspberry Pi camera module. Возникает вопрос - какую камеру и как прикрутить к MB 77.07 (нужен realtime поток на хост через wi-fi с минимальной задержкой).

Cast ncrmnt


Подойдет любая усб камера и, соответственно, усб вайфай. Если нужны минимальные задержки, то по собственному опыту могу сказать, что вайфай на чипах реалтек дает частенько пики задержек по 200-300mS, что для управления робатом не катит. Свисток же на ралинке дает задержки по 50-60mS, хотя греется сам как кипятильник.

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

Если вещать в сеть - лучше брать камеру которая уже жмет в mjpeg/h264. Если ну очень хочется, (пока только для ознакомительных целей) есть кодер/декодер jpeg на nmc (в виде патченой libjpeg-turbo, drop-in замена) но он пока еще очень сырой - dragons ahead.

ncrmnt ★★★★★
()
Последнее исправление: ncrmnt (всего исправлений: 1)
Ответ на: комментарий от ncrmnt

я правильно понимаю, что кодер/декодер позволяет использовать вообще любую камеру, даже без аппаратного h.264?

ft232r
() автор топика
Ответ на: комментарий от ft232r

Не совсем. От v4l2 ты получаешь поток в чем-то. Либо несжатый, либо h264 (хотя камеру с h264 надо еще поискать, найдешь - отпиши), либо jpeg/mjpeg. Дальше ты либо это выкидываешь это в сеть, либо что-то делаешь с ним перед этим.

Ускорение на nmc тебе позволит DSP-ядром сжимать/разжимать jpeg, т.е. не загружая при этом ARM практически, оставляя для других задач.

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

Как собрать тулчейн

У меня линукс 586, он не запускает 64, который у вас выложен. Подскажите пожалуйста ссылку откуда и какую версию исходников компилятора нада скачать чтобы собрать тулчейн.

Megatron_68
()
Ответ на: Как собрать тулчейн от Megatron_68

Берем crosstool-ng, берем конфиг с гитхаба, подсоввываем кросстулу и собираем. Я постараюсь до нг выкатить обновление тулчейнов (gcc 4.9.x), тогда заодно и 32 бита постараюсь сделать

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

так, а можно какие-то количественные характеристики, допустим есть какая-то простенькая камера, которая выдает 720p 30fps, выдает в сыром непожатом виде, успеет ли DSP-ядро жать это дело в h.264 или любой другой кодек который можно потом получить по сети и проиграть в каком-нибудь плеере или еще чем-то подобном? Есть ли уже готовые реализации алгоритмов (в свободном доступе, может даже с исходниками?) для DSP в MB 77.07 для сжатия сырового видео с камеры?

ft232r
() автор топика
Ответ на: комментарий от ft232r

Из кодеков пока есть только jpeg в бэте, про бенчмарки рано говорить пока. Про остальные кодеки сказать ничего не могу, т.к. DSP не особенно плотно занимаюсь. Помню что эксперименты были. как и с какими результатами - не знаю.

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

У меня во время работы с камерами, не срабатывает вызов ioctl (fd, VIDIOC_DQBUF, &buf)

То же самое что и с микрокомпьютером «Radxa Rock», причём у всех пользователей в мире. Тама кто-то сообщал что буфер для DMA канала нада выровнять на 32 (или 64, не помню) Но, недавно мне попалося в гугле, что проблема для Radxa решается так:

rmmod uvcvideo; 
modprobe uvcvideo nodrop=1; 
echo "options uvcvideo nodrop=1" > /etc/modprobe.d/uvcvideo.conf

Я пропробывал так сделать на mb77,но я меня не проходит первая строка «rmmod uvcvideo», говорит что модуль в использовании.

Может ли кто-нибудь что-нибудь предложить?

Megatron_68
()
Ответ на: комментарий от Megatron_68

Если модуль вкомпилен в ядро, то передергивать его бесполезно. либо:

cd /sys/module/uvcvideo/parameters && echo 1 > nodrop

Либо, если не разрешит поменять в рантайме, добавить в bootargs

uvcvideo.nodrop=1

К тому же, на МВ77.07 есть всегда одно устройство /dev/videoХ, это VDU, для вывода картинки на видеослой. Соответственно, пытаться захватить картинку с него закончится вполне ожидаемым фейлом. Обычно VDU - это /dev/video0, соответственно камера будет /dev/video1. НО, в силу того, как линукс энумерейтит устройства вывода видео - если камеру воткнуть ДО загрузки ядра, то /dev/video0 будет камерой, а /dev/video1 - VDU.

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

С одной камерой начало отрабатывать VIDIOC_DQBUF, но буферы пустые, никакой картинки. А с другой камерой срабатывает один раз с какой-то попытки и всё. Наверное что-то еще не впорядке.

Megatron_68
()
Ответ на: комментарий от ncrmnt

Обычно VDU - это /dev/video0, соответственно камера будет /dev/video1. НО, в силу того, как линукс энумерейтит устройства вывода видео - если камеру воткнуть ДО загрузки ядра, то /dev/video0 будет камерой, а /dev/video1 - VDU.

/dev/v4l/by-id/ || /dev/v4l/by-path/?

Deleted
()
Ответ на: комментарий от ncrmnt

вайфай на чипах реалтек дает частенько пики задержек по 200-300mS, что для управления робатом не катит. Свисток же на ралинке дает задержки по 50-60mS

по атерастам ath9k_htc и подобным нет статистики?

ktk ★★★★
()
Ответ на: комментарий от Deleted

Угу, только все все равно передают в виде аргумента /dev/videoX, и нередко удивляются почему не работает.

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

Запустилась камера Genius iLook 1321. Открылась в JPEG.

А может ли проблемы с другими камерами быть из-за недостаточной пропускной способности USB шины ? Может на плате нет скорости USB-2, а только совместимость протокола ? Или там честный USB-2.0 ?

Megatron_68
()
Ответ на: комментарий от Megatron_68

Там честный EHCI, дающий на USB hdd сырую пропускную около 20 мегабайт/с. Так что если косяк искать, то скорее в линуксовой v4l2 подсистеме. Через месячишко, как дойдут руки портануть оставшиеся драйвера, можно будет проверить это на ядре 3.18-3.19. Если и там останется - тогда уже поднимать доки и тыкать USB хост палочкой на предмет что да как.

ncrmnt ★★★★★
()
Ответ на: комментарий от Megatron_68

Соврал, Genius iLook 1321, нормально работает и в JPEG и в YUYV. Это хорошо.

Еще заработал один старенький Genius. Вот его инфа

[13689.480000] gspca_main: spca561-2.14.0 probing 0458:7004
[13690.080000] input: spca561 as /devices/axi.0/10040000.ehci/usb1/1-1/1-1.4/input/input23
Правда в формате GBRG, пришлось преобразовывать, пока грубо, без интерполяции, чтобы картинку увидеть, что вполне удалось.

И еще кажется одна старая камера работает LifeView Robocam.

[14458.930000] gspca_main: ov519-2.14.0 probing 05a9:0511
[14459.150000] input: ov519 as /devices/axi.0/10040000.ehci
Правда я не смог посмотреть картинку, она в странном формате, нада преобразовывать.

Не заработала 'A4 TECH USB2.0 PC Camera J', которая до этого работала везде.

В общем всё не так ужастно.

Megatron_68
()
2 марта 2015 г.
Ответ на: комментарий от Megatron_68

Сейчас устройство стримит у меня одновременно две камеры Chicony DC-5138 в JPG 640x480. Эта модель позволяет отключить автоэкспозицию и таким образом добиться хорошей частоты кадров.

Всё же удалось ли «причесать» драйвера v4l ? Хотелось бы, думаю не мне одному, чтобы всё это работало полноценно, в разных режимах и с разными камерами, а не только теми которые умеют открываться в JPG, или GBRG8 с низким разрешением.

Megatron_68
()
17 июля 2015 г.
Ответ на: комментарий от ncrmnt

MB77 linux 3.10 портация v4l2 из linux 3.18

Добрый вечер! Подскажите, пожалуйста, не занимались ли вы вопросом портации v4l2 под MB77 c linux 3.10, т.к. в текущем ядре не поддерживаются современные web-камеры. Заранее спасибо!

Svet_lana
()
Ответ на: MB77 linux 3.10 портация v4l2 из linux 3.18 от Svet_lana

0. Бэкпортов не делаем, наоборот стараемся переносить наши изменения на более свежие ядра когда появляется возможность.

1. Какие именно камеры интересуют? Может быть просто камера отключена в конфиге ядра?

2. Сейчас есть экспериментальные ветки 3.18-4.1 без части специфичных драйверов, ближайшие месяцы будет новая стабильная ветка ядра на основе 4.х.

ncrmnt ★★★★★
()
Ответ на: комментарий от ncrmnt

0. Это хорошо, что бэкпортов не делаете.

1. Пробовала WEB-камеры: а) logitech quickcam pro 5000 удалось получить снимок (низкое качество); б) Creative Live! Cam Optia AF, в) HD: WEB-камеру Microsoft LifeCam Studio С камер (б) и (в) получаю только черное изображение.

Информация об устройстве (в): udevadm info --name=/dev/video0 --attribute-walk

looking at device '/devices/axi.0/10040000.ehci/usb1/1-1/1-1.4/1-1.4:1.0/video4linux/video0':

KERNEL==«video0» SUBSYSTEM==«video4linux» DRIVER==«» ATTR{debug}==«0» ATTR{index}==«0»

looking at parent device '/devices/axi.0/10040000.ehci/usb1/1-1/1-1.4/1-1.4:1.0': KERNELS==«1-1.4:1.0» SUBSYSTEMS==«usb» DRIVERS==«uvcvideo» ATTRS{bInterfaceClass}==«0e» ATTRS{iad_bFunctionClass}==«0e» ATTRS{iad_bFirstInterface}==«00» ATTRS{bInterfaceSubClass}==«01» ATTRS{bInterfaceProtocol}==«00» ATTRS{bNumEndpoints}==«01» ATTRS{iad_bFunctionSubClass}==«03» ATTRS{iad_bFunctionProtocol}==«00» ATTRS{supports_autosuspend}==«1» ATTRS{iad_bInterfaceCount}==«02» ATTRS{bAlternateSetting}==" 0" ATTRS{bInterfaceNumber}==«00»

looking at parent device '/devices/axi.0/10040000.ehci/usb1/1-1/1-1.4': KERNELS==«1-1.4» SUBSYSTEMS==«usb» DRIVERS==«usb» ATTRS{bDeviceSubClass}==«02» ATTRS{bDeviceProtocol}==«01» ATTRS{devpath}==«1.4» ATTRS{idVendor}==«045e» ATTRS{speed}==«480» ATTRS{bNumInterfaces}==" 5" ATTRS{bConfigurationValue}==«1» ATTRS{bMaxPacketSize0}==«64» ATTRS{busnum}==«1» ATTRS{devnum}==«6» ATTRS{configuration}==«» ATTRS{bMaxPower}==«500mA» ATTRS{authorized}==«1» ATTRS{bmAttributes}==«80» ATTRS{bNumConfigurations}==«1» ATTRS{maxchild}==«0» ATTRS{bcdDevice}==«0113» ATTRS{avoid_reset_quirk}==«0» ATTRS{quirks}==«0x0» ATTRS{version}==" 2.00" ATTRS{urbnum}==«42» ATTRS{ltm_capable}==«no» ATTRS{manufacturer}==«Microsoft» ATTRS{removable}==«unknown» ATTRS{idProduct}==«0772» ATTRS{bDeviceClass}==«ef»

looking at parent device '/devices/axi.0/10040000.ehci/usb1/1-1': KERNELS==«1-1» SUBSYSTEMS==«usb» DRIVERS==«usb» ATTRS{bDeviceSubClass}==«00» ATTRS{bDeviceProtocol}==«01» ATTRS{devpath}==«1» ATTRS{idVendor}==«1a40» ATTRS{speed}==«480» ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}==«1» ATTRS{bMaxPacketSize0}==«64» ATTRS{busnum}==«1» ATTRS{devnum}==«2» ATTRS{configuration}==«» ATTRS{bMaxPower}==«100mA» ATTRS{authorized}==«1» ATTRS{bmAttributes}==«e0» ATTRS{bNumConfigurations}==«1» ATTRS{maxchild}==«4» ATTRS{bcdDevice}==«0111» ATTRS{avoid_reset_quirk}==«0» ATTRS{quirks}==«0x0» ATTRS{version}==" 2.00" ATTRS{urbnum}==«86» ATTRS{ltm_capable}==«no» ATTRS{removable}==«unknown» ATTRS{idProduct}==«0101» ATTRS{bDeviceClass}==«09» ATTRS{product}==«USB 2.0 Hub»

looking at parent device '/devices/axi.0/10040000.ehci/usb1': KERNELS==«usb1» SUBSYSTEMS==«usb» DRIVERS==«usb» ATTRS{bDeviceSubClass}==«00» ATTRS{bDeviceProtocol}==«00» ATTRS{devpath}==«0» ATTRS{idVendor}==«1d6b» ATTRS{speed}==«480» ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}==«1» ATTRS{bMaxPacketSize0}==«64» ATTRS{authorized_default}==«1» ATTRS{busnum}==«1» ATTRS{devnum}==«1» ATTRS{configuration}==«» ATTRS{bMaxPower}==«0mA» ATTRS{authorized}==«1» ATTRS{bmAttributes}==«e0» ATTRS{bNumConfigurations}==«1» ATTRS{maxchild}==«2» ATTRS{bcdDevice}==«0310» ATTRS{avoid_reset_quirk}==«0» ATTRS{quirks}==«0x0» ATTRS{serial}==«10040000.ehci» ATTRS{version}==" 2.00" ATTRS{urbnum}==«24» ATTRS{ltm_capable}==«no» ATTRS{manufacturer}==«Linux 3.10.28-shadow1-00041-g6f86f82-dirty ehci_hcd» ATTRS{removable}==«unknown» ATTRS{idProduct}==«0002» ATTRS{bDeviceClass}==«09» ATTRS{product}==«UEMD EHCI»

looking at parent device '/devices/axi.0/10040000.ehci': KERNELS==«10040000.ehci» SUBSYSTEMS==«platform» DRIVERS==«uemd-ehci» ATTRS{companion}==«» ATTRS{uframe_periodic_max}==«100»

looking at parent device '/devices/axi.0': KERNELS==«axi.0» SUBSYSTEMS==«platform» DRIVERS==«»

По поводу отключена ли камера в конфиге ядра или нет, не знаю, не сталкивалась, почитаю.

Svet_lana
()
Ответ на: комментарий от Svet_lana

Спасибо за информацию, как будет более или менее готов 4.х порт попробуем на своей стороне воспроизвести.

ncrmnt ★★★★★
()
26 августа 2015 г.
Ответ на: комментарий от Megatron_68

Камера Microsoft LifeCam Studio. Работает только на разрешениях 160x120 в форматах YUYV и MJPEG. В разрешениях выше зависает на VIDIOC_DQBUF. Причем если подключать ее через USB hub то может иногда поработать и на 640х480

Собрал ядро с usbmon. В дампе (видно через Wireshark), при котором виснет камера, встречаются USB_URB в направлении хоста, где некоторые USB_isodesc имеют статус ошибки

"Out of streams resources" (-ENOSR) (-63).
Замечу что, если сделать trace у uvcvideo, то наблюдается аналогичный код ошибки -63. Гугл говорит что это

Данные не могут быть получены из системной памяти при достаточно быстрой передаче

Неужели не хватает ресурсов для приема данных? Но тогда почему через hub камера все таки иногда работает.

Может будут у кого комментарии на этот счет

ЗЫ. Камера успешно работает на cubieboard A10 под ядром 3.4

Lexius
()
Ответ на: комментарий от Lexius

Дальнейшие исследования показали. USB hub похоже тут не причем. Камера умеет снимать и в разрешениях 1920x1080 - надо просто прикрыть рукой объектив, либо направить на потолок.. Так как формат MJPEG, то, естественно, при равномерной картинке уменьшается размер файла. В результате получается снимок. Но это проблемы не решает.

Lexius
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.