Вход
Регистрация | Забыли пароль?
Поиск
Рубрики
Рейтинг
Облако тэгов
raspberry pi 3, raspbian, windows, ubuntu, linux, умный дом, windows 10, osmc, игры, python, gpio, установка ос, raspberry pi 2, raspberry pi zero, raspberry pi zero w, слежение, самолёт, http, diy, 1c-битрикс, оружие, сеть, кластер, бесперебойник, акустикаБоковое меню
Установка робота-фотографа на Raspberry Pi
Raspberry Pi – это востребованный одноплатный мини-компьютер, который можно адаптировать под решение множества бытовых задач. Он может работать на операционной системе Linux. В качестве эксперимента на нем был реализован любопытный проект создания подвижного робота с веб-камерой. Робот с функциями фото- и видеосъемки размещен на управляемой через web-интерфейс подвижной платформе.
По проекту для робота задаются следующие требования:
• возможность управления через Wi-Fi сигнал;
• способность передвижения платформы по команде;
• видеосъемка по ходу движения;
• съемка фото высокого качества;
• получение команд с основного компьютера, отправка на него видео и фото.
Базовым макетом для нашего кибер-фотографа является Raspirobot – специально разработанная для Raspberry Pi платформа, содержащая аппаратные компоненты, через которые реализуется перемещение и повороты конструкции. Специально для нее оптимизировано программное обеспечение, доработанное для управления камерой робота. С этой целью веб-интерфейс добавлены кнопки «фото» и «видео».
Этот робот создан в качестве примера использования интерфейса. Его возможности очень широки, с его помощью можно управлять любыми привычными предметами окружения. Таким образом на базе мини-компьютера можно создать пульт управления «умным» домом.
При разработке этого интерфейса использовался фрейморк WebIOPi – он позволяет даже не очень хорошо знакомому с php, nginx пользователю, не обладающему знанием прикладных программах, быстро отладить проект.
Итак, для воссоздания эксперимента необходимо:
• умение работать с python для создания алгоритма (уровень сложности программируемого алгоритма, соответственно, зависит от уровня знания);
• способность писать код в HTML для доработки веб-интерфейса;
• навык работы в javascript и в jquery;
• элементарный навык паяния, чтобы спаять специальную приводную плату.
Также придется вводить ряд команд из терминала, что может быть несколько сложно для неопытных пользователей Linux.
Что же такое WebIOPi?
Это – готовый продукт от Internet of Things для работы с портами ввода-вывода (GPIO) на Raspberry Pi. При помощи этого фреймворка можно управлять всеми портами как локально, так и удаленно – через обычный браузер или специальные программы, а также определять их состояние.
Какие именно он дает преимущества:
1. Дефолтная поддержка почти сорока устройств (ADC, DAC, различные датчики и т.п.);
2. Совместимость с python 2-й и 3-й версий;
3. Отличная адаптивность к потребностям пользователя;
4. Возможность защиты парой логин-пароль;
5. Многовариантность применения;
6. Сервер разработан на python-е;
7. Работа с SPI, 1-Wire, I 2C, GPIO, Serial;
8. CoAP c REST-архитектурой поддерживает IP Multicast;
9. Возможность работы с облачным сервисом.
Для инсталляции WebIOPi предустановите на мини-компьютере Python совместимой версии. В таком случае установка осуществляется через терминал:

$ tar xvzf WebIOPi-0.6.0.tar.gz
$ cd WebIOPi-0.6.0
$ sudo ./setup.sh
После установки запускаем фреймворк с помощью командной строки:
Options:
-h, --help Display this help
-c, --config file Load config from file
-l, --log file Log to file
-s, --script file Load script from file
-d, --debug Enable DEBUG
Arguments:
port Port to bind the HTTP Server
Тут есть нюанс – если закрыть терминал, или сочетанием Ctrl+C прервать скрипт, доступ к портам и сервер потеряются. Чтобы этого избежать, стоит запускать фреймворк как сервис. Делаем это следующим образом:
Запуск –
Отключение –
Возможен вариант настройки автозапуска WebIOPi при включении компьютера:
Теперь проверим
Для проверки работоспособности пробуем в адресной строке браузера ввести http://[IPRasp]:8000 (только [IPRasp] заменяем на реальный IP-адрес вашего Raspberry) на своем основном компьютере. Для первичной авторизации вводим логин: webiopi и пароль: raspberry. Должна открыться стартовая страница WebIOPi, и вы получаете доступ к web-интерфейсу Pi.
Учтите, что не все браузеры корректно работают с кодом фреймворка, поэтому разработчик Internet of Things рекомендует использовать Google Chrome в новейшей доступной версии, либо Safari и Firefox. А вот при использовании обычного Explorer почти гарантированно возникнут проблемы.
Отображаться порты GPIO будут приблизительно таким образом:

Можно отрегулировать выходной показатель каждого порта и установить для них режим работы.
Итак, перейдем непосредственно к роботу WebCamBot
Для его изготовления доработан открытый проект подвижного робота с веб-камерой CamBot. Как говорилось выше, драйвера моторов размещались на плате Raspirobot, в которую добавлен импульсный регулятор. Для управления электромоторами, приводящими конструкцию в движение, будут задействованы четыре порта мини-компьютера.
LEFT_GO_PIN = 17 #PWM сигнал скорости
LEFT_DIR_PIN = 4 #направление движения
# Right motor GPIOs
RIGHT_GO_PIN = 10 #PWM
RIGHT_DIR_PIN = 25 #направление движения
Камера может работать в одном из режимов: транслировать текущий видеопоток с низким качеством и снимать фото с высоким качеством. Режим можно поменять с помощью скриптов: stream.sh, stream_stop.sh, photo.sh.
Для фотографирования:
fswebcam -d /dev/video0 -p MJPEG -r 640x480 --jpeg 95 --shadow --title "cambot" --subtitle "Front camera" --info "" --save /usr/share/webiopi/htdocs/app/Raspirobot/ph.jpg -q
Для включения камеры:
STREAMER=mjpg_streamer
DEVICE=/dev/video0
RESOLUTION=160x120 #320x240
FRAMERATE=25
HTTP_PORT=8001
# check for existing webcam device
if [ ! -e "/dev/video0" ]; then
echo "stream.sh: Error - NO /dev/video0 device" 2>&1 | logger
exit 2
fi
PLUGINPATH=/home/pi/mjpg-streamer-r63
"$PLUGINPATH/$STREAMER" -i "$PLUGINPATH/input_uvc.so -n -d $DEVICE -r $RESOLUTION -f $FRAMERATE" -o "$PLUGINPATH/output_http.so -n -p $HTTP_PORT" -b
Для отключения камеры:
kill -9 `pidof mjpg_streamer`
Упрощенный веб-интерфейс
Процесс написания web-интерфейса оптимизирован – достаточно лишь с помощью возможностей javascript создать кнопки управления, активизирующие макросы, ранее прописанные для Raspberry на Python. Эти кнопки через jQuery необходимо внести в HTML код веб-страницы.
1. Механизм такой:
$("#up").append(button); // добавление кнопки в div с id=up
2. Сама функция вызывает макрос go_forward:
3. Прописываем также возможность управления с клавиатуры:
{
switch(e.which)
{
case 37:turn_left(); break; //key Arroy left
case 38:go_forward(); break; // key Arroy up
case 39:turn_right(); break; //key Arroy right
case 40:go_backward(); break; //key Arroy down
case 32:stop(); break; //key Space
case 75:camera(); break;. .//key K
case 80:photo(); break; // key P
}
});
4. После выполнения компьютером макроса фото и потоковое видео загружаются в HTML:

Конфигурация
Для настройки WebIOPi нужно открыть файл по пути /etc/webiopi/. В файле будет несколько блоков, нас интересует два из них:
1. Содержащий описание макросов:
# Load custom scripts syntax :
# name = sourcefile
# each sourcefile may have setup, loop and destroy functions and macros
cambot =/usr/share/webiopi/htdocs/app/Raspirobot/cambot.py =/usr/share/webiopi/htdocs/app/Raspirobot/cambot.py
В него необходимо внести строку типа «name = sourcefile» с прописанными макросами в скрипте python.
2. Содержащий настройки сервера:
# HTTP Server configuration
enabled = true
port = 8000
# File containing sha256(base64("user:password"))
# Use webiopi-passwd command to generate it
passwd-file = /etc/webiopi/passwd
# Use doc-root to change default HTML and resource files location
#doc-root = /home/pi/webiopi/examples/scripts/macros
# Use welcome-file to change the default "Welcome" file
#welcome-file = index.html
В нем можно изменить конфигурацию сервера.
Необходимые скрипты
Чтобы написать упомянутый скрипт с макросами, вводим необходимые при включении и отключении сервера функции setup и destroy. В них будет определяться состояние портов GPIO и режим работы.
Чтобы эти опции стали доступны в веб-интерфейсе, перед ними ставим указатель @webiopi.macro. В частности, для функции, приводящей робота в движение, описание будет выглядеть так:
def go_forward():
left_forward()
right_forward()
А для управления камерой будет использоваться команда call, активирующая скрипт:
return_code = call("/usr/share/webiopi/htdocs/app/Raspirobot/stream.sh", shell=True)
В итоге у вас получится интерфейс следующего вида:

Отладка
В случае, если не открывается страница приложения, наверняка в коде спряталась ошибка. Облегчить ее поиск можно с помощью написанного скрипта и посмотреть, какие получились ошибки/предупреждения. Также рекомендуем проверить файл в каталоге /var/log/webiopi.
В случае, когда страница отображается корректно, но нет отклика на кнопки управления, очевидно проблема в javascript.
Источник