Съдържание:

Робот Roomba, управляван от браузъра, с Raspberry Pi модел 3 A+: 6 стъпки (със снимки)
Робот Roomba, управляван от браузъра, с Raspberry Pi модел 3 A+: 6 стъпки (със снимки)

Видео: Робот Roomba, управляван от браузъра, с Raspberry Pi модел 3 A+: 6 стъпки (със снимки)

Видео: Робот Roomba, управляван от браузъра, с Raspberry Pi модел 3 A+: 6 стъпки (със снимки)
Видео: ПРИВОЗ. ОДЕССА МАМА. Рецепт САЛО. ОБЗОР НОЖЕЙ 2024, Юли
Anonim
Управляван от браузър Roomba робот с Raspberry Pi модел 3 A+
Управляван от браузър Roomba робот с Raspberry Pi модел 3 A+
Управляван от браузър Roomba робот с Raspberry Pi модел 3 A+
Управляван от браузър Roomba робот с Raspberry Pi модел 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 като сървър на 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 и настройте статичен IP адрес
Инсталирайте 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
Инсталирайте и конфигурирайте 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 и настройте уеб страницата за управление на уеб

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 при зареждане / завършване

Стартиране на кода на 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, за да има достъп до робота, когато съм далеч от дома. Възнамерявам да направя някои допълнителни промени в бъдеще. Планирам да го направя автономен и евентуално да следвам движението, като все пак мога да поема контролите, когато искам.

Препоръчано: