Краткая инструкция по подключению и использованию аппаратной камеры для Raspberry Pi Обратите внимание, что камера может быть повреждена статическим электричеством. Перед тем, как достать камеру рекомендуется дотронуться до заземлённого объекта (например до радиатора батареи отопления), чтобы снять заряд. Камера подсоединяется к плате при помощи гибкого шлейфа. Разъём для шлейфа находится между Ethernet и HDMI портами. Объектив камеры может быть закрыт прозрачной защитной плёнкой, перед использованием её нужно удалить.

Включаем поддержку камеры в Raspbian

Загрузите Raspberry Pi и осуществите вход в систему (по умолчанию имя пользователя - pi , пароль - raspberry ). В терминале выполните команды для обновления дистрибутива Raspbian до последний версии: sudo apt-get update

sudo apt-get upgrade

Программное обеспечение для работы с камерой

raspivid консольное приложение для записи видео с камеры.

raspistill приложения для получения изображений с камеры параметры -o или –output определяют имя выходного файла -t или –timeout длительность записи видео (по умолчанию 5 секунд) -d или –demo запись в режиме демонстрации возможностей. Будут использованы все возможные эффекты

Примеры: raspistill -o image.jpg - захват изображения в.jpg формате

raspivid -o video.h264 - захват 5-ти секундного видео в формате h264

raspivid -o video.h264 -t 10000 - захват 10-ти секундного видео в формате h264

raspivid -o video.h264 -t 10000 -d - захват 10-ти секундного видео в формате h264 в режиме демонстрации возможностей

Посмотреть все возможные параметры для приложений raspivid и raspistill можно следующим образом:raspivid | less, raspistill | less

Используйте курсор для перемещения по списку или введите "q" для выходаПодробное описание параметров для программного обеспечения камеры можно найти

Передача потокового видео по сети

Для передачи видео выполняем на Raspberry Pi команду

raspivid -t 999999 -o - | nc 5001

Для просмотра видео на клиенте необходимо установить mplayer и netcat и запустить их следующим образом nc -l -p 5001 | mplayer -fps 31 -cache 1024 для Linux

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



В данном материале будет приведена пошаговая инструкция для настройки Raspberry Pi в качестве сервера с вебкамерой, с которого по сети будет передаваться потоковое видео с помощью специального программного обеспечения. В нашем случае будет использоваться программный пакет Motion, который является бесплатным и находится в открытом доступе.


Итак, для данного проекта потребуется Raspberry Pi Model B или новее, адаптер USB WiFi, USB-вебкамера с микрофоном, SD-карта с ОС Raspbian, доступ к Raspberry Pi через клавиатуру и мышь или удаленно.


Убедитесь, что все программные пакеты получили необходимые обновления. Для этого можно просто ввести:


sudo apt-get update


Затем нужно установить приложение Motion:


sudo apt-get install motion


Если вы хотите использовать специальный модуль камеры для Raspberry Pi, то данная версия Motion пока не поддерживает его. Чтобы добавить поддержку модуля камеры, нужно скачать и установить определенную сборку следующим образом:



sudo apt-get install -y libjpeg62 libjpeg62-dev libavformat53 libavformat-dev libavcodec53 libavcodec-dev libavutil51 libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev


Теперь нужно настроить это программное обеспечение. Первым делом необходимо отредактировать конфигурационный файл motion.conf. Введите следующую строку:


sudo nano /etc/motion/motion.conf


Здесь нужно изменить следующее: DAEMON = OFF (меняем на ON), Webcam_localhost = ON (Меняем на OFF). Далее нам нужно активировать Daemon-сервис. Печатаем:


sudo nano /etc/default/motion


И меняем start_motion_daemon = no (изменить на yes).


Теперь нужно запустить вебкам-сервер. Убедитесь, что вебкамера подключена к Raspberry Pi через USB. Введите следующую строку:


sudo service motion start


Если вы хотите остановить этот сервис, то воспользуйтесь такой командой:


sudo service motion stop


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


sudo service motion restart


Если Motion работает, то вы можете открыть веб-страницу на вашем обычном настольном компьютере, в адресной строке которой будет IP вашего Raspberry Pi и порт 8081 (или другой, если вы его меняли). Тогда вы увидите изображение с вебкамеры, подключенной к Raspberry Pi.



Одноплатный компьютер Raspberry Pi позволяет создавать действительно интересные и полезные вещи: от мультимедийных центров до систем домашней автоматизации. Благодаря подключению различных модулей к Raspberry Pi можно значительно расширить функциональность этого миникомпьютера.



Одним из таких дополнительных подключаемых модулей является камера, позволяющая делать снимки или снимать видео. Сегодня на рынке представлен ряд камер для Raspberry Pi, и в этом материале проведем их небольшой обзор.


Рассмотрим шесть наиболее популярных камер: ZeroCam Noir, ZeroCam FishEye, Raspberry Pi Compatible Fisheye Camera, Raspberry Pi Camera V2, Raspberry Pi Camera V2 Noir и Raspberry Pi Camera 1.3.



ZeroCam Noir – это модуль камеры для Raspberry Pi Zero или Raspberry Pi Zero W, поэтому, если вы хотите использовать его в Raspberry Pi 3 или 2, вам нужно использовать адаптерный кабель. Эта камера не имеет инфракрасного фильтра на объективе, поэтому идеально подходит для съемки при слабом освещении. Вот некоторые ее основные характеристики: 5-мегапиксельный сенсор, 2592 × 1944 пикселей, 1080p при 30 FPS (или 60 FPS при 720p, 90 FPS при 480p), фокусное расстояние 3.60 мм, 53.50 градуса по горизонтали, 41.41 градуса по вертикали, прибл. размеры платы с камерой: 60 x 11.4 x 5.1 мм.



Это версия ZeroCam типа «рыбий глаз», что означает, что она имеет широкоугольное изображение. Эта камера также сделана для Pi Zero или Pi Zero W, поэтому, чтобы использовать ее с другой Pi-панелью, вам нужен адаптерный кабель.



Это совместимая с Raspberry Pi камера типа «рыбий глаз», которую легко можно найти на различных торговых интернет-площадках типа AliExpress, TaoBao, eBay. Она характеризуется широкоугольным обзором 175º. В ее основе лежит датчик Omnivision 5647 разрешением 5 мегапикселей (2592 x 1944 пикселей).



Эта камера оснащена 8-мегапиксельным датчиком изображений Sony IMX219 с фиксированным фокусным объективом, способным отображать статические изображения 3280 × 2464 пикселей, она поддерживает видео 1080p30, 720p60 и 640 × 480p90. Камера совместима со всеми платами Raspberry Pi, но если вы хотите использовать ее с Pi Zero, вам нужен адаптерный кабель.



Эта камера обладает всеми функциями модуля Raspberry Pi Camera V2, но у нее нет инфракрасного фильтра. Это означает, что это почти идеальная камера для съемки в темное время суток.



Raspberry Pi Camera 1.3 является предшественником модуля V2. Она оснащена 5-мегапиксельным датчиком OmniVision OV5647.

Сравнение полей обора и качества изображения камер для Raspberry Pi

В этом тесте все камеры установлены на расстоянии 1 метра от тестового изображения. Результаты следующие:











Сравнение качества изображения и цветопередачи камер для Raspberry Pi при зумировании











Сравнение качества съемки ночью

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







Выводы

Все камеры работают немного лучше, чем ожидалось от таких дешевых модулей. К сожалению, универсальной камеры среди них нет, и приходится идти на компромисс, поскольку, похоже, нет широкоугольных («рыбий глаз») камер с удаленным ИК-фильтром. Поэтому, если вам нужен широкий угол, вам понадобится обычное освещение, и, наоборот, ночью у вас вряд ли получится широкоугольная съемка.

Рассмотрим методы правильного подключения камеры к Raspberry Pi и работу с ней через терминальное окно и с помощью языка программирования Python.
Материалы по теме: ,
Подключая камеру к Raspberry помним следующее:
  • камера боится статического электричества, прикасаться к ней во время работы желательно через антистатический материал
  • камера потребляет 250 мА - при использовании посредственного блока питания Малины подключение камеры может вызвать нехватку питания при активной работе камеры
  • в камере нет микрофона
  • верх камеры находится со стороны противоположной выходу шлейфа, но для отражение изображения по вертикали есть специальная команда - об это ниже.

Подключение

Желательно выполнять подключение камеры к выключенной Raspberry. Быстро выключить Малину можно командой
sudo shutdown now
Шлейфовый разъем CSI находится рядом с HDMI:Плюс подключения камеры через этот разъем в отличие от USB - в разгрузке процессора при передаче данных через интерфейс CSI
Для удобства фиксации камеры есть готовые решения, например - Акриловый холдер .
Интерфейс камеры должен быть активирован в настройках Raspberry:
После активации камеры (если это требовалось) Малину необходимо перезагрузить:sudo reboot now
Для работы с камерой в Raspbian уже предустановлены необходимые утилиты и драйвера. Обновим пакеты для использования свежих версий: sudo apt-get update -y sudo apt-get dist-upgrade -y Если все сделано верно, попробуем получить пробный кадр с камеры - создадим папку для фотографий, перейдем в нее и выполним команду захвата изображения: mkdir ~/pi_cam/ cd ~/pi_cam/ raspistill -v -o test.jpg
В случае фейла следует проверить предыдущие шаги, либо прозвонить контакты разъемов на камере и на Малине.
В ОС Raspbian предустановлены следующие пакеты для работы с камерой:
  • raspivid, raspvidyuv - захват видео
  • raspistill, raspiyuv- получение фотографий
Полное руководство по перечисленным утилитам на английском языке находится на офф. сайте Raspberry Pi
Все утилиты запускаются из терминала и достаточно просты в использовании.
Пакеты, с названиями, оканчивающимися на “yuv” не используют компонент кодирования - сохраняют “сырую” необработанную информацию, полученную сенсором камеры. Рассмотрим работу с каждым пакетом, но прежде познакомимся со списком общих для всех пакетов параметров камеры, а далее рассмотрим специфические аргументы и конкретные примеры их применения.

Общие параметры

Рассмотрим значения параметров. Стоит заметить, что:
  • Если какой то аргумент не указан при обращении к утилите, то применяется его значение по умолчанию.
  • ЕСЛИ КОЛОНКА “ДИАПАЗОН ДОПУСТИМЫХ ЗНАЧЕНИЙ” ПУСТА - значит никаких дополнительных значений передавать не нужно - достаточно передачи самого аргумента.
  • Превью демонстрируется только на подключенном к Raspberry физическом мониторе. В случае доступа к Малине через удаленный рабочий стол (VNC) превью демонстрироваться не будет при любых настройках так как изображение превью посылается напрямую на монитор поверх остальной информации
  • Аналогичная с просмотром видео через рабочий стол
Аргумент
Описание
Диапазон допустимых значений
Значение по умолчанию
-p
Параметры окна предпросмотра
ширина,высота,x-координата, y-координата
-f
Предпросмотр во весь экран
no
-n
Без предпросмотра
-op
Прозрачность окна предпросмотра
0...255
255
-sh
Резкость
-100...100
0
-co
Контраст
-100...100
0
-br
Освещенность
0...100
50
-sa
Насыщенность
-100...100
0
-ISO
Чувствительность датчика в камере
-100...100
0
-vs
Стабилизация видео
(только для видео)
no
-ev
Экспокоррекция
-10...10
0
-ex
Экспозиция
  • night
  • nightpreview
  • backlight: подсветка позади объекта съемки
  • spotlight: освещение прожектором
  • sports: объект в движении
  • snow: снежный пейзаж
  • beach: пляжный пейзаж
  • verylong: затяжная экспозиция
  • fixedfps: ограничение FPS до фиксированного значения
  • antishake: антитряска
  • fireworks: пейзаж с фейерверками
auto
-awb
Баланс белого
  • sun: 5000K...6500K - солнечно
  • cloud:6500K ... 12000K облачно
  • shade: в тени
  • tungsten: 2500K ... 3500K вольфрам
  • fluorescent: 2500K ... 4500K
  • incandescent: раскаленный металл
  • flash: со вспышкой
  • horizon
auto
-ifx
Разнообразные эффекты
none, negative, solarise, posterise, whiteboard, blackboard, sketch, denoise, emboss, oilpaint, hatch, gpen, pastel, watercolour, film, blur, saturation, colourswap, washedout, colourpoint, colourbalance, cartoon
none
-cfx
Баланс цветов
0...255:0...255
128:128
-mm
Замер экспозиции
  • average: среднее
  • spot: точка
  • backlit: считать изображение с подсветкой
  • matrix: матричный замер
average
-rot
Поворот
0 ... 359
0
-hf
Отражение по горизонтали
No
-vf
Отражение по вертикали
No
-roi
Область интереса сенсора
координаты от левого верхнего угла и ширина и высота области
0 … 1,0 … 1,0 … 1,0 … 1
0,0,1,1
-ss
Скорость затвора
в микросекундах
6000000
-drc
Сжатие динамического диапазона
off
-st
показывать статистику
No
Далее рассмотрим утилиты по отдельности.


raspistill - захват фото

Эта утилита выдает кодированное сжатое изображение, и для выполнения этого действия есть немало параметров, передающихся аргументами при запуске raspistill.

Аргументы

Аргумент
Описание
Диапазон допустимых значений
Значение по умолчанию
-w
Ширина
0...макс
макс
-h
Высота
0...макс
макс
-q
Качество
0...100
75
-o
Имя файла
путь к файлу
-
-v
Вывод в терминал
Информация о процессе захвата
no
-t
Задержка перед действием
в миллисекундах
0
-tl
Таймлапс
пример: -tl 2000 -o image%04d.jpg
2000 - интервал
%04d - шаблон 4х значного числа
-
-e
Кодирование в формат
jpg, bmp, gif, and png
jpg
-x
Добавление EXIF тегов
до 32 тегов
-
-r
Сохранение массива Байера в Мeta-данных кодированного избражения
-

Примеры

Рассмотрим конкретные примеры использования raspistill:
Захват стандартного изображения через 2 секунды с сохранением в файл image.jpg (в той папке, в которой сейчас находитесь). Разрешение при этом будет стандартным (максимальным) raspistill -t 2000 -o image.jpg Тоже самое, но в разрешении 640х480 raspistill -o image.jpg -w 640 -h 480 Захват изображения с заниженным 5% качеством с сохранением в файл image.jpg (в той папке, в которой сейчас находитесь). При таком качестве размер изображения будет существенно меньше raspistill -o image.jpg -q 5 Получение изображения, кодированного в формат PNG с сохранением в файл image.png raspistill -o image.png –e png Получение стандартного изображения с двумя зашитыми EXIF-тегами: Артист - Борис, GPS-высота - 123,5 м raspistill -o image.jpg -x IFD0.Artist=Boris -x GPS.GPSAltitude=1235/10 Создание таймлапс-набора изображений, которые будут захватываться с интервалом в 10 секунда на протяжении 10 минут (600 000 мс) и называться image_num_001_today.jpg, image_num_002_today.jpg и так далее. Завершающее изображение будет иметь имя latest.jpg raspistill -t 600000 -tl 10000 -o image_num_%03d_today.jpg -l latest.jpg Захват изображений при нажатии клавиши Enter, файлы будут сохраняться рядом и называться my_pics01.jpg my_pics02.jpg и т.д. raspistill -t 0 -k -o my_pics%02d.jpg

raspiyuv

Аргументы запуска в точности как у raspistill (см. выше), из них НЕДОСТУПНЫ только следующие:
-q - качество
-e - указание целевого формата изображения
-x - Добавление EXIF тегов
-r - Сохранение массива Байера в Meta-данных кодированного изображения
Однако имеется СОБСТВЕННЫЙ аргумент
-rgb - сохранение “сырых” raw-данных в формате RGB888 (8 бит/канал)

raspivid - захват видео

Параметры запуска

Аргумент
Описание
Диапазон допустимых значений
Значение по умолчанию
-w
Ширина
0...макс
1920
-h
Высота
0...макс
1080
-b
Битрейт видео
количество бит в секунду.
10Mbits/s задается -b 10000000
-o
Имя файла
путь к файлу
-
-v
Вывод в терминал
Информация о процессе захвата
-t
Задержка перед действием
в миллисекундах
0
-fps
Фреймрейт
Количество кадров в секунду 2...30
-k
Запуск/останов записи по нажатию Enter
процесс прерывается нажатием “X”
-sg
Сохранение отрезков видео с фиксированной продолжительностью в отдельные файлы
Задается длительность одного отрезка и маска файлов
-sg 3000 -o video%04d.h264
-wr
Ограничение максимального количества файлов при сегментации
Применяется с аргументом -sg и по сути реализует циклическую перезапись как в видеорегистраторах
Разрешение по умолчанию - 1080p (1920x1080)
Рассмотрим конкретные примеры:
Запись 5-ти секундного стандартного видео (1920x1080, 30 кадров/сек) с сохранением в файл video.h264 raspivid -t 5000 -o video.h264 Запись 5-ти секундного ролика с разрешением 1080p и специфическим битрейтом 3.5Mbits/s с сохранением в файл video.h264 raspivid -t 5000 -o video.h264 -b 3500000 Запись 5 секунд видео стандартного разрешения с частотой кадров 5fps с сохранением в файл video.h264 raspivid -t 5000 -o video.h264 -f 5 Если к Raspberry подключен монитор через HDMI, то записанное видео можно посмотреть с помощью плеера omxplayer: sudo apt-get install omxplayer #если плеер еще не установлен omxplayer video.h264 Через VNC просмотр видео недоступен

Коды ошибок

  • 0 - успешное завершение
  • 64 - передана неверная команда (ошибка в синтаксисе)
  • 70 - ошибка в утилите или при связи с камерой
  • 130 - выполнение прервано пользователем (сочетанием клавиш Ctrl + C)

Библиотека PiCamera

Это библиотека для языка программирования Python позволяющая упростить и автоматизировать работу с камерой Raspberry
Полное описание библиотеки на английском
В современных версиях дистрибутива Raspbian библиотека уже предустановлена, проверить это можно через консоль Python python3 import picamera В случае фейла необходимо покинуть консоль введя команду exit() или сочетанием клавиш Ctrl + D и установить библиотеку командой sudo apt-get install python3-picamera Работа с камерой из кода Python аналогично рассмотренным выше терминальным командам. Получить стандартное изображение с камеры можно легко прямо в консоли Питона: import picamera #импортируем библиотеку работы с камерой camera = picamera.PiCamera() #создаем объект камеры camera.capture("image.jpg") #вызываем у объекта камеры метод захвата изображения camera.close() #закрываем сессию работы с камерой Изображение сохраниться в файл image.jpg в текущей папке.

Два года назад, когда я только начал заниматься мультикоптерами, мне пришлось сделать небольшой . Поскольку квадрокоптер задумывался сугубо автономным, все что требовалось от этого пульта - это управлять беспилотником во время испытаний и настройки.

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

  1. Батарейки в корпус никак не влазили, поэтому приходилось их приматывать к корпусу изолентой:)
  2. Настройка параметров была вынесена на четыре потенциометра, которые оказались очень чувствительными к температуре. В помещении настраиваешь одни значения, выходишь на улицу - а они уже другие, уплыли.
  3. У Arduino Nano, которую я использовал в пульте, есть всего 8 аналоговых входов. Четыре были заняты настроечными потенциометрами. Один потенциометр служил газом. Два входа были подключены к джойстику. Оставался свободен только один выход, а параметров для настройки гораздо больше.
  4. Единственный джойстик был вовсе не пилотным. Управление газом с помощью потенциометра тоже весьма угнетало.
  5. А еще пульт не издавал никаких звуков, что иногда бывает крайне полезно.

Чтобы устранить все эти недостатки, я решил кардинально переделать пульт. И железную часть, и софт. Вот что мне захотелось сделать:

  • Сделать большой корпус, чтобы в него можно было запихнуть все что хочется сейчас (включая батарейки), и что захочется позже.
  • Как-то решить проблему с настройками, не за счет увеличения числа потенциометров. Плюс, добавить возможность сохранения параметров в пульте.
  • Сделать два джойстика, как на нормальных пилотных пультах. Ну и сами джойстики поставить православные.

Новый корпус

Идея чрезвычайно проста и эффективна. Вырезаем из оргстекла или другого тонкого материала две пластины и соединяем их стойками. Все содержимое корпуса крепится либо к верхней, либо к нижней пластине.

Элементы управления и меню

Чтобы управлять кучей параметров, нужно либо разместить на пульте кучу потенциометров и добавить АЦП, либо делать все настройки через меню. Как я уже говорил, настройка потенциометрами не всегда хорошая идея, но и отказываться от нее не стоит. Так что, решено было оставить в пульте четыре потенциометра, и добавить полноценное меню.

Чтобы перемешаться по меню, и менять параметры обычно используют кнопки. Влево, вправо, вверх, вниз. Но мне захотелось использовать вместо кнопок энкодер. Эту идею я подсмотрел у контроллера 3D-принтера.


Разумеется, за счет добавления меню, код пульта распух в несколько раз. Для начала я добавил всего три пункта меню: "Telemetry", "Parameters" и "Store params". В первом окне отображается до восьми разных показателей. Пока я использую только три: заряд батареи, компас и высота.

Во втором окне доступны шесть параметров: коэффициенты PID регулятора для осей X/Y,Z и корректировочные углы акселерометра.

Третий пункт позволяет сохранять параметры в EEPROM.

Джойстики

Над выбором пилотных джойстиков я долго не размышлял. Так получилось, что первый джойстик Turnigy 9XR я добыл у коллеги по квадрокоптерному делу - Александра Васильева, хозяина небезызвестного сайта alex-exe.ru . Второй такой же заказал напрямую на Hobbyking.


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

Питание

В старом пульте я использовал простой регулятор напряжения LM7805, который кормил связкой из 8 батареек AA. Жутко неэффективный вариант, при котором 7 вольт уходили на нагрев регулятора. 8 батареек - потому что под рукой был только такой отсек, а LM7805 - потому что в то время этот вариант мне представлялся самым простым, и главное быстрым.

Теперь же я решил поступить мудрее, и поставил достаточной эффективный регулятор на LM2596S. А вместо 8-ми AA батареек, установил отсек на два LiIon аккумулятора 18650.


Результат

Собрав все воедино, получился вот такой аппарат. Вид изнутри.


А вот с закрытой крышкой.


Не хватает колпачка на одном потенциометре и колпачков на джойстиках.

Наконец, видеоролик о том, как происходит настройка параметров через меню.


Итог

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

По ходу настройки пульта, были выявлены недостатки. Во-первых, нижние углы пульта упираются в руки:(Наверное я немного перепроектирую пластины, сглажу углы. Во-вторых, даже дисплея 16х4 не хватает для красивого вывода телеметрии - приходится названия параметров сокращать до двух букв. В следующей версии девайса установлю точечный дисплей, либо сразу TFT матрицу.