Sisukord:

Veebi juhitav Rover: 14 sammu (piltidega)
Veebi juhitav Rover: 14 sammu (piltidega)

Video: Veebi juhitav Rover: 14 sammu (piltidega)

Video: Veebi juhitav Rover: 14 sammu (piltidega)
Video: CS50 2014 – 2-я неделя 2024, November
Anonim
Veebi juhitav Rover
Veebi juhitav Rover
Veebi juhitav Rover
Veebi juhitav Rover

Robotite ehitamine ja nendega mängimine on minu peamine süüdlane nauding elus. Teised mängivad golfi või suusatavad, aga mina ehitan roboteid (kuna ma ei oska golfi ega suusatada:-). Mulle tundub see lõõgastav ja lõbus! Enamiku robotite valmistamiseks kasutan šassiikomplekte. Komplektide kasutamine aitab mul teha seda, mis mulle rohkem meeldib, tarkvara ja elektroonikat ning teeb ka parema šassii minu kõigi pöidlate jaoks.

Selles juhendis uurime, mida on vaja lihtsa, kuid tugeva Wifi/veebipõhise roveri valmistamiseks. Kasutatav šassii on Actobotics Gooseneck. Valisin selle suuruse, laiendamisvõime ja kulude tõttu, kuid võite kasutada mis tahes muud enda valitud šassii.

Sellise projekti jaoks vajame head kindlat üheplaadilist arvutit ja selle roboti jaoks otsustasin kasutada Linuxi -põhist arvutit Raspberry Pi (RPI). RPI (ja Linux) pakub meile palju kodeerimisvõimalusi ja kodeerimisel kasutatakse Pythonit. Veebiliidese jaoks kasutan Pythoni jaoks kerge veebiraamistikku Flask.

Mootorite juhtimiseks valisin RoboClaw 2x5a. See võimaldab selle käsutamiseks lihtsat jadaühendust ning töötab hästi RPI ja Goosenecki mootoritega.

Lõpuks on sellel veebikaamera POV -tüüpi video tagasiside jaoks, et seda eemalt juhtida. Ma käsitlen iga teemat hiljem üksikasjalikumalt.

Samm: vajate riistvara

Vajalik riistvara
Vajalik riistvara
Vajalik riistvara
Vajalik riistvara
Vajalik riistvara
Vajalik riistvara
Vajalik riistvara
Vajalik riistvara
  • Actobotics Gooesneck šassii või sobiv asendus teie valikul
  • Teie valitud Raspberry Pi (või kloon) - sellel robotil kasutatakse RPI mudelit B, kuid see, millel on vähemalt kaks USB -porti, töötab
  • Standardne servoplaat B x1
  • 90 ° ühe nurga kanali kronstein x1
  • RoboClaw 2x5a mootorijuht
  • S3003 või sarnane standardsuuruses servo
  • Väike leivalaud või Mini leivalaud
  • Naissoost naissoost hüppajajuhtmed
  • Meeste ja naiste hüppajate juhtmed
  • Veebikaamera (valikuline) - kasutan Logitech C110 ja siin on RPI toetatud nukkide loend
  • 5v-6v toiteallikas servo toiteks
  • 7.2v-11.1v aku ajamimootori toiteks
  • 5v 2600mah (või kõrgem) USB toitepank RPI jaoks
  • USB Wifi adapter

Kasutan oma robotil 4-tolliseid rattaid, et muuta see pisut maastikualadeks. Selle valiku jaoks vajate:

  • 4 "raskeveokite ratas x2
  • 4 mm avaga kruvi rumm (0,770 tolli) x2

2. samm: šassii kokkupanek

Šassii kokkupanek
Šassii kokkupanek
Šassii kokkupanek
Šassii kokkupanek
Šassii kokkupanek
Šassii kokkupanek

Pange kõigepealt šassii kokku, järgides šassii või videoga kaasasolevaid juhiseid. Pärast lõpetamist peaks teil olema midagi sellist nagu pilt. MÄRKUS. Kaelaosa kokkupanemisel jätke kinnitusklamber lihtsalt välja.

Valisin oma botil 4 -tolliste raskeveokite rataste, mis olid šassiiga kaasas. See on valikuline ja pole vajalik, kui te ei soovi sama teha.

Samm: elektroonika paigaldamine

Elektroonika paigaldamine
Elektroonika paigaldamine
Elektroonika paigaldamine
Elektroonika paigaldamine
Elektroonika paigaldamine
Elektroonika paigaldamine

Gooseneckil on palju ruumi ja võimalusi elektroonika paigaldamiseks. Ma annan teile need pildid suunanäiteks, kuid te saate valida, kuidas soovite seda kõike paigutada. Tahvli ja akude kinnitamiseks võite kasutada eraldiseisvaid, kahepoolset teipi, takjapaela või servoteipi.

Samm: veebikaamera lisamine

Veebikaamera lisamine
Veebikaamera lisamine
Veebikaamera lisamine
Veebikaamera lisamine
Veebikaamera lisamine
Veebikaamera lisamine

Selle sammu jaoks võtke 90 -kraadine klamber, kerge servo rumm ja neli (4).3125 kruvi:

  • Võtke servo rumm ja asetage see kronsteini ühele küljele ning kinnitage need koos.2125 "kruvidega nagu pildil
  • Seejärel paigaldage servo servoklambrisse
  • Kinnitage servasarvega 90 -kraadine klamber servoselga külge ja ühendage need servo abil kaasas olnud sarvekruviga
  • Nüüd paigaldage servo ülejäänud kruvidega klambrisse hanekaela ülaosale
  • Paigaldage kaamera tõmblukkude või kahepoolse teibiga 90-kraadise klambri külge

Vajadusel kasutage pilte juhenditeks.

Samm: ühendage see kõik kokku

Juhtmestik kõik üles
Juhtmestik kõik üles
Juhtmestik kõik üles
Juhtmestik kõik üles
Juhtmestik kõik üles
Juhtmestik kõik üles
Juhtmestik kõik üles
Juhtmestik kõik üles

Selle roboti juhtmestik on üsna kitsas.

Mootorid:

Mõlema mootori jootmisjuhtmed, kui te pole seda juba teinud

Kui robotid on ees (ots hanekaelaga) teie poole suunatud:

  • Ühendage vasakpoolse mootori mootorijuhtmed kanalitega M1A ja M1B
  • Ühendage parempoolse mootori mootorijuhtmed kanalitega M2A ja M2B

Maa (GND) ühendused:

  • Ühendage üks maandusnõel RoboClawil maapinna hüppajaplaadiga. RoboClawi maanduspoldi joon on keskpunktile kõige lähemal (vt pilti)
  • Ühendage RPI -l olev PIN -kood 6 hüppajaplaadiga. Vaadake tihvtide määramist RPI päise pildilt.
  • Ühendage GND servoakust ühe hüppaplaadi tihvtiga.
  • Viige hüppaja juhe hüppajaplaadilt servo GND traadile.

RPI RoboClawile:

Ühendage RPI GPIO14 TXD tihvt RoboClaw S1 tihvtiga

Võimsus:

  • Ühendage servoaku POS -juhe servo POS -juhtmega
  • Ühendage mootori aku POS -juhe RoboClaw mootori sisendklemmi POS -iga (+). Jätame GND terminali praegu lahti.

6. samm: RPI seadistamine

RPI seadistamine
RPI seadistamine

Ma eeldan, et siinne kasutaja teab Linuxist ja RPI -st natuke. Ma ei käsitle selle seadistamist ega sellega ühenduse loomist. Kui vajate selles osas abi, kasutage allolevaid lehti.

RPI seadistamiseks vaadake järgmisi lehti:

  • RPI põhiseadistus
  • RPI kiirjuhend
  • NOOBS seadistusgild

Üldiste hüppelehtede puhul on RPI avaleht ja eLinuxi lehed suurepärased kohad alustamiseks.

Vaadake seda linki RPI üldise Wifi seadistuse kohta.

Kui kavatsete robotil kasutada mõnda kaamerat või veebikaamerat, vaadake neid lehti, et saada põhilised vajalikud failid.

  • RPI nuki seadistamine
  • eLinix RPI nuki seadistamine

Video voogesitus:

Video voogesituse RPI -ga töötamiseks on mõned viisid, kuid minu eelistatud meetod on Motioni kasutamine.

Selle installimiseks oma RPI-le käivitage see: sudo apt-get install motion

See juhend annab ülevaate ka voogesituse seadistamisest.

Samm 7: RPI jadapordi seadistamine

Peame RX ja TX kasutamiseks Linuxi konsoolirežiimi keelama, kuna tahame sellest pordist RoboClaw mootorikontrolleriga rääkida. Selleks võite kasutada seda meetodit või seda tööriista. Selle meetodi valik on teie, kuna mõlemad teevad lõpuks sama asja.

Samm: Pythoni moodulite installimine

Teil on vaja RPI -sse installitud python ja pythoni paketi installija pip.

Pipi paigaldamiseks toimige järgmiselt.

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

Siis:

  1. sudo pip installikolb
  2. sudo pip install pyserial
  3. sudo pip installige RPIO

See on kõik koodi käitamiseks vajalikud moodulid.

9. samm: RoboClawi seadistamine

Mul on robotikood, mis räägib RoboClaw'ga standardseeriarežiimis kiirusel 19200 baud.

RoboClawi seadistamiseks tehke järgmist.

  1. Vajutage RoboClaw'il nuppu "MODE"
  2. Vajutage seadistusnuppu, kuni LED vilgub viivituste vahel 5 (viis) korda
  3. Salvestamiseks klõpsake nuppu "LIPO"
  4. Seejärel vajutage nuppu "SET", kuni LED vilgub viivituste vahel 3 (kolm) korda
  5. Salvestamiseks klõpsake nuppu LIPO

See on see mootori kontrolleri seadistamiseks. Vajadusel vaadake ülaltoodud lingilt lisateavet.

Samm: Roveri programmi/failide installimine

Laadige alla ja kopeerige fail rover.zip oma piI -kataloogi RPI -sse.

Kui kasutate Linuxit või Maci, saate seda teha käsuga 'scp':

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

Windowsi puhul saate pscp alla laadida ja kasutada ning seejärel teha järgmist.

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

Kui ZIP -fail on RPI -sse kopeeritud, logige sellesse pi kasutajana sisse.

Nüüd jookse:

unzip rover.zip

See pakib failid lahti kausta nimega "rover" ja selle kausta all on järgmine teave:

  • restrover.py (roboti pythoni kood)
  • staatiline (hoiab juhtlehe nuppude pildifaile)
  • mallid (sisaldab faili index.htlm, kontroll -veebilehte)

Kui kasutate veebikaamerat, muutke malli kaustas faili index.html allosas olevat rida. Muutke IFRAME rea URL, et see vastaks teie videovoo src URL -ile.

11. samm: bot -i käivitamine

Bot Up käivitamine
Bot Up käivitamine

Ühendage USB -toide RPI -ga.

Botikoodi käivitamiseks logige pi kasutajana sisse ja käivitage:

  • cd rover
  • sudo python restrover.py

Kui kõik oli korras, peaksite selles etapis nägema pildiga sarnast ekraani

Kui näete vigu või probleeme, peate need enne edasiliikumist parandama.

Nüüd ühendage GND (-) juhe RoboClaw mootori toitesisendi NEG (-) klemmiga.

Samm 12: Juurdepääs robotite juhtimise lehele

Juurdepääs robotite juhtimise lehele
Juurdepääs robotite juhtimise lehele
Juurdepääs robotite juhtimise lehele
Juurdepääs robotite juhtimise lehele

Pärast roboti pythoni skripti käivitamist lülitage RoboClaw sisse ja navigeerige oma RPI IP -le, näiteks:

teie_rpi_ip

Peaksite nägema veebikontrolli lehte, nagu piltidel. Kui ei, siis kontrollige oma RPI väljundterminali ja otsige vigu ning parandage need.

Kui olete lehele jõudnud, olete valmis robotit juhtima.

Robot käivitab seadistuses "Keskjooks" ja keskmise kiirusega.

Botti saab juhtida lehe nuppude või klaviatuuri klahvide abil.

Võtmed on:

  • w - edasi
  • z - tagurpidi/tagasi
  • a - pikk vasakpööre
  • s - pikk parempööre
  • q - lühike vasakpööre
  • e - lühike parempööre
  • 1 - panoraamkaamera vasakule
  • 2 - panoraamkaamera paremal
  • 3 - pann täis vasakule
  • 4 - pann täis
  • / - kodu-/ keskkaamera
  • h - robot seisma/seisma

Saadetud käskude vahel on pool sekundit viivituspuhvrit. Tegin seda soovimatute korduvate käskluste kõrvaldamiseks. Loomulikult saate selle soovi korral koodist eemaldada (kaustas index.html)

Ülejäänud juhtnupud ja nende juhtimine peaksid olema iseenesestmõistetavad.

Samm 13: Pythoni/kolvi kood

See robot kasutab Pythoni ja Flaski veebiraamistikku. Kui olete huvitatud, saate Flaski kohta rohkem teada saada siit.

Suur erinevus Flaski rakendusest ja tavalisest Pythoni skriptist on @app.route klass/meetod, mida kasutatakse URI käitlemiseks. Peale selle on see enamasti tavaline Python.

#!/usr/bin/env python

# # Wifi/veebipõhine Rover # # Kirjutas Scott Beasley - 2015 # # Kasutab RPIO, pyserial ja kolvi # impordi aja importimise seeriat RPIO -st impordi PWM -d kolvi impordist Kolb, render_template, request app = Flask (_name_, static_url_path = ") # Ühenda komm pordiga, et rääkida Roboclawi mootorikontrolleriga, proovi: # Muuda siin edastuskiirust, kui see erineb 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200), va IOError: print ("Comm port not leitud ") sys.exit (0) # Kiiruse ja ajami juhtimismuutujad last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo neutraalne asend (kodu) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos.) def index (): return render_template ('index.html', name = puudub) @app.route ("/forward") def forward (): globaalne viimane_suund, run_ti ma prindi "Edasi" go_forward () last_direction = 0 # uni 100ms + run_time time.sleep (0.100 + run_time) # Kui ei ole pidev, siis peatu pärast viivitust, kui run_time> 0: last_direction = -1 halt () tagasta "ok" @ app.route ("/backward") def backward (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # uni 100ms + run_time time.sleep (0.100 + run_time) # Kui ei ole pidev, siis peatu pärast viivitust 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 # uni @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 () # uni @1/2 sekundit.sleep (0,500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): globaalne last_direction, turn_t m_nihke print "Vasak ette pööre" go_left () # uni @1 /8 sekundit.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): globaalne last_direction, turn_tm_offset print "Parempoolne pööre" go_right () # uni @1/8 sekundit.sleep (0.250 - (turn_tm_offset/2)) last_direction = -1 # stop peata () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): globaalne last_direction print "Stop" halt () last_direction = -1 # uni 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) # uneaeg 150 ms. unerežiim (0,150) tagastamine "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # uni 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) # uni 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) # unerežiim 150 ms 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 # Värskendage praegust suunda, et saada uus kiirus, kui 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 # Uuenda praegust suunda, et saada uus kiirus, kui last_direction == 0: go_forward () if last_direction == 1: go_backward () # uni 150ms time.sleep (0.150) tagastama "ok" @app.route ("/speed_hi") def speed_hi (): globaalne kiiruse_nihke, viimane_suund, pöörde_tm_nihe kiiruse nihe = 126 turniiri n_tm_offset = 0.332 # Uue kiiruse saamiseks värskendage praegust suunda, kui last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/pidev ") def pidev (): globaalne run_time print" Pidev jooks "run_time = 0 # unerežiim 100 ms 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 () # unerežiim 100 ms time.sleep (0.100) return "ok" # # Mootori ajamifunktsioonid # def go_forward (): globaalne kiiruse nihke, kui kiiruse nihke! = 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 (): globaalne 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 (): globaalne kiiruse nihe, kui 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)) kui _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

Kui te ei soovi või vajate Flaski silumisteavet, määrake silumiseks reas app.run silumine väärtusele „false”.

kui _name_ == "_main_":

app.run (host = '0.0.0.0', port = 80, silumine = vale)

Siin saate muuta ka porti, mida Flask http server kuulab.

14. samm: muu riistvara kasutamine

Kui soovite kasutada muud riistvara, näiteks teist tüüpi SBC -d (ühe pardaarvuti), peaks teil olema probleeme Pythoni ja Flaski töötamisega teistel tahvlitel, nagu Beagle Bone, PCDuino jne. paigutada ja kasutada uue tahvli servosõidu võimalusi.

Teist tüüpi mootoridraiveri kasutamiseks peate lihtsalt muutma funktsioone go_forward, go_backward, go_left, go_right ja stop, et teha seda, mida asendusmootori draiver vajab, et mootor seda funktsiooni täidaks.

Soovitan: