Innholdsfortegnelse:
- Trinn 1: Installer Raspbian og konfigurer en statisk IP -adresse
- Trinn 2: Installer og konfigurer Motion
- Trinn 3: Installer Apache og konfigurasjonswebkontrollside
- Trinn 4: Konfigurer og test koden
- Trinn 5: Montering
- Trinn 6: Start Python -koden ved oppstart / sluttbehandling
Video: Nettleserkontrollert Roomba -robot med Raspberry Pi Model 3 A+: 6 trinn (med bilder)
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
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
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
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
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
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
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
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:
Roomba Bot the Bulider: 5 trinn (med bilder)
Roomba Bot Bulider: Bot the Builder er en roomba, som med " grabbers " festet til fronten vil kunne flytte objekter rundt. Koden med den er satt til å registrere den første satsen med en GUI -boks som du kan kontrollere med bare museklikk. Etter
Roomblock: en plattform for læring av ROS -navigasjon med Roomba, Raspberry Pi og RPLIDAR: 9 trinn (med bilder)
Roomblock: en plattform for læring av ROS -navigasjon med Roomba, Raspberry Pi og RPLIDAR: Hva er dette? &Quot; Roomblock " er en robotplattform som består av en Roomba, en Raspberry Pi 2, en lasersensor (RPLIDAR) og et mobilbatteri. Monteringsrammen kan lages av 3D -skrivere. ROS navigasjonssystem gjør det mulig å lage et kart over rom og bruke
Inspektør Roomba: 6 trinn (med bilder)
Inspektør Roomba: De fleste av oss bruker iRobot Roomba -roboter bare for støvsuging, men få vet at det er en flott base for et nytt robotprosjekt. Alle produsenter bør prøve Roomba Open Interface (OI) for å finne ut hvor enkelt det er å kontrollere denne roboten. I denne instruksjonen vil du
ROOMBA Driven av ARDUINO YUN Via Wifi App av STEFANO DALL'OLIO: 4 trinn (med bilder)
ROOMBA Drevet av ARDUINO YUN Via Wifi App av STEFANO DALL'OLIO: Med denne guiden deler jeg koden for å koble ARDUINO YUN til Roomba for å kjøre Roomba via Wifi. Koden og appen er fullt opprettet og utviklet av meg selv Stefano Dall ' Olio.Min Roomba er Roomba 620, men du kan bruke samme kode for andre Roomb
Roomba -prosjekt: 5 trinn (med bilder)
Roomba Project: Denne instruksen ble opprettet for å oppfylle prosjektkravet til Makecourse ved University of South Florida (www.makecourse.com). Denne instruksen vil dekke alle nødvendige trinn og komponenter som kreves for å sette sammen Roomba -prosjektet mitt