Сборка робота raspberry

Мобильный робот с камерой на Raspberry Pi

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

Наша плата выглядит так:

Данная версия платы оснащена процессором ARM11 фирмы Broadcom BCM2835[4] с тактовой частотой 700 МГц и модулем оперативной памяти на 256МБ/512МБ.

Raspberry Pi работает под управлением операционной системы Linux.
Мы, будем использовать плату версии «B» с установленной ОС Raspbian.

1. Сборка робота на базе гусеничной платформы

Raspberry Pi и камера будут установлены на гусеничную платформу. По сути это будет мобильная система видеонаблюдения.

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

Электропитание платы и моторов раздельное. На моторы стоит 8 аккумуляторов по 1.2 вольта, на плату стоять 2 аккумулятора по 3.7 вольта. Все аккумуляторы включены последовательно. Моторы получают питание через драйвер моторов выполненный на L293D с помощью навесного монтажа.

Электропитание самой платы осуществляется через линейный стабилизатор, так как требуется фиксированное напряжение в 5 вольт.

Что умеет данная платформа делать:
1. Сам перемещаться по площади (квартире и тд) используя датчик Ultrasonic HC-SR04 для обьезда препядствий.
2. Снимать через определенное время фото (видео кадр) снимок и отправлять его на яндекс или гугл диск.
3. Сам подъезжать на базу для подзарядки используя ИК-локатор.
4. Возможность ручного управления, используя браузер и интернет.

Стабилизатор для питания самой платы raspberry.
На макетной плате был собран драйвер управления моторами на L293 и установлен гироскоп mpu-6050, подключенный по шине I2C.

Общаться с интернетом будет за счет вот такого WiFi адаптера Tp-Link.

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

Так же установлена камера для raspberry pi с CSI интерфейсом.

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

Управлять им будет Raspberry напрямую с GPIO портов, как и моторами движения через микросхему L293D.

Зарядка робота будет осуществляется с док станции к которой надо будет подъехать. Для этого на передней части шасси установлены контакты для подзарядки.

Была куплена в магазине вот такая макетная плата на которой все будет смонтировано. От деталей конструктора Lego для крепления Raspberry пришлось отказаться, так как не все умещается.

Прикрепив ее к шасси получаем.

Далее на штырьки так крепим саму Raspberry Pi.

Теперь на шасси.

Примерно вот так будет ездить платформа:

2. Общая схема подключения

3. Подключение моторов

Подробно разберём схему подключения моторов с помощь L293D.

Порты GPIO Raspberry Pi к драйверу моторов подключаем следующим образом:

Левый мотор:
L293 IN1 on GPIO 9
L293 IN2 on GPIO 10
L293 EN1 on GPIO 11

Правый мотор:
L293 IN3 on GPIO 23
L293 IN4 on GPIO 24
L293 EN2 on GPIO 25

4. Настройка Raspberry Pi

Для того чтобы управлять данным шасси удалено, нужен белый IP адрес (постоянный), который можно сделать с помощью роутера находящегося в помещении.

Для удаленного управления и настройки нам понадобится программа PuTTY. Скачать ее можно на просторах интернета.

На Raspberry нужно включить SSH сервер, если вы этого не сделано то в консоли нужно набрать команду

В пункте SSH нажать на Enable. Далее перезагрузить плату, теперь мы можем удаленно подключится.

Устанавливаем на нашем компьютере PuTTY и настраиваем ее. Для этого в вкладке «Сеанс» вводим IP адрес Raspberry Pi. IP адрес можно посмотреть в настройках роутера. Номер порта оставляем 22, тип соединения SSH. Нажимаем «Сохранить» введя при этом название сеанса. Теперь настройки сохранены.

Далее выбираем пункт Соединение -> Данные и вводим наши имя и пароль для входа на Raspberry. Если не меняли, то имя и пароль те же: pi и raspberry. Вводим мы это для того, чтобы не вводить каждый раз имя и пароль при входе.

Теперь выбираем пункт SSH ->X11 и ставим галочку напротив «Включить переадресацию X11», а в строчке «Отображение дисплея Х» необходимо написать

Вернемся в вкладку «Сеанс» и сохраняем все настройки под тем именем, что уже записали. Всё, настройка завершена! Нажимаем «Соединить» и входим в командную строку Raspberry Pi.

Теперь настраиваем картинку с камеры в браузер. Для этого в командной строке вводим:

После завершения работы команды, пишем следующую:

и включаем поддержку камеры.

Перезагружаемся, снова запускаем PuTTY и соединяемся с raspberry. Далее устанавливаем приложения нужные для правильной работы mjpg-streamer:

Скачиваем исходники mjpg-streamer:

Потом распаковываем полученный архив:

Заходим в папку

Командой nano меняем файл start.sh

удаляем там две незакомментрованные строки и пишем вместо них

Выходим из редактора командой Ctrl+X, затем Enter (соглашаемся с изменением) и Y (да).

В папке mjpg-streamer-experimental запускаем наш скрипт:

Должно запуститься и в консоли будет много букв на камере загорится светодиод.
Команда Ctrl+C остановит скрипт и светодиод погаснет.

Открываем браузер, заходим по такой ссылке:

(где ip-address-raspberry – это IP нашей raspberry) и попадаем на вебсервер, нажимаем на Stream и видим:

Чтоб робот двигался необходимо установить веб-интерфейс, который будет управлять роботом. Устанавливаем. Для начала скачиваем WebIOPi

Заходим в папку

и запускаем файл установки командой

После установки, командой:

делаем автозапуск интерфейса с raspberry.

Как всегда открываем браузер, заходим по такой ссылке: ip-address-raspberry:8000 и получаем

Источник

Сделать робота на raspberry pi, обновленный pi-tank. Часть 2. Софт

Вторая часть полностью посвящена описанию программного обеспечения, используемого на роботе.

Так как разработанный робот (pi-tank) по большому счету рассчитан на начинающих роботостроителей, то все будет максимально упрощено, а в конце статьи будет приложен образ (image) для raspberry pi для самостоятельного дальнейшего изучения.

Небольшая оговорка. На предлагаемом образе для raspberry pi, рассчитанном на sd карту размером 8 Гб все настроено и установлено. Никаких дополнительных шагов предпринимать не требуется. Это сделано с целью упростить и облегчить часть, связанную с софтом, так как, исходя из практики, не всякий робототехник дотягивает до финиша, когда реализуется многокомпонентный проект.

Поэтому статья посвящена скорее настройке софта «под себя», однако она позволит также пролить свет на то, как все собрать и настроить с нуля.

Основа

В качестве отправной точки при разработке был взят RPi-Cam-Web-Interface. Достаточно древний, но тем не менее, не потерявший своей актуальности «фреймворк».

Как его установить подробно описано на странице проекта и сложностей вызвать:

Есть нюансы для дистрибутива buster (о них написано на сайте проекта), но для Raspbian Stretch, который используется на роботе, все штатно.

После установки доступен web-сервер, который выводит по адресу raspberry-ip:8080/html/ картинку «по умолчанию»:

Данная картинка отличается от того, что можно наблюдать на роботе:

Как не трудно заметить, страница робота располагает стрелками для управления подвесом камеры (pan-tilt), собранном на базе серв sg-90, а также пользовательскими кнопками для управления роботом («фары», «фары выкл» и т.п.).

Назначение кнопок интерфейса интуитивно понятно.

Также на web-странице имеются вкладки для более детальной настройки параметров камеры, а также работы с системой:

Как попасть на raspberry

При загрузке raspberry становится доступна через VNC c учетными данными логин — pi, пароль — raspberry.

wi-fi сеть, к которой по умолчанию подключается — логин — boss, пароль — 1234554321.
Также можно попасть по ssh, пара логин-пароль те же.

Как все работает и где поменять под себя

Вся начинка расположена в директории /var/www/html/, а сам RPi-Cam-Web-Interface стартует из /home/pi/RPi-Cam_Web_Interface.

Управление подвесом камеры осуществляется синими стрелками на web-странице. Сам фреймворк не умеет из коробки управлять сервами. Поэтому используется дополнительный пакет

И здесь есть небольшой нюанс. По умолчанию servoblaster использует gpio4 и gpio17 — пины raspberry для управления подвесами (сигнальные провода серв). По счастливому стечению обстоятельств те же самые пины использует «шапка» raspberry pi — witty pi 3 mini, отвечающая за питание, графики включения и т.п. Поэтому, чтобы железо не мешало друг другу пины для серв были перенесены для целей servoblasterа.

Делается это в /etc/rc.local командой:

При этом 13,15 — это физические пины, а не gpio! Остальные нули — это возможность подключить еще сервы и управлять ими. То есть еще 6 серв можно подключить, обозначив пины вместо нулей.

*Какие пины задействованы servoblasterом в текущий момент можно заглянув в файл — /dev/servoblaster-cfg

Также в /etc/rc.local задаются пины raspberry для управления двигателями:

*В данном случае gpio22 и gpio27 это и есть те пины 13,15, которые использует servoblaster.

Как с нуля настраивается pan-tilt описано на странице проекта здесь.

Как добавляются кнопки также описано на сайте в разделе «User buttons». Чтобы добавить или изменить кнопки («фары» и т.п.) необходимо обратиться к файлу /var/www/html/

Здесь строки означают наименование кнопок, а также соответствующий им скрипт управления.
Сами скрипты управления находятся в /var/www/html/macros. И, вполне возможно, данные скрипты придется править, т.к. при подключении проводов к драйверу двигателей l298n полярность может быть иной и робот поедет не в ту сторону, согласно нажатой кнопке.

Чтобы это исправить, необходимо открыть скрипт, например /var/www/html/macros/left.sh

#!/bin/bash
gpio -g write 9 0
gpio -g write 11 1
gpio -g write 6 0
gpio -g write 5 1
И попробовать комбинации замены 1 и 0 на gpio. Но как правило, можно просто поменять left.sh на forward.sh или на right.sh и т.п. в зависимости от ситуации.

Кнопки интерфейса с приставкой «м», отвечают за так называемый «малый ход»:

Это реализовано в скриптах left-m.sh и т.п. Ранее использовался pwm для управления. Однако стало понятно, что при задержках wi-fi и иных обстоятельствах расстояние, которое реализуется при нажатии на кнопку с pwm различается. Робот то уезжает слишком далеко до момента, когда нажата «стоп», то практически не реагирует, особенно, при разряжающихся батареях.
Поэтому был реализован простой подход в скрипте — подача сигнала и дальнейшее, через паузу, его гашение:

Witty pi 3 mini и управление питанием

Продукт Witty pi 3 mini был приобретен, чтобы минимизировать потери питания при работе от powerbank и увеличить общее время функционирования робота.
Ранее при выключении робота, которое реализовано на web-странице —

включить робота заново без посторонней помощи было невозможно. Были варианты с помощью внешней arduino, но все это было непросто и не эстетично.

Witty pi 3 mini не единственное решение в своем роде, и даже не первое в своей линейке. Но оно более-менее доступное и работающее из коробки.

Софт устанавливается предельно

После установки может потребоваться уточняющая настройка в /home/pi/uwi/uwi.conf

host=’192.168.1.105′;
port=8000;
web_socket_url=’ws://’+host+’:’+port+’/’;
response_timeout=5000;
reconnect_timeout=1000;
debug=0;

Далее при каждой загрузке на web странице raspberry:8000 (127.0.0.1:8000) будет доступен
web-интерфейс с настройками:

Первая вкладка — это просто еще один способ управлять gpio raspberry pi —

вторая вкладка — это непосредственно настройки witty pi —

На температурный датчик можно не обращать внимание, т.к. его точность сомнительна.

Можно настраивать прямо с web-страницы, но так же можно и с помощью скрипта:
/home/pi/wittypi/wittyPi.sh. При запуске скрипта, он выводит то же самое, что доступно на web-странице:

>>> Current temperature: 28.75°C / 83.75°F
>>> Your system time is: Sat 03 Apr 2021 16:20:47 MSK
>>> Your RTC time is: Sat 03 Apr 2021 16:20:48 MSK
>>> Vin=4.73V, Vout=4.68V, Iout=1.13A
Now you can:
1. Write system time to RTC
2. Write RTC time to system
3. Synchronize time
4. Schedule next shutdown
5. Schedule next startup
6. Choose schedule script
7. Set low voltage threshold
8. Set recovery voltage threshold
9. View/change other settings.
10. Reset data.
11. Exit

Здесь необходимо:

  • синхронизировать время на witty pi c системными часами raspberry (3. Synchronize time)
  • записать это время в rtc (1. Write system time to RTC)
  • далее поработать с пробуждением либо засыпанием, но проще сразу выбрать какой-нибудь
  • скрипт

[1] 7:00_on_7:30_off_21:00_on_21:30_off.wpi
[2] on_10m_every_2h.wpi
[3] on_1h_every_2d.wpi
[4] on_30m_everyday_but_weekend.wpi
[5] on_5m_every_20m.wpi
[6] turn_on_every_hour.wpi

Например [5], просыпаться на 5 минут каждые 20 минут.

После выбора скрипта соответствующие интервалы сна будут сразу обозначены:

— обязательно заглянуть в другие настройки (9. View/change other settings. )
Здесь необходимо настроить [5] Dummy load duration [0] — это паразитные импульсы для powerbankа, не дающие ему уснуть. Так как большинство powerbankов снимают питание при минимизированной нагрузке. Диапазон значений 0-255.

Все остальные настройки можно не трогать.

Witty pi предполагает также возможность контроля напряжения питания и корректное отключение при падении, а также включение при изменившихся условиях.

Доступна также более гибкая регулировка в части создания своих собственных графиков включения и выключения — скриптогенератор:

Об этом подробно написано в инструкции.

Пока все. Если что-то забыто или непонятно — пишите.

Источник

Adblock
detector