Raspberry Pi

Русский сайт по микрокомпьютеру
Предложить пост

Вход








Регистрация | Забыли пароль?

Поиск



По всему сайту
По тэгам
По тэгам и заголовкам

Рубрики

  • Проекты и статьи
  • Модели
  • Новости
  • Мысли
  • Рейтинг

  • 1. Хакеры могут атаковать устройства Apple через Bluetooth и Raspberry Pi
  • 2. Новая операционная система для государства Российского!
  • 3. Настройка приёма цифрового телевещания dvb-t2 на компьютере Raspberry PI
  • 4. Используем старую кассету в качестве корпуса под Raspberry Pi
  • 5. Умное ружьё "Калашников" на базе Raspberry Pi
  • Облако тэгов

    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-битрикс, оружие, сеть, кластер, бесперебойник, акустика

    Боковое меню

  • RSS-канал
  • Карта сайта
  • Обратная связь
  • Пользователи


    Top.Mail.Ru
  • Установка робота-фотографа на 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 совместимой версии. В таком случае установка осуществляется через терминал:



    $ wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz
    $ tar xvzf WebIOPi-0.6.0.tar.gz
    $ cd WebIOPi-0.6.0
    $ sudo ./setup.sh


    После установки запускаем фреймворк с помощью командной строки:

    $ sudo webiopi [-h] [-c config] [-l log] [-s script] [-d] [port]

    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 прервать скрипт, доступ к портам и сервер потеряются. Чтобы этого избежать, стоит запускать фреймворк как сервис. Делаем это следующим образом:
    Запуск –

    $ sudo /etc/init.d/webiopi start


    Отключение –

    $ sudo /etc/init.d/webiopi stop


    Возможен вариант настройки автозапуска WebIOPi при включении компьютера:

    $ sudo update-rc.d webiopi defaults


    Теперь проверим
    Для проверки работоспособности пробуем в адресной строке браузера ввести http://[IPRasp]:8000 (только [IPRasp] заменяем на реальный IP-адрес вашего Raspberry) на своем основном компьютере. Для первичной авторизации вводим логин: webiopi и пароль: raspberry. Должна открыться стартовая страница WebIOPi, и вы получаете доступ к web-интерфейсу Pi.
    Учтите, что не все браузеры корректно работают с кодом фреймворка, поэтому разработчик Internet of Things рекомендует использовать Google Chrome в новейшей доступной версии, либо Safari и Firefox. А вот при использовании обычного Explorer почти гарантированно возникнут проблемы.

    Отображаться порты GPIO будут приблизительно таким образом:



    Можно отрегулировать выходной показатель каждого порта и установить для них режим работы.

    Итак, перейдем непосредственно к роботу WebCamBot


    Для его изготовления доработан открытый проект подвижного робота с веб-камерой CamBot. Как говорилось выше, драйвера моторов размещались на плате Raspirobot, в которую добавлен импульсный регулятор. Для управления электромоторами, приводящими конструкцию в движение, будут задействованы четыре порта мини-компьютера.

    # Left motor GPIOs
    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.

    Для фотографирования:

    #!/bin/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


    Для включения камеры:

    #!/bin/sh

    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


    Для отключения камеры:

    #!/bin/sh
    kill -9 `pidof mjpg_streamer`


    Упрощенный веб-интерфейс
    Процесс написания web-интерфейса оптимизирован – достаточно лишь с помощью возможностей javascript создать кнопки управления, активизирующие макросы, ранее прописанные для Raspberry на Python. Эти кнопки через jQuery необходимо внести в HTML код веб-страницы.

    1. Механизм такой:
    button = webiopi().createButton("bt_up", "/\", go_forward, stop); // создание кнопки с id bt_up, текстом /\, вызывающей функцию go_forward
    $("#up").append(button); // добавление кнопки в div с id=up


    2. Сама функция вызывает макрос go_forward:
    function go_forward() { webiopi().callMacro("go_forward"); }


    3. Прописываем также возможность управления с клавиатуры:
    $(document).keydown(function(e)
    {
    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:
    function camera() { $("#vid").html('');
    webiopi().callMacro("camera");
    $("#vid").html('<img width="320" height="240"
    src="http://raspberrypi.local:8001/?action=stream">'); }
    function photo() { $("#ph").html('');
    webiopi().callMacro("photo");
    $("#ph").html('<img src="Raspirobot/ph.jpg">'); }


    Конфигурация


    Для настройки WebIOPi нужно открыть файл по пути /etc/webiopi/. В файле будет несколько блоков, нас интересует два из них:

    1. Содержащий описание макросов:
    [SCRIPTS]
    # 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]
    # 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. В частности, для функции, приводящей робота в движение, описание будет выглядеть так:
    @webiopi.macro
    def go_forward():
    left_forward()
    right_forward()


    А для управления камерой будет использоваться команда call, активирующая скрипт:
    def camera_start():
    return_code = call("/usr/share/webiopi/htdocs/app/Raspirobot/stream.sh", shell=True)


    В итоге у вас получится интерфейс следующего вида:



    Отладка


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

    11.01.2020 в 14:30, Просмотров: 2144
    Опубликовал: ak167

    фото, робототехника

    ID: 61