Sadržaj:
- Korak 1: Potreban hardver
- Korak 2: Sastavljanje šasije
- Korak 3: Montiranje elektronike
- Korak 4: Dodavanje web kamere
- Korak 5: Ožičite sve
- Korak 6: Postavljanje RPI -ja
- Korak 7: Konfiguriranje RPI serijskog porta
- Korak 8: Instaliranje Python modula
- Korak 9: Postavljanje RoboClawa
- Korak 10: Instaliranje Rover programa/datoteka
- Korak 11: Pokretanje Bot Up -a
- Korak 12: Pristup stranici za kontrolu bota
- Korak 13: Python/Flask kod
- Korak 14: Korištenje drugog hardvera
Video: Web kontrolirani rover: 14 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Izgradnja i igra s robotima moj je glavni užitak u životu. Drugi igraju golf ili skijaju, ali ja pravim robote (budući da ne mogu igrati golf ili skijati:-). Smatram da je to opuštajuće i zabavno! Za izradu većine svojih robota koristim setove šasije. Korištenje kompleta pomaže mi raditi ono što više volim raditi, softver i elektroniku, a čini i bolju šasiju za sebe.
U ovom Instructableu ćemo pogledati što je potrebno za izradu jednostavnog, ali robusnog rovera koji kontrolira Wifi/web. Koristi se šasija Actobotics Gooseneck. Odabrao sam ga zbog njegove veličine, mogućnosti proširenja i cijene, ali možete koristiti bilo koju drugu šasiju po vlastitom izboru.
Za ovakav projekt trebat će nam dobro jednopločno računalo, a za ovog sam bota odabrao koristiti Raspberry Pi (RPI) računalo sa sustavom Linux. RPI (i Linux) daje nam mnogo mogućnosti kodiranja, a Python će se koristiti za kodiranje. Za web sučelje koristim Flask, lagani web okvir za Python.
Za pogon motora odabrao sam RoboClaw 2x5a. Omogućuje jednostavnu serijsku komunikaciju za upravljanje i dobro radi s RPI -em i motorima na Goosenecku.
Konačno, ima web kameru za video povratne informacije tipa POV za daljinsko upravljanje. Kasnije ću detaljnije obraditi svaku temu.
Korak 1: Potreban hardver
- Actobotics Gooesneck šasija ili odgovarajuća zamjena po vašem izboru
- Raspberry Pi po vašem izboru (ili klon) - Na ovom se botu koristi RPI model B, ali svaki s najmanje dva USB priključka će raditi
- Standardna servo ploča B x1
- Nosač kanala 90 ° jednokutnog kanala x1
- Vozač motora RoboClaw 2x5a
- S3003 ili sličan servo servo standardne veličine
- Mala ploča ili mini ploča
- Žice za spajanje ženski na ženski
- Muški na ženski kratkospojnik
- Web kamera (izborno) - Koristim Logitech C110, a ovdje je popis podržanih kamera za RPI
- 5v-6v izvor napajanja za servo napajanje
- 7,2v-11,1v baterija za napajanje pogonskog motora
- 5v 2600mah (ili više) USB banka za napajanje za RPI
- USB Wifi adapter
Na svom botu koristim kotače od 4 kako bih bio malo više terenski-zatvoreni. Za ovu opciju trebat će vam:
- 4 "kotač za teške uvjete x2
- 4 mm vijak za postavljanje provrta (0,770 inča) x2
Korak 2: Sastavljanje šasije
Prvo sastavite kućište prema uputama priloženim uz kućište ili video zapis. Nakon završetka trebali biste imati nešto poput slike. NAPOMENA: Prilikom sastavljanja dijela vrata samo ostavite montažni držač isključen.
Na svom bot -u odlučio sam zamijeniti kotače s kojima je šasija isporučena za 4 -inčne kotače za teške uvjete. Ovo je izborno i nije potrebno osim ako ne želite učiniti isto.
Korak 3: Montiranje elektronike
Gooseneck ima puno prostora i mogućnosti za ugradnju vaše elektronike. Dajem vam ove slike kao vodič, ali možete odabrati kako želite sve to izložiti. Za pričvršćivanje ploče i baterija možete koristiti samostojeće, dvostrane trake, čičak ili servo traku.
Korak 4: Dodavanje web kamere
Za ovaj korak uzmite nosač od 90 stupnjeva, lagano servo čvorište i četiri (4) vijka.3125 :
- Uzmite servo čvorište i postavite ga s jedne strane nosača i pričvrstite ih vijcima.2125 "kao na slici
- Zatim montirajte servo u servo držač
- Pričvrstite držač od 90 stupnjeva sa servo trubom na servo upravljač i pomoću vijka trube koji ste dobili s servo spojite ih zajedno
- Sada preostalim vijcima montirajte servo u držač na vrh guščjeg vrata
- Montirajte kameru s patentnim zatvaračima ili dvostranom trakom na nosač od 90 stupnjeva
Slike koristite za vodiče ako je potrebno.
Korak 5: Ožičite sve
Ožičenje je za ovog robota prilično usko.
Motori:
Lemite žice na oba motora ako to već niste učinili
S prednjim robotima (kraj s gušjim vratom) okrenutim prema vama:
- Spojite žice motora na lijevom motoru na kanal M1A i M1B
- Spojite žice motora na desnom motoru na kanal M2A i M2B
Priključci uzemljenja (GND):
- Spojite jedan pin za uzemljenje na RoboClawu na ploču kratkospojnika za uzemljenje. Linija uzemljenja na RoboClawu najbliža je središtu (vidi sliku)
- Spojite PIN 6 na RPI -ju na skakačku ploču. Za dodjelu pinova pogledajte sliku RPI zaglavlja.
- Spojite GND iz servo baterije na jedan od pinova na kratkospojnoj ploči.
- Provedite kratkospojnu žicu od prespojne ploče do žice GND servomotora.
RPI za RoboClaw:
Spojite RPI GPIO14 TXD pin na RoboClaw S1 pin
Vlast:
- Spojite POS žicu sa servo baterije na servo POS kabel
- Spojite POS žicu s akumulatora motora na POS (+) priključka za napajanje motora RoboClaw. GND terminal ćemo za sada ostaviti isključenim.
Korak 6: Postavljanje RPI -ja
Pretpostavljam da korisnik ovdje zna nešto o Linuxu i RPI -ju. Ne pokrivam kako postaviti ili povezati s njim. Ako vam je potrebna pomoć u tome, upotrijebite donje stranice.
Za postavljanje RPI -a pogledajte sljedeće stranice:
- Osnovno postavljanje RPI -ja
- RPI Vodič za brzi početak
- NOOBS setup guilde
Za opće skočne stranice, RPI glavna stranica i eLinux stranice izvrsna su mjesta za početak.
Općenito o postavljanju Wi -Fi -ja za RPI pogledajte na ovoj vezi.
Ako namjeravate koristiti neku vrstu kamere ili web kamere na botu, pogledajte ove stranice kako biste dobili osnovne potrebne datoteke.
- Postavljanje RPI kamere
- eLinix RPI postavljanje kamere
Streaming video:
Postoji nekoliko načina za pokretanje streaminga videozapisa na RPI -u, ali metoda koju preferiram je korištenje Motion -a.
Da biste ga instalirali na RPI, pokrenite ovo: sudo apt-get install motion
Ovaj instrukcijski program također ide preko postavljanja za streaming.
Korak 7: Konfiguriranje RPI serijskog porta
Morat ćemo onemogućiti način rada Linux konzole za korištenje RX -a i TX -a jer želimo razgovarati s kontrolerom motora RoboClaw s ovog porta. Da biste to učinili, možete koristiti ovu metodu ili ovaj alat. Izbor je na vašoj metodi jer oboje na kraju rade istu stvar.
Korak 8: Instaliranje Python modula
Trebat će vam python instaliran na RPI -u, kao i pip za instalaciju paketa python.
Da biste instalirali pip, učinite sljedeće:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Zatim:
- sudo pip install flask
- sudo pip instalirajte pyserial
- sudo pip instalirajte RPIO
To će biti svi moduli potrebni za pokretanje koda.
Korak 9: Postavljanje RoboClawa
Imam kod robota koji razgovara s RoboClawom u standardnom serijskom načinu rada na 19200 bauda.
Da biste postavili RoboClaw za ovo, učinite sljedeće:
- Pritisnite gumb "MODE" na RoboClawu
- Pritisnite gumb za postavljanje dok LED dioda ne zasvijetli 5 (pet) puta između kašnjenja
- Za spremanje pritisnite gumb "LIPO"
- Zatim pritisnite gumb "SET" dok LED dioda ne zasvijetli 3 (tri) puta između kašnjenja
- Pritisnite gumb LIPO za spremanje
To je sve za postavljanje upravljačkog sklopa motora. Za više informacija, ako je potrebno, pogledajte gornji pdf dokument.
Korak 10: Instaliranje Rover programa/datoteka
Preuzmite i kopirajte datoteku rover.zip u svoj RPI u svom korisničkom imeniku pi.
Ako koristite Linux ili Mac, za to možete upotrijebiti 'scp':
scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~
Za Windows možete preuzeti i koristiti pscp, a zatim učiniti sljedeće:
pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~
Nakon što se zip datoteka prekopira u RPI, prijavite se na nju kao korisnik pi.
Sada pokrenite:
raspakirajte rover.zip
Ovo će otpakirati datoteke u mapu pod nazivom 'rover' i ispod te mape imat će sljedeće:
- restrover.py (Python kôd za robota)
- statički (sadrži slikovne datoteke za gumbe na kontrolnoj stranici)
- predlošci (sadrži datoteku index.htlm, kontrolnu web stranicu)
Ako koristite web kameru, izmijenite redak pri dnu datoteke index.html u mapi predloška. Promijenite URL u retku IFRAME tako da odgovara URL -u src za vaš video stream.
Korak 11: Pokretanje Bot Up -a
Priključite USB napajanje na RPI.
Da biste pokrenuli bot kod, prijavite se kao korisnik pi i pokrenite:
- cd rover
- sudo python restrover.py
Ako je sve u redu, trebali biste vidjeti zaslon sličan slici u ovom koraku
Ako vidite bilo kakve pogreške ili probleme, morat ćete ih popraviti prije nego nastavite.
Sada spojite žicu GND (-) na terminal NEG (-) na ulazu za napajanje motora RoboClaw.
Korak 12: Pristup stranici za kontrolu bota
Nakon što se pokrene python skripta robota, uključite RoboClaw, a zatim idite do ip -a RPI -ja poput:
your_rpi_ip
Trebali biste vidjeti web stranicu za kontrolu pojavljivanja kao na slikama. Ako ne, provjerite svoj RPI izlazni terminal i potražite greške te ih ispravite.
Kad se nađete na stranici, spremni ste za upravljanje botom.
Robot će se pokrenuti u postavci "Med run" i srednjom brzinom.
Botom se može upravljati pomoću gumba na stranici ili tipkama na tipkovnici.
Ključevi su:
- w - naprijed
- z - unatrag/unatrag
- a - dugo skretanje ulijevo
- s - dugo skretanje udesno
- q - kratko skretanje ulijevo
- e - kratko skretanje udesno
- 1 - okrenite kameru lijevo
- 2 - okretna kamera desno
- 3 - tava puna lijevo
- 4 - pan potpuno udesno
- / - kućna/ središnja kamera
- h - robot za zaustavljanje/zaustavljanje
Između poslanih naredbi postoji međuspremnik za kašnjenje od pola sekunde. Učinio sam to kako bih eliminirao neželjene ponavljane naredbe. Naravno, ovo možete ukloniti iz koda ako želite (u index.html)
Ostatak kontrola i njegova kontrola trebaju biti jasni.
Korak 13: Python/Flask kod
Ovaj bot koristi Python i web okvir Flask. Ovdje možete saznati više o Flasku ako ste zainteresirani.
Velika razlika u odnosu na aplikaciju Flask i normalnu Python skriptu je klasa/metoda @app.route koja se koristi za rukovanje URI -om. Osim toga, to je uglavnom normalni Python.
#!/usr/bin/env python
# # Rover s Wifi/web pogonom # # Napisao Scott Beasley - 2015 # # Koristi RPIO, pyserial i Flask # uvozi serijsko vrijeme uvozi serijski iz RPIO uvozi PWM iz tikvice uvozi Flask, render_template, request app = Flask (_name_, static_url_path = '') # Povežite se na Comm port za razgovor s kontrolerom motora Roboclaw pokušajte: # Ovdje promijenite brzinu prijenosa ako se razlikuje od 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) osim IOError: print ("Comm port nije found ") sys.exit (0) # Varijable kontrole brzine i pogona last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo neutralni položaj (home) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Malo razmišljanja o utvrđivanju vremena time.sleep (3) # # URI rukovatelji - sve radnje na stranici bota se izvršavaju ovdje # # Pošaljite kontrolnu stranicu botova (početna stranica) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): globalni last_direction, run_ti me ispisati "Naprijed" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Ako nije neprekidno, onda se zaustavi nakon odgode ako je run_time> 0: last_direction = -1 halt () return "ok" @ app.route ("/backward") def backward (): globalno last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Ako nije kontinuirano, onda se zaustavi nakon kašnjenja 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 () # spavanje @1/2 sekunde time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): global last_direction, turn_t m_offset print "Lijevo naprijed skretanje" go_left () # sleep @1 /8 second time.sleep (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 turn turn" go_right () # sleep @1/8 drugi put.sleep (0.250 - (turn_tm_offset/2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): globalni last_direction print "Stop" halt () last_direction = -1 # sleep 100ms time.sleep (0.100) return "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 if servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # sleep 150ms time. sleep (0.150) return "ok" @app.route ("/home") def home (): global servo_pos ispis "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 pun 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 ispis" 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 (): globalna brzina_smjesta, zadnja_smjera, turn_tm_offset brzina_sklopa = 42 turn_tm_offset = 0,001 # Ažurirajte trenutni smjer da biste dobili novu brzinu ako je 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 (): globalni speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Ažurirajte trenutni smjer da biste dobili novu brzinu ako last_direction == 0: go_forward () if last_direction == 1: go_backward () # spavanje 150ms time.sleep (0.150) return "ok" @app.route ("/speed_hi") def speed_hi (): globalna brzina_smjere, posljednji_smjer, turn_tm_offset brzina_smjere = 126 tur n_tm_offset = 0.332 # Ažurirajte trenutni smjer da biste dobili novu brzinu ako je last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/kontinuirano ") def continual (): 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 () # spavanje 100ms time.sleep (0.100) return "ok" # # Funkcije pogona motora # def go_forward (): globalna brzina_pomak ako je brzina_sklapanje! = 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 (): globalni speed_offset ako je 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 (): globalna speed_offset ako 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 (): globalni speed_offset ako 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)) if _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)
Ako ne želite ili trebate podatke za ispravljanje pogrešaka iz Flaska, postavite debug na 'false' na retku app.run.
ako je _name_ == "_glavni_":
app.run (host = '0.0.0.0', port = 80, debug = False)
Ovdje možete promijeniti i port koji poslužuje Flask http poslužitelj.
Korak 14: Korištenje drugog hardvera
Ako želite koristiti drugi hardver, poput druge vrste SBC (Single Board Computer), trebali biste imati problema s pokretanjem Pythona i Flaska na drugim pločama poput Beagle Bonea, PCDuina itd … Morat ćete promijeniti kôd koji odgovara GPIO -u raspored i koristiti mogućnosti servo pogona nove ploče.
Da biste koristili drugi tip upravljačkog programa motora, samo trebate izmijeniti funkcije go_forward, go_backward, go_left, go_right i halt kako biste učinili sve što zamjenski upravljački program motora mora učiniti da motor izvrši tu određenu funkciju.
Preporučeni:
Uradi sam Arduino kontrolirani multiwii kontrolor leta: 7 koraka (sa slikama)
DIY Arduino kontrolirani multiwii kontrolor leta: Ovaj projekt ima za cilj stvoriti svestranu, ali prilagođenu višekopternu logičku ploču za bespilotne letjelice temeljenu na Arduinu i Multiwii
Dvostruki 7 -segmentni zasloni kontrolirani potenciometrom u CircuitPythonu - Demonstracija postojanosti vida: 9 koraka (sa slikama)
Dvostruki 7-segmentni zasloni kontrolirani potenciometrom u CircuitPythonu-demonstracija postojanosti vida: Ovaj projekt koristi potenciometar za upravljanje prikazom na nekoliko 7-segmentnih LED zaslona (F5161AH). Kako se gumb potenciometra okreće, prikazani broj mijenja se u rasponu od 0 do 99. U jednom trenutku svijetli samo jedna LED, vrlo kratko, ali
Arduino kontrolirani Nerf Vulcan: 10 koraka (sa slikama)
Arduino kontrolirani Nerf Vulcan: Da, upravo to govori naslov. Ova instrukcija će vas naučiti kako kontrolirati bilo koji Nerf Vulkan sa svojim Arduinom. Priručni vodič pucat će samo 2,5 sekunde, zaustavljati se 2,5 sekunde itd. To je poput "zdravo svijeta"
Model tipkovnicom kontrolirani model V2.0 - PS/2 sučelje: 13 koraka (sa slikama)
Model tipkovnice upravljanim vlakom V2.0 | PS/2 sučelje: U jednom od mojih prethodnih Instructable -a pokazao sam vam kako kontrolirati model željezničkog rasporeda pomoću tipkovnice. Bio je sjajan, ali je imao nedostatak što je zahtijevao rad računala. U ovom Instructableu, da vidimo kako upravljati modelom vlaka pomoću ključa
DMX kontrolirani strop EL žice: 9 koraka (sa slikama)
DMX kontrolirani EL žičani strop: Ovaj projekt je DMX kontrolirani stropni EL Wire. Izrađen je od 30 EL žice (što znači elektroluminiscentna žica) u 3 različite boje, potpuno neovisne. Uključuje standardni DMX protokol, kompatibilan sa bilo kojim softverom za upravljanje svjetlom