Satura rādītājs:

Tīmekļa kontrolēts Rover: 14 soļi (ar attēliem)
Tīmekļa kontrolēts Rover: 14 soļi (ar attēliem)

Video: Tīmekļa kontrolēts Rover: 14 soļi (ar attēliem)

Video: Tīmekļa kontrolēts Rover: 14 soļi (ar attēliem)
Video: 15 полезных советов по демонтажным работам. Начало ремонта. Новый проект.# 1 2024, Novembris
Anonim
Tīmekļa kontrolēts Rover
Tīmekļa kontrolēts Rover
Tīmekļa kontrolēts Rover
Tīmekļa kontrolēts Rover

Būvēt un spēlēties ar robotiem ir mana galvenā vainīgā bauda dzīvē. Citi spēlē golfu vai slēpo, bet es būvēju robotus (jo es nevaru spēlēt golfu vai slēpot:-). Man tas šķiet relaksējoši un jautri! Lai izveidotu lielāko daļu savu robotu, es izmantoju šasijas komplektus. Komplektu izmantošana palīdz man darīt to, kas man patīk darīt vairāk, programmatūru un elektroniku, kā arī uzlabo manu visu īkšķu šasiju.

Šajā pamācībā mēs apskatīsim, kas nepieciešams, lai izveidotu vienkāršu, bet spēcīgu Wifi/tīmekļa kontrolētu roveru. Izmantotā šasija ir Actobotics Gooseneck. Es to izvēlējos izmēra, paplašināmības un izmaksu dēļ, bet jūs varat izmantot jebkuru citu šasiju pēc savas izvēles.

Šādam projektam mums būs vajadzīgs labs ciets vienas plates dators, un šim robotam es izvēlējos izmantot Raspberry Pi (RPI) datoru, kura pamatā ir Linux. RPI (un Linux) dod mums daudz kodēšanas iespēju, un kodēšanas pusē tiks izmantots Python. Tīmekļa saskarnei es izmantoju Flask - vieglu tīmekļa sistēmu Python.

Lai darbinātu motorus, es izvēlējos RoboClaw 2x5a. Tas nodrošina vienkāršu sērijveida sakarus tā komandēšanai un labi darbojas ar RPI un Gooseneck motoriem.

Visbeidzot, tam ir tīmekļa kamera POV tipa video atsauksmēm, lai vadītu to attālināti. Katru tēmu sīkāk apskatīšu vēlāk.

1. darbība. Nepieciešama aparatūra

Nepieciešama aparatūra
Nepieciešama aparatūra
Nepieciešama aparatūra
Nepieciešama aparatūra
Nepieciešama aparatūra
Nepieciešama aparatūra
Nepieciešama aparatūra
Nepieciešama aparatūra
  • Actobotics Gooesneck šasija vai piemērota nomaiņa pēc jūsu izvēles
  • Raspberry Pi pēc jūsu izvēles (vai klons) - šajā robotprogrammatūrā tiek izmantots RPI modelis B, taču derēs jebkurš ar vismaz diviem USB portiem
  • Standarta servoplate B x1
  • 90 ° viena leņķa kanāla kronšteins x1
  • RoboClaw 2x5a motora vadītājs
  • S3003 vai līdzīgs standarta izmēra servo
  • Neliels maizes dēlis vai mini maizes dēlis
  • Džempera vadi no sievietes līdz sievietei
  • Džemperu vadi no tēviņa līdz sievietei
  • Tīmekļa kamera (pēc izvēles) - es izmantoju Logitech C110, un šeit ir RPI atbalstīto izciļņu saraksts
  • 5v-6v barošanas avots servo jaudai
  • 7.2v-11.1v akumulators piedziņas motora barošanai
  • 5V 2600mah (vai lielāka) USB barošanas bloks RPI
  • USB Wifi adapteris

Savā robotprogrammatūrā es izmantoju 4 collu riteņus, lai padarītu to nedaudz vairāk visurgājēju iekštelpu. Šai opcijai jums būs nepieciešams:

  • 4 "lieljaudas ritenis x2
  • 4 mm urbuma komplekta skrūves rumbas (0,770 collas) x2

2. darbība: šasijas montāža

Šasijas montāža
Šasijas montāža
Šasijas montāža
Šasijas montāža
Šasijas montāža
Šasijas montāža

Vispirms salieciet šasiju, ievērojot šasijas vai video pievienotos norādījumus. Pēc pabeigšanas jums vajadzētu iegūt kaut ko līdzīgu attēlam. PIEZĪME. Montējot kakla daļu, vienkārši atstājiet stiprinājuma kronšteinu izslēgtu.

Savā robotprogrammatūrā es izvēlējos nomainīt riteņus, kas tika piegādāti kopā ar šasiju 4 collu lieljaudas riteņiem. Tas nav obligāti un nav nepieciešams, ja vien jūs nevēlaties darīt to pašu.

3. darbība: elektronikas uzstādīšana

Elektronikas montāža
Elektronikas montāža
Elektronikas montāža
Elektronikas montāža
Elektronikas montāža
Elektronikas montāža

Gooseneck ir daudz vietas un iespējas elektronikas uzstādīšanai. Es jums dodu šos attēlus kā orientieri, bet jūs varat izvēlēties, kā jūs to visu vēlaties izkārtot. Plāksnes un akumulatoru montāžai varat izmantot rezerves, divpusēju lenti, Velcro vai servo lenti.

4. darbība. Tīmekļa kameras pievienošana

Tīmekļa kameras pievienošana
Tīmekļa kameras pievienošana
Tīmekļa kameras pievienošana
Tīmekļa kameras pievienošana
Tīmekļa kameras pievienošana
Tīmekļa kameras pievienošana

Šim solim paņemiet 90 grādu kronšteinu, vieglu servo rumbu un četras (4) no.3125 skrūvēm:

  • Paņemiet servo rumbu un novietojiet to kronšteina vienā pusē un nostipriniet kopā ar.2125 "skrūvēm, kā parādīts attēlā
  • Pēc tam piestipriniet servo servo kronšteinā
  • Pievienojiet 90 grādu kronšteinu ar servo ragu pie servo mugurkaula un izmantojiet raga skrūvi, kas pievienota servo, lai tos savienotu kopā
  • Tagad ar atlikušajām skrūvēm piestipriniet Servo kronšteinā uz zosu kakla augšdaļas
  • Uzstādiet kameru ar rāvējslēdzējiem vai divpusēju lenti pie 90 grādu kronšteina

Ja nepieciešams, izmantojiet attēlus ceļvežiem.

5. solis: visu pieslēdziet vadam

Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija
Elektroinstalācija

Šim robotam elektroinstalācija ir diezgan saspringta.

Motori:

Lodēšanas vadi uz abiem motoriem, ja vēl neesat to izdarījis

Ar robotu priekšpusi (galu ar zosu kaklu) pavērstu pret jums:

  • Pievienojiet kreisā motora motora vadus kanāliem M1A un M1B
  • Pievienojiet motora vadus labajā motorā kanāliem M2A un M2B

Zemes (GND) savienojumi:

  • Pievienojiet vienu RoboClaw zemējuma tapu pie zemes džempera dēļa. Zemes tapas līnija uz RoboClaw ir vistuvāk centram (skat. Attēlu)
  • Pievienojiet RPI PIN 6 džempera dēlim. Lai redzētu tapas, skatiet RPI galvenes attēlu.
  • Pievienojiet GND no servo akumulatora bloka pie vienas no kontaktdakšas tapām.
  • Palaidiet džemperu vadu no džempera dēļa līdz servo GND vadam.

RPI uz RoboClaw:

Pievienojiet RPI GPIO14 TXD tapu RoboClaw S1 tapai

Jauda:

  • Pievienojiet POS vadu no servo akumulatora līdz servo POS vadam
  • Pievienojiet POS vadu no motora akumulatora līdz RoboClaw motora jaudas ievades spailes POS (+). GND termināli pagaidām atstāsim atvienotu.

6. darbība: RPI iestatīšana

RPI iestatīšana
RPI iestatīšana

Es pieņemu, ka lietotājs šeit zina kaut ko par Linux un RPI. Es neaptveru, kā to izveidot vai izveidot savienojumu. Ja jums nepieciešama palīdzība, izmantojiet tālāk norādītās lapas.

Lai iegūtu RPI iestatījumus, apskatiet šādas lapas:

  • RPI pamata iestatīšana
  • RPI Īsā lietošanas pamācība
  • NOOBS uzstādīšanas ģilde

Vispārējām pārejas lapām RPI galvenā lapa un eLinux lapas ir lieliskas vietas, kur sākt.

Skatiet šo saiti, lai uzzinātu par RPI vispārējo Wifi iestatīšanu.

Ja robotā plānojat izmantot kāda veida kameru vai tīmekļa kameru, apskatiet šīs lapas, lai iegūtu nepieciešamos pamata failus.

  • RPI kameras iestatīšana
  • eLinix RPI kameras iestatīšana

Straumēts video:

Ir daži veidi, kā panākt, lai video straumēšana darbotos, izmantojot RPI, taču man labāk patīk izmantot kustību.

Lai to instalētu savā RPI, palaidiet šo: sudo apt-get install motion

Šajā pamācībā ir norādīts arī tā iestatīšana straumēšanai.

7. darbība: RPI seriālā porta konfigurēšana

Mums būs jāatspējo Linux konsoles režīms, lai izmantotu RX un TX, jo mēs vēlamies runāt ar RoboClaw motora kontrolieri no šī porta. Lai to izdarītu, varat izmantot šo metodi vai šo rīku. Metodes izvēle ir jūsu ziņā, jo galu galā viņi abi dara vienu un to pašu.

8. darbība: Python moduļu instalēšana

Jums būs nepieciešams RPI instalēts python, kā arī python pakotnes instalētāja pip.

Lai instalētu pip, rīkojieties šādi:

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

Tad:

  1. sudo pip instalācijas kolba
  2. sudo pip instalēt pyserial
  3. sudo pip instalējiet RPIO

Šie būs visi moduļi, kas nepieciešami koda darbībai.

9. darbība: RoboClaw uzstādīšana

Man ir robota kods, kas sarunājas ar RoboClaw standarta sērijas režīmā ar 19200 baudām.

Lai iestatītu RoboClaw, rīkojieties šādi:

  1. Nospiediet pogu "MODE" uz RoboClaw
  2. Nospiediet iestatīšanas pogu, līdz gaismas diode mirgo 5 (piecas) reizes starp aizkavēšanos
  3. Lai saglabātu, nospiediet pogu "LIPO"
  4. Pēc tam nospiediet pogu "SET", līdz gaismas diode mirgo 3 (trīs) reizes starp aizkavēšanos
  5. Lai saglabātu, nospiediet pogu LIPO

Tas viss motora kontrollera iestatīšanai. Ja nepieciešams, skatiet iepriekš norādīto pdf, lai iegūtu vairāk informācijas.

10. solis: Rover programmas/failu instalēšana

Lejupielādējiet un kopējiet failu rover.zip savā RPI savā pi lietotāju direktorijā.

Ja izmantojat Linux vai Mac, varat to izmantot, izmantojot scp.

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

Operētājsistēmai Windows varat lejupielādēt un izmantot pscp un pēc tam:

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

Kad ZIP fails ir pārkopēts uz RPI, piesakieties tajā kā pi lietotājs.

Tagad palaist:

unzip rover.zip

Tādējādi faili tiks izpakoti mapē ar nosaukumu “rover”, un šajā mapē būs šādi:

  • restrover.py (robota pitona kods)
  • statisks (tur attēla failus pogām vadības lapā)
  • veidnes (satur failu index.htlm, kontroles tīmekļa lapu)

Ja izmantojat tīmekļa kameru, modificējiet rindu, kas atrodas veidnes mapē esošā faila index.html apakšā. Mainiet URL IFRAME rindā, lai tas atbilstu jūsu video straumes src URL.

11. solis: robota palaišana

Sākot Bot Up
Sākot Bot Up

Pievienojiet USB barošanu RPI.

Lai sāktu robota kodu, piesakieties kā pi lietotājs un palaidiet:

  • cd roveris
  • sudo python restrover.py

Ja viss bija kārtībā, šajā darbībā vajadzētu redzēt ekrānu, kas līdzīgs attēlam

Ja redzat kļūdas vai problēmas, tās būs jānovērš, pirms turpināt.

Tagad savienojiet GND (-) vadu ar NEG (-) spaili RoboClaw motora jaudas ievadē.

12. darbība. Piekļuve robotprogrammatūras lapai

Piekļuve robotprogrammatūras lapai
Piekļuve robotprogrammatūras lapai
Piekļuve robotprogrammatūras lapai
Piekļuve robotprogrammatūras lapai

Kad robota python skripts darbojas, ieslēdziet RoboClaw un pēc tam dodieties uz savu RPI ip, piemēram:

your_rpi_ip

Jums vajadzētu redzēt, kā parādās tīmekļa vadības lapa, kā attēlos. Ja nē, pārbaudiet savu RPI izvades termināli un meklējiet kļūdas un izlabojiet tās.

Kad esat nokļuvis lapā, esat gatavs kontrolēt robotu.

Robots sāksies iestatījumā "Med run" un ar vidēju ātrumu.

Botu var vadīt, izmantojot lapas pogas vai tastatūras taustiņus.

Atslēgas ir:

  • w - uz priekšu
  • z - atpakaļ/atpakaļ
  • a - garš pagrieziens pa kreisi
  • s - garš pagrieziens pa labi
  • q - īss pagrieziens pa kreisi
  • e - īss pagrieziens pa labi
  • 1 - kreisā panorāmas kamera
  • 2 - panoramēšanas kamera pa labi
  • 3 - panna pilna pa kreisi
  • 4 - panna pilnībā pa labi
  • / - mājas/ centra kamera
  • h - apturēšanas/apturēšanas robots

Starp nosūtītajām komandām ir pus sekundes kavēšanās buferis. Es to darīju, lai novērstu nevēlamas atkārtotas komandas. Protams, ja vēlaties, varat to noņemt no koda (vietnē index.html)

Pārējām vadības ierīcēm un to kontrolei vajadzētu būt pašsaprotamai.

13. darbība: Python/kolbas kods

Šis robots izmanto Python un Flask tīmekļa ietvaru. Jūs varat uzzināt vairāk par kolbu šeit, ja jūs interesē.

Liela atšķirība no lietotnes Flask un parastā Python skripta ir @app.route klase/metode, ko izmanto URI apstrādei. Izņemot to, lielākoties tas ir diezgan normāls Python.

#!/usr/bin/env python

# # Wifi/tīmeklī darbināms Rover # # Autors Scott Beasley - 2015 # # Izmanto RPIO, pyserial un kolbu) # Izveidojiet savienojumu ar komunālo portu, lai sarunātos ar Roboclaw motora kontrolieri. Mēģiniet: # Šeit mainiet pārraides ātrumu, ja tas atšķiras no 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200), izņemot IOError: print ("Comm port not atrasts ") sys.exit (0) # Ātruma un piedziņas vadības mainīgie last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo neitrāla pozīcija (mājas) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Mazliet pakavējies, lai nokārtotu laiku time.sleep (3) # # URI apstrādātāji - visas robotu lapas darbības tiek veiktas šeit # # Nosūtiet robotu kontroles lapu (mājas lapa) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti man izdrukāt "Pārsūtīt" go_forward () last_direction = 0 # miega 100 ms + izpildes laika laiks.sleep (0.100 + run_time) # Ja nav nepārtraukts, tad apstājieties pēc kavēšanās, ja run_time> 0: last_direction = -1 halt () atgriežas "ok" @ app.route ("/backward") def backward (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # miega 100ms + run_time time.sleep (0.100 + run_time) # Ja nav nepārtraukti, tad apstājieties pēc kavēšanās ja run_time> 0: last_direction = -1 apstāšanās () atgriežas "ok" @app.route ("/left") def left (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # miega @1 /2 otrreiz.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) atgriezties "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # miega @1/2 otro reizi.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): globālā pēdējā_virziens, pagrieziena_t m_ nobīdes drukāšana "Pagrieziens pa kreisi uz priekšu" go_left () # miega @1/8 otrreiz.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 "Pagrieziens pa labi uz priekšu" 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 # miega 100ms laiks.sleep (0.100) atgriezt "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) # miega 150 ms laiks. miega režīms (0.150) atgriezties "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # miega 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) # miega 150ms time.sleep (0.150) atgriezties" ok " @app.route ("/panfull_rt ") def panfull_rt (): global servo_pos print" Pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # miega 150 ms time.sleep (0.150) atgriezties "ok" @app.route ("/speed_low") def speed_low (): globālais ātruma_pagrieziens, pēdējā_virziens, pagrieziena_atmiruma nobīde speed_offset = 42 turn_tm_offset = 0.001 # Atjauniniet pašreizējo virzienu, lai iegūtu jaunu ātrumu, ja 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 # Atjauniniet pašreizējo virzienu, lai iegūtu jaunu ātrumu, ja last_direction == 0: go_forward () if last_direction == 1: go_backward () # miega 150ms laiks.sleep (0.150) atgrieziet "ok" @app.route ("/speed_hi") def speed_hi (): globālais ātruma nobīde, pēdējā_virziens, pagrieziena_atmiruma nobīde speed_offset = 126 tur n_tm_offset = 0.332 # Atjauniniet pašreizējo virzienu, lai iegūtu jaunu ātrumu, ja last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/nepārtraukts ") def nepārtraukts (): globālais run_time print" Continuous run "run_time = 0 # miega 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 () # miega 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 () # gulēt 100 ms laiks.sleep (0.100) atgriezties "ok" # # Motora piedziņas funkcijas # def go_forward (): globālais ātruma_bīde, ja ātruma_pagrieziens! = 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 (): globālais 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 (): globālais ātruma nobīde, ja 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)), ja _name_ == "_main_": app.run (resursdators = '0.0.0.0', ports = 80, atkļūdošana = True)

Ja nevēlaties vai jums nav nepieciešama atkļūdošanas informācija no kolbas, lietotnē app.run iestatiet atkļūdošanu uz “false”.

ja _name_ == "_main_":

app.run (resursdators = '0.0.0.0', ports = 80, atkļūdošana = nepatiesa)

Šeit varat arī mainīt portu, ko klausās kolbas http serveris.

14. darbība. Citas aparatūras izmantošana

Ja vēlaties izmantot citu aparatūru, piemēram, cita veida SBC (viena dēļa datoru), jums vajadzētu būt nelielām problēmām, lai Python un Flask darbotos uz citiem dēļiem, piemēram, Beagle Bone, PCDuino utt.. Jums būs jāmaina kods, lai tas atbilstu GPIO izkārtojumu un izmantot jaunā dēļa servo braukšanas iespējas.

Lai izmantotu cita veida motora draiveri, jums vienkārši jāpārveido funkcijas go_forward, go_backward, go_left, go_right un stop, lai darītu visu, kas nepieciešams motora nomaiņai, lai motors varētu veikt šo konkrēto funkciju.

Ieteicams: