Innholdsfortegnelse:

Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+: 6 trinn (med bilder)
Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+: 6 trinn (med bilder)

Video: Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+: 6 trinn (med bilder)

Video: Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+: 6 trinn (med bilder)
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, November
Anonim
Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+
Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+
Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+
Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+

Oversikt

Denne instruksen vil fokusere på hvordan du gir en død Roomba en ny hjerne (Raspberry Pi), øyne (webkamera) og en måte å kontrollere alt fra en nettleser.

Det er mange Roomba -hacks som tillater kontroll via det serielle grensesnittet. Jeg har ikke vært så heldig å komme over en Roomba som har nåværende fastvare eller fungerende hovedkort. Enten er Roomba for gammel eller så er Roomba død. Jeg fant Roomba jeg brukte til dette prosjektet i en lokal bruktbutikk for $ 5. Det hadde fortsatt et anstendig batteri, men et dødt hovedkort. (Jeg fant også webkameraet i samme bruktbutikk for rundt $ 5). Alt jeg bruker fra den originale Roomba er motorer, chassis og batteri. Du trenger ikke å bruke en Roomba for dette prosjektet. Du kan bruke forskjellige motorer, hjul og chassis hvis du vil. Jeg har bare lyst til å gjøre et stykke søppel til noe brukbart.

Til denne bygningen brukte jeg Raspberry Pi Model 3 A+ og en Riorand motorstyring. Jeg bruker kode fra Dexter Industries Browser Controlled Robot som jeg endret. Dexter Industries -versjonen setter opp Pi som en websocket -server som lar deg kontrollere roboten (brick -pi -plattformen) fra en html -fil med en annen datamaskin.

Jeg har endret koden, bruk GPIO -pinnene og lagt til en måte for Pi å slå av når en knapp klikkes / når Escape -tasten trykkes i nettleseren. Jeg har også gjort noen endringer på kontrollnettstedet for å tillate visning av en bevegelsesstrøm gjennom en iframe, mens jeg kontrollerer roboten alt på en enkelt side. Jeg konfigurerte Pi med en statisk IP for å være vert for klientfilen, slik at jeg kunne koble til med hvilken som helst datamaskin eller enhet i nettverket mitt.

Jeg dokumenterer prosessen her i håp om å vise hvordan du lager en enkel, billig basisrobot.

Deler brukt

Raspberry Pi 3 A+ (Adafruit Link) $ 30

Riorand Dual Motor Driver Controller H-Bridge (Amazon Link) $ 22

12V batteri for motorer (Amazon Link) $ 19

5V batteri for Raspberry Pi (Amazon Link) $ 10

8 GB Micro SD -kort (Amazon Link) $ 5

Jumper Wires (Amazon Link) $ 7

Roomba 500 -serien

. Alt sammen i underkant av $ 100.

Trinn 1: Installer Raspbian og konfigurer en statisk IP -adresse

Installer Raspbian og konfigurer en statisk IP -adresse
Installer Raspbian og konfigurer en statisk IP -adresse

Jeg brukte Raspbian Stretch Lite. Jeg så ikke behov for skrivebordet, men du kan installere skrivebordsversjonen hvis du foretrekker det.

Jeg kommer til å anta at du allerede vet hvordan du installerer Raspbian. Hvis du trenger hjelp, kan du finne Raspberry Pi Foundation's guide her.

Når du har Raspbian i gang, logger du på og kjører raspi-config-programmet.

pi@raspberrypi: ~ $ sudo raspi-config

Sett opp WiFi-tilkoblingen din i raspi-config

Plukke ut

2 Nettverksalternativer

Plukke ut

N2 Wi-fi

Velg et land, skriv inn SSID og angi passordfrasen

Oppsett SSH i raspi-config

Når jeg gjorde den første konfigurasjonen, brukte jeg SSH til å sette alt opp hodeløst. (Du kan hoppe over dette hvis du bruker en skjerm. Det var lettere for meg å gjøre endringer i koden uten å måtte stoppe roboten og koble den til en skjerm.)

Tilbake til raspi-config-hovedmenyen

Plukke ut

5 Grensesnittalternativer

Plukke ut

P2 SSH

Plukke ut

Ja

Tilbake til hovedmenyen for raspi-config

Kontroller at du er koblet til nettverket ditt

pi@raspberrypi: ~ $ ifconfig

Du bør motta en utgang som ligner denne. (Legg merke til IP -adressen, du kan trenge den senere. F.eks. 192.168.1.18)

wlan0: flagg = 4163 mtu 1500

inet 192.168.1.18 netmask 255.255.255.0 kringkasting 192.168.1.255 inet6 fe80:: c74f: 42ec: 8cd3: 2fda prefixlen 64 scopeid 0x20 eter b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) RX -pakker 44396 byte 5847726 (5,5 MiB) RX -feil 0 droppet 0 overskridelser 0 ramme 0 TX -pakker 30530 byte 39740576 (37,8 MiB) TX -feil 0 droppet 0 overskridelser 0 transportør 0 kollisjoner 0

Kontroller at du kan nå internett.

pi@raspberrypi: ~ $ ping google.com

Du bør motta en utgang som ligner denne.

PING google.com (216.58.194.110) 56 (84) byte med data.

64 byte fra dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 tid = 18,2 ms 64 byte fra dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 tid = 19,4 ms 64 byte fra dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 time = 23,6 ms 64 byte fra dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 tid = 30,2 ms ^C --- google.com pingstatistikk --- 4 pakker overført, 4 mottatt, 0% tap av pakker, tid 3004ms rtt min/avg/max/mdev = 18.209/ 22.901/30.267/4.715 ms

Sett opp en statisk IP

For å kunne koble til roboten din konsekvent med den samme adressen på nettverket ditt, vil du sette opp en statisk IP.

Få din nåværende nettverksadresse, for eksempel 192.168.1.18

Jeg bruker adressen som ble automatisk tildelt av DHCP da Pi koblet til nettverket mitt. Du kan endre dette til det du liker så lenge det samsvarer med nettverket ditt og ikke er i konflikt med andre tildelte adresser.

Åpne dhcp.conf i et tekstredigeringsprogram. (Jeg bruker nano)

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

Rull ned til #Eksempel på statisk IP -konfigurasjon og endre følgende linjer.

#grensesnitt eth0

#static ip_address = 192.168.11.13 #static routers = 192.168.11.1 #static domain_name_servers = 192.168.11.1 8.8.8.8

Endre for å matche nettverket ditt og fjern # i begynnelsen av hver linje.

Eksempel:

grensesnitt wlan0

static ip_address = 192.168.1.18 static routers = 192.168.1.1 static domain_name_servers = 192.168.1.1 8.8.8.8

Lagre og lukk.

Start på nytt og koble til Pi via SSH

pi@raspberrypi: ~ $ sudo reboot

Koble til fra en annen datamaskin med SSH. Windows -brukere kan bruke PuTTY eller Windows Subsystem for Linux (Windows10).

ian@datamaskin: ~ $ ssh [email protected]

Skriv inn passordet ditt (standard er bringebær).

passordet til [email protected]:

Du bør nå være ved Pi -ledeteksten.

pi@raspberrypi: ~ $

Trinn 2: Installer og konfigurer Motion

Installer og konfigurer Motion
Installer og konfigurer Motion

Motion er et program som brukes i mange sikkerhetskamera / webkamera -prosjekter. Motion har mange funksjoner. Imidlertid setter vi det opp for å bare streame video fra webkameraet til port 8081.

Test webkameraet ditt

Koble til webkameraet ditt og liste opp tilkoblede usb -enheter (Du må kanskje starte på nytt etter tilkobling).

pi@raspberrypi: ~ $ lsusb

Du bør få en utgang som ligner denne. Legg merke til Logitech C210.

Buss 001 Enhet 002: ID 046d: 0819 Logitech, Inc. Webkamera C210

Buss 001 Enhet 001: ID 1d6b: 0002 Linux Foundation 2.0 rothub

Hvis kameraet ikke vises, er det kanskje ikke kompatibelt, eller du må kanskje installere flere drivere.

Installer Motion

Oppdater pakker.

pi@raspberrypi: ~ $ sudo apt-get oppdatering

Installer Motion.

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

Når Motion er installert, redigerer du konfigurasjonsfilen.

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

Endre følgende linjer for å matche nedenfor.

demon på

bredde 640 høyde 480 framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off

Start Motion Daemon at Boot

Åpne/etc/default/motion -filen.

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

Endre til

start_motion_daemon = ja

Lagre filen og avslutt

Start på nytt

pi@raspberrypi: ~ $ sudo reboot

Etter at Pi har startet på nytt, åpner du nettleseren og bekrefter at du har videostrømming til nettleseren på port 8081

Eksempel:

192.168.1.18:8081

Feilsøking av Motion Daemon

Jeg fikk problemer med å få bevegelsesdemonen til å starte ved oppstart mens jeg prøvde forskjellige alternativer i filen motion.conf.

Hvis du starter bevegelse før bevegelsesdemonen i Raspian Stretch, vil du sannsynligvis få problemer med å få den til å starte ved oppstart senere. Å kjøre "sudo motion" uten å konfigurere demonen for å gjøre det, oppretter først katalogen/var/log/motion uten å gi brukeren skrivetillatelse.

Trinn 3: Installer Apache og konfigurasjonswebkontrollside

Installer Apache og konfigurasjonswebkontrollside
Installer Apache og konfigurasjonswebkontrollside

Apache er webserveren for robotens kontrollnettside. Vi skal erstatte standard Apache index.html -fil med en fil lastet ned fra github. Du vil også endre et par linjer med kode for å vise bevegelsesvideostrømmen og tilordne hvor du skal sende kommandoene for å kontrollere roboten.

Installer Apache og Git

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

Når apache og git er installert, laster du ned filene.

pi@raspberrypi: ~ $ git klon

Åpne roombarobot -katalogen.

pi@raspberrypi: ~ $ cd roombarobot

Erstatt index.html -filen i/var/www/html -mappen med index.html -filen i/home/pi/roombarobot

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

Rediger index.html -filen

Åpne index.html -filen med et tekstredigeringsprogram.

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

Finn disse to linjene

var host = "ws: // YOURIPADDRESS: 9093/ws";

Endre "YOURIPADDRESS" til den statiske IP -adressen du konfigurerte i trinn 1 og lagre filen.

Eksempel:

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

Åpne en nettleser på en annen datamaskin og skriv inn Pi -IP -adressen din. Du bør se kontrollnettstedet med en boks til venstre, streaming av video fra webkameraet og webkontrollknappene til høyre.

Trinn 4: Konfigurer og test koden

Oppsett og test koden
Oppsett og test koden

Denne koden er skrevet i python og krever tornadobiblioteket. Koden bruker biblioteket til å sette opp en server for å lytte etter kommandoer fra kontrollnettstedet via websockets på port 9093.

Installer PIP og Tornado Library

Installer pip

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

Installer tornadobibliotek

pi@raspberrypi: ~ $ sudo pip install tornado

Start Roombabot -programmet og test tilkoblingen

Start roombabot.py -programmet

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

Når du har kjørt, bør du se "Klar" i terminalen. Åpne kontrollnettstedet i en nettleser og klikk på koble til. Klikk deretter på en av retningsknappene på siden. Du kan også bruke piltastene på tastaturet ditt.

Du bør se en utgang på terminalen som ligner denne.

Klar

tilkobling åpnet … tilkobling åpnet … mottatt: u 8 Kjøring Foroverforbindelse åpnet … mottatt: l 6 Sving til venstre tilkobling åpnet … mottatt: d 2 Kjøring Reverse tilkobling åpnet … mottatt: r 4 Sving til høyre

Trykk ctrl+c for å stoppe programmet.

Når du er ferdig med å teste strømmen av Pi.

pi@raspberrypi: ~ $ sudo poweroff

Bugs

Jeg har lagt merke til et problem med avstengningsknappen på kontrollnettstedet. Noen ganger gjør avstengningsknappen ingenting når det klikkes eller tappes. Jeg har ikke klart å finne ut hva som forårsaker dette, men det er en løsning. Hvis du vil slå av roboten og avstengningsknappen ikke fungerer, laster du inn siden på nytt, klikker / trykker på tilkoblingsknappen og klikker / klikker på avstengningsknappen. Den burde slå seg av.

Trinn 5: Montering

montering
montering
montering
montering
montering
montering
montering
montering

Som nevnt tidligere, trenger du ikke å bruke en Roomba til dette prosjektet. Alt med to motorer, to hjul og en ramme ville fungere. Jeg tok Roomba fra hverandre og fjernet alt unntatt hjulmodulene og batteriet.

Hjulmoduler

Roombas hjul og motorer er plassert sammen i en flyttbar modul. Hver modul har et blått ytterhus som inneholder motor, girkasse, hjul, fjærfjær og grensesnittkort.

Grensesnittkort

Hvert grensesnittkort har seks ledninger som går til det. Det er to ledninger (rød [+], svart [-]) som roterer motoren, en datatråd for en hall -effektsensor, en ledning for hjulfallbryteren, en 5V -ledning og en GND -ledning for å drive sensoren. Du må ta modulen fra hverandre for å få tilgang til grensesnittkortet. Jeg fjernet alt tilbake til motoren og loddet nye [+] og [-] ledninger til motoren (se bilder). Det er opp til deg om du vil bevare sensorene eller ikke.

Fjæringer

Når du fjerner vakuumdelen, blir Roombas vekt kastet av. Hvis du ikke fjerner fjærene, vil Roomba sitte på skrå. Jeg fjernet disse opprinnelig, men la dem tilbake da jeg fant at det slet med å rulle over teppet. Å sette fjæren tilbake løste problemet.

Koble motorene til motorstyringen

Motorene vender vekk fra hverandre. Det betyr at for å kjøre Roomba forover, må den ene motoren rotere fremover mens den andre roterer bakover. Jeg tenkte ikke så mye på dette før etter at jeg hadde koblet til alt. Jeg endte opp med å skrive koden rundt hvordan jeg opprinnelig koblet motorene. Dette var en lykkelig ulykke fordi når Raspberry Pi slås på/av, er det spenningsutgang til GPIO -pinnene. Slik jeg har koblet ting, spinner Roomba til Raspberry Pi har startet opp (omtrent tretti sekunder) og snurrer når den stenges til strømmen er fjernet. Hvis kablet annerledes, ville det potensielt rulle fremover / bakover, noe som ville være irriterende. Jeg har tenkt til slutt å fikse dette med en enkel bryter for motorstyringen.

Kabling av motorer og batteri til motorstyringen

Strøm - - - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - - - Roomba batteri [+]

Motor 2- - - - - - - - - - - - - - - Svart- - - - - - - - - - - - - - Venstre motor [-] Motor 2- - - - - - - - - - - - - - - - Rød- - - - - - - - - - - - - - - - Venstre motor [+] Motor 1- - - - - - - - - - - - - - - Svart- - - - - - - - - - - - - - - Høyre motor [-] Motor 1- - - - - - - - - - - - - - - Rød- - - - - - - - - - - - - - - - Høyre motor [+] GND- - - - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - - Roomba batteri [-]

Kabling av motorkontrolleren til Raspberry Pi

Motorkontroller Pins Wire Color (se bilder) Raspberry Pi Pins

GND- - - - - - - - - - - - - - - - - Svart- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - - Blå - - - - - - - - - - - - - --GPIO 18 DIR 2- - - - - - - - - - - - - - - Grønn- - - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Gul - - - - - - - - - - - --GPIO 24 DIR 1- - - - - - - - - - - - - - - - - Oransje - - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Rød- - - - - - - - - - - - - - - - -5V

Montering av elektronikken

Det er ikke mye som skal til for å sette alt sammen. Jeg fjernet roombaen i chassiset. Når dekselet er fjernet, kan du enkelt klippe av de eksisterende plastavstandene og bore hullene for å montere elektronikken. Det er eksisterende porter for å føre kabler fra motorene. Hvis du bruker Roomba -batteriet på lager, er det allerede en avbrudd for tilgang til batteripolene.

Batterier

Jeg brukte separate batterier til Raspberry Pi og motorstyringen. Pi -batteriet er bare en 5V batteripakke som brukes til å øke mobiltelefonen. For motorstyringen brukte jeg det originale Roomba -batteriet som fulgte med. Batteripolene er ikke merket, så det er best å sjekke spenningen med et voltmeter før du kobler den til motorstyringen. For å feste ledningene til Roomba -batteriet brukte jeg fire neodymmagneter (se bilder). Jeg loddet to av magnetene til ledningene, og de to andre festet jeg til batteripolene. Lodding demagnetiserer magnetene. Belegget på utsiden kan imidlertid fortsatt feste seg til magnetene på terminalene og lede strøm. Dette gjør tilkobling og frakobling av batteriet til et stykke kake.

Testing

Når du har alt sammen, må du kontrollere at alt er korrekt koblet til, støtte roboten din på noe (slik at den ikke ruller bort) og slå den på.

Logg inn og start roombabot.py -programmet

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

Gå til webkontrollsiden og test den. Hvis alt er kablet riktig, bør hjulene rotere i tilsvarende retning når knappene klikkes / piltastene trykkes (ikke glem å klikke på tilkobling).

Trinn 6: Start Python -koden ved oppstart / sluttbehandling

Starter Python -koden ved oppstart / sluttbehandling
Starter Python -koden ved oppstart / sluttbehandling
Starter Python -koden ved oppstart / sluttbehandling
Starter Python -koden ved oppstart / sluttbehandling

Det siste vi må gjøre er å be Raspbian om å starte python -programmet ved oppstart. For å gjøre dette skal vi lage skript og planlegge det for å kjøre ved omstart ved hjelp av crontab.

Lag skriptet

Opprett en ny skriptfil som heter startrobot.sh i pi -brukerkatalogen

pi@raspberrypi: ~ $ sudo nano startrobot.sh

Kopier følgende linjer til filen

#!/bin/sh

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

Lagre filen og avslutt

Gjør startrobot.sh -filen kjørbar

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

Test det ut (Trykk ctrl + c for å stoppe)

pi@raspberrypi: ~ $ sh startrobot.sh

Rediger crontab -filen

pi@raspberrypi: ~ $ sudo crontab -e

Legg til følgende linje nederst i filen

# m h dom mon dow kommando

@reboot sh /home/pi/startrobot.sh

Lagre og lukk

Roombabot.py -programmet skal nå starte når Pi startes på nytt eller strømmen slås på.

Ferdig

På dette tidspunktet bør du ha en funksjonell robot som du kan kontrollere ved hjelp av nettleseren fra hvilken som helst enhet på nettverket ditt. Jeg har tatt dette litt lenger siden den opprinnelige byggingen og konfigureringen av en VPN for å få tilgang til roboten når jeg er borte fra hjemmet. Jeg har tenkt å gjøre noen ekstra endringer i fremtiden. Jeg planlegger å gjøre det autonomt og muligens følge bevegelse mens jeg fortsatt kan overta kontrollene når jeg vil.

Anbefalt: