Робот-фотограф на основе Raspberry Pi
Оценка пользователей: / 14
ПлохоОтлично 
Photo robot -1Raspberry Pi - популярный одноплатный микрокомпьютер, который можно использовать для решения различных задач. Робот-фотограф, которому предаются команды через web-интерфейс - одна из достаточно интересных и технически сложных задач.
Робот базируется на самодвижущейся платформе и имеет возможность фото- и видеосъемки.
Для робота можно сформировать такие задачи, как управление через WiFi, повороты вправо-влево, движение вперед-назад, а также съемка и отображение видео в web-интерфейсе в процессе движения робота.
Photo robot 2
Основой для RaspCamBot служит плата Raspirobot, где уже есть все необходимые аппаратные компоненты для передвижения макета в пространстве. Для платы создано оптимизированное программное обеспечение, в которое были интегрированы web-кнопки для управления камерой.
Для создания интерфейса используется фреймворк WebIOPi, так как он позволяет быстро запустить проект с незначительным знанием php, nginx и прикладных программ.
Плата RaspiRobot
Raspberry Pi проблематично использовать в качестве контроллера для различных узлов робототехники, так как в нем недостаточно выходов, которые могут управлять силовым нагрузкам. Однако можно подключить Raspberry Pi к плате RaspiRobot и получить полноценный контроллер для двигателей. Используя плату можно легко создать самодвижущуюся платформу c двумя коллекторными двигателями. Возможности платы:
  • Драйвер управления силовыми узлами
  • Стабілізатор напруги від батареї 6-12В для Raspberry Pi
  • Два двухтактных выхода (25 мА)
  • Индикаторы состояния
  • I2C шина
  • Открытое API на Python
Фреймворк WebIOPi
Фреймворк webiopi - законченный продукт для работы с GPIO портами (портами ввода-вывода) Raspberry Pi. Webiopi может управлять состоянием всех портов GPIO удаленно или локально, используя браузер или любую другую программу.
Возможности:
  • Сервер, созданный с использованием языка Python
  • Работа с Serial, 1-Wire, SPI, GPIO
  • Есть поддержка около 35 устройств, таких как датчики, DAC, ADC ...
  • Совместимость с версиями Python 2.7 и 3.2
  • Легкая адаптация под потребности пользователей
  • Аутентификация с помощью логина и пароля
  • Много примеров использования фреймворка
Инсталляция WebIOPi
Для установки WebIOPi необходим установленный Python версии 2.7 или 3.2.1. Установка выполняется такими командами из консольного терминала:
$ curl -o webio-pi.tar.gz  http://store.raspberrypi.com/checkout/project/7203c447-49fa-4fb7-b9dd-317a907b65df
$ tar xvzf webio-pi.tar.gz
$ cd webio-pi
$ sudo ./setup.sh
Далее необходимо запустить фреймворк в командном терминале:
$ Sudo webiopi [-c] [-s] [port]
Однако, по завершению скрипта сочетанием клавиш Ctrl-C или закрытия окна терминала, сервер webiopi будет закрыт и состояние портов будет потеряно. Поэтому, webiopi целесообразно запускать как демон (сервис).
Запуск:
$ sudo service webiopi start
Остановка:
$ sudo service webiopi stop
Проверка работоспособности
После запуска webiopi, в браузере необходимо перейти по ссылке вида http://[RaspIP]:8000, где [RaspIP] нужно заменить реальным IP-адресом Raspberry Pi. Далее, нужно ввести данные для авторизации - имя пользователя "webiopi" и пароль "raspberry". Для корректной работы автор фреймворка рекомендует использовать актуальные версии браузеров Firefox, Safari или Chrome, браузер Internet Explorer поддерживается не полностью. Пример интерфейса отображения состояния портов ввода-вывода:
Photo robot -GPIO
Используя web-интерфейс можно установить значение на выходе любого порта, а также задать режим его работы. Для этого достаточно нажать на нужный порт и во всплывающем меню выбрать режим работы и необходимые параметры выходного напряжения.
Управление web-камерой
Создание робота базируется на открытом проекте по сборке моторизованного работа с web-камерой - CamBot.
Управление web-камерой осуществляется с помощью консольных программ fswebcam и mjpg-streamer, для которых нужно создать скрипты инициализации фотографирования и начала/остановки видеозаписи.
Скрипт для фотографирования:
#!/bin/sh
savePath = "/usr/share/webiopi/htdocs/app/RaspCamBot/photo.jpg"
fswebcam -p MJPEG -r 800 x600 -d /dev/video0 --jpeg 90 --shadow --title "raspbot" --subtitle "Photo camera" –save -quiet $savePath
Скрипт начала видеозаписи с web-камеры:
#!/bin/sh
DEV_PATH = "/dev/video0"
PRG_STREAM=mjpg_streamer
MAX_RESOLUTION=320x240        #160x120
ACTIVE_PORT=8001
CAMERA=/dev/video0
# Попытка найти подключенную web-камеру
if [ ! -e $DEV_PATH ]; then
  exit 1
fi
FRAMERATE=15
PLUGIN_PATH=/home/adm/streamer-r65
"$PLUGIN_PATH/$PRG_STREAM" -f $FRAMERATE -i "$PLUGIN_PATH/input_uvc.so" -d $CAMERA -r $MAX_RESOLUTION -o "$PLUGIN_PATH/output_http.so" -p $HTTP_PORT -b
Web-интерфейс
Создание web-интерфейса для фреймворка webiopi весьма упрощено. После полной загрузки страницы браузером, необходимо добавить свои элементы управления посредством вызова специализированных API на языке javascript. Далее, нужно подключить обработчик событий к каждому элементу управления. Такие обработчики будут вызывать макросы, написанные на языке Python и хранятся на сервере.
Пример создания кнопки для передвижения вперед:
var handler = webiopi();
var action = "bt_up", begin_func = go, end_func = stop;
var control = handler.createButton(action, "/", begin_func,end_func);
$("#div_up_place").append(control);
Функції stop і go:
function go() {
    handler.callMacro("go");
}
function stop() {
    handler.callMacro("stop");
}
Написание скрипта на Python
Python-скрипт для webiopi должен содержать обязательную функцию setup и, опционально, функцию destroy. Функция setup выполняется при инициализации скрипта и используется для установки значений на портах ввода/вывода и определения режима их работы. Функция destroy вызывается по окончании выполнения скрипта и используется для возврата портов и других параметров системы в исходное состояние. Пример реализации функции go:
@webiopi.macro
def go():
    left_forward()
    right_forward()
Для начала или остановки записи web-камеры используется команда call, которая выполняет соответствующий shell-скрипт:
def record_start():
    return_cmd = call("/home/adm/RaspCamBot/stream.sh")
Как видим, создать робота и управлять им не так уж и трудно.
Автор Алексей Ляшук, магистрант НТУУ «КПИ»
 
>
КнигаНовости Практика поискаПартнерыО нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting