Sadržaj:

Web kontrolirani rover: 14 koraka (sa slikama)
Web kontrolirani rover: 14 koraka (sa slikama)

Video: Web kontrolirani rover: 14 koraka (sa slikama)

Video: Web kontrolirani rover: 14 koraka (sa slikama)
Video: НЕ ВЗДУМАЙ снимать аккумулятор с машины. Делай это ПРАВИЛЬНО ! 2024, Novembar
Anonim
Web kontrolirani Rover
Web kontrolirani Rover
Web kontrolirani Rover
Web kontrolirani Rover

Izgradnja i igra s robotima moje je glavno zadovoljstvo 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 šta 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 dobar čvrsti single board računar, a za ovog bota odabrao sam koristiti Raspberry Pi (RPI) Linux računar. 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ćava 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

Potreban hardver
Potreban hardver
Potreban hardver
Potreban hardver
Potreban hardver
Potreban hardver
Potreban hardver
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 ° sa jednim uglom x1
  • RoboClaw 2x5a motorni vozač
  • S3003 ili sličan servo servo standardne veličine
  • Mala ploča ili mini ploča
  • Žice za ženski spoj
  • Muški na ženski kratkospojnik
  • Web kamera (opcionalno) - Koristim Logitech C110, a evo i liste 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 "točak za velika opterećenja x2
  • 4 mm vijak za cilindar (0,770 inča) x2

Korak 2: Sklapanje šasije

Sklapanje šasije
Sklapanje šasije
Sklapanje šasije
Sklapanje šasije
Sklapanje šasije
Sklapanje šasije

Prvo sastavite šasiju prema uputama priloženim uz šasiju ili video zapis. Nakon završetka trebali biste imati nešto poput slike. NAPOMENA: Prilikom sastavljanja dijela vrata, ostavite montažni držač isključen.

Na svom bot -u sam odlučio zamijeniti kotače koje je šasija isporučila za 4 -inčne točkove za teške uslove rada. Ovo je opcionalno i nije potrebno osim ako ne želite učiniti isto.

Korak 3: Montiranje elektronike

Montaža elektronike
Montaža elektronike
Montaža elektronike
Montaža elektronike
Montaža elektronike
Montaža elektronike

Gooseneck ima puno prostora i mogućnosti za ugradnju vaše elektronike. Dajem vam ove slike kao vodič, ali možete izabrati kako želite sve to izložiti. Za postavljanje ploče i baterija možete koristiti samostojeće, dvostrane trake, čičak ili servo traku.

Korak 4: Dodavanje web kamere

Dodavanje web kamere
Dodavanje web kamere
Dodavanje web kamere
Dodavanje web kamere
Dodavanje web kamere
Dodavanje web kamere

Za ovaj korak uzmite nosač od 90 stepeni, laku servo glavčinu i četiri (4) vijka.3125 :

  • Uzmite servo čvorište i postavite ga na jednu stranu držača i pričvrstite ih vijcima.2125 "kao na slici
  • Zatim montirajte servo u servo držač
  • Pričvrstite držač od 90 stepeni sa servo trubom na servo upravljač i pomoću vijka trube koji ste dobili uz servo spojite ih zajedno
  • Sada preostalim vijcima montirajte servo u držač na vrh guščjeg vrata
  • Montirajte kameru sa patent zatvaračima ili dvostranom trakom na nosač od 90 stepeni

Ako je potrebno, koristite slike za vodiče.

Korak 5: Ožičite sve

Ožičenje
Ožičenje
Ožičenje
Ožičenje
Ožičenje
Ožičenje
Ožičenje
Ožičenje

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 RoboClaw -u na ploču kratkospojnika za uzemljenje. Igla za uzemljenje na RoboClaw -u najbliža je centru (vidi sliku)
  • Povežite PIN 6 na RPI -u sa kratkospojnom pločom. Za dodjelu pinova pogledajte sliku zaglavlja RPI.
  • Spojite GND iz servo baterije na jedan od pinova na kratkospojnoj ploči.
  • Provedite kratkospojnik od prespojne ploče do žice GND servomotora.

RPI za RoboClaw:

Spojite RPI GPIO14 TXD pin na RoboClaw S1 pin

Snaga:

  • 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

Postavljanje RPI -ja
Postavljanje RPI -ja

Pretpostavljam da korisnik ovdje zna nešto o Linuxu i RPI -u. Ne opisujem kako se postavljaju ili povezuju na jedan. Ako vam je potrebna pomoć oko toga, koristite donje stranice.

Za postavljanje RPI -a pogledajte sljedeće stranice:

  • Osnovno podešavanje RPI -ja
  • RPI Vodič za brzi početak
  • NOOBS setup guilde

Za opće skočne stranice, RPI glavna stranica i eLinux stranice su sjajna mjesta za početak.

Općenito o postavljanju Wi -Fi -ja za RPI pogledajte ovu vezu.

Ako planirate koristiti neku vrstu kamere ili web kamere na botu, pogledajte ove stranice kako biste dobili osnovne potrebne datoteke.

  • Podešavanje RPI kamere
  • eLinix RPI podešavanje kamere

Streaming video:

Postoji nekoliko načina za pokretanje video streaminga na RPI -u, ali metoda koju preferiram je Motion.

Da biste ga instalirali na RPI, pokrenite ovo: sudo apt-get install motion

Ovaj vodič može preći i na postavljanje 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:

  1. sudo apt-get install python-setuptools
  2. sudo easy_install pip

Zatim:

  1. sudo pip flask za instaliranje
  2. sudo pip install pyserial
  3. sudo pip instalirajte RPIO

Ovo će biti svi moduli potrebni za pokretanje koda.

Korak 9: Postavljanje RoboClawa

Imam kod robota koji razgovara s RoboClaw -om u standardnom serijskom načinu rada na 19200 bodova.

Da biste postavili RoboClaw za ovo, učinite sljedeće:

  1. Pritisnite dugme "MODE" na RoboClawu
  2. Pritiskajte dugme za podešavanje dok LED lampica ne zatreperi 5 (pet) puta između kašnjenja
  3. Pritisnite dugme "LIPO" za skladištenje
  4. Zatim pritisnite dugme "SET" sve dok LED dioda ne zasvijetli 3 (tri) puta između kašnjenja
  5. Pritisnite dugme LIPO za skladištenje

To je sve za postavljanje kontrolera 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 koristiti '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:

unzip rover.zip

Ovo će otpakirati datoteke u mapu pod nazivom 'rover' i ispod nje će biti sljedeće:

  • restrover.py (Python kôd za robota)
  • statički (sadrži datoteke slika za dugmad 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 liniji IFRAME tako da se podudara sa src URL -om za vaš video stream.

Korak 11: Pokretanje programa Bot Up

Pokretanje Bot Up -a
Pokretanje Bot Up -a

Priključite USB napajanje na RPI.

Da biste pokrenuli bot kod, prijavite se kao pi korisnik i pokrenite:

  • cd rover
  • sudo python restrover.py

Ako je sve u redu, trebali biste vidjeti ekran sličan slici u ovom koraku

Ako vidite bilo kakve greš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

Pristup kontrolnoj stranici Bota
Pristup kontrolnoj stranici Bota
Pristup kontrolnoj stranici Bota
Pristup kontrolnoj stranici Bota

Nakon pokretanja python skripte robota, uključite RoboClaw, a zatim idite do vašeg RPI -jevog ip -a poput:

your_rpi_ip

Trebali biste vidjeti web stranicu za kontrolu pojavljivanja kao na slikama. Ako nije, provjerite svoj RPI izlazni terminal i potražite greške i ispravite ih.

Kad se nađete na stranici, spremni ste za kontrolu robota.

Robot će se pokrenuti u postavci "Med run" i srednjom brzinom.

Botom se može upravljati pomoću dugmadi na stranici ili pomoću tastera na tastaturi.

Ključevi su:

  • w - naprijed
  • z - unazad/unazad
  • a - dugo skretanje ulijevo
  • s - dugo skretanje udesno
  • q - kratko skretanje ulijevo
  • e - kratko skretanje udesno
  • 1 - okrenite kameru lijevo
  • 2 - okrenite kameru desno
  • 3 - pan do kraja lijevo
  • 4 - okrenite do kraja udesno
  • / - kućna/ središnja kamera
  • h - robot za zaustavljanje/zaustavljanje

Između poslanih naredbi postoji međuspremnik za kašnjenje od pola sekunde. Ovo sam učinio da eliminiram neželjene ponavljane naredbe. Naravno, ovo možete ukloniti iz koda ako želite (u index.html)

Ostatak kontrola i kontrola trebaju biti jasni.

Korak 13: Python/Flask kod

Ovaj bot koristi Python i Flask web framework. 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 uvozne bočice Flask, render_template, request app = Flask (_name_, static_url_path = '') # Povežite se na Comm port da biste razgovarali 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 upravljanja brzinom i pogonom 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 određivanju vremena time.sleep (3) # # URI rukovaoci - 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 (): global last_direction, run_ti ispiši "Naprijed" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Ako nije kontinuirano, onda se zaustavi nakon kašnjenja 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 (): globalni last_direction, turn_t m_offset ispis "Lijevo naprijed skretanje" go_left () # spavanje @1/8 sekunde time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): globalno last_direction, turn_tm_offset print "desno skretanje naprijed" 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 (): global last_direction print "Stop" halt () last_direction = -1 # sleep 100ms time.sleep (0.100) vrati "ok" @app.route ("/panlt") def panlf (): globalno servo_pos ispis "Panlt" servo_pos -= 100 ako servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # spavanje 150ms vrijeme. 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 ispis "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_smjere, zadnja_smjera, skretanje_tm_smjera brzina_smjera = 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 dobijete novu brzinu ako last_direction == 0: go_forward () ako last_direction == 1: go_backward () # spavanje 150ms time.sleep (0.150) vrati "ok" @app.route ("/speed_hi") def speed_hi (): globalna brzina_pomak, zadnji_smjer, turn_tm_offset brzina_usmjera = 126 tur n_tm_offset = 0.332 # 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 ("/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 (): globalno run_time ispis" Short run "run_time = 0.300 halt () # sleep 100ms time.sleep (0.100) return "ok" # # Funkcije pogona motora # def go_forward (): globalna brzina_pomak ako je brzina_smjera! = 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 je 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_ == "_ma_": app.run (host = '0.0.0.0', port = 80, debug = True)

Ako ne želite ili trebate informacije o otklanjanju pogrešaka iz Flaska, postavite ispravljanje pogrešaka na 'false' u retku app.run.

if _name_ == "_main_":

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 -a (Single Board Computer), trebali biste imati problema s pokretanjem Pythona i Flaska na drugim pločama poput Beagle Bone -a, PCDuino -a itd … Morat ćete promijeniti kôd tako da 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čuje se: