Оглавление:

Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +: 6 шагов (с изображениями)
Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +: 6 шагов (с изображениями)

Видео: Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +: 6 шагов (с изображениями)

Видео: Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +: 6 шагов (с изображениями)
Видео: Высокая плотность 2022 2024, Ноябрь
Anonim
Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +
Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +
Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +
Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +

Обзор

Это руководство будет посвящено тому, как дать мертвому Roomba новый мозг (Raspberry Pi), глаза (веб-камеру) и способ управлять всем с помощью веб-браузера.

Существует множество уловок Roomba, позволяющих управлять через последовательный интерфейс. Мне не повезло встретить Roomba с текущей прошивкой или работающей материнской платой. Либо Roomba слишком стар, либо Roomba мертв. Я нашел Roomba, который использовал для этого проекта, в местном магазине сбережений за 5 долларов. Аккумулятор в нем еще был приличный, но дохлая материнская плата. (Я также нашел веб-камеру в том же благотворительном магазине примерно за 5 долларов). Все, что я использую от оригинального Roomba, - это двигатели, шасси и аккумулятор. Вам не обязательно использовать Roomba для этого проекта. Вы можете использовать другие моторы, колеса и шасси, если хотите. Я просто мечтаю превратить кусок барахла во что-нибудь пригодное для использования.

Для этой сборки я использовал Raspberry Pi Model 3 A + и контроллер мотора Riorand. Я использую код робота, управляемого браузером Dexter Industries, который я модифицировал. Версия Dexter Industries настраивает Pi в качестве сервера веб-сокетов, который позволяет вам управлять своим роботом (платформа кирпичного пи) из клиентского html-файла, запущенного на другом компьютере.

Я изменил код, использующий контакты GPIO, и добавил способ выключения Pi при нажатии кнопки / при нажатии клавиши выхода в браузере. Я также внес некоторые изменения в веб-страницу управления, чтобы можно было просматривать поток движения через iframe, одновременно управляя роботом на одной странице. Я установил Pi со статическим IP-адресом для размещения клиентского файла, чтобы я мог подключаться с любого компьютера или устройства в моей сети.

Я документирую процесс здесь в надежде показать, как создать простого и недорогого базового робота.

Используемые детали

Raspberry Pi 3 A + (ссылка на Adafruit) 30 долларов

Контроллер с двумя драйверами двигателя Riorand H-Bridge (Amazon Link) $ 22

Аккумулятор 12 В для двигателей (ссылка на Amazon) $ 19

Аккумулятор 5 В для Raspberry Pi (ссылка на Amazon) 10 долларов

Карта Micro SD 8 ГБ (ссылка на Amazon) 5 долларов США

Провода перемычки (ссылка на Amazon) $ 7

Roomba серии 500

. Все вместе чуть меньше 100 долларов.

Шаг 1. Установите Raspbian и настройте статический IP-адрес

Установите Raspbian и настройте статический IP-адрес
Установите Raspbian и настройте статический IP-адрес

Я использовал Raspbian Stretch Lite. Я не видел необходимости в настольном компьютере, но вы можете установить настольную версию, если хотите.

Я предполагаю, что вы уже знаете, как установить Raspbian. Если вам нужна помощь, вы можете найти руководство Raspberry Pi Foundation здесь.

После того, как Raspbian будет запущен, войдите в систему и запустите программу raspi-config.

pi @ raspberrypi: ~ $ sudo raspi-config

Настройте соединение Wi-Fi в raspi-config

Выбирать

2 Параметры сети

Выбирать

N2 Wi-Fi

Выберите страну, введите свой SSID и введите парольную фразу.

Настроить SSH в raspi-config

После того, как я сделал начальную конфигурацию, я использовал SSH, чтобы настроить все без подключения к сети. (Вы можете пропустить это, если используете монитор. Мне было проще вносить изменения в код, не останавливая робота и не подключая его к монитору.)

Вернуться в главное меню raspi-config

Выбирать

5 вариантов интерфейса

Выбирать

P2 SSH

Выбирать

да

Вернувшись в главное меню raspi-config, выберите

Убедитесь, что вы подключены к своей сети

pi @ raspberrypi: ~ $ ifconfig

Вы должны получить результат, подобный этому. (Обратите внимание на IP-адрес; он может понадобиться позже, например, 192.168.1.18)

wlan0: флаги = 4163 MTU 1500

inet 192.168.1.18 сетевая маска 255.255.255.0 широковещательная передача 192.168.1.255 inet6 fe80:: c74f: 42ec: 8cd3: 2fda prefixlen 64 scopeid 0x20 ether b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) RX пакеты 44396 байт 5847726 (5.5 MiB) Ошибки RX 0 отброшено 0 переполнений 0 кадров 0 пакетов TX 30530 байт 39740576 (37,8 MiB) ошибок TX 0 отброшено 0 переполнений 0 несущей 0 коллизий 0

Убедитесь, что у вас есть доступ к Интернету.

pi @ raspberrypi: ~ $ ping google.com

Вы должны получить результат, подобный этому.

PING google.com (216.58.194.110) 56 (84) байт данных.

64 байта из dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 time = 18,2 мс 64 байта из dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 время = 19,4 мс 64 байта из dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 time = 23,6 мс 64 байта из dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 time = 30,2 мс ^ C --- статистика ping google.com --- 4 пакета передано, 4 получено, потеря пакетов 0%, время 3004 мс rtt min / avg / max / mdev = 18.209 / 22,901 / 30,267 / 4,715 мс

Настроить статический IP-адрес

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

Получите текущий сетевой адрес, например, 192.168.1.18.

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

Откройте dhcp.conf в текстовом редакторе. (Я использую нано)

pi @ raspberrypi: ~ $ sudo nano /etc/dhcpcd.conf

Прокрутите вниз до пункта # Пример статической IP-конфигурации и измените следующие строки.

# интерфейс eth0

# статический IP-адрес = 192.168.11.13 # статические маршрутизаторы = 192.168.11.1 # статический домен_имя_сервера = 192.168.11.1 8.8.8.8

Измените в соответствии с вашей сетью и удалите # в начале каждой строки.

Пример:

интерфейс wlan0

статический ip_address = 192.168.1.18 статические маршрутизаторы = 192.168.1.1 статические domain_name_servers = 192.168.1.1 8.8.8.8

Сохранить и выйти.

Перезагрузитесь и подключитесь к Pi через SSH

pi @ raspberrypi: ~ $ sudo reboot

Подключитесь с другого компьютера по SSH. Пользователи Windows могут использовать PuTTY или подсистему Windows для Linux (Windows10).

ian @ компьютер: ~ $ ssh [email protected]

Введите свой пароль (по умолчанию - малиновый).

[email protected] пароль:

Теперь вы должны быть в командной строке вашего Pi.

pi @ raspberrypi: ~ $

Шаг 2: Установите и настройте движение

Установить и настроить движение
Установить и настроить движение

Motion - это программа, используемая во многих проектах с камерами безопасности / веб-камерами. Движение имеет множество функций. Однако мы настраиваем его для простой потоковой передачи видео с веб-камеры на порт 8081.

Проверьте свою веб-камеру

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

pi @ raspberrypi: ~ $ lsusb

Вы должны получить аналогичный результат. Обратите внимание на Logitech C210.

Шина 001 Устройство 002: ID 046d: 0819 Logitech, Inc. Веб-камера C210

Шина 001 Устройство 001: ID 1d6b: 0002 Корневой концентратор Linux Foundation 2.0

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

Установить движение

Обновите пакеты.

pi @ raspberrypi: ~ $ sudo apt-get update

Установите Motion.

pi @ raspberrypi: ~ $ sudo apt-get install motion -y

После установки Motion отредактируйте файл конфигурации.

pi @ raspberrypi: ~ $ sudo nano /etc/motion/motion.conf

Измените следующие строки, чтобы они соответствовали приведенным ниже.

демон на

ширина 640 высота 480 частота кадров 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off

Запустить демон движения при загрузке

Откройте файл / etc / default / motion.

pi @ raspberrypi: ~ $ sudo nano / etc / default / motion

Изменить на

start_motion_daemon = да

Сохраните файл и выйдите

Перезагрузить

pi @ raspberrypi: ~ $ sudo reboot

После перезагрузки Pi откройте браузер и убедитесь, что у вас есть потоковое видео в браузере через порт 8081.

Пример:

192.168.1.18:8081

Устранение неполадок демона движения

У меня возникли проблемы с запуском демона движения при загрузке, когда я пробовал различные параметры в файле motion.conf.

Если вы начнете движение до демона движения в Raspian Stretch, вы, вероятно, столкнетесь с проблемами при его запуске при загрузке позже. Запуск «sudo motion» без настройки демона для этого сначала создает каталог / var / log / motion без предоставления пользователю прав на запись.

Шаг 3. Установка Apache и настройка страницы веб-контроля

Установить Apache и настроить страницу веб-контроля
Установить Apache и настроить страницу веб-контроля

Apache - это веб-сервер для веб-страницы управления роботом. Мы собираемся заменить стандартный файл Apache index.html файлом, загруженным с github. Вы также измените пару строк кода, чтобы отобразить видеопоток движения и указать, куда отправлять команды для управления роботом.

Установите Apache и Git

pi @ raspberrypi: ~ $ sudo apt-get install apache2 git -y

После установки apache и git загрузите файлы.

pi @ raspberrypi: ~ $ git clone

Откройте каталог roombarobot.

pi @ raspberrypi: ~ $ cd roombarobot

Замените файл index.html в папке / var / www / html файлом index.html в папке / home / pi / roombarobot.

pi @ raspberrypi: ~ / roombarobot $ sudo cp index.html / var / www / html

Отредактируйте файл index.html

Откройте файл index.html в текстовом редакторе.

pi @ raspberrypi: ~ / roombarobot $ sudo nano /var/www/html/index.html

Найдите эти две строки

var host = "WS: // ВАШ АДРЕС: 9093 / WS";

Измените «YOURIPADDRESS» на статический IP-адрес, который вы установили на шаге 1, и сохраните файл.

Пример:

var host = "WS: //192.168.1.18: 9093 / WS";

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

Шаг 4: Установите и протестируйте код

Настройте и протестируйте код
Настройте и протестируйте код

Этот код написан на Python и требует библиотеки tornado. Код использует библиотеку для настройки сервера для прослушивания команд с веб-страницы управления через веб-сокеты на порту 9093.

Установите PIP и библиотеку Tornado

Установить пип

pi @ raspberrypi: ~ $ sudo apt-get install python-pip

Установить библиотеку торнадо

pi @ raspberrypi: ~ $ sudo pip install tornado

Запустите программу Roombabot и проверьте соединение

Запустите программу roombabot.py

pi @ raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py

После запуска вы должны увидеть «Готово» в терминале. Откройте веб-страницу управления в браузере и нажмите «Подключиться». Затем нажмите любую из кнопок со стрелками на странице. Вы также можете использовать клавиши со стрелками на клавиатуре.

Вы должны увидеть вывод в терминале, подобный этому.

Готовый

соединение открыто… соединение открыто… получено: u 8 Работает Прямое соединение открыто… принято: l 6 Поворот влево соединение открыто… получено: d 2 Работает Обратное соединение открыто… получено: r 4 Поворот вправо

Нажмите ctrl + c, чтобы остановить программу.

Как только вы закончите тестирование, выключите Pi.

pi @ raspberrypi: ~ $ sudo poweroff

Ошибки

Я заметил проблему с кнопкой выключения на веб-странице управления. Иногда кнопка выключения ничего не делает при нажатии или нажатии. Я не смог понять, что вызывает это, но есть обходной путь. Если вы хотите выключить робота, а кнопка выключения не работает, перезагрузите страницу, нажмите / коснитесь кнопки подключения, а затем нажмите / коснитесь кнопки выключения. Он должен выключиться.

Шаг 5: Сборка

сборка
сборка
сборка
сборка
сборка
сборка
сборка
сборка

Как упоминалось ранее, вам не обязательно использовать Roomba для этого проекта. Все, что угодно, с двумя моторами, двумя колесами и рамой, подойдет. Я разобрал Roomba и снял все, кроме колесных модулей и аккумулятора.

Колесные модули

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

Плата интерфейса

К каждой интерфейсной плате подключено шесть проводов. Есть два провода (красный [+], черный [-]), которые вращают двигатель, один провод данных для датчика Холла, один провод для переключателя опускания колеса, один провод 5 В и один провод GND для питания датчика. Вам нужно будет разобрать модуль, чтобы получить доступ к интерфейсной плате. Снял все обратно с мотора и припаял к мотору новые [+] и [-] провода (см. Фото). Вам решать, хотите ли вы сохранить датчики или нет.

Пружины Подвески

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

Подключение двигателей к контроллеру двигателя

Двигатели обращены друг к другу. Это означает, что для того, чтобы робот Roomba двигался вперед, один двигатель должен вращаться вперед, а другой - назад. Я не особо задумывался об этом, пока все не подключил. Я закончил тем, что просто написал код того, как я изначально подключал моторы. Это была счастливая случайность, потому что всякий раз, когда Raspberry Pi включается / выключается, на контакты GPIO подается напряжение. Как у меня все подключено, Roomba вращается до тех пор, пока Raspberry Pi не загрузится (около тридцати секунд), и вращается при выключении до отключения питания. При другом подключении он потенциально может катиться вперед / назад, что будет раздражать. Я планирую со временем исправить это простым переключателем для контроллера мотора.

Подключение двигателей и аккумулятора к контроллеру двигателя

Питание - - - - - - - - - - - - - - - - 12 В [+] - - - - - - - - - - - - - -Roomba Battery [+]

Мотор 2- - - - - - - - - - - - - - - Черный - - - - - - - - - - - - - -Левый мотор [-] Мотор 2- - - - - - - - - - - - - - - Красный- - - - - - - - - - - - - - -Левый двигатель [+] Двигатель 1- - - - - - - - - - - - - - - - Черный - - - - - - - - - - - - - -Правый мотор [-] Мотор 1- - - - - - - - - - - - - - - Красный- - - - - - - - - - - - - - -Правый мотор [+] GND- - - - - - - - - - - - - - - - - 12 В [-] - - - - - - - - - - - - -Roomba Battery [-]

Подключение контроллера мотора к Raspberry Pi

Контакты контроллера мотора Цвет провода (см. Фотографии) Контакты Raspberry Pi

GND- - - - - - - - - - - - - - - - - Черный- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Синий - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Зеленый- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Желтый - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Оранжевый - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Красный- - - - - - - - - - - - - - -5В

Монтаж электроники

Чтобы собрать все воедино, не так уж много усилий. Я разобрал румбу с ее шасси. Сняв крышку, вы можете легко отсоединить существующие пластиковые стойки и просверлить отверстия для установки электроники. Имеются порты для прокладки кабелей от двигателей. Если вы используете стандартную батарею Roomba, в ней уже есть вырез для доступа к клеммам батареи.

Аккумуляторы

Я использовал отдельные батареи для Raspberry Pi и контроллера мотора. Батарея Pi - это всего лишь 5-вольтовый аккумулятор, используемый для зарядки мобильных телефонов. В качестве контроллера мотора я использовал оригинальную батарею Roomba, которая шла с ним. Клеммы аккумулятора не имеют маркировки, поэтому лучше всего проверить напряжение с помощью вольтметра, прежде чем подключать его к контроллеру мотора. Чтобы прикрепить провода к аккумулятору Roomba, я использовал четыре неодимовых магнита (см. Фото). Я припаял два магнита к проводам, а два других приклеил к клеммам аккумулятора. Пайка размагничивает магниты. Однако покрытие снаружи все еще может прикрепляться к магнитам на клеммах и проводить электричество. Это упрощает подключение и отключение аккумулятора.

Тестирование

Собрав все вместе, убедитесь, что все подключено правильно, подпереть робота чем-нибудь (чтобы он не скатился) и включите его.

Войдите и запустите программу roombabot.py

pi @ raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py

Перейдите на страницу веб-управления и проверьте это. Если все подключено правильно, колеса должны вращаться в соответствующем направлении при нажатии кнопок / клавиш со стрелками (не забудьте нажать кнопку подключения).

Шаг 6. Запуск кода Python при загрузке / завершении работы

Запуск кода Python при загрузке / завершении работы
Запуск кода Python при загрузке / завершении работы
Запуск кода Python при загрузке / завершении работы
Запуск кода Python при загрузке / завершении работы

Последнее, что нам нужно сделать, это указать Raspbian запустить программу python при загрузке. Для этого мы собираемся создать скрипт и запланировать его запуск при перезагрузке с помощью crontab.

Создать сценарий

Создайте новый файл сценария с именем startrobot.sh в каталоге пользователя pi.

pi @ raspberrypi: ~ $ sudo nano startrobot.sh

Скопируйте следующие строки в файл

#! / bin / sh

# startrobot.sh cd / cd / home / pi / roombarobot sudo python roombabot.py cd /

Сохраните файл и выйдите

Сделайте файл startrobot.sh исполняемым

pi @ raspberrypi: ~ $ sudo chmod 755 startrobot.sh

Проверьте это (нажмите ctrl + c, чтобы остановить)

pi @ raspberrypi: ~ $ sh startrobot.sh

Отредактируйте файл crontab

pi @ raspberrypi: ~ $ sudo crontab -e

Добавьте следующую строку в конец файла

# m h dom mon dow команда

@reboot sh /home/pi/startrobot.sh

Сохранить и выйти

Программа roombabot.py теперь должна запускаться при перезагрузке Pi или выключении и включении питания.

Заканчивать

На этом этапе у вас должен быть функциональный робот, которым вы можете управлять с помощью браузера с любого устройства в вашей сети. Я пошел немного дальше с момента первоначальной сборки и настроил VPN, чтобы иметь доступ к роботу, когда я нахожусь вдали от дома. Я намерен внести некоторые дополнительные изменения в будущем. Я планирую сделать его автономным и, возможно, следить за движением, но при этом иметь возможность контролировать все, когда захочу.

Рекомендуемые: