Indholdsfortegnelse:

Browserstyret Roomba -robot med Raspberry Pi Model 3 A+: 6 trin (med billeder)
Browserstyret Roomba -robot med Raspberry Pi Model 3 A+: 6 trin (med billeder)

Video: Browserstyret Roomba -robot med Raspberry Pi Model 3 A+: 6 trin (med billeder)

Video: Browserstyret Roomba -robot med Raspberry Pi Model 3 A+: 6 trin (med billeder)
Video: Squid game #shorts 2024, December
Anonim
Browserstyret Roomba -robot med Raspberry Pi Model 3 A+
Browserstyret Roomba -robot med Raspberry Pi Model 3 A+
Browserstyret Roomba -robot med Raspberry Pi Model 3 A+
Browserstyret Roomba -robot med Raspberry Pi Model 3 A+

Oversigt

Denne instruktør vil fokusere på, hvordan man giver en død Roomba en ny hjerne (Raspberry Pi), øjne (webcam) og en måde at styre alt fra en webbrowser.

Der er mange Roomba -hacks, der tillader kontrol via det serielle interface. Jeg har ikke været så heldig at støde på en Roomba, der har nuværende firmware eller fungerende bundkort. Enten er Roomba for gammel, eller også er Roomba død. Jeg fandt Roomba, jeg brugte til dette projekt, i en lokal genbrugsbutik til $ 5. Det havde stadig et anstændigt batteri, men et dødt bundkort. (Jeg fandt også webkameraet i samme genbrugsbutik til omkring $ 5). Alt jeg bruger fra den originale Roomba er motorer, chassis og batteri. Du behøver ikke at bruge en Roomba til dette projekt. Du kan bruge forskellige motorer, hjul og chassis, hvis du vil. Jeg har bare lyst til at vende et stykke skrammel til noget brugbart.

Til denne konstruktion brugte jeg Raspberry Pi Model 3 A+ og en Riorand motorstyring. Jeg bruger kode fra Dexter Industries Browser Controlled Robot, som jeg har ændret. Dexter Industries -versionen opretter Pi som en websocket -server, der giver dig mulighed for at styre deres robot (brick pi -platform) fra en klient -html -fil, der kører en anden computer.

Jeg har ændret koden, brug GPIO -benene og tilføjet en måde, hvorpå Pi kan lukke, når der klikkes på en knap / når der trykkes på escape -tasten i browseren. Jeg lavede også nogle ændringer på kontrolwebsiden for at tillade visning af en bevægelsesstrøm gennem en iframe, mens jeg kontrollerede robotten alt inden for en enkelt side. Jeg konfigurerede Pi'en med en statisk IP til at være vært for klientfilen, så jeg kunne oprette forbindelse med enhver computer eller enhed på mit netværk.

Jeg dokumenterer processen her i håb om at vise, hvordan man opretter en simpel, billig basisrobot.

Dele brugt

Raspberry Pi 3 A+ (Adafruit Link) $ 30

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

12V batteri til motorer (Amazon Link) $ 19

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

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

Jumper Wires (Amazon Link) $ 7

Roomba 500 -serien

. Alt sammen lige under $ 100.

Trin 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 brugte Raspbian Stretch Lite. Jeg så ikke et behov for skrivebordet, men du kan installere desktopversionen, hvis du foretrækker det.

Jeg går ud fra, at du allerede ved, hvordan du installerer Raspbian. Hvis du har brug for hjælp, kan du finde Raspberry Pi Foundation's guide her.

Når du har Raspbian i gang, skal du logge ind og køre raspi-config-programmet.

pi@raspberrypi: ~ $ sudo raspi-config

Konfigurer din WiFi-forbindelse i raspi-config

Vælg

2 Netværksindstillinger

Vælg

N2 Wi-fi

Vælg et land, indtast dit SSID, og indtast din adgangssætning

Opsætning af SSH i raspi-config

Når jeg lavede den første konfiguration, brugte jeg SSH til at konfigurere alt uden hoved. (Du kan springe dette over, hvis du bruger en skærm. Det var lettere for mig at foretage ændringer i koden uden at skulle stoppe robotten og tilslutte den til en skærm.)

Tilbage til raspi-config hovedmenuen

Vælg

5 Grænsefladeindstillinger

Vælg

P2 SSH

Vælg

Ja

Tilbage til hovedmenuen i raspi-config vælges

Kontroller, at du har forbindelse til dit netværk

pi@raspberrypi: ~ $ ifconfig

Du bør modtage et output svarende til dette. (Bemærk IP -adressen; du kan få brug for den senere. F.eks. 192.168.1.18)

wlan0: flag = 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 ether b8: 27: eb: 6a: a4: 95 txqueuelen 1000 (Ethernet) RX -pakker 44396 bytes 5847726 (5,5 MiB) RX -fejl 0 faldet 0 overskridelser 0 ramme 0 TX -pakker 30530 bytes 39740576 (37,8 MiB) TX -fejl 0 faldet 0 overskridelser 0 transportør 0 kollisioner 0

Kontroller, at du kan nå internettet.

pi@raspberrypi: ~ $ ping google.com

Du skal modtage et output svarende til dette.

PING google.com (216.58.194.110) 56 (84) bytes data.

64 bytes fra dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 1 ttl = 54 tid = 18,2 ms 64 bytes fra dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 2 ttl = 54 tid = 19,4 ms 64 bytes fra dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 3 ttl = 54 time = 23,6 ms 64 bytes fra dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq = 4 ttl = 54 tid = 30,2 ms ^C --- google.com pingstatistik --- 4 pakker sendt, 4 modtaget, 0% tab af pakker, tid 3004ms rtt min/avg/max/mdev = 18.209/ 22.901/30.267/4.715 ms

Opsætning af en statisk IP

For konsekvent at kunne oprette forbindelse til din robot ved hjælp af den samme adresse på dit netværk, vil du gerne oprette en statisk IP.

Få din nuværende netværksadresse, f.eks. 192.168.1.18

Jeg bruger den adresse, der automatisk blev tildelt af DHCP, da Pi sluttede til mit netværk. Du kan ændre dette til hvad du vil, så længe det matcher dit netværk og ikke er i konflikt med andre tildelte adresser.

Åbn dhcp.conf i et tekstredigeringsprogram. (Jeg bruger nano)

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

Rul ned til #Eksempel på statisk IP -konfiguration, og rediger følgende linjer.

#interface 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

Skift for at matche dit netværk, og fjern # i begyndelsen af hver linje.

Eksempel:

grænseflade wlan0

statisk ip_address = 192.168.1.18 statiske routere = 192.168.1.1 statisk domænenavn_servere = 192.168.1.1 8.8.8.8

Gem og luk.

Genstart og opret forbindelse til Pi via SSH

pi@raspberrypi: ~ $ sudo genstart

Tilslut fra en anden computer ved hjælp af SSH. Windows -brugere kan bruge PuTTY eller Windows Subsystem til Linux (Windows10).

ian@computer: ~ $ ssh [email protected]

Indtast din adgangskode (standard er hindbær).

[email protected]'s adgangskode:

Du skulle nu være ved din Pi's kommandoprompt.

pi@raspberrypi: ~ $

Trin 2: Installer og konfigurer bevægelse

Installer og konfigurer bevægelse
Installer og konfigurer bevægelse

Motion er et program, der bruges i mange sikkerhedskamera / webcam -projekter. Motion har mange funktioner. Vi er imidlertid ved at konfigurere det til simpelthen at streame video fra webcam til port 8081.

Test dit webcam

Tilslut dit webcam og angiv tilsluttede usb -enheder (du skal muligvis genstarte efter tilslutning).

pi@raspberrypi: ~ $ lsusb

Du bør få et output svarende til dette. Bemærk Logitech C210.

Bus 001 Enhed 002: ID 046d: 0819 Logitech, Inc. Webcam C210

Bus 001 Enhed 001: ID 1d6b: 0002 Linux Foundation 2.0 root -hub

Hvis dit kamera ikke vises, er det muligvis ikke kompatibelt, eller du skal muligvis installere flere drivere.

Installer bevægelse

Opdater pakker.

pi@raspberrypi: ~ $ sudo apt-get opdatering

Installer bevægelse.

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

Når Motion er installeret, skal du redigere konfigurationsfilen.

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

Skift følgende linjer til at matche nedenfor.

dæmon på

bredde 640 højde 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 ved Boot

Åbn filen/etc/default/motion.

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

Skifte til

start_motion_daemon = ja

Gem filen og afslut

Genstart

pi@raspberrypi: ~ $ sudo genstart

Når Pi har genstartet, åbner du browseren og kontrollerer, at du har videostreaming til browseren på port 8081

Eksempel:

192.168.1.18:8081

Fejlfinding af Motion Daemon

Jeg stødte på problemer med at få motion -dæmonen til at starte ved opstart, mens jeg prøvede forskellige muligheder i filen motion.conf.

Hvis du starter bevægelse før bevægelsesdæmonen i Raspian Stretch, vil du sandsynligvis støde på problemer med at få den til at starte ved opstart senere. At køre "sudo motion" uden at konfigurere dæmonen til at gøre det, opretter først biblioteket/var/log/motion uden at give brugeren tilladelse til at skrive.

Trin 3: Installer Apache og konfigurationswebkontrolside

Installer Apache og konfigurationswebkontrolside
Installer Apache og konfigurationswebkontrolside

Apache er webserveren til robotens kontrolwebside. Vi vil erstatte standard Apache index.html -filen med en fil, der er downloadet fra github. Du vil også ændre et par linjer kode for at vise bevægelsesvideostrømmen og tildele, hvor kommandoerne skal sendes for at styre robotten.

Installer Apache og Git

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

Når apache og git er installeret, downloades filerne.

pi@raspberrypi: ~ $ git -klon

Åbn roombarobot -biblioteket.

pi@raspberrypi: ~ $ cd roombarobot

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

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

Rediger index.html -filen

Åbn filen index.html med et tekstredigeringsprogram.

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

Find disse to linjer

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

Skift "YOURIPADDRESS" til den statiske IP -adresse, du konfigurerede i trin 1, og gem filen.

Eksempel:

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

På en anden computer skal du åbne en browser og indtaste din Pi's IP -adresse. Du bør se kontrolwebsiden med en boks til venstre, streaming af video fra dit webcam og webkontrolknapperne til højre.

Trin 4: Opsætning og test af koden

Opsætning og test af koden
Opsætning og test af koden

Denne kode er skrevet i python og kræver tornadobiblioteket. Koden bruger biblioteket til at oprette en server til at lytte efter kommandoer fra kontrolwebsiden 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 installer tornado

Start Roombabot -programmet, og test forbindelsen

Start programmet roombabot.py

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

Når du kører, skal du se "Klar" i terminalen. Åbn kontrolwebsiden i en browser, og klik på Opret forbindelse. Klik derefter på en af retningsknapperne på siden. Du kan også også bruge piletasterne på dit tastatur.

Du skal se et output i terminalen svarende til dette.

Parat

forbindelse åbnet … forbindelse åbnet … modtaget: u 8 Kører Fremadrettet forbindelse åbnet … modtaget: l 6 Drejning til venstre forbindelse åbnet … modtaget: d 2 Kørsel Omvendt forbindelse åbnet … modtaget: r 4 Drej til højre

Tryk på ctrl+c for at stoppe programmet.

Når du er færdig med at teste strømmen til Pi.

pi@raspberrypi: ~ $ sudo poweroff

Fejl

Jeg har bemærket et problem med nedlukningsknappen på kontrolwebstedet. Nogle gange gør nedlukningsknappen ikke noget, når der klikkes eller tappes. Jeg har ikke kunnet finde ud af, hvad der forårsager dette, men der er en løsning. Hvis du ønsker at slukke for robotten, og nedlukningsknappen ikke virker, skal du genindlæse siden, klikke / trykke på forbindelsesknappen og derefter klikke / trykke på knappen for nedlukning. Det skal slukke.

Trin 5: Montering

montage
montage
montage
montage
montage
montage
montage
montage

Som tidligere nævnt behøver du ikke bruge en Roomba til dette projekt. Alt med to motorer, to hjul og en ramme ville fungere. Jeg adskilte Roomba og fjernede alt undtagen hjulmodulerne og batteriet.

Hjul moduler

Roombas hjul og motorer er samlet i et aftageligt modul. Hvert modul har et blåt ydre hus, der indeholder motor, gearkasse, hjul, affjedringsfjeder og interfacekort.

Interfacekort

Hvert interfacekort har seks ledninger, der kører til det. Der er to ledninger (rød [+], sort [-]), der roterer motoren, en datakabel til en hall -effektsensor, en ledning til hjulfaldskontakten, en 5V -ledning og en GND -ledning til at drive sensoren. Du bliver nødt til at skille modulet fra hinanden for at få adgang til interfacekortet. Jeg fjernede alt tilbage til motoren og loddet nye [+] og [-] ledninger til motoren (se fotos). Det er op til dig, om du vil bevare sensorerne eller ej.

Ophængsfjedre

Når du fjerner vakuumdelen, bliver Roombas vægt smidt af. Hvis du ikke fjerner fjedrene, sidder Roomba skråt. Jeg fjernede oprindeligt disse, men tilføjede dem derefter, da jeg fandt ud af, at det kæmpede med at rulle tæppet. At sætte fjederen tilbage løste problemet.

Tilslutning af motorerne til motorstyringen

Motorerne vender væk fra hinanden. Det betyder, at den ene motor skal rotere fremad, mens den anden roterer baglæns for at køre Roomba i fremadgående retning. Jeg tænkte ikke så meget over dette, før jeg havde sat alt op. Jeg endte med bare at skrive koden omkring, hvordan jeg oprindeligt koblet motorerne. Dette var en lykkelig ulykke, for hver gang Raspberry Pi tændes/slukkes, er der spændingsudgang til GPIO -benene. På den måde, jeg har tingene på, fungerer Roomba, indtil Raspberry Pi er startet (cirka tredive sekunder) og drejer, når den lukkes, indtil strømmen er fjernet. Hvis kablet anderledes, ville det potentielt rulle frem / tilbage, hvilket ville være irriterende. Jeg planlægger til sidst at løse dette med en simpel switch til motorstyringen.

Tilslutning af motorer og batteri til motorstyringen

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

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

Tilslutning af motorstyringen til Raspberry Pi

Motor Controller Pins Wire Color (se fotos) Raspberry Pi Pins

GND- - - - - - - - - - - - - - - - - Sort- - - - - - - - - - - - - -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 af elektronikken

Der er ikke meget, der går med at sammensætte alt. Jeg fjernede roomba'en fra chassiset. Når dækslet er fjernet, kan du nemt klippe de eksisterende plastafstande og bore huller af for at montere elektronikken. Der er eksisterende porte til kørsel af kabler fra motorerne. Hvis du bruger Roomba -batteriet på lager, er der allerede en afbrydelse for adgang til batteripolerne.

Batterier

Jeg brugte separate batterier til Raspberry Pi og motorstyringen. Pi -batteriet er kun en 5V batteripakke, der bruges til at booste mobiltelefoner. Til motorstyringen brugte jeg det originale Roomba -batteri, der fulgte med. Batteripolerne er ikke mærket, så det er bedst at kontrollere spændingen med et voltmeter, før du tilslutter den til motorstyringen. For at fastgøre ledningerne til Roomba -batteriet brugte jeg fire neodymmagneter (se fotos). Jeg lodde to af magneterne til ledningerne, og de to andre satte jeg fast på batteripolerne. Lodning afmagnetiserer magneterne. Belægningen på ydersiden kan dog stadig fastgøre til magneterne på terminalerne og lede elektricitet. Dette gør tilslutning og frakobling af batteriet til et stykke kage.

Test

Når du har alt samlet, skal du kontrollere, at alt er korrekt koblet til, støtte din robot på noget (så det ikke ruller væk), og tænd det.

Log ind, og start programmet roombabot.py

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

Gå til webkontrol -siden, og test den. Hvis alt er forbundet korrekt, skal hjulene rotere i den tilsvarende retning, når der klikkes på knapperne / der trykkes på piletasterne (glem ikke at klikke på forbind).

Trin 6: Start af Python -koden ved opstart / afslutning

Start af Python -koden ved opstart / afslutning
Start af Python -koden ved opstart / afslutning
Start af Python -koden ved opstart / afslutning
Start af Python -koden ved opstart / afslutning

Den sidste ting, vi skal gøre, er at fortælle Raspbian at starte python -programmet ved opstart. For at gøre dette skal vi lave script og planlægge det til at køre ved genstart ved hjælp af crontab.

Opret scriptet

Opret en ny scriptfil kaldet startrobot.sh i pi -brugermappen

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 /

Gem filen og afslut

Gør startrobot.sh -filen eksekverbar

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

Test det (tryk på ctrl + c for at stoppe)

pi@raspberrypi: ~ $ sh startrobot.sh

Rediger crontab -filen

pi@raspberrypi: ~ $ sudo crontab -e

Tilføj følgende linje til bunden af filen

# m h dom mon dow kommando

@reboot sh /home/pi/startrobot.sh

Gem og luk

Roombabot.py -programmet skal nu starte, når Pi genstartes eller strømmen tændes.

Afslutter

På dette tidspunkt skal du have en funktionel robot, som du kan styre ved hjælp af browseren fra enhver enhed på dit netværk. Jeg har taget dette lidt længere siden den oprindelige opbygning og opsætning af en VPN for at få adgang til robotten, når jeg er væk hjemmefra. Jeg agter at foretage nogle yderligere ændringer i fremtiden. Jeg planlægger at gøre det autonomt og muligvis følge bevægelse, mens jeg stadig kan overtage kontrollerne, når jeg vil.

Anbefalede: