Innehållsförteckning:
- Steg 1: Hårdvara behövs
- Steg 2: Montering av chassit
- Steg 3: Montering av elektroniken
- Steg 4: Lägga till webbkameran
- Steg 5: Anslut allt
- Steg 6: Konfigurera RPI
- Steg 7: Konfigurera RPI -seriell port
- Steg 8: Installera Python -modulerna
- Steg 9: Konfigurera RoboClaw
- Steg 10: Installera Rover -programmet/filerna
- Steg 11: Starta Bot Up
- Steg 12: Öppna botkontrollsidan
- Steg 13: Python/flaskkoden
- Steg 14: Använda annan maskinvara
Video: Webbstyrd Rover: 14 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
Att bygga och leka med robotar är mitt största skyldiga nöje i livet. Andra spelar golf eller åker skidor, men jag bygger robotar (eftersom jag inte kan spela golf eller åka skidor:-). Jag tycker det är avkopplande och roligt! För att göra de flesta av mina bots använder jag chassi -kit. Att använda kit hjälper mig att göra det jag gillar att göra mer, mjukvaran och elektroniken och ger också ett bättre chassi för mig själv.
I denna instruktionsbok kommer vi att titta på vad som krävs för att göra en enkel men robust Wifi/webbstyrd rover. Chassit som används är Actobotics Gooseneck. Jag valde den för sin storlek, utökningsförmåga och kostnad, men du kan använda valfritt annat chassi.
För ett projekt som detta kommer vi att behöva en bra solid enda dator och för denna bot valde jag att använda Raspberry Pi (RPI) en Linux -baserad dator. RPI (och Linux) ger oss massor av kodningsalternativ och Python kommer att användas för kodningssidan. För webbgränssnittet använder jag Flask, en lätt webbram för Python.
För att driva motorerna valde jag en RoboClaw 2x5a. Det möjliggör enkel seriell kommunikation för att styra det och fungerar bra med RPI och motorerna på svanhalsen.
Slutligen har den en webbkamera för videoåterkoppling av POV -typ för fjärrstyrning. Jag kommer att täcka varje ämne mer i detalj senare.
Steg 1: Hårdvara behövs
- Actobotics Gooesneck -chassi eller en lämplig ersättare efter eget val
- Raspberry Pi av ditt val (eller klon) - En RPI -modell B används på denna bot, men alla med minst två USB -portar fungerar
- Standard servoplatta B x1
- 90 ° enkelvinkelkanalfäste x1
- RoboClaw 2x5a motorförare
- S3003 eller liknande standardstorlek servo
- Liten brödbräda eller Mini brödbräda
- Kvinnliga till kvinnliga bygelkablar
- Manliga till kvinnliga bygeltrådar
- Webbkamera (tillval) - Jag använder en Logitech C110, och här är en lista över kameror som stöds för RPI
- 5v-6v strömkälla för servokraft
- 7.2v-11.1v batteri för drivmotor
- 5v 2600mah (eller högre) USB -powerbank för RPI
- USB Wifi -adapter
På min bot använder jag 4 hjul för att göra det lite mer terräng-inomhus. För det här alternativet behöver du:
- 4 "kraftigt hjul x2
- 4 mm borrset skruvnav (0,770 tum) x2
Steg 2: Montering av chassit
Montera först chassit enligt instruktionerna som medföljer chassit eller videon. Efter avslutad bör du ha något som bilden. OBS: När du monterar halsdelen, lämna bara monteringsfästet.
På min bot valde jag att byta ut hjulen som chassit följde med för 4 tunga hjul. Detta är valfritt och behövs inte om du inte vill göra detsamma.
Steg 3: Montering av elektroniken
Svanhalsen har mycket utrymme och alternativ för montering av din elektronik. Jag ger dig dessa bilder som en riktlinje, men du kan välja hur du vill lägga upp det hela. Du kan använda distanser, dubbelsidig tejp, kardborreband eller servotape för att montera kortet och batterierna.
Steg 4: Lägga till webbkameran
Ta 90 graders fästet, lätt servo nav och fyra (4) av.3125 skruvar för detta steg:
- Ta servo -navet och placera det på ena sidan av fästet och fäst dem tillsammans med.2125 "skruvarna som på bilden
- Montera sedan servon i servofästet
- Fäst 90 graders fästet med servohornet på servosryggraden och använd hornskruven som följde med servon för att ansluta dem ihop
- Montera nu servon i fästet på toppen av gåshalsen med de återstående skruvarna
- Montera kameran med dragkedjor eller dubbelsidig tejp på 90 graders fästet
Använd bilderna för guider om det behövs.
Steg 5: Anslut allt
Kablarna är ganska snäva framåt för den här roboten.
Motorerna:
Lödkablar på båda motorerna om du inte redan har gjort det
Med robotarnas framsida (slutet med gåshalsen) vänd bort från dig:
- Anslut motorkablarna på vänster motor till kanalen M1A och M1B
- Anslut motorkablarna på höger motor till kanalen M2A och M2B
Jordanslutningar (GND):
- Anslut en jordstift på RoboClaw till markbygeln. Markstiftstiftet på RoboClaw ligger närmast mitten (se bild)
- Anslut PIN 6 på RPI till bygelkortet. Se RPI -rubrikbilden för pin -tilldelningar.
- Anslut GND från servobatteriet till en av stiften på bygelkortet.
- Dra en bygelkabel från bygelkortet till servos GND -kabel.
RPI till RoboClaw:
Anslut RPI GPIO14 TXD -stift till RoboClaw S1 -stift
Kraft:
- Anslut POS -kabeln från servobatteriet till servos POS -kabel
- Anslut POS -kabeln från motorbatteriet till POS (+) på RoboClaw -motorns ingångsterminal. Vi kommer att lämna GND -terminalen frånkopplad för tillfället.
Steg 6: Konfigurera RPI
Jag antar att användaren här kan lite om Linux och RPI. Jag tar inte upp hur jag installerar eller ansluter till en. Om du behöver hjälp med det kan du använda sidorna nedan.
För att få din RPI -inställning, ta en titt på följande sidor:
- RPI Basic Setup
- RPI Snabbstartguide
- NOOBS setup guilde
För allmänna hoppsidor är RPI-huvudsidan och eLinux-sidorna bra ställen att börja på.
Se den här länken för RPI -allmänna Wifi -inställningar.
Om du planerar att använda någon form av kamera eller webbkamera på boten, ta en titt på dessa sidor för att få de grundläggande filerna som behövs.
- RPI -kaminställning
- eLinix RPI -kamerainställning
Strömmande video:
Det finns några sätt att få videoströmning att fungera på en RPI, men den metod jag föredrar är att använda Motion.
För att installera det på din RPI kör du detta: sudo apt-get install motion
Den här instruktören går också över att konfigurera den för streaming.
Steg 7: Konfigurera RPI -seriell port
Vi måste inaktivera Linux -konsolläget för att använda RX och TX eftersom vi vill prata med RoboClaw -motorstyrenheten från den här porten. För att göra detta kan du använda den här metoden eller det här verktyget. Valet är ditt på metoden eftersom de båda gör samma sak i slutändan.
Steg 8: Installera Python -modulerna
Du behöver python installerat på RPI såväl som python -paketets installationsprogram.
Så här installerar du pip:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Sedan:
- sudo pip installera kolv
- sudo pip installera pyserial
- sudo pip installera RPIO
Detta kommer att vara alla moduler som behövs för att koden ska köras.
Steg 9: Konfigurera RoboClaw
Jag har robotkoden som pratar med RoboClaw i Standard Serial Mode vid 19200 baud.
Gör så här för att ställa in RoboClaw:
- Tryck på "MODE" -knappen på RoboClaw
- Tryck på set -knappen tills lysdioden blinkar 5 (fem) gånger mellan fördröjningarna
- Tryck på "LIPO" -knappen för att lagra
- Tryck sedan på "SET" -knappen tills lysdioden blinkar 3 (tre) gånger mellan fördröjningarna
- Tryck på LIPO -knappen för att lagra
Det är det för att ställa in motorstyrenheten. Se pdf -länken ovan för mer info om det behövs.
Steg 10: Installera Rover -programmet/filerna
Ladda ner och kopiera filen rover.zip till din RPI i din pi -användarkatalog.
Om du kör Linux eller en Mac kan du använda 'scp' för att göra det:
scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~
För Windows kan du ladda ner och använda pscp och sedan göra:
pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~
När zip -filen har kopierats till RPI: n loggar du in på den som pi -användare.
Kör nu:
packa upp rover.zip
Detta kommer att packa upp filerna till en mapp med namnet 'rover' och ha följande under den mappen:
- restrover.py (pythonkoden för roboten)
- statisk (innehåller bildfilerna för knapparna på kontrollsidan)
- mallar (innehåller index.htlm -filen, kontrollwebbsidan)
Om du använder en webbkamera ändrar du raden nära botten av index.html -filen i mallmappen. Ändra webbadressen på IFRAME -raden så att den matchar src -URL: en för din videoström.
Steg 11: Starta Bot Up
Anslut USB -strömmen till RPI: n.
För att starta botkoden loggar du in som pi -användare och kör:
- cd rover
- sudo python restrover.py
Om allt var OK borde du se en skärm som liknar bilden i det här steget
Om du ser några fel eller problem måste du åtgärda dem innan du går vidare.
Anslut nu GND (-)-kabeln till NEG----terminalen på RoboClaw-motorns ingång.
Steg 12: Öppna botkontrollsidan
När robotens python -skript har körts startar du RoboClaw och navigerar sedan till din RPI: s IP:
din_rpi_ip
Du bör se webbkontrollsidan dyka upp som på bilderna. Om inte, kolla din RPI -utgångsterminal och leta efter eventuella fel och korrigera dem.
Väl på sidan är du redo att styra boten.
Roboten startar i inställningen "Med run" och med medelhastighet.
Boten kan styras via knapparna på sidan eller med tangenterna på tangentbordet.
Nycklarna är:
- w - framåt
- z - bakåt/bakåt
- a - lång vänster sväng
- s - lång höger sväng
- q - kort vänster sväng
- e - kort höger sväng
- 1 - panoreringskamera kvar
- 2 - panoreringskamera till höger
- 3 - panna helt vänster
- 4 - panna helt till höger
- / - hem/ mittkamera
- h - stopp/stopp robot
Det finns en halv sekund fördröjningsbuffert mellan kommandon som skickas. Jag gjorde detta för att eliminera oönskade upprepade kommandon. Du kan naturligtvis ta bort detta från koden om du vill (i index.html)
Resten av kontrollerna och kontrollen bör vara självförklarande.
Steg 13: Python/flaskkoden
Denna bot använder Python och Flask -webbramverket. Du kan lära dig mer om Flask här om du är intresserad.
Den stora skillnaden från en Flask -app och normalt Python -skript är @app.route class/method som används för att göra URI -hanteringen. Annat än att det är ganska normalt Python för det mesta.
#!/usr/bin/env python
# # Wifi/webbdriven Rover # # Skrivet av Scott Beasley - 2015 # # Använder RPIO, pyserial och Flask # importtid importserie från RPIO import PWM från kolvimportkolv, render_template, begär app = Flask (_name_, static_url_path = '') # Anslut till comm -porten för att prata med Roboclaw -motorstyrenheten, försök: # Ändra överföringshastigheten här om den är annorlunda än 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) utom IOError: print ("Comm port not hittad ") sys.exit (0) # Varvtals- och drivstyrningsvariabler 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 liten uppehållstillstånd för att avveckla tiden. sova (3) # # URI -hanterare - alla bot -sida åtgärder utförs här # # Skicka ut bots kontrollsida (hemsida) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti me print "Forward" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Om inte kontinuerligt, stoppa sedan efter fördröjning om run_time> 0: last_direction = -1 halt () returnera "ok" @ app.route ("/backward") def backward (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Om inte kontinuerligt, stoppa sedan efter fördröjning if run_time> 0: last_direction = -1 halt () return "ok" @app.route ("/left") def left (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 second time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) return "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # sömn @1/2 sekund sekund. sömn (0,500 - turn_tm_offset) last_direction = -1 # stopp stopp () time.sleep (0,100) returnera "ok" @app.route ("/ltforward") def ltforward (): global last_direction, turn_t m_offset print "Vänster framåt sväng" go_left () # sleep @1/8 andra gången. sov (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () 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 sekund time.sleep (0.250 - (turn_tm_offset/2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): global last_direction print "Stop" halt () last_direction = -1 # sleep 100ms time.sleep (0.100) returnera "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 om servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # sömn 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) retur "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 full right "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 # Uppdatera aktuell riktning för att få ny hastighet om last_direction == 0: go_forward () if 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 # Uppdatera aktuell riktning för att få ny hastighet om last_direction == 0: go_forward () if last_direction == 1: go_backward () # sömn 150ms tid. sov (0.150) returnera "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 # Uppdatera aktuell riktning för att få ny hastighet om last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/kontinuerlig ") def continu (): 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 kör "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 () # sova 100 ms tid.sleep (0.100) returnera "ok" # # Motordrivfunktioner # 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)) om _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)
Om du inte vill eller behöver felsökningsinformation från Flask, ställ in felsökningen till 'false' på raden app.run.
om _name_ == "_ huvud_":
app.run (host = '0.0.0.0', port = 80, debug = False)
Du kan också ändra porten som flaskens http -server lyssnar på här också.
Steg 14: Använda annan maskinvara
Om du vill använda annan hårdvara, som en annan typ av SBC (Single Board Computer) bör du ha små problem med att få Python och Flask att köra på andra brädor som Beagle Bone, PCDuino etc … Du måste ändra koden för att matcha GPIO layout och använda servokörningsmöjligheterna i den nya brädan.
För att använda en annan typ av motordrivrutin behöver du bara ändra funktionerna go_forward, go_backward, go_left, go_right och stopp för att göra vad ersättningsdrivrutinen någonsin behöver för att få motorn att göra just den funktionen.
Rekommenderad:
Raspberry Pi - Autonom Mars Rover med OpenCV Object Tracking: 7 steg (med bilder)
Raspberry Pi - Autonom Mars Rover med OpenCV Object Tracking: Drivs av en Raspberry Pi 3, Open CV -objektigenkänning, ultraljudssensorer och växlade DC -motorer. Denna rover kan spåra alla föremål den är utbildad för och röra sig på vilken terräng som helst
Wi-fi-kontrollerad FPV Rover Robot (med Arduino, ESP8266 och Stepper Motors): 11 steg (med bilder)
Wi-fi-kontrollerad FPV Rover Robot (med Arduino, ESP8266 och Stepper Motors): Denna instruerbara visar hur man designar en fjärrstyrd tvåhjulig robotrover över ett wi-fi-nätverk med en Arduino Uno ansluten till en ESP8266 Wi-fi-modul och två stegmotorer. Roboten kan styras från vanliga webbläsare
Webbstyrd Valentine: 8 steg (med bilder)
Webbstyrd Valentine: Med denna blandning av programvara och hårdvara kan du tända ett hjärtat prydat nattljus var som helst med internetåtkomst. Så oavsett om du kommer ihåg på jobbet, på ett café, hemma eller på din (webbaktiverade) mobiltelefon, kan du berätta för din valentine att du
Webbstyrd övervakningskamera: 8 steg (med bilder)
Webbstyrd övervakningskamera: Syftet med detta arbete är att visa hur man bygger övervakningssystem med webbsidans gränssnitt. Webbkameran kan vridas i vertikal eller horisontell riktning genom gränssnittet, men bara i det område som gränssensorer tillåter. Fortsättningen
Webbstyrd Arduino LED: 5 steg (med bilder)
Webbstyrd Arduino LED: Denna instruktion visar hur du bygger en webbaktiverad trefärgad LED baserad på en Arduino och WIZnet Ethernet-sköld, som kan styras från valfri webbläsare. Eftersom lysdioden exponeras genom en enkel RESTful -webbtjänst som körs på Arduino -färgen