Innehållsförteckning:
- Steg 1: Installera Raspbian och konfigurera en statisk IP -adress
- Steg 2: Installera och konfigurera Motion
- Steg 3: Installera Apache och konfigurationswebbkontrollsida
- Steg 4: Konfigurera och testa koden
- Steg 5: Montering
- Steg 6: Starta Python -koden vid start / avslutning
Video: Webbläsarkontrollerad Roomba -robot med Raspberry Pi Model 3 A+: 6 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Översikt
Denna instruktion kommer att fokusera på hur man ger en död Roomba en ny hjärna (Raspberry Pi), ögon (webbkamera) och ett sätt att styra allt från en webbläsare.
Det finns många Roomba -hackar som tillåter kontroll via det seriella gränssnittet. Jag har inte haft turen att stöta på en Roomba som har nuvarande firmware eller fungerande moderkort. Antingen är Roomba för gammal eller så är Roomba död. Jag hittade Roomba som jag använde för detta projekt i en lokal butiksköpkorg för $ 5. Det hade fortfarande ett hyfsat batteri, men ett dött moderkort. (Jag hittade också webbkameran i samma butik för omkring $ 5). Allt jag använder från den ursprungliga Roomba är motorer, chassi och batteri. Du behöver inte använda en Roomba för detta projekt. Du kan använda olika motorer, hjul och chassi om du vill. Jag vill bara förvandla en skräp till något användbart.
För denna konstruktion använde jag Raspberry Pi Model 3 A+ och en Riorand -motorstyrenhet. Jag använder kod från Dexter Industries Browser Controlled Robot som jag modifierade. Dexter Industries -versionen sätter upp Pi som en websocket -server som låter dig styra deras robot (brick pi -plattform) från en html -fil med en annan dator.
Jag har ändrat koden med GPIO -stiften och lagt till ett sätt för Pi att stänga av när en knapp klickas / när Escape -tangenten trycks in i webbläsaren. Jag gjorde också några ändringar på kontrollwebbsidan för att tillåta visning av en rörelseström genom en iframe, samtidigt som jag kontrollerade roboten inom en enda sida. Jag ställde in Pi med en statisk IP för att vara värd för klientfilen så att jag kunde ansluta med vilken dator eller enhet som helst i mitt nätverk.
Jag dokumenterar processen här i hopp om att visa hur man skapar en enkel, billig basrobot.
Delar som används
Raspberry Pi 3 A+ (Adafruit Link) $ 30
Riorand Dual Motor Driver Controller H-Bridge (Amazon Link) $ 22
12V batteri för motorer (Amazon Link) $ 19
5V batteri för Raspberry Pi (Amazon Link) $ 10
8 GB Micro SD -kort (Amazon Link) $ 5
Jumper Wires (Amazon Link) $ 7
Roomba 500 -serien
. Alla tillsammans strax under $ 100.
Steg 1: Installera Raspbian och konfigurera en statisk IP -adress
Jag använde Raspbian Stretch Lite. Jag såg inget behov av skrivbordet, men du kan installera skrivbordsversionen om du föredrar det.
Jag antar att du redan vet hur du installerar Raspbian. Om du behöver hjälp kan du hitta Raspberry Pi Foundation's guide här.
När du har startat Raspbian loggar du in och kör programmet raspi-config.
pi@raspberrypi: ~ $ sudo raspi-config
Konfigurera din WiFi-anslutning i raspi-config
Välj
2 Nätverksalternativ
Välj
N2 Wi-fi
Välj ett land, ange ditt SSID och ange din lösenfras
Konfigurera SSH i raspi-config
När jag gjorde den första konfigurationen använde jag SSH för att ställa in allt utan huvud. (Du kan hoppa över det här om du använder en bildskärm. Det var lättare för mig att göra ändringar i koden utan att behöva stoppa roboten och ansluta den till en bildskärm.)
Tillbaka till raspi-config-huvudmenyn
Välj
5 Gränssnittsalternativ
Välj
P2 SSH
Välj
Ja
Tillbaka till huvudmenyn för raspi-config
Kontrollera att du är ansluten till ditt nätverk
pi@raspberrypi: ~ $ ifconfig
Du bör få en utmatning som liknar detta. (Notera IP -adressen; du kan behöva den senare, t.ex. 192.168.1.18)
wlan0: flaggor = 4163 mtu 1500
inet 192.168.1.18 netmask 255.255.255.0 broadcast 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 -paket 44396 byte 5847726 (5,5 MiB) RX -fel 0 tappade 0 överskridanden 0 ram 0 TX -paket 30530 byte 39740576 (37,8 MiB) TX -fel 0 tappade 0 överskridanden 0 transportör 0 kollisioner 0
Kontrollera att du kan nå internet.
pi@raspberrypi: ~ $ ping google.com
Du bör få en utmatning som liknar detta.
PING google.com (216.58.194.110) 56 (84) byte med data.
64 byte från dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 tid = 18,2 ms 64 byte från dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 tid = 19,4 ms 64 byte från dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 tid = 23,6 ms 64 byte från dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 tid = 30,2 ms ^C --- google.com pingstatistik --- 4 paket överförda, 4 mottagna, 0% paketförlust, tid 3004ms rtt min/avg/max/mdev = 18.209/ 22.901/30.267/4.715 ms
Konfigurera en statisk IP
För att konsekvent kunna ansluta till din robot med samma adress i ditt nätverk vill du skapa en statisk IP.
Skaffa din nuvarande nätverksadress, t.ex. 192.168.1.18
Jag använder adressen som automatiskt tilldelades av DHCP när Pi anslöt till mitt nätverk. Du kan ändra detta till vad du vill så länge det matchar ditt nätverk och inte står i konflikt med andra tilldelade adresser.
Öppna dhcp.conf i en textredigerare. (Jag använder nano)
pi@raspberrypi: ~ $ sudo nano /etc/dhcpcd.conf
Rulla ner till #Exempel på statisk IP -konfiguration och ändra följande rader.
#gränssnitt 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
Ändra för att matcha ditt nätverk och ta bort # i början av varje rad.
Exempel:
gränssnitt 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
Spara och avsluta.
Starta om och anslut till Pi via SSH
pi@raspberrypi: ~ $ sudo reboot
Anslut från en annan dator med SSH. Windows -användare kan använda PuTTY eller Windows -delsystemet för Linux (Windows10).
ian@dator: ~ $ ssh [email protected]
Ange ditt lösenord (standard är hallon).
[email protected] lösenord:
Du borde nu befinna dig vid din Pi: s kommandotolk.
pi@raspberrypi: ~ $
Steg 2: Installera och konfigurera Motion
Motion är ett program som används i många säkerhetskameror / webbkameraprojekt. Motion har många funktioner. Men vi ställer in det för att helt enkelt strömma video från webbkameran till port 8081.
Testa din webbkamera
Anslut din webbkamera och lista anslutna usb -enheter (du kan behöva starta om efter anslutning).
pi@raspberrypi: ~ $ lsusb
Du bör få en utmatning som liknar detta. Observera Logitech C210.
Buss 001 Enhet 002: ID 046d: 0819 Logitech, Inc. Webbkamera C210
Buss 001 Enhet 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub
Om din kamera inte dyker upp är den kanske inte kompatibel eller du kan behöva installera ytterligare drivrutiner.
Installera rörelse
Uppdatera paket.
pi@raspberrypi: ~ $ sudo apt-get update
Installera rörelse.
pi@raspberrypi: ~ $ sudo apt -get install motion -y
Redigera konfigurationsfilen när Motion är installerat.
pi@raspberrypi: ~ $ sudo nano /etc/motion/motion.conf
Ändra följande rader för att matcha nedan.
demon på
bredd 640 höjd 480 framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off
Starta Motion Daemon vid Boot
Öppna filen/etc/default/motion.
pi@raspberrypi: ~ $ sudo nano/etc/default/motion
Ändra till
start_motion_daemon = ja
Spara filen och avsluta
Starta om
pi@raspberrypi: ~ $ sudo reboot
När Pi har startat om öppnar du webbläsaren och kontrollerar att du har videoströmning till webbläsaren på port 8081
Exempel:
192.168.1.18:8081
Felsökning av Motion Daemon
Jag stötte på problem med att få motion -demonen att starta vid start medan jag försökte ut olika alternativ i filen motion.conf.
Om du startar rörelse före rörelsedemonen i Raspian Stretch kommer du förmodligen att stöta på problem med att få den att starta vid start senare. Att köra "sudo motion" utan att konfigurera demonen för att göra det skapar först katalogen/var/log/motion utan att ge användaren skrivbehörighet.
Steg 3: Installera Apache och konfigurationswebbkontrollsida
Apache är webbservern för robotens kontrollwebbsida. Vi kommer att ersätta standard Apache index.html -filen med en fil som laddats ner från github. Du kommer också att ändra ett par rader kod för att visa videoströmmen och tilldela vart du ska skicka kommandona för att styra roboten.
Installera Apache och Git
pi@raspberrypi: ~ $ sudo apt -get install apache2 git -y
När apache och git är installerade ladda ner filerna.
pi@raspberrypi: ~ $ git -klon
Öppna roombarobot -katalogen.
pi@raspberrypi: ~ $ cd roombarobot
Ersätt index.html -filen i mappen/var/www/html med index.html -filen i/home/pi/roombarobot
pi@raspberrypi: ~/roombarobot $ sudo cp index.html/var/www/html
Redigera index.html -filen
Öppna index.html -filen med en textredigerare.
pi@raspberrypi: ~/roombarobot $ sudo nano /var/www/html/index.html
Leta reda på dessa två rader
var host = "ws: // YOURIPADDRESS: 9093/ws";
Ändra "YOURIPADDRESS" till den statiska IP -adress du ställde in i steg 1 och spara filen.
Exempel:
var host = "ws: //192.168.1.18: 9093/ws";
Öppna en webbläsare på en annan dator och ange din Pi: s IP -adress. Du bör se kontrollwebbsidan med en ruta till vänster, strömning av video från din webbkamera och webbkontrollknapparna till höger.
Steg 4: Konfigurera och testa koden
Denna kod är skriven i python och kräver tornadobiblioteket. Koden använder biblioteket för att konfigurera en server för att lyssna efter kommandon från kontrollwebbsidan via webbuttag på port 9093.
Installera PIP och Tornado Library
Installera pip
pi@raspberrypi: ~ $ sudo apt-get install python-pip
Installera tornadobibliotek
pi@raspberrypi: ~ $ sudo pip installera tornado
Starta Roombabot -programmet och testa anslutningen
Starta roombabot.py -programmet
pi@raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py
När du har kört bör du se "Klar" i terminalen. Öppna kontrollwebbsidan i en webbläsare och klicka på anslut. Klicka sedan på någon av riktningsknapparna på sidan. Du kan också använda piltangenterna på tangentbordet.
Du bör se en utgång i terminalen som liknar denna.
Redo
anslutning öppnad … anslutning öppnad … mottagen: u 8 Körning Framåt anslutning öppnad … mottagen: l 6 Sväng vänster anslutning öppnad … mottagen: d 2 Körning Omvänd anslutning öppnad … mottagen: r 4 Sväng höger
Tryck på ctrl+c för att stoppa programmet.
När du är klar testar du strömmen till Pi.
pi@raspberrypi: ~ $ sudo poweroff
Buggar
Jag har märkt ett problem med avstängningsknappen på kontrollwebbsidan. Ibland gör avstängningsknappen ingenting när det klickas eller knackas. Jag har inte kunnat förstå vad som orsakar detta, men det finns en lösning. Om du vill stänga av roboten och avstängningsknappen inte fungerar, ladda om sidan, klicka / tryck på anslutningsknappen och klicka / tryck sedan på avstängningsknappen. Det borde stängas av.
Steg 5: Montering
Som nämnts tidigare behöver du inte använda en Roomba för detta projekt. Allt med två motorer, två hjul och en ram skulle fungera. Jag tog isär Roomba och tog bort allt utom hjulmodulerna och batteriet.
Hjulmoduler
Roombas hjul och motorer är placerade tillsammans i en avtagbar modul. Varje modul har ett blått yttre hus som innehåller motor, växellåda, hjul, upphängningsfjäder och gränssnittskort.
Gränssnittskort
Varje gränssnittskort har sex ledningar som går till det. Det finns två ledningar (röd [+], svart [-]) som roterar motorn, en datakabel för en hall -effektsensor, en ledning för omkopplaren, en 5V -kabel och en GND -kabel för att driva sensorn. Du måste ta isär modulen för att komma åt gränssnittskortet. Jag tog bort allt tillbaka till motorn och lödde nya [+] och [-] ledningar till motorn (se bilder). Det är upp till dig om du vill bevara sensorerna eller inte.
Fjädrar
När du har tagit bort vakuumdelen slungas Roombas vikt. Om du inte tar bort fjädrarna kommer Roomba att sitta snett. Jag tog ursprungligen bort dessa, men lade sedan tillbaka dem när jag upptäckte att det kämpade med att rulla över mattan. Att sätta fjädern tillbaka fixade problemet.
Anslut motorerna till motorstyrenheten
Motorerna är vända från varandra. Det betyder att för att köra Roomba i riktning framåt måste en motor rotera framåt medan den andra roterar bakåt. Jag tänkte inte så mycket på detta förrän efter att jag kopplat upp allt. Jag slutade bara skriva koden kring hur jag ursprungligen kopplade motorerna. Detta var en lycklig olycka eftersom när Raspberry Pi slås på/av finns det spänningsutgång till GPIO -stiften. Så som jag har fått ihop saker och ting, snurrar Roomba tills Raspberry Pi har startat upp (cirka trettio sekunder) och snurrar vid avstängning tills strömmen är borttagen. Om den är ansluten annorlunda skulle den eventuellt rulla framåt / bakåt vilket skulle vara irriterande. Jag tänker så småningom fixa detta med en enkel omkopplare för motorstyrenheten.
Anslutning av motorer och batteri till motorstyrenheten
Effekt - - - - - - - - - - - - - - - - 12V [+] - - - - - - - - - - - - - Roomba batteri [+]
Motor 2- - - - - - - - - - - - - - - Svart- - - - - - - - - - - - - - Vänster motor [-] Motor 2- - - - - - - - - - - - - - - - Röd - - - - - - - - - - - - - - - Vänster motor [+] Motor 1- - - - - - - - - - - - - - - Svart - - - - - - - - - - - - - - -Rättmotor [-] Motor 1- - - - - - - - - - - - - - - Röd- - - - - - - - - - - - - - - - Högermotor [+] GND- - - - - - - - - - - - - - - - - 12V [-] - - - - - - - - - - - - - Roomba -batteri [-]
Anslutning av motorstyrenheten till Raspberry Pi
Motor Controller Pins Wire Color (se bilder) Raspberry Pi Pins
GND- - - - - - - - - - - - - - - - - Svart- - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Blå - - - - - - - - - - - - - - GPIO 18 DIR 2- - - - - - - - - - - - - - - Grön- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Gul - - - - - - - - - - - --GPIO 24 DIR 1- - - - - - - - - - - - - - - - - Orange - - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Röd- - - - - - - - - - - - - - - -5V
Montering av elektroniken
Det är inte mycket som går åt till att sätta ihop allt. Jag tog av roomba i chassit. Med locket borttaget kan du enkelt klippa bort de befintliga plastavstånden och borra hål för att montera elektroniken. Det finns befintliga portar för att driva kablar från motorerna. Om du använder Roomba -batteriet i lager finns det redan en avstängning för åtkomst till batteripolerna.
Batterier
Jag använde separata batterier för Raspberry Pi och motorstyrenheten. Pi -batteriet är bara ett 5V -batteri som används för att öka mobiltelefonerna. För motorstyrenheten använde jag det ursprungliga Roomba -batteriet som följde med. Batteripolerna är inte märkta, så det är bäst att kontrollera spänningen med en voltmeter innan du kopplar den till motorstyrenheten. För att fästa ledningarna till Roomba -batteriet använde jag fyra neodymmagneter (se bilder). Jag lodde två av magneterna till trådarna och de andra två fastnade jag på batteripolerna. Lödning avmagnetiserar magneterna. Beläggningen på utsidan kan dock fortfarande fästa vid magneterna på terminalerna och leda elektricitet. Detta gör att ansluta och koppla ur batteriet till en kaka.
Testning
När du har allt ihop kontrollerar du att allt är korrekt anslutet, stöder din robot på något (så att det inte rullar iväg) och slår på det.
Logga in och starta roombabot.py -programmet
pi@raspberrypi: ~ $ sudo python /home/pi/roombarobot/roombabot.py
Gå till webbkontrollsidan och testa det. Om allt är korrekt anslutet bör hjulen rotera i motsvarande riktning när du klickar på knapparna / trycker på piltangenterna (glöm inte att klicka på anslut).
Steg 6: Starta Python -koden vid start / avslutning
Det sista vi behöver göra är att berätta för Raspbian att starta python -programmet vid start. För att göra detta kommer vi att göra skript och schemalägga det för att köras vid omstart med crontab.
Skapa skriptet
Skapa en ny skriptfil som heter startrobot.sh i pi -användarkatalogen
pi@raspberrypi: ~ $ sudo nano startrobot.sh
Kopiera följande rader till filen
#!/bin/sh
#startrobot.sh cd /cd /home /pi /roombarobot sudo python roombabot.py cd /
Spara filen och avsluta
Gör filen startrobot.sh körbar
pi@raspberrypi: ~ $ sudo chmod 755 startrobot.sh
Testa det (tryck på ctrl + c för att stoppa)
pi@raspberrypi: ~ $ sh startrobot.sh
Redigera crontab -filen
pi@raspberrypi: ~ $ sudo crontab -e
Lägg till följande rad längst ner i filen
# m h dom mon dow kommando
@reboot sh /home/pi/startrobot.sh
Spara och avsluta
Roombabot.py -programmet ska nu starta när Pi startas om eller strömmen slås på.
Slutför
Vid denna tidpunkt bör du ha en funktionell robot som du kan styra med webbläsaren från vilken enhet som helst i ditt nätverk. Jag har tagit detta lite längre sedan den ursprungliga uppbyggnaden och konfigurationen av ett VPN för att kunna komma åt roboten när jag är hemifrån. Jag tänker göra några ytterligare ändringar i framtiden. Jag planerar att göra det autonomt och möjligen följa rörelser samtidigt som jag fortfarande kan ta över kontrollerna när jag vill.
Rekommenderad:
Roomba Bot the Bulider: 5 steg (med bilder)
Roomba Bot Bulider: Bot the Builder är en roomba, som med " grabbers " fäst på framsidan kommer att kunna flytta föremål runt. Koden med den är inställd för att spela in den första satsen med en GUI -låda som du kan styra med bara ett musklick. Efter
Roomblock: en plattform för inlärning av ROS -navigering med Roomba, Raspberry Pi och RPLIDAR: 9 steg (med bilder)
Roomblock: en plattform för inlärning av ROS -navigering med Roomba, Raspberry Pi och RPLIDAR: Vad är detta? &Quot; Roomblock " är en robotplattform som består av en Roomba, en Raspberry Pi 2, en lasersensor (RPLIDAR) och ett mobilbatteri. Monteringsramen kan tillverkas av 3D -skrivare. ROS -navigationssystem gör det möjligt att göra en karta över rum och använda
Inspektör Roomba: 6 steg (med bilder)
Inspektör Roomba: De flesta av oss använder iRobot Roomba -robotar endast för dammsugning, men få vet att det är en bra bas för nya robotprojekt. Alla tillverkare bör prova Roomba Open Interface (OI) för att ta reda på hur lätt det är att styra denna robot. I denna instruktion vill du
ROOMBA Driven av ARDUINO YUN Via Wifi App av STEFANO DALL'OLIO: 4 steg (med bilder)
ROOMBA Driven av ARDUINO YUN Via Wifi App av STEFANO DALL'OLIO: Med den här guiden delar jag koden för att ansluta ARDUINO YUN till Roomba för att köra Roomba via Wifi. Koden och appen är helt skapad och utvecklad av mig själv Stefano Dall ' Olio.Min Roomba är Roomba 620 men du kan använda samma kod för andra Roomb
Roomba med MATLAB: 4 steg (med bilder)
Roomba med MATLAB: Detta projekt använder sig av MATLAB och en iRobot Create2 programmerbar robot. Genom att testa vår kunskap om MATLAB kan vi programmera Create2 för att tolka bilder och upptäcka signaler. Robotens funktionalitet beror huvudsakligen på