Indholdsfortegnelse:
- Trin 1: Hardware påkrævet
- Trin 2: Montering af chassiset
- Trin 3: Montering af elektronikken
- Trin 4: Tilføjelse af webcam
- Trin 5: Tilslut det hele
- Trin 6: Opsætning af RPI
- Trin 7: Konfiguration af RPI Serial Port
- Trin 8: Installation af Python -modulerne
- Trin 9: Opsætning af RoboClaw
- Trin 10: Installation af Rover -programmet/-filerne
- Trin 11: Start af Bot Up
- Trin 12: Adgang til Bot Control -siden
- Trin 13: Python/kolbe -koden
- Trin 14: Brug af anden hardware
Video: Webstyret Rover: 14 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
At bygge og lege med robotter er min største skyldfølelse i livet. Andre spiller golf eller står på ski, men jeg bygger robotter (da jeg ikke kan spille golf eller stå på ski:-). Jeg synes det er afslappende og sjovt! For at lave de fleste af mine bots bruger jeg chassis -kits. Brug af kits hjælper mig med at gøre det, jeg kan lide at lave mere, softwaren og elektronikken og giver også et bedre chassis til mit selv-tommelfinger.
I denne instruktionsbog ser vi på, hvad der skal til for at lave en enkel, men robust Wifi/webstyret rover. Det anvendte chassis er Actobotics svanehals. Jeg valgte det på grund af dets størrelse, udvidelsesevne og pris, men du kan bruge ethvert andet chassis efter eget valg.
Til et projekt som dette skal vi bruge en god solid single board -computer, og til denne bot valgte jeg at bruge Raspberry Pi (RPI) en Linux -baseret computer. RPI (og Linux) giver os masser af kodningsmuligheder, og Python vil blive brugt til kodningssiden. Til webgrænsefladen bruger jeg Flask, en let webramme til Python.
For at køre motorerne valgte jeg en RoboClaw 2x5a. Det giver mulighed for enkel seriel kommunikation til at styre det og fungerer godt med RPI og motorerne på svanehalsen.
Endelig har den et webcam til POV -type videofeedback til fjernkørsel. Jeg vil dække hvert emne mere detaljeret senere.
Trin 1: Hardware påkrævet
- Actobotics Gooesneck chassis eller en passende udskiftning efter eget valg
- Raspberry Pi efter eget valg (eller klon) - En RPI -model B bruges på denne bot, men enhver med mindst to USB -porte fungerer
- Standard servoplade B x1
- 90 ° enkelt vinkel kanalbeslag x1
- RoboClaw 2x5a motor driver
- S3003 eller lignende standardstørrelse servo
- Lille brødbræt eller Mini brødbræt
- Jumper til hun til hun
- Trøjer fra mand til kvinde
- Webkamera (valgfrit) - Jeg bruger en Logitech C110, og her er en liste over understøttede kameraer til RPI
- 5v-6v strømkilde til servostrøm
- 7.2v-11.1v batteri til drivmotor
- 5v 2600mah (eller højere) USB -powerbank til RPI
- USB Wifi adapter
På min bot bruger jeg 4 hjul til at gøre det lidt mere terrænindendørs. Til denne mulighed skal du bruge:
- 4 "kraftigt hjul x2
- 4 mm boresæt skruehub (0,770 tommer) x2
Trin 2: Montering af chassiset
Monter først chassiset efter instruktionerne, der følger med chassiset eller videoen. Efter endt skal du have noget som billedet. BEMÆRK: Når du samler halsdelen, skal du bare lade monteringsbeslaget være slukket.
På min bot valgte jeg at udskifte de hjul, som chassiset kom med til 4 kraftige hjul. Dette er valgfrit og ikke nødvendigt, medmindre du vil gøre det samme.
Trin 3: Montering af elektronikken
Gooseneck har masser af plads og muligheder for montering af din elektronik. Jeg giver dig disse billeder som en vejledende linje, men du kan vælge, hvordan du gerne vil lægge det hele ud. Du kan bruge stand-offs, dobbeltsidet tape, velcro eller servotape til at montere kortet og batterierne.
Trin 4: Tilføjelse af webcam
Tag 90 graders beslag, let servo -nav og fire (4) af.3125 skruerne til dette trin:
- Tag servo -navet, og anbring det på den ene side af beslaget, og fastgør dem sammen med.2125 "skruerne som på billedet
- Monter derefter servoen i servobeslaget
- Fastgør 90 graders beslag med servohornet til servosryggen, og brug den skrue, der fulgte med servoen, til at forbinde dem sammen
- Monter nu Servoen i beslag på toppen af gåsehalsen med de resterende skruer
- Monter kamera med lynlåse eller dobbeltsidet tape på 90 graders beslag
Brug billederne til vejledninger, hvis det er nødvendigt.
Trin 5: Tilslut det hele
Ledningerne er temmelig snævre fremad for denne robot.
Motorer:
Loddekabler på begge motorer, hvis du ikke allerede har gjort det
Med robotterne foran (enden med gåsehalsen) vendt væk fra dig:
- Tilslut motorkablerne på venstre motor til kanalen M1A og M1B
- Tilslut motorkablerne på den højre motor til kanalen M2A og M2B
Jordforbindelser (GND):
- Tilslut en jordstift på RoboClaw til jumperkortet. Jordstiftlinjen på RoboClaw er tættest på midten (se billede)
- Tilslut PIN 6 på RPI'en til jumperkortet. Se RPI -header -billedet for pin -tildelinger.
- Tilslut GND'en fra servobatteriet til en af benene på jumperkortet.
- Kør en jumper wire fra jumper board til servos GND wire.
RPI til RoboClaw:
Tilslut RPI GPIO14 TXD pin til RoboClaw S1 pin
Strøm:
- Tilslut POS -ledningen fra servobatteriet til servos POS -ledningen
- Tilslut POS -ledningen fra motorbatteriet til POS (+) på RoboClaw -motorens strømindgangsterminal. Vi lader GND -terminalen være afbrudt for nu.
Trin 6: Opsætning af RPI
Jeg formoder, at brugeren her ved noget om Linux og RPI. Jeg dækker ikke, hvordan jeg opsætter eller opretter forbindelse til en. Hvis du har brug for hjælp til det, skal du bruge siderne herunder.
For at få din RPI -opsætning, skal du kigge på følgende sider:
- RPI grundlæggende opsætning
- RPI Hurtig startguide
- NOOBS opsætningsguilde
For generelle hop-off sider er RPI-hovedsiden og eLinux-sider gode steder at starte.
Se dette link for RPI generel Wifi -opsætning.
Hvis du planlægger at bruge en slags kamera eller webcam på botten, skal du kigge på disse sider for at få de grundlæggende nødvendige filer.
- RPI cam opsætning
- eLinix RPI cam opsætning
Streaming af video:
Der er et par måder at få videostreaming til at fungere på et RPI, men den metode, jeg foretrækker, er at bruge Motion.
For at installere det på din RPI kører du dette: sudo apt-get install motion
Denne instruktable går også over opsætningen af den til streaming.
Trin 7: Konfiguration af RPI Serial Port
Vi bliver nødt til at deaktivere Linux -konsoltilstanden for at bruge RX og TX, da vi vil tale med RoboClaw -motorstyringen fra denne port. For at gøre dette kan du bruge denne metode eller dette værktøj. Valget er dit på metoden, da de begge gør det samme i sidste ende.
Trin 8: Installation af Python -modulerne
Du skal bruge python installeret på RPI samt python -pakkeinstallationspip.
Sådan installeres pip:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Derefter:
- sudo pip installere kolbe
- sudo pip installer pyserial
- sudo pip installer RPIO
Dette vil være alle de moduler, der er nødvendige for at koden kan køre.
Trin 9: Opsætning af RoboClaw
Jeg har robotkoden, der taler til RoboClaw i Standard Serial Mode ved 19200 baud.
Gør følgende for at konfigurere RoboClaw:
- Tryk på knappen "MODE" på RoboClaw
- Tryk på knappen Set, indtil LED'en blinker 5 (fem) gange mellem forsinkelserne
- Tryk på "LIPO" -knappen for at gemme
- Tryk derefter på knappen "SET", indtil LED'en blinker 3 (tre) gange mellem forsinkelserne
- Tryk på LIPO -knappen for at gemme
Det er det til opsætning af motorstyringen. Se pdf'en linket ovenfor for mere information, hvis det er nødvendigt.
Trin 10: Installation af Rover -programmet/-filerne
Download og kopier rover.zip -filen til dit RPI i dit pi -brugermappe.
Hvis du kører Linux eller en Mac, kan du bruge 'scp' til at gøre det:
scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~
For Windows kan du downloade og bruge pscp og derefter gøre:
pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~
Når zipfilen er kopieret over til RPI'en, skal du logge på den som pi -brugeren.
Kør nu:
pak rover.zip ud
Dette vil pakke filerne ud til en mappe med navnet 'rover' og have følgende under den mappe:
- restrover.py (Python -koden til robotten)
- statisk (gemmer billedfilerne for knapperne på kontrolsiden)
- skabeloner (indeholder filen index.htlm, kontrolwebsiden)
Hvis du bruger et webkamera, skal du ændre linjen nær bunden af index.html -filen i skabelonmappen. Skift webadressen i IFRAME -linjen, så den matcher src -webadressen til din videostream.
Trin 11: Start af Bot Up
Tilslut USB -strømmen til RPI'en.
For at starte botkoden skal du logge ind som pi -bruger og køre:
- cd rover
- sudo python restrover.py
Hvis alt var i orden, skulle du se en skærm, der ligner billedet i dette trin
Hvis du ser fejl eller problemer, skal du rette dem, før du går videre.
Tilslut nu GND (-) ledningen til NEG (-) terminalen på RoboClaw motorens strømindgang.
Trin 12: Adgang til Bot Control -siden
Når robotens python -script kører, skal du tænde RoboClaw og derefter navigere til din RPI's ip:
din_rpi_ip
Du skal se webkontrol -siden dukke op som på billederne. Hvis ikke, skal du kontrollere din RPI -udgangsterminal og se efter eventuelle fejl og rette dem.
Når du er på siden, er du klar til at kontrollere botten.
Robotten starter i indstillingen "Med kørsel" og ved middel hastighed.
Botten kan styres via knapperne på siden eller med taster på tastaturet.
Nøglerne er:
- w - fremad
- z - baglæns/baglæns
- a - lang venstresving
- s - lang højresving
- q - kort venstresving
- e - kort højresving
- 1 - panoreringskamera tilbage
- 2 - panorer kamera højre
- 3 - gryde helt til venstre
- 4 - gryde helt til højre
- / - hjem/ center kamera
- h - stop/stop robot
Der er et halvt sekund forsinkelsesbuffer mellem kommandoer, der sendes. Jeg gjorde dette for at fjerne uønskede gentagne kommandoer. Du kan selvfølgelig fjerne dette fra koden, hvis du vil (i index.html)
Resten af kontrolelementerne og kontrollen med det skal være selvforklarende.
Trin 13: Python/kolbe -koden
Denne bot bruger Python og Flask -webrammen. Du kan lære mere om Flask her, hvis du er interesseret.
Den store forskel fra en Flask -app og normalt Python -script er @app.route class/metode, der bruges til at udføre URI -håndteringen. Bortset fra det er det stort set normalt Python.
#!/usr/bin/env python
# # Wifi/Web -drevet Rover # # Skrevet af Scott Beasley - 2015 # # Bruger RPIO, pyserial og Flask # importtid importserie fra RPIO import PWM fra kolbeimportflaske, render_template, anmod om app = Flask (_name_, static_url_path = '') # Tilslut til comm -porten for at tale med Roboclaw -motorstyringen, prøv: # Skift baudhastighed her, hvis den er forskellig fra 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) undtagen IOError: print ("Comm port not fundet ") sys.exit (0) # Hastigheds- og drivstyringsvariabler last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo neutral position (home) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # En lille dvæl for at afvikle tid. søvn (3) # # URI -håndtere - alle bot -side handlinger udføres her # # Send bots kontrol siden (startside) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti mig udskrive "Frem" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Hvis ikke kontinuerlig, så stop efter forsinkelse, hvis run_time> 0: last_direction = -1 stop () returner "ok" @ app.route ("/baglæns") def baglæns (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Hvis ikke kontinuerlig, stop derefter efter forsinkelse hvis run_time> 0: last_direction = -1 halt () returner "ok" @app.route ("/left") def left (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 sekund time.sleep (0.500 - turn_tm_offset) # stop stop () time.sleep (0.100) return "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # søvn @1/2 sekund anden gang.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): global sidste_retning, drej_t m_offset print "Venstre fremad" go_left () # sleep @1/8 anden gang. sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): global last_direction, turn_tm_offset print "Right forward turn" go_right () # sleep @1/8 second time.sleep (0.250 - (turn_tm_offset/2)) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): global last_direction print "Stop" stop () last_direction = -1 # sleep 100ms time.sleep (0.100) returner "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 hvis servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # søvn 150 ms tid. sleep (0.150) return "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/panfull_lt") def panfull_lt (): global servo_pos print "Pan full l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return" ok " @app.route ("/panfull_rt ") def panfull_rt (): global servo_pos print" Pan fuld højre "servo_pos = 2500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # Opdater den aktuelle retning for at få ny hastighed, hvis last_direction == 0: go_forward () hvis last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/speed_mid") def speed_mid (): global speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Opdater nuværende retning for at få ny hastighed, hvis last_direction == 0: go_forward () hvis last_direction == 1: go_backward () # søvn 150 ms tid. sove (0,150) returner "ok" @app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # Opdater nuværende retning for at få ny hastighed, hvis last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/kontinuerlig ") def kontinuerlig (): global run_time print" Continuous run "run_time = 0 # sleep 100ms time.sleep (0.100) return" ok " @app.route ("/mid_run ") def mid_run (): global run_time print" Mid run "run_time = 0.750 halt () # sleep 100ms time.sleep (0.100) return" ok " @app.route ("/short_time ") def short_time (): global run_time print" Short run "run_time = 0.300 halt () # sleep 100ms time.sleep (0.100) return "ok" # # Motordrevfunktioner # def go_forward (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 +) speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) hvis _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)
Hvis du ikke ønsker eller har brug for fejlfindingsoplysninger fra Flask, skal du indstille fejlfinding til 'falsk' på linjen app.run.
hvis _name_ == "_main_":
app.run (host = '0.0.0.0', port = 80, debug = Falsk)
Du kan også ændre den port, som kolben http -serveren også lytter til her.
Trin 14: Brug af anden hardware
Hvis du vil bruge anden hardware, som en anden type SBC (enkeltkortcomputer), skal du have små problemer med at få Python og Flask til at køre på andre tavler som Beagle Bone, PCDuino osv … Du bliver nødt til at ændre koden, så den matcher GPIO layout og brug servokørselskapaciteterne i det nye bord.
Hvis du vil bruge en anden type motordriver, skal du bare ændre funktionerne go_forward, go_backward, go_left, go_right og stop for at gøre det, som den nye motordriver nogensinde har brug for for at få motoren til at udføre den pågældende funktion.
Anbefalede:
Raspberry Pi - Autonom Mars Rover Med OpenCV Object Tracking: 7 trin (med billeder)
Raspberry Pi - Autonom Mars Rover Med OpenCV Object Tracking: Drevet af en Raspberry Pi 3, Open CV objektgenkendelse, Ultrasonic sensorer og gearede DC motorer. Denne rover kan spore ethvert objekt, den er trænet til, og bevæge sig på ethvert terræn
Wi-fi-styret FPV Rover Robot (med Arduino, ESP8266 og Stepper Motors): 11 trin (med billeder)
Wi-fi-styret FPV Rover Robot (med Arduino, ESP8266 og Stepper Motors): Denne instruktør viser, hvordan man designer en fjernstyret tohjulet robotrover over et wi-fi-netværk ved hjælp af en Arduino Uno tilsluttet et ESP8266 Wi-fi-modul og to trinmotorer. Robotten kan styres fra almindelige internetbrowsere
Webstyret Valentine: 8 trin (med billeder)
Webstyret Valentine: Med denne blanding af software og hardware kan du tænde et hjertepyntet natlys overalt med internetadgang. Så uanset om du husker på arbejde, på en cafe, derhjemme eller på din (webaktiverede) mobiltelefon, kan du fortælle din valentine, at du
Webstyret overvågningskamera: 8 trin (med billeder)
Webstyret overvågningskamera: Formålet med dette arbejde er at vise, hvordan man bygger overvågningssystem med websidegrænsefladen. Webkameraet kan drejes i lodret eller vandret retning gennem grænsefladen, men kun i det område, som grænsesensorer tillader. Fortsættelsen
Webstyret Arduino LED: 5 trin (med billeder)
Webstyret Arduino LED: Denne instruktør viser dig, hvordan du bygger en web-aktiveret trefarvet LED baseret på en Arduino og WIZnet Ethernet-skjold, der kan styres fra enhver webbrowser. Fordi LED'en udsættes for en simpel RESTful -webtjeneste, der kører på Arduino -farven