Turinys:

Internete valdomas „Rover“: 14 žingsnių (su nuotraukomis)
Internete valdomas „Rover“: 14 žingsnių (su nuotraukomis)

Video: Internete valdomas „Rover“: 14 žingsnių (su nuotraukomis)

Video: Internete valdomas „Rover“: 14 žingsnių (su nuotraukomis)
Video: Обман на 14.000.000 - Нагло, Быстро, Подло!!! || СХЕМА #24 - Автомобильные замуты | Range Rover 2024, Lapkritis
Anonim
Internete valdomas „Rover“
Internete valdomas „Rover“
Internete valdomas „Rover“
Internete valdomas „Rover“

Statyti ir žaisti su robotais yra mano pagrindinis kaltas gyvenimo malonumas. Kiti žaidžia golfą ar slidinėja, bet aš konstruoju robotus (nes nemoku žaisti golfo ar slidinėti:-). Man tai smagu ir atpalaiduoja! Norėdami sukurti daugumą savo robotų, naudoju važiuoklės komplektus. Rinkinių naudojimas padeda man daryti tai, kas man labiau patinka, programinei įrangai ir elektronikai, taip pat mano važiuoklė yra geresnė.

Šioje instrukcijoje apžvelgsime, ko reikia norint sukurti paprastą, bet tvirtą „Wifi“/žiniatinklio valdomą roverį. Naudojama važiuoklė yra „Actobotics Gooseneck“. Aš jį pasirinkau dėl savo dydžio, išplėtimo galimybių ir kainos, tačiau galite naudoti bet kurią kitą jūsų pasirinktą važiuoklę.

Tokiam projektui mums reikės gero tvirto vienos plokštės kompiuterio, o šiam robotui pasirinkau naudoti „Linux“pagrįstą kompiuterį „Raspberry Pi“(RPI). RPI (ir „Linux“) suteikia mums daug kodavimo parinkčių, o kodavimo pusėje bus naudojamas „Python“. Žiniatinklio sąsajai naudoju „Flask“- lengvą „Python“žiniatinklio sistemą.

Varikliams vairuoti pasirinkau „RoboClaw 2x5a“. Tai leidžia valdyti paprastą nuoseklųjį ryšį ir gerai veikia su RPI ir „Gooseneck“varikliais.

Galiausiai, ji turi internetinę kamerą, skirtą POV tipo vaizdo įrašams, kad būtų galima valdyti nuotoliniu būdu. Vėliau išsamiau aptarsiu kiekvieną temą.

1 žingsnis: reikalinga aparatinė įranga

Reikalinga aparatūra
Reikalinga aparatūra
Reikalinga aparatūra
Reikalinga aparatūra
Reikalinga aparatūra
Reikalinga aparatūra
Reikalinga aparatūra
Reikalinga aparatūra
  • „Actobotics Gooesneck“važiuoklė arba tinkamas jūsų pasirinktas pakeitimas
  • Jūsų pasirinktas „Raspberry Pi“(arba klonas) - šiam robotui naudojamas RPI modelis B, tačiau veiks visi, turintys bent du USB prievadus
  • Standartinė servo plokštė B x1
  • 90 ° vieno kampo kanalo laikiklis x1
  • RoboClaw 2x5a variklio vairuotojas
  • S3003 arba panašaus standartinio dydžio servo
  • Maža duonkepė arba mini kepimo lenta
  • Perjungimo laidai nuo moterų iki moterų
  • Sujungimo laidai nuo vyrų iki moterų
  • Žiniatinklio kamera (neprivaloma) - naudoju „Logitech C110“, o čia yra RPI palaikomų kamerų sąrašas
  • 5v-6v maitinimo šaltinis servo galiai
  • 7.2v-11.1v baterija pavaros varikliui maitinti
  • 5v 2600mah (arba didesnis) USB maitinimo blokas RPI
  • USB Wifi adapteris

Savo robotui aš naudoju 4 colių ratus, kad jis taptų šiek tiek labiau pritaikytas visureigiui. Norėdami pasirinkti šią parinktį, jums reikės:

  • 4 "sunkiųjų ratų x2
  • 4 mm kiaurymės varžto stebulė (0,770 colio) x2

2 žingsnis: Važiuoklės surinkimas

Važiuoklės surinkimas
Važiuoklės surinkimas
Važiuoklės surinkimas
Važiuoklės surinkimas
Važiuoklės surinkimas
Važiuoklės surinkimas

Pirmiausia surinkite važiuoklę vadovaudamiesi važiuoklės ar vaizdo įrašo instrukcijomis. Baigę turėtumėte turėti kažką panašaus į vaizdą. PASTABA: Surinkdami kaklo dalį, tiesiog palikite tvirtinimo laikiklį išjungtą.

Savo robote aš nusprendžiau pakeisti ratus, prie kurių buvo pridėta važiuoklė, skirtus 4 colių sunkiesiems ratams. Tai neprivaloma ir nereikalinga, nebent norite tai padaryti.

3 žingsnis: Elektronikos montavimas

Elektronikos montavimas
Elektronikos montavimas
Elektronikos montavimas
Elektronikos montavimas
Elektronikos montavimas
Elektronikos montavimas

„Gooseneck“turi daug vietos ir galimybių montuoti jūsų elektroniką. Pateikiu jums šias nuotraukas kaip orientacinę liniją, tačiau jūs galite pasirinkti, kaip norėtumėte visa tai išdėstyti. Norėdami pritvirtinti plokštę ir baterijas, galite naudoti atskirtas, dvipusę juostą, Velcro ar servo juostą.

4 veiksmas: pridėkite internetinę kamerą

Pridedama internetinė kamera
Pridedama internetinė kamera
Pridedama internetinė kamera
Pridedama internetinė kamera
Pridedama internetinė kamera
Pridedama internetinė kamera

Šiam žingsniui paimkite 90 laipsnių laikiklį, lengvą servo stebulę ir keturis (4).3125 varžtus:

  • Paimkite servo stebulę ir padėkite ją vienoje laikiklio pusėje ir pritvirtinkite kartu su.2125 "varžtais, kaip parodyta paveikslėlyje
  • Tada sumontuokite servo servo laikiklį
  • Pritvirtinkite 90 laipsnių laikiklį su servo ragu prie servo stuburo ir naudokite rago varžtą, kuris buvo pridėtas prie servo, kad juos sujungtumėte
  • Dabar likusius varžtus pritvirtinkite „Servo“laikiklyje ant žąsies kaklo viršaus
  • Prie 90 laipsnių laikiklio pritvirtinkite fotoaparatą su užtrauktukais arba dvipuse juosta

Jei reikia, naudokite paveikslėlius vadovams.

5 žingsnis: prijunkite viską

Laidai viską
Laidai viską
Laidai viską
Laidai viską
Laidai viską
Laidai viską
Laidai viską
Laidai viską

Šio roboto laidai yra gana įtempti.

„Motors“:

Abiejų variklių lydmetalio laidai, jei to dar nepadarėte

Robotai priekyje (galas su žąsies kaklu) nukreipti nuo savęs:

  • Prijunkite kairiojo variklio variklio laidus prie kanalų M1A ir M1B
  • Prijunkite dešiniojo variklio variklio laidus prie kanalų M2A ir M2B

Įžeminimo (GND) jungtys:

  • Prijunkite vieną „RoboClaw“įžeminimo kaištį prie įžeminimo plokštės. „RoboClaw“įžeminimo kaiščio linija yra arčiausiai centro (žr. Paveikslėlį)
  • Prijunkite RPI PIN 6 prie trumpiklio. Žiūrėkite RPI antraštės paveikslėlį, kad gautumėte kaiščių priskyrimus.
  • Prijunkite GND iš servo akumuliatoriaus bloko prie vieno iš jungiamųjų plokščių kaiščių.
  • Perjunkite trumpiklį nuo jungiamosios plokštės iki servo GND laido.

RPI į „RoboClaw“:

Prijunkite RPI GPIO14 TXD kaištį prie „RoboClaw S1“kaiščio

Galia:

  • Prijunkite POS laidą iš servo akumuliatoriaus prie servo POS laido
  • Prijunkite POS laidą iš variklio akumuliatoriaus prie „RoboClaw“variklio galios įvesties gnybto POS (+). GND terminalą kol kas paliksime atjungtą.

6 veiksmas: RPI nustatymas

RPI nustatymas
RPI nustatymas

Manau, kad vartotojas čia žino apie „Linux“ir RPI. Aš neaprašau, kaip sukonfigūruoti ar prisijungti prie vieno. Jei jums reikia pagalbos, naudokite toliau pateiktus puslapius.

Norėdami gauti RPI sąranką, peržiūrėkite šiuos puslapius:

  • Pagrindinė RPI sąranka
  • RPI greitas pradžios vadovas
  • NOOBS sąrankos gildija

Jei norite pradėti bendrus puslapius, pagrindinis RPI puslapis ir „eLinux“puslapiai yra puiki vieta pradėti.

Peržiūrėkite šią nuorodą, kad sužinotumėte apie bendrą RPI „Wi -Fi“sąranką.

Jei planuojate naudoti tam tikrą fotoaparatą ar žiniatinklio kamerą robote, peržiūrėkite šiuos puslapius, kad gautumėte pagrindinius reikalingus failus.

  • RPI kameros nustatymas
  • „eLinix“RPI kameros nustatymas

Srautinio vaizdo įrašas:

Yra keli būdai, kaip vaizdo transliacija veikti naudojant RPI, tačiau man labiau patinka „Motion“naudojimas.

Norėdami jį įdiegti savo RPI, atlikite šiuos veiksmus: sudo apt-get install motion

Ši instrukcija apima ir jos nustatymą srautiniam perdavimui.

7 veiksmas: RPI nuoseklaus prievado konfigūravimas

Norėdami naudoti RX ir TX, turėsime išjungti „Linux“konsolės režimą, nes norime pasikalbėti su „RoboClaw“variklio valdikliu iš šio prievado. Norėdami tai padaryti, galite naudoti šį metodą arba šį įrankį. Metodą galite pasirinkti patys, nes jie abu daro tą patį.

8 veiksmas: „Python“modulių diegimas

Jums reikės „python“, įdiegto RPI, taip pat „python“paketo diegimo programos pip.

Norėdami įdiegti pip, atlikite šiuos veiksmus:

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

Tada:

  1. sudo pip instaliavimo kolba
  2. sudo pip įdiegti pyserial
  3. sudo pip įdiegti RPIO

Tai bus visi moduliai, reikalingi kodui paleisti.

9 veiksmas: nustatykite „RoboClaw“

Turiu roboto kodą kalbantis su „RoboClaw“standartiniu serijos režimu esant 19200 baudų.

Norėdami nustatyti „RoboClaw“, atlikite šiuos veiksmus:

  1. Paspauskite „MODE“mygtuką „RoboClaw“
  2. Paspauskite nustatymo mygtuką, kol šviesos diodas mirksės 5 (penkis) kartus tarp vėlavimų
  3. Norėdami išsaugoti, paspauskite mygtuką „LIPO“
  4. Toliau paspauskite mygtuką „SET“, kol šviesos diodas mirksės 3 (tris) kartus tarp vėlavimų
  5. Norėdami išsaugoti, paspauskite LIPO mygtuką

Tai yra variklio valdiklio nustatymui. Jei reikia daugiau informacijos, žiūrėkite aukščiau pateiktą pdf.

10 veiksmas: „Rover“programos/failų diegimas

Atsisiųskite ir nukopijuokite failą rover.zip į savo RPI savo pi vartotojo kataloge.

Jei naudojate „Linux“arba „Mac“, galite tai padaryti naudodami „scp“:

scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~

„Windows“galite atsisiųsti ir naudoti pscp, tada atlikite šiuos veiksmus:

pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~

Kai ZIP failas nukopijuojamas į RPI, prisijunkite prie jo kaip pi vartotojas.

Dabar paleiskite:

išpakuokite roverį.zip

Tai išpakuos failus į aplanką pavadinimu „rover“ir tame aplanke bus:

  • restrover.py (roboto python kodas)
  • statinis (valdo valdymo puslapio mygtukų vaizdo failus)
  • šablonai (turi failą index.htlm, valdymo tinklalapį)

Jei naudojate žiniatinklio kamerą, šablonų aplanke pakeiskite eilutę šalia failo index.html apačios. Pakeiskite IFRAME eilutės URL, kad jis atitiktų jūsų vaizdo įrašo srauto src URL.

11 veiksmas: „Bot Up“paleidimas

„Bot Up“paleidimas
„Bot Up“paleidimas

Prijunkite USB maitinimą prie RPI.

Norėdami pradėti roboto kodą, prisijunkite kaip pi vartotojas ir paleiskite:

  • cd roveris
  • sudo python restrover.py

Jei viskas buvo gerai, šiame žingsnyje turėtumėte pamatyti ekraną, panašų į paveikslėlį

Jei matote klaidų ar problemų, prieš tęsdami turėsite jas ištaisyti.

Dabar prijunkite GND (-) laidą prie „RoboClaw“variklio galios įvesties NEG (-) gnybto.

12 veiksmas: prieiga prie roboto valdymo puslapio

Prieiga prie roboto valdymo puslapio
Prieiga prie roboto valdymo puslapio
Prieiga prie roboto valdymo puslapio
Prieiga prie roboto valdymo puslapio

Paleidus roboto „python“scenarijų, įjunkite „RoboClaw“ir eikite į savo RPI IP, pavyzdžiui:

jūsų_rpi_ip

Turėtumėte pamatyti iššokantį žiniatinklio valdymo puslapį, kaip ir paveikslėliuose. Jei ne, patikrinkite savo RPI išvesties terminalą, ieškokite klaidų ir jas ištaisykite.

Patekę į puslapį, esate pasiruošę valdyti robotą.

Robotas pradės veikti „Med run“režimu ir vidutiniu greičiu.

Robotą galima valdyti puslapio mygtukais arba klaviatūros klavišais.

Raktai yra:

  • w - į priekį
  • z - atgal/atgal
  • a - ilgas posūkis į kairę
  • s - ilgas posūkis į dešinę
  • q - trumpas posūkis į kairę
  • e - trumpas posūkis į dešinę
  • 1 - kairė panoraminė kamera
  • 2 - pan. Kamera dešinėje
  • 3 - keptuvė pilna kairėje
  • 4 - keptuvė pilna
  • / - namų/ centro kamera
  • h - sustabdyti/sustabdyti robotą

Tarp siunčiamų komandų yra pusės sekundės delsos buferis. Aš tai padariau, kad pašalinčiau nepageidaujamas pasikartojančias komandas. Žinoma, jei norite, galite jį pašalinti iš kodo (index.html)

Likusi kontrolė ir jos valdymas turėtų būti savaime suprantami.

13 žingsnis: „Python“/kolbos kodas

Šis robotas naudoja „Python“ir „Flask“žiniatinklio sistemą. Čia galite sužinoti daugiau apie kolbą, jei jus domina.

Didelis skirtumas nuo „Flask“programos ir įprasto „Python“scenarijaus yra @app.route klasė/metodas, naudojamas tvarkant URI. Išskyrus tai, tai beveik normalus „Python“.

#!/usr/bin/env python

# # „Wifi“/žiniatinklio valdomas „Rover“# Parašė Scottas Beasley - 2015 # # Naudoja RPIO, „pyserial“ir „Flask“# importavimo laiko importo serijas iš RPIO importo PWM iš kolbos importo Kolba, render_template, request app = Flask (_name_, static_url_path = ") # Prisijunkite prie bendro prievado, kad pasikalbėtumėte su „Roboclaw“variklio valdikliu. Pabandykite: # Pakeiskite čia duomenų perdavimo spartą, jei ji skiriasi nuo 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200), išskyrus IOError: print ("Comm port not not rasta ") sys.exit (0) # Greičio ir pavaros valdymo kintamieji last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo neutrali padėtis (namai) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Šiek tiek pasilikite, kad nustatytumėte laiko laiką. miegas (3) # # URI tvarkytojai - visi roboto puslapio veiksmai atliekami čia # # Išsiųskite robotų valdymo puslapį (pagrindinis puslapis) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti man spausdinti "Pirmyn" go_forward () last_direction = 0 # miego 100ms + run_time time.sleep (0.100 + run_time) # Jei nepertraukiamas, sustabdykite po uždelsimo, jei run_time> 0: last_direction = -1 halt () grąžinkite „ok“@ app.route ("/backward") def backward (): global last_direction, run_time print "Atgal" go_backward () last_direction = 1 # miegas 100ms + run_time time.sleep (0.100 + run_time) # Jei nepertraukiamas, sustabdykite po uždelsimo 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 antras laikas.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 "Dešinė" go_right () # sleep @1/2 second 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 „Posūkis į kairę į priekį“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 "Posūkis į dešinę" go_right () # 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 ("/stop") def stop (): global last_direction print "Stop" halt () last_direction = -1 # sleep 100ms time.sleep (0.100) grąžinti „gerai“@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) # miego laikas 150 ms. miego režimas (0,150) grįžti „gerai“@app.route („/home“) def home (): global servo_pos print „Home“servo_pos = 1250 servo.set_servo (18, servo_pos) # miegas 150ms time.sleep (0.150) return "gerai" @app.route ("/panfull_lt") def panfull_lt (): global servo_pos print "Pan full l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # miegas 150 ms 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) # miego 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 # Atnaujinkite dabartinę kryptį, kad gautumėte naują greitį, jei 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 # Atnaujinkite dabartinę kryptį, kad gautumėte naują greitį, jei last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) grąžinti „gerai“@app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur m ") def Continuous (): 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 () # miego 100 ms laikas.sleep (0.100) return "ok" # # Variklio pavaros funkcijos # 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)), jei _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

Jei nenorite ar jums nereikia derinimo informacijos iš „Flask“, nustatykite derinimo parinktį „false“„app.run“eilutėje.

jei _vardas_ == "_main_":

app.run (priegloba = '0.0.0.0', prievadas = 80, derinimas = klaidinga)

Čia taip pat galite pakeisti prievadą, kurio klausosi kolbos http serveris.

14 veiksmas: kitos aparatūros naudojimas

Jei norite naudoti kitą aparatūrą, pvz., Kito tipo SBC (vienos lentos kompiuterį), jums turėtų kilti problemų dėl „Python“ir „Flask“paleidimo kitose plokštėse, pvz., „Beagle Bone“, „PCDuino“ir kt. … Turėsite pakeisti kodą, kad jis atitiktų GPIO išdėstymą ir naudokite naujos plokštės servo vairavimo galimybes.

Jei norite naudoti kito tipo variklio tvarkyklę, jums tereikia modifikuoti „go_forward“, „go_backward“, „go_left“, „go_right“ir „stop“funkcijas, kad padarytumėte tai, ko reikia pakaitiniam variklio vairuotojui, kad variklis atliktų tą konkrečią funkciją.

Rekomenduojamas: