Raspberry Pi

Дистанционное управление по сети

raspberry pi

Предисловие

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

Из трех вариантов компьютера Raspberry Pi A, B и B+ мне удалось познакомится с двумя последними. Модель B продается с февраля 2012 года, а B+ с июля 2014. С точки зрения работы с камерой различий между этими моделями нет. Они оснащены ARM11 процессором Broadcom BCM2835 с тактовой частотой 700 МГц и модулем оперативной памяти 512МБ.

raspberry pi

Различия в количестве портов USB и в расположении и типе разъемов. Модель B имеет раздельные аудио и видеовходы и разъем для карт SD, а D+ объединенный разъем для аудио и видео, как и на многих фотоаппаратах и разъем для карт памяти micro SD. Некая защита и стабилизация по питанию существует только, если подавать 5 В на разъем micro USB, и эта часть реализована у этих моделей по-разному. Если подавать питание на разъем GPIO, то о качестве питания надо заботиться самому. Успех проекта Arduino доказал, что для многих задач не в производительности счастье и надо использовать компьютеры той производительности, которая необходима для решения поставленной задачи. Оценки показывают, что по производительности центрального процессора Raspberry Pi сопоставима с 300 MHz Pentium II образца далекого 1997 года. Однако, графический процессор Broadcom VideoCore IV с частотой 250 МГц уже вполне из 21 века и обеспечивает вывод видео1080p с частотой 30 кадров в секунду и аппаратным декодированием H.264, MPEG-4 AVC.

Компьютеры Raspberry Pi моделей B и B+ (слева)
Модель B в фирменном корпусе.

Хотя в корпусе и предусмотрены щели для шлейфа, ведущего к камере, он мало полезен при создании установок для съемки. Корпус для камеры и компьютера надо делать в соответствии с задачей. Например, для уличной камеры с емкими аккумуляторами и большим сроком автономной работы я изготовил следующую конструкцию.

фото
фото

 

Безымянный адаптер 802:11n заработал из коробки, но постоянно терял сеть. Были куплены два внешне разных и разных фирм адаптера, но при детальном рассмотрении они оказались на одном чипе : REALTEK RTL8188ETV. Сборка драйверов из исходников дала для Raspberry Pi неработоспособные драйвера. Однако в сети нашлись уже скомпилированные бинарники на сайте www.fars-robotics.net/ и с ними все стабильно заработало. Однако у этого пути оказался смертельный враг - sudo apt-get upgrade. Очередное обновление системы, коснувшееся в том числе и камеры и потому оправданное, привело адаптеры в нерабочее состояние и на вышеуказанном сайте обновлений не появилось. Поиск показал, что я не первый, кто обновился, и решение уже найдено и даже выложены бинарники драйверов для последней версии.

Адаптер USB-Bluetooth (первый на снимке) может быть использован для управления камерой, но соединение должно быть установлено до запуска программы, и поэтому оказалось удобнее использовать адаптер com-Bluetooth, поскольку последовательный порт от и в Африке последовательный порт и независимо от наличия соединения программа ругаться не будет. Для спаривания устройств в этом случае от ОС ничего не требуется, если на адаптер подано питание, то с ним может быть установлено соединение.

Подключив цифровой приемник ИК сигнала (например TSOP1736) к GPIO, можно воспользовавшись результатами трудов проекта LIRC, организовать управление камерой от пульта дистанционного управления.

На фото внизу фотоприемник вставлен в плату расширения, которая в данном случае нужна только для удобства подключения.

Для работы с компьютером существует множество ОС. Мне, например, без проблем удалось установить Slackware ARM, но это получилась огромная базовая система, которую еще предстояло адаптировать для работы с камерой. Поэтому, несмотря на всю мою любовь к этому дистрибутиву, я остановился на самой массовой и соответственно наиболее адаптированной и документированной системе - Raspbian (Debian Wheezy). В нем камера поддерживается из коробки, однако при первом включении надо разрешить к ней доступ вызвав sudo raspi-config. Операционная система устанавливается копированием командой dd на карту памяти и здесь отмечу, что к картам система оказалась весьма привередлива. Моя попытка использовать старые 4 ГБ карты в большинстве случаев окончилась неудачей, либо не записывалось, либо система с этих карт не стартовала.

Наиболее полный список ресурсов, на мой взгляд, расположен на elinux.org/RPi_Hub. И соответственно раздел, посвященный камере: elinux.org/Rpi_Camera_Module.

С точки зрения построения своих систем отличных от серийно выпускаемых наибольший интерес представляют огромные возможности дистанционного управления камерой. Это и проводная сеть, и Wi-Fi, и Bluetooth, и ИК пульт дистанционного управления, и цифровые входы, позволяющие опрашивать как простейшие кнопки, так и организовать передачу данных по самым разным последовательным протоколам.

Подключиться к сети можно как по витой паре через Ethernet, так и через Wi-Fi. Можно подключаться к роутеру, а можно и напрямую. При прямом подключении через Wi-Fi превращаем в роутер телефон, а в случае Ethernet, если сеть предварительно не настроена, задать IP локальному компьютеру и поднять сеть можно командой:

bash-4.2# ifconfig eth0 192.168.0.214 up

А отключить командой:

bash-4.2# ifconfig eth0 down 

В случае подключения по сети простейший способ получить доступ к Raspberry Pi и соответственно к камере это в командной строке набрать команду: ssh -l pi 192.168.0.198 где 192.168.0.198 адрес Raspberry Pi и ввести пароль raspberry

bash-4.1$ ssh -l pi 192.168.0.198
pi@192.168.0.198's password: 
Linux raspberrypi 3.12.22+ #691 PREEMPT Wed Jun 18 18:29:58 BST 2014 armv6l
Last login: Sat Sep 27 16:49:37 2014 from 192.168.0.215
pi@raspberrypi ~ $ 

Постоянный IP-адрес можно присвоить, отредактировав файл etc/network/interfaces, примерно так, как приведено ниже. Т.е. комментируем строку с dhcp и добавляем настройки, соответствующие Вашей локальной сети.

auto lo
iface lo inet loopback
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.199
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp
iface default inet static
address 192.168.0.198
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1

На телефоне с Android надо установить какой-нибудь SSH Client. У меня установлен JuiceSSH. Это общее решение аналогичное по стилю и возможностям с работой с большого компьютера. Есть и множество программ, заточенных именно под работу с Raspberry Pi. Я попробовал работать с Raspi-R и RaspControl. Хотя в первой уже есть предустановки для работы с камерой, мне вариант с составлением собственного списка команд, который предлагается во второй, понравился больше.

JuiceSSH
Raspi-R
JuiceSSH
Raspi-R
RaspControl
RaspControl
RaspControl
RaspControl
RaspControl

Теперь у нас есть возможность напрямую обратится к камере и, например, заставить ее делать снимки при нажатии Enter:

pi@raspberrypi ~ $ raspistill -o foto%03d.jpg  -k -v -t 999999
raspistill Camera App v1.3.6
Width 2592, Height 1944, quality 85, filename foto%03d.jpg
Time delay 999999, Raw no
Thumbnail enabled Yes, width 64, height 48, quality 35
Link to latest frame enabled  no
Full resolution preview No
Capture method : Capture on keypress
Preview Yes, Full screen Yes
Preview window 0,0,1024,768
Opacity 255
Sharpness 0, Contrast 0, Brightness 50
Saturation 0, ISO 0, Video Stabilisation No, Exposure compensation 0
Exposure Mode 'auto', AWB Mode 'auto', Image Effect 'none'
Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128
Rotation 0, hflip No, vflip No
ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000
Camera component done
Encoder component done
Starting component connection stage
Connecting camera preview port to video render.
Connecting camera stills port to encoder input port


Press Enter to capture, X then ENTER to exit

Программа raspistill предоставляет доступ практически ко всем возможностям камеры.

Image parameter commands
-?, --help      : This help information
-w, --width     : Set image width <size>
-h, --height    : Set image height <size>
-q, --quality   : Set jpeg quality <0 to 100>
-r, --raw    : Add raw bayer data to jpeg metadata
-o, --output : Output filename <filename> (to write to stdout, use '-o -'). 
If not specified, no file is saved
-l, --latest    : Link latest complete image to filename <filename>
-v, --verbose   : Output verbose information during run
-t, --timeout   : Time (in ms) before takes picture and shuts down 
(if not specified, set to 5s)
-th, --thumb    : Set thumbnail parameters (x:y:quality) or none
-d, --demo      : Run a demo mode 
(cycle through range of camera options, no capture)
-e, --encoding  : Encoding to use for output file (jpg, bmp, gif, png)
-x, --exif : EXIF tag to apply to captures (format as 'key=value') or none
-tl, --timelapse : Timelapse mode. Takes a picture every <t>ms
-fp, --fullpreview : Run the preview using the still capture resolution 
(may reduce preview fps)
-k, --keypress  : Wait between captures for a ENTER, X then ENTER to exit
-s, --signal    : Wait between captures for a SIGUSR1 from another process
 -g, --gl  : Draw preview to texture instead of using video render component
-gc, --glcapture : Capture the GL frame-buffer instead of the camera image
Preview parameter commands
-p, --preview   : Preview window settings <'x,y,w,h'>
-f, --fullscreen        : Fullscreen preview mode
-op, --opacity  : Preview window opacity (0-255)
-n, --nopreview : Do not display a preview window
Image parameter commands
-sh, --sharpness        : Set image sharpness (-100 to 100)
-co, --contrast : Set image contrast (-100 to 100)
-br, --brightness       : Set image brightness (0 to 100)
-sa, --saturation       : Set image saturation (-100 to 100)
-ISO, --ISO     : Set capture ISO
-vs, --vstab    : Turn on video stabilisation
-ev, --ev       : Set EV compensation
-ex, --exposure : Set exposure mode (see Notes)
-awb, --awb     : Set AWB mode (see Notes)
-ifx, --imxfx   : Set image effect (see Notes)
-cfx, --colfx   : Set colour effect (U:V)
-mm, --metering : Set metering mode (see Notes)
-rot, --rotation        : Set image rotation (0-359)
-hf, --hflip    : Set horizontal flip
-vf, --vflip    : Set vertical flip
-roi, --roi     : Set region of interest 
(x,y,w,d as normalised coordinates [0.0-1.0])
-ss, --shutter  : Set shutter speed in microseconds
Exposure mode options :
auto,night,nightpreview,backlight,spotlight,sports,snow,beach,verylong,
fixedfps,antishake,fireworks
AWB mode options :
off,auto,sun,cloud,shade,tungsten,fluorescent,incandescent,flash,horizon
Image Effect mode options :
none,negative,solarise,sketch,denoise,emboss,oilpaint,hatch,gpen,pastel,
watercolour,film,blur,saturation,colourswap,washedout,posterise,
colourpoint,colourbalance,cartoon
Metering Mode options :
average,spot,backlit,matrix
Preview parameter commands
-gs, --glscene  : GL scene square,teapot,mirror,yuv,sobel
-gw, --glwin    : GL window settings <'x,y,w,h'>

Если надо на удаленном компьютере получить живую картинку с камеры, то надо воспользоваться программой raspivid. Тут возможны два варианта.

Первый с использованием netcat . Сперва запускаем на локальном компьютере:

nc -l -p 5001 | mplayer -fps 31 -cache 1024 -

А затем на Raspberry Pi :

raspivid -t 999999 -w 640 -h 480 -fps 10 -o - | nc -v 192.168.0.24 5001

Где 192.168.0.24 IP адрес локального компьютера.

Второй вариант с использованием VLC. Повторить при написании этой статьи мне этот подвиг не удалось. Я следовал инструкции, изложенной здесь. Причина, как оказалось, в обновлении до версии до 3.12.28+. Решается переустановкой VLC.

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

Для удобства работы с командной строкой можно сделать некий графический интерфейс. Его можно запускать, как на удаленном компьютере, так и если установить VNC, то можно получить удаленный доступ к рабочему столу и соответственно запускать его на Raspberry Pi. Есть уже готовые решения: Pi Vision и RaspiCam Remote. Другой штатный способ управления камерой это python, для которого существует специальная библиотека picamera. Для меня главное это повторяемость результатов, т.е. от программы мне в первую очередь требуется возможность задать выдержку и чувствительность. Поскольку готового решения мне сразу не попалось, то я написал свое. (Вариант Pi Sight меня не устроил.) Подробнее программу я планирую рассмотреть в отдельной статье, а пока для желающих покопаться привожу исходный текст для Python 2.7.3 и picamera 1.8.

Для доступа через сеть к папкам Raspberry Pi можно в Dolphin набрать следующий адрес:

fish://pi@192.168.0.198:22/home/pi/

Для доступа к рабочему столу с удаленного компьютера я установил на Raspberry Pi с ОС Raspbian:

sudo apt-get install tightvncserver

Если есть желание в дальнейшем пользоваться буфером обмена с локальной машиной через меню F8, то дополнительно устанавливаем:

sudo apt-get install gsfonts-x11 xfonts-75dpi xfonts-100dpi autocutsel

И в файле /home/pi/.vnc/xstartup добавляем сточку autocutsel -fork после строки xsetroot -solid grey.

Включаем vncserver:

pi@raspberrypi ~ $ vncserver :1 -geometry 800x480
New 'X' desktop is raspberrypi:1
Starting applications specified in /home/pi/.vnc/xstartup
Log file is /home/pi/.vnc/raspberrypi:1.log

Для доступа с настольного компьютера и ноутбука с ОС Slackware я установил пакет tightvnc.

Запускаем vncviewer, в появившемся окне вводим, в моем случае, адрес 192.168.0.198:1, затем пароль и получаем:

vnc

Теперь запускаем программу управления камерой. В случае управления с удаленного компьютера с использованием этой программы предварительный просмотр возможен только на мониторе, подключенном непосредственно к Raspberry Pi.

vnc

Для Android существует множество приложений. Мне показались относительно приемлемыми Remote Ripple, VNC Viewer, DesktopVNC В моем случае для подключения надо было задать адрес и порт 5901 и при подключении ввести пароль заданный для vncserver. Общая проблема этого способа управления камерой - эмуляция мыши, которую на маленьком экране телефона назвать комфортной сложно. На маленьком экране телефона для меня, пожалуй, наиболее удобным оказался VNC Viewer с постоянным размещением кнопок мыши внизу экрана.

Remote Ripple
Remote Ripple

VNC Viewer
VNC Viewer

DesktopVNC
DesktopVNC

В если отвлечься от индивидуальных пристрастий к удобству интерфейса, то для сетевых подключений уже написано достаточно программ, чтобы реализовать любой вид съемки. При работе с ноутбуком tightvnc, на мой взгляд, вполне комфортно позволяет работать с программой управления камерой запущенной на Raspberry Pi. Если необходима живая картинка именно на нем , то, возможно, стоит написать некий интерфейс к командам, отправляемым через SSH для удобства переключения между режимом потокового видео для просмотра и режимом съемки фотографий. В этом случае особых преимуществ в использовании python я не вижу и можно ограничиться вызовом raspistill и raspivid.

Об управлении камерой по ИК и Bluetooth читайте в следующих статьях.

04.10.2014
Установите проигрыватель Flash

Облако тегов:
3D печать
Arduino
Raspberry Pi
Аэрофотосъемка
Байдарки
Геомеханика
История
Камеры
Макросъемка
Объективы
Освещение
Панорамы
Принадлежности
Принтеры
Программы
Сканеры
Стереосъемка
Фильтры
Фокусировка
Фотокубики
...
rss