Kazalo:

Spletni rover: 14 korakov (s slikami)
Spletni rover: 14 korakov (s slikami)

Video: Spletni rover: 14 korakov (s slikami)

Video: Spletni rover: 14 korakov (s slikami)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
Rover s spletnim nadzorom
Rover s spletnim nadzorom
Rover s spletnim nadzorom
Rover s spletnim nadzorom

Graditi in igrati se z roboti je moj glavni užitek v življenju. Drugi igrajo golf ali smučajo, jaz pa gradim robote (ker ne morem igrati golfa ali smučati:-). Zdi se mi sproščujoče in zabavno! Za izdelavo večine svojih robotov uporabljam komplete podvozja. Uporaba kompletov mi pomaga, da počnem tisto, kar rada počnem več, programsko opremo in elektroniko, poleg tega pa omogoča boljše ohišje za vse moje palce.

V tem navodilu bomo preučili, kaj je potrebno za izdelavo preprostega, a robustnega roverja Wifi/splet. Uporabljeno podvozje je Actobotics Gooseneck. Izbral sem ga zaradi velikosti, razširljivosti in cene, vendar lahko uporabite katero koli drugo ohišje po lastni izbiri.

Za takšen projekt bomo potrebovali dober trden enokanalni računalnik, za tega bot pa sem se odločil uporabiti računalnik Raspberry Pi (RPI), ki temelji na Linuxu. RPI (in Linux) nam daje veliko možnosti kodiranja, Python pa bo uporabljen za kodiranje. Za spletni vmesnik uporabljam Flask, lahek spletni okvir za Python.

Za pogon motorjev sem izbral RoboClaw 2x5a. Omogoča preprosto zaporedno komunikacijo za upravljanje in dobro deluje z RPI in motorji na Goosenecku.

Končno ima spletno kamero za video povratne informacije tipa POV za daljinsko vožnjo. Vsako temo bom podrobneje obravnaval kasneje.

1. korak: Potrebna je strojna oprema

Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
Potrebna strojna oprema
  • Actobotics Gooesneck ohišje ali ustrezna zamenjava po vaši izbiri
  • Raspberry Pi po vaši izbiri (ali klon) - Na tem botu se uporablja model RPI B, vendar bo deloval vsak z vsaj dvema vhodoma USB
  • Standardna servo plošča B x1
  • 90 ° Enokotni nosilec kanala x1
  • Gonilnik motorja RoboClaw 2x5a
  • Servo S3003 ali podoben
  • Majhna plošča ali mini ploščica
  • Moški žice za ženske
  • Moški in ženski mostički
  • Spletna kamera (neobvezno) - uporabljam Logitech C110 in tukaj je seznam podprtih kamer za RPI
  • 5v-6v vir napajanja za servo napajanje
  • 7,2v-11,1v baterija za napajanje pogonskega motorja
  • 5v 2600mah (ali več) USB napajalnik za RPI
  • USB Wi -Fi adapter

V svojem botu uporabljam 4-palčna kolesa, da naredim malo več terenov v zaprtih prostorih. Za to možnost boste potrebovali:

  • 4 "težko kolo x2
  • 4 mm vijačno pesto (0,770 palca) x2

2. korak: Sestavljanje podvozja

Sestavljanje podvozja
Sestavljanje podvozja
Sestavljanje podvozja
Sestavljanje podvozja
Sestavljanje podvozja
Sestavljanje podvozja

Najprej sestavite ohišje po navodilih, priloženih ohišju ali videu. Po zaključku bi morali imeti nekaj podobnega. OPOMBA: Pri sestavljanju vratnega dela pustite pritrjen nosilec.

Na svojem botu sem se odločil za zamenjavo koles, ki so priložena šasiji, za 4 težka kolesa. To je neobvezno in ni potrebno, razen če želite storiti enako.

3. korak: Montaža elektronike

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

Gooseneck ima veliko prostora in možnosti za namestitev vaše elektronike. Te slike vam predstavljam kot vodilo, vendar lahko izberete, kako želite vse skupaj predstaviti. Za pritrditev plošče in baterij lahko uporabite stojala, dvostranski trak, Velcro ali servo trak.

4. korak: Dodajanje spletne kamere

Dodajanje spletne kamere
Dodajanje spletne kamere
Dodajanje spletne kamere
Dodajanje spletne kamere
Dodajanje spletne kamere
Dodajanje spletne kamere

Za ta korak vzemite 90 -stopinjski nosilec, lahko servo pesto in štiri (4) vijake.3125 :

  • Vzemite servo pesto in ga namestite na eno stran nosilca ter ju pritrdite skupaj z vijaki.2125 ", kot je na sliki.
  • Nato servo vstavite v servo nosilec
  • 90 -stopinjski nosilec s servorogom pritrdite na hrbtenico servomotorjev in jih s pomočjo vijaka hupe, ki je priložen servo, povežite skupaj
  • Sedaj namestite servo v nosilcu na vrh gosjega vratu s preostalimi vijaki
  • Kamero z zadrgo ali dvostranskim trakom namestite na nosilec 90 stopinj

Slike po potrebi uporabite za vodnike.

5. korak: Ožičite vse

Ožičenje vse skupaj
Ožičenje vse skupaj
Ožičenje vse skupaj
Ožičenje vse skupaj
Ožičenje vse skupaj
Ožičenje vse skupaj
Ožičenje vse skupaj
Ožičenje vse skupaj

Ožičenje je za tega robota precej ostro.

Motorji:

Spajkajte kable na obeh motorjih, če tega še niste storili

Prednji roboti (konec z gosjim vratom) so obrnjeni stran od vas:

  • Priključite žice motorja na levem motorju v kanal M1A in M1B
  • Priključite žice motorja na desnem motorju v kanal M2A in M2B

Priključki ozemljitve (GND):

  • En ozemljitveni zatič na RoboClawu priključite na ozemljitveno ploščo. Črta za ozemljitev na RoboClawu je najbližje sredini (glej sliko)
  • PIN 6 na RPI povežite s skakalno ploščo. Za dodelitev zatičev si oglejte sliko glave RPI.
  • Priključite GND iz servo baterije na enega od nožic na mostični plošči.
  • Prekinite žico mostička od skakalne plošče do žice GND servomotorjev.

RPI v RoboClaw:

Priključite pin RPI GPIO14 TXD na pin RoboClaw S1

Moč:

  • Priključite žico POS iz servo baterije na servo vodnik POS
  • Priključite kabel POS iz akumulatorja motorja v POS (+) vhodnega priključka za napajanje motorja RoboClaw. Terminal GND bomo za zdaj pustili odklopljenega.

6. korak: Nastavitev RPI

Nastavitev RPI
Nastavitev RPI

Predvidevam, da uporabnik tukaj pozna nekaj o Linuxu in RPI. Ne obravnavam, kako namestiti ali povezati z njim. Če pri tem potrebujete pomoč, uporabite spodnje strani.

Za nastavitev RPI si oglejte naslednje strani:

  • Osnovne nastavitve RPI
  • Navodila za hitri začetek RPI
  • Nastavitev NOOBS

Za splošne skočne strani sta glavna stran RPI in strani eLinux odlična mesta za začetek.

Za splošno nastavitev Wi -Fi RPI si oglejte to povezavo.

Če nameravate v botu uporabiti kakšno kamero ali spletno kamero, si oglejte te strani, da dobite osnovne potrebne datoteke.

  • Nastavitev kamere RPI
  • Nastavitev kamere eLinix RPI

Pretočni video:

Obstaja nekaj načinov, kako video pretakanje delovati na RPI, vendar najraje uporabljam Motion.

Če ga želite namestiti v RPI, zaženite to: sudo apt-get install motion

Ta navodila vam omogočajo tudi nastavitev za pretakanje.

7. korak: Konfiguriranje zaporednih vrat RPI

Za uporabo RX in TX bomo morali onemogočiti konzolni način Linuxa, saj se želimo pogovarjati s krmilnikom motorja RoboClaw s teh vrat. Če želite to narediti, lahko uporabite to metodo ali to orodje. Izbira je vaša glede metode, saj oba na koncu naredita isto.

8. korak: Namestitev modulov Python

Potrebovali boste nameščen python na RPI in pip namestitvenega paketa python.

Če želite namestiti pip, naredite naslednje:

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

Nato:

  1. sudo pip namestite bučko
  2. sudo pip namestite pyserial
  3. sudo pip namestite RPIO

To bodo vsi moduli, potrebni za izvajanje kode.

9. korak: Nastavitev RoboClawa

Koda robota se pogovarja z RoboClawom v standardnem serijskem načinu pri 19200 baud.

Za to nastavite RoboClaw:

  1. Pritisnite gumb "MODE" na RoboClawu
  2. Med nastavitvami pritiskajte gumb za nastavitev, dokler LED ne utripa 5 (pet) krat
  3. Za shranjevanje pritisnite gumb "LIPO"
  4. Nato pritisnite gumb "SET", dokler LED (3) trikrat ne utripa med zamudami
  5. Za shranjevanje pritisnite gumb LIPO

To je to za nastavitev krmilnika motorja. Za več informacij si oglejte pdf, ki je na zgornji povezavi, če je potrebno.

10. korak: Namestitev programa/datotek Rover

Prenesite in kopirajte datoteko rover.zip v RPI v svojem uporabniškem imeniku pi.

Če uporabljate Linux ali Mac, lahko za to uporabite »scp«:

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

Za Windows lahko prenesete in uporabite pscp in naredite naslednje:

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

Ko je zip datoteka kopirana v RPI, se vanj prijavite kot uporabnik pi.

Zdaj zaženite:

odpakiraj rover.zip

S tem boste datoteke razpakirali v mapo z imenom 'rover' in v tej mapi bodo imeli naslednje:

  • restrover.py (koda Python za robota)
  • statično (vsebuje slikovne datoteke za gumbe na nadzorni strani)
  • predloge (vsebuje datoteko index.htlm, nadzorno spletno stran)

Če uporabljate spletno kamero, spremenite vrstico pri dnu datoteke index.html v mapi s predlogami. Spremenite URL v vrstici IFRAME tako, da se ujema z URL src za vaš video tok.

11. korak: Zaženite Bot Up

Zagon Bot Up -a
Zagon Bot Up -a

Napajanje USB priključite na RPI.

Če želite zagnati kodo bota, se prijavite kot uporabnik pi in zaženite:

  • cd rover
  • sudo python restrover.py

Če je bilo vse v redu, bi morali v tem koraku videti zaslon, podoben sliki

Če opazite napake ali težave, jih morate odpraviti, preden nadaljujete.

Zdaj priključite žico GND (-) na priključek NEG (-) na vhodu za moč motorja RoboClaw.

12. korak: Dostop do strani za nadzor Bota

Dostop do strani za nadzor Bota
Dostop do strani za nadzor Bota
Dostop do strani za nadzor Bota
Dostop do strani za nadzor Bota

Ko se zažene robotov python skript, vklopite RoboClaw in se nato pomaknite do IP -ja RPI, na primer:

your_rpi_ip

Videti bi morali pojavno spletno stran za nadzor, kot na slikah. Če ne, preverite izhodni terminal RPI in poiščite napake ter jih odpravite.

Ko ste na strani, ste pripravljeni nadzirati bot.

Robot se bo zagnal v nastavitvi "Med run" in pri srednji hitrosti.

Bota lahko upravljate z gumbi na strani ali s tipkami na tipkovnici.

Ključi so:

  • w - naprej
  • z - vzvratno/nazaj
  • a - dolg zavoj levo
  • s - dolg zavoj v desno
  • q - kratek zavoj v levo
  • e - kratek desni zavoj
  • 1 - premikanje kamere levo
  • 2 - pomična kamera desno
  • 3 - posoda polna levo
  • 4 - pomik v celoti desno
  • / - domača/ osrednja kamera
  • h - robot za zaustavitev/ustavitev

Med poslanimi ukazi je pol sekundni medpomnilniški zamik. To sem storil, da sem odpravil neželene ponavljajoče se ukaze. Seveda lahko to odstranite iz kode, če želite (v index.html)

Preostale kontrole in nadzor morajo biti samoumevne.

Korak: Koda Python/Flask

Ta bot uporablja Python in spletni okvir Flask. Če vas zanima, lahko tukaj izveste več o Flasku.

Velika razlika od aplikacije Flask in običajnega skripta Python je razred/metoda @app.route, ki se uporablja za obdelavo URI. Razen tega je večinoma precej normalen Python.

#!/usr/bin/env python

# # Wifi/spletni pogon Rover # # Napisal Scott Beasley - 2015 # # Uporablja RPIO, pyserial in Flask # uvozno serijsko uvozno serijo iz RPIO uvozi PWM iz uvozne bučke Flask, render_template, request app = Flask (_name_, static_url_path = ") # Povežite se s komunikacijskimi vrati in se pogovorite z motorjskim krmilnikom Roboclaw. Poskusite: # Tu spremenite hitrost prenosa, če je drugačna od 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200), razen IOError: print ("Comm port not Najdeno ") sys.exit (0) # Spremenljivke krmiljenja hitrosti in pogona last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo nevtralni položaj (home) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18)) def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): globalni last_direction, run_ti me natisni "naprej" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Če ni neprekinjeno, potem ustavite po zakasnitvi, če run_time> 0: last_direction = -1 halt () return "ok" @ app.route ("/backward") def backward (): globalna last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time. 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 () # sleep @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 "Zavijanje naprej levo" 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 (): globalno last_direction, turn_tm_offset print "desno zavijanje naprej" 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 (): globalno last_direction print "Stop" halt () last_direction = -1 # spanje 100 ms 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) # spanje 150 ms čas. sleep (0.150) return "ok" @app.route ("/home") def home (): global servo_pos print "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 full 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 print" Pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # spanje 150ms time.sleep (0.150) return "ok" @app.route ("/speed_low") def speed_low (): globalna hitrost_usmeritve, zadnja_smer, turn_tm_offset hitrost_usklada = 42 turn_tm_offset = 0,001 # Posodobite trenutno smer, da dobite novo hitrost, če last_direction == 0: go_forward () če je last_direction == 1: go_backward () # spi 150 ms time.sleep (0.150) vrnite "ok" @app.route ("/speed_mid") def speed_mid (): globalni speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Posodobi trenutno smer, da dobi novo hitrost, če last_direction == 0: go_forward (), če je last_direction == 1: go_backward () # spi 150 ms time.sleep (0.150) vrne "ok" @app.route ("/speed_hi") def speed_hi (): globalna hitrost_usposabljanja, zadnja_smer, turn_tm_offset hitrost_usklada = 126 tur n_tm_offset = 0.332 # Posodobi trenutno smer za novo hitrost, če last_direction == 0: go_forward () če last_direction == 1: go_backward () # spanje 150 ms time.sleep (0.150) vrne "ok" @app.route ("/neprekinjeno ") 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 () # sleep 100ms time.sleep (0.100) return "ok" # # Funkcije motornega pogona # def go_forward (): globalna hitrost_izklopa, če je hitrostna_postopa! = 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, če 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 (): globalni speed_offset, če 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 če 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)

Če ne želite ali potrebujete podatkov za odpravljanje napak iz Flaska, nastavite debug na 'false' v vrstici app.run.

če _name_ == "_maj_":

app.run (host = '0.0.0.0', port = 80, debug = False)

Tu lahko spremenite tudi vrata, ki jih posluša strežnik Flask

Korak 14: Uporaba druge strojne opreme

Če želite uporabiti drugo strojno opremo, na primer drugo vrsto SBC (računalnik z eno ploščo), bi morali imeti težave pri zagonu Pythona in Flaska na drugih ploščah, kot so Beagle Bone, PCDuino itd … Kodo boste morali spremeniti tako, da ustreza GPIO postavitev in uporabo zmogljivosti servo pogona nove plošče.

Če želite uporabiti drug tip gonilnika motorja, morate spremeniti funkcije go_forward, go_backward, go_left, go_right in halt, da naredite vse, kar nadomestni gonilnik motorja potrebuje za to posebno funkcijo motorja.

Priporočena: