Съдържание:
- Стъпка 1: Инсталирайте Raspbian и настройте статичен IP адрес
- Стъпка 2: Инсталирайте и конфигурирайте Motion
- Стъпка 3: Инсталирайте Apache и инсталирайте уеб контролната страница
- Стъпка 4: Настройка и тестване на кода
- Стъпка 5: Монтаж
- Стъпка 6: Стартиране на кода на Python при зареждане / завършване
Видео: Робот Roomba, управляван от браузъра, с Raspberry Pi модел 3 A+: 6 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Общ преглед
Тази инструкция ще се фокусира върху това как да се даде на мъртва Roomba нов мозък (Raspberry Pi), очи (уеб камера) и начин да се контролира всичко от уеб браузър.
Има много хакове на Roomba, които позволяват управление чрез сериен интерфейс. Не съм имал късмета да попадна на Roomba с текущ фърмуер или работеща дънна платка. Или Roomba е твърде стар, или Roomba е мъртъв. Намерих Roomba, която използвах за този проект, в местен магазин за спестявания за 5 долара. Все още имаше прилична батерия, но мъртва дънна платка. (Намерих и уеб камерата в същия магазин за спестявания за около 5 долара). Всичко, което използвам от оригиналната Roomba, са двигателите, шасито и батерията. Не е необходимо да използвате Roomba за този проект. Можете да използвате различни двигатели, колела и шаси, ако желаете. Просто ми се струва да превърна парче боклук в нещо използваемо.
За тази конструкция използвах Raspberry Pi Model 3 A+ и контролер на двигателя на Riorand. Използвам код от робот, контролиран от браузъра Dexter Industries, който промених. Версията на Dexter Industries настройва Pi като сървър на websocket, който ви позволява да контролирате техния робот (тухлена пи платформа) от html файл на клиент, работещ на друг компютър.
Промених кода, използвайки щифтовете GPIO и добавих начин за изключване на Pi при натискане на бутон / при натискане на клавиша за бягство в браузъра. Направих и някои промени в уеб страницата за управление, за да позволя преглед на поток от движение през вградена рамка, като същевременно контролирам робота в рамките на една страница. Настроих Pi със статичен IP, за да хоства клиентския файл, така че да мога да се свържа с всеки компютър или устройство в мрежата си.
Документирам процеса тук с надеждата да покажа как да създам прост, евтин базов робот.
Използвани части
Raspberry Pi 3 A+ (Adafruit Link) $ 30
Riorand Dual Motor Driver Controller H-Bridge (Amazon Link) $ 22
12V батерия за двигатели (Amazon Link) $ 19
5V батерия за Raspberry Pi (Amazon Link) $ 10
8GB Micro SD карта (Amazon Link) $ 5
Jumper Wires (Amazon Link) $ 7
Roomba серия 500
. Всички малко под $ 100.
Стъпка 1: Инсталирайте Raspbian и настройте статичен IP адрес
Използвах Raspbian Stretch Lite. Не видях нужда от работния плот, но можете да инсталирате настолната версия, ако предпочитате.
Предполагам, че вече знаете как да инсталирате Raspbian. Ако имате нужда от помощ, можете да намерите ръководството на Raspberry Pi Foundation тук.
След като стартирате и стартирате Raspbian, влезте и стартирайте програмата raspi-config.
pi@raspberrypi: ~ $ sudo raspi-config
Настройте вашата WiFi връзка в 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 netmask 255.255.255.0 излъчване 192.168.1.255 inet6 fe80:: c74f: 42ec: 8cd3: 2fda префикслен 64 обхват 0x20 етер b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) RX пакети 44396 байта 58477 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 време = 18,2 ms 64 байта от dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 време = 19,4 ms 64 байта от dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 време = 23,6 ms 64 байта от dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 време = 30,2 ms ^C --- статистика на ping на google.com --- 4 предадени пакета, 4 получени, 0% загуба на пакет, време 3004ms rtt min/avg/max/mdev = 18.209/ 22.901/30.267/4.715 ms
Настройка на статичен IP адрес
За да можете последователно да се свързвате с вашия робот, използвайки същия адрес във вашата мрежа, ще искате да настроите статичен IP.
Вземете текущия си мрежов адрес, например.192.168.1.18
Използвам адреса, който е автоматично присвоен от DHCP, когато Pi се свързва с мрежата ми. Можете да промените това на каквото искате, стига да съвпада с вашата мрежа и да не противоречи на други назначени адреси.
Отворете dhcp.conf в текстов редактор. (Използвам nano)
pi@raspberrypi: ~ $ sudo nano /etc/dhcpcd.conf
Превъртете надолу до #Example static IP configuration и променете следните редове.
#интерфейс eth0
#статичен ip_address = 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 статичен сървър на име на домейн = 192.168.1.1 8.8.8.8
Запази и излез.
Рестартирайте и се свържете с Pi чрез SSH
pi@raspberrypi: ~ $ sudo рестартиране
Свържете се от друг компютър, използвайки SSH. Потребителите на Windows могат да използват PuTTY или подсистемата Windows за Linux (Windows10).
ian@компютър: ~ $ ssh [email protected]
Въведете паролата си (по подразбиране е малинова).
парола на [email protected]:
Сега трябва да сте в командния ред на вашия Pi.
pi@raspberrypi: ~ $
Стъпка 2: Инсталирайте и конфигурирайте Motion
Motion е програма, използвана в много проекти за охранителни камери / уеб камери. Движението има много функции. Ние обаче го настройваме за просто поточно предаване на видео от уеб камерата към порт 8081.
Тествайте вашата уеб камера
Включете вашата уеб камера и избройте свързаните USB устройства (може да се наложи да рестартирате след свързване).
pi@raspberrypi: ~ $ lsusb
Трябва да получите изход, подобен на този. Обърнете внимание на Logitech C210.
Автобус 001 Устройство 002: ID 046d: 0819 Logitech, Inc. Уеб камера C210
Bus 001 Device 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub
Ако камерата ви не се показва, може да не е съвместима или може да се наложи да инсталирате допълнителни драйвери.
Инсталирайте Motion
Актуализиране на пакети.
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 framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost изключен webcontrol_localhost изключен
Стартирайте демона Motion при стартиране
Отворете файла/etc/default/motion.
pi@raspberrypi: ~ $ sudo nano/etc/default/motion
Промени на
start_motion_daemon = да
Запазете файла и излезте
Рестартирайте
pi@raspberrypi: ~ $ sudo рестартиране
След като Pi се рестартира, отворете браузъра и проверете дали имате поточно видео в браузъра на порт 8081
Пример:
192.168.1.18:8081
Отстраняване на проблеми с демона на Motion
Срещнах се с проблеми при стартирането на демона на движение при стартиране, докато изпробвах различни опции във файла 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 клонинг
Отворете директорията на 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: // YOURIPADDRESS: 9093/ws";
Променете „YOURIPADDRESS“на статичния IP адрес, който сте настроили в Стъпка 1, и запишете файла.
Пример:
var host = "ws: //192.168.1.18: 9093/ws";
На друг компютър отворете браузър и въведете IP адреса на вашия Pi. Трябва да видите контролната уеб страница с поле вляво, поточно видео от вашата уеб камера и бутоните за уеб управление вдясно.
Стъпка 4: Настройка и тестване на кода
Този код е написан на python и изисква библиотеката tornado. Кодът използва библиотеката, за да настрои сървър, който да слуша команди от контролната уеб страница чрез websockets на порт 9093.
Инсталирайте PIP и библиотеката Tornado
Инсталирайте pip
pi@raspberrypi: ~ $ sudo apt-get install python-pip
Инсталирайте библиотека tornado
pi@raspberrypi: ~ $ sudo pip инсталирайте торнадо
Стартирайте програмата 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 са поместени заедно в подвижен модул. Всеки модул има син външен корпус, съдържащ двигателя, скоростната кутия, колелото, пружината за окачване и интерфейсната платка.
Интерфейсна платка
Всяка интерфейсна платка има шест проводника към нея. Има два проводника (червен [+], черен [-]), които въртят двигателя, един проводник за данни за сензор за холов ефект, един проводник за превключвателя за падане на колелото, един 5V проводник и един GND проводник за захранване на сензора. Ще трябва да разглобите модула за достъп до интерфейсната платка. Извадих всичко обратно към двигателя и запоявах нови [+] и [-] проводници към двигателя (вижте снимките). От вас зависи дали искате да запазите сензорите или не.
Окачени пружини
След като премахнете вакуумната част, теглото на Roomba се изхвърля. Ако не премахнете пружините, Roomba ще седи под ъгъл. Първоначално ги премахнах, но след това ги добавих, когато установих, че се мъчи да се преобърне върху килима. Повръщането на пружината отстрани проблема.
Свързване на двигателите към контролера на двигателя
Двигателите са обърнати един от друг. Това означава, че за да кара Roomba в посока напред, един двигател ще трябва да се върти напред, докато другият се върти назад. Не мислех много за това, докато не свържа всичко. В крайна сметка просто написах кода около това как първоначално свързах двигателите. Това беше щастлив инцидент, защото винаги когато Raspberry Pi включва/изключва, има изход за напрежение към щифтовете GPIO. Начинът, по който свързвам нещата, Roomba се върти, докато Raspberry Pi се зареди (около тридесет секунди) и се завърта при изключване, докато захранването се изключи. Ако се свърже по различен начин, той потенциално би се превъртял напред / назад, което би било дразнещо. Планирам в крайна сметка да поправя това с обикновен превключвател за контролера на двигателя.
Свързване на двигателите и батерията към контролера на двигателя
Захранване - - - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - - -Roomba батерия [+]
Мотор 2- - - - - - - - - - - - - - - Черен- - - - - - - - - - - - - - -Лев двигател [-] Мотор 2- - - - - - - - - - - - - - - Червено- - - - - - - - - - - - - - -Лев двигател [+] Мотор 1- - - - - - - - - - - - - - - Черен- - - - - - - - - - - - - - -Десен двигател [-] Двигател 1- - - - - - - - - - - - - - - - Червен- - - - - - - - - - - - - - -Десен двигател [+] GND- - - - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - -Roomba батерия [-]
Свързване на контролера на двигателя към Raspberry Pi
Цветове на проводника на контролера на двигателя (вижте снимките) Малина Pi щифтове
GND- - - - - - - - - - - - - - - - - Черно- - - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - Синьо - - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Зелено- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Жълто - - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Оранжево - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - Червено- - - - - - - - - - - - - - - -5V
Монтаж на електроника
Не е нужно много да се обединява всичко. Събличах роомба от шасито. С отстранения капак можете лесно да отрежете съществуващите пластмасови стойки и да пробиете дупки за монтиране на електрониката. Има съществуващи портове за прокарване на кабели от двигателите. Ако използвате стандартната батерия Roomba, вече има изрязване за достъп до клемите на батерията.
Батерии
Използвах отделни батерии за Raspberry Pi и контролера на двигателя. Батерията на Pi е само 5V батерия, използвана за усилване на мобилни телефони. За контролера на двигателя използвах оригиналната батерия 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, за да има достъп до робота, когато съм далеч от дома. Възнамерявам да направя някои допълнителни промени в бъдеще. Планирам да го направя автономен и евентуално да следвам движението, като все пак мога да поема контролите, когато искам.
Препоръчано:
Как да създадете дистанционно управляван 3D принтиран самобалансиращ се робот: 9 стъпки (със снимки)
Как да създадете дистанционно управляван 3D принтиран самобалансиращ се робот: Това е еволюция на предишната версия на B-робот. 100% ОТВОРЕН ИЗТОЧНИК / робот Arduino. КОДЪТ, 3D частите и електрониката са отворени, така че не се колебайте да ги промените или да създадете огромна версия на робота. Ако имате съмнения, идеи или имате нужда от помощ, направете
Управляван от клавиатурата модел влак V2.0 - PS/2 интерфейс: 13 стъпки (със снимки)
Управляван от клавиатурата модел влак V2.0 | PS/2 интерфейс: В един от предишните ми Instructable ви показах как да контролирате модела на железопътното оформление с помощта на клавиатура. Той се справи чудесно, но имаше недостатък да изисква работа на компютър. В тази инструкция нека да видим как да управляваме моделен влак с помощта на клавиатура
Дистанционно управляван 6WD All Terrain робот: 10 стъпки (със снимки)
Дистанционно управляван 6WD All Terrain робот: Повечето роботи, които построих досега, бяха 4 колесни роботи с товароносимост от няколко килограма. Този път реших да създам по -голям робот, който лесно да преодолява различни препятствия по пътя си и ще може да се движи с товар от поне
Как да направите робот, управляван от смартфон: 3 стъпки (със снимки)
Как да направим робот, управляван от смартфон: Мислили ли сте някога да управлявате робота си безжично или през смартфон? Ако отговорът е „да“, тогава вашият четещ правилен пост. В този пост ще ви дам стъпка по стъпка процедура. Направих прост робот, който може да се управлява с помощта на смартфон, но можете да поставите som
Дистанционно управляван кошничен топка робот - HARLEM GLOBETROTTERS -: 9 стъпки (със снимки)
Робот с топка с дистанционно управление - HARLEM GLOBETROTTERS -: Тук ще ви покажа как да изградите дистанционно управляван баскетболен робот. Точно така, без шега! Създадох подобна топка за HARLEM GLOBETROTTERS и сега можете да създадете своя собствена. Ето списък на консумативите, от които се нуждаете. Petsmart: 7 "Hamster B