Оглавление:
- Шаг 1. Установите Raspbian и настройте статический IP-адрес
- Шаг 2: Установите и настройте движение
- Шаг 3. Установка Apache и настройка страницы веб-контроля
- Шаг 4: Установите и протестируйте код
- Шаг 5: Сборка
- Шаг 6. Запуск кода Python при загрузке / завершении работы
Видео: Робот Roomba, управляемый браузером, с Raspberry Pi Model 3 A +: 6 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Обзор
Это руководство будет посвящено тому, как дать мертвому 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 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 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 при загрузке / завершении работы
Последнее, что нам нужно сделать, это указать 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, чтобы иметь доступ к роботу, когда я нахожусь вдали от дома. Я намерен внести некоторые дополнительные изменения в будущем. Я планирую сделать его автономным и, возможно, следить за движением, но при этом иметь возможность контролировать все, когда захочу.
Рекомендуемые:
Двуногий робот, управляемый Arduino: 13 шагов (с изображениями)
Робот-двуногий, управляемый Arduino: меня всегда интересовали роботы, особенно те, которые пытаются имитировать человеческие действия. Этот интерес побудил меня попытаться спроектировать и разработать роботизированное двуногое животное, которое имитировало бы ходьбу и бег человека. В этом руководстве я покажу вам
Робот, управляемый жестами на основе IOT: 10 шагов (с изображениями)
Робот, управляемый жестами: робот, управляемый жестами, которым можно управлять из любого места с помощью Интернета. В этом проекте акселерометр MPU 6050 используется для сбора данных о движениях наших рук. Он измеряет ускорение нашей руки за три
Управляемый вибрирующий робот тенсегрити: 7 шагов (с изображениями)
Управляемый вибрирующий робот тенсегрити: структура тенсегрити состоит из эластичных шнуров и жестких распорок. Он может сгибаться и сжиматься при падении или сжатии, а затем снова принимает форму. Он также имеет высокую степень соответствия, что означает, что он не причинит вреда людям или оборудованию вокруг
Робот для потоковой передачи видео, управляемый Raspberry Pi по Wi-Fi: 8 шагов (с изображениями)
Робот для потоковой передачи видео с управлением по Wi-Fi на Raspberry Pi: Вы когда-нибудь думали о создании крутого робота с камерой? Что ж, вы пришли в нужное место, я покажу вам шаг за шагом, как построить этого робота. С его помощью вы можете отправиться на охоту за привидениями ночью, контролируя и просматривая видеопоток на своем
Как сделать Firefox самым полезным веб-браузером: 8 шагов
Как сделать Firefox самым полезным веб-браузером: если вы уже не уверены, что Firefox лучше всего, вот несколько советов и настроек, которые заставят вас переключиться. Если вы используете firefox, возможно, вы все еще не знали об этих