Obsah:

Webom riadený rover: 14 krokov (s obrázkami)
Webom riadený rover: 14 krokov (s obrázkami)

Video: Webom riadený rover: 14 krokov (s obrázkami)

Video: Webom riadený rover: 14 krokov (s obrázkami)
Video: How Not To Die: The Role of Diet in Preventing, Arresting, and Reversing Our Top 15 Killers 2024, November
Anonim
Webom riadený rover
Webom riadený rover
Webom riadený rover
Webom riadený rover

Stavanie a hranie s robotmi je mojím hlavným životným potešením. Ostatní hrajú golf alebo lyžujú, ale ja robím (pretože nemôžem hrať golf ani lyžovať:-). Považujem to za relax a zábavu! Na výrobu väčšiny svojich robotov používam súpravy podvozkov. Používanie súprav mi pomáha robiť to, čo ma baví viac, softvér a elektroniku, a tiež to prináša lepší podvozok pre moje palce.

V tomto návode sa pozrieme na to, čo je potrebné na výrobu jednoduchého, ale robustného vozítka ovládaného Wifi/webom. Použitý podvozok je Actobotics Gooseneck. Vybral som si ho pre jeho veľkosť, možnosti rozšírenia a cenu, ale môžete použiť akékoľvek iné šasi podľa vlastného výberu.

Na takýto projekt budeme potrebovať dobrý solídny počítač a pre tohto robota som sa rozhodol použiť počítač Raspberry Pi (RPI) s operačným systémom Linux. RPI (a Linux) nám dáva veľa možností kódovania a na strane kódovania sa použije Python. Pre webové rozhranie používam Flask, ľahký webový framework pre Python.

Na pohon motorov som zvolil RoboClaw 2x5a. Umožňuje jednoduchú sériovú komunikáciu pre jeho ovládanie a funguje dobre s RPI a motormi na Goosenecku.

Nakoniec má webovú kameru na spätnú väzbu videa typu POV na diaľkové ovládanie. Každej téme sa budem podrobnejšie venovať neskôr.

Krok 1: Potrebný hardvér

Potrebný hardvér
Potrebný hardvér
Potrebný hardvér
Potrebný hardvér
Potrebný hardvér
Potrebný hardvér
Potrebný hardvér
Potrebný hardvér
  • Podvozok Actobotics Gooesneck alebo vhodná náhrada podľa vášho výberu
  • Raspberry Pi podľa vášho výberu (alebo klon) - V tomto robote je použitý model RPI B, ale každý s najmenej dvoma USB portami bude fungovať.
  • Štandardná servo doska B x1
  • Držiak kanála s jedným uhlom 90 ° x1
  • Ovládač motora RoboClaw 2x5a
  • S3003 alebo podobné servo štandardnej veľkosti
  • Malé alebo malé breadboard
  • Prepojovacie vodiče medzi ženami a ženami
  • Prepojovacie vodiče medzi mužmi a ženami
  • Webová kamera (voliteľné) - Používam Logitech C110 a tu je zoznam podporovaných vačiek pre RPI.
  • Napájací zdroj 5v-6v pre servo napájanie
  • 7,2v-11,1v batéria na napájanie hnacieho motora
  • 5v 2 600 mAh (alebo vyššia) powerbanka USB pre RPI
  • USB Wifi adaptér

Na svojom topánke používam 4 kolesá, aby bol trochu viac celoplošný-vnútorný. Na túto možnosť budete potrebovať:

  • 4 "vysokovýkonné koleso x2
  • Náboj so skrutkou so 4 mm otvorom (0,770 palca) x2

Krok 2: Zostavenie podvozku

Zostavenie podvozku
Zostavenie podvozku
Zostavenie podvozku
Zostavenie podvozku
Zostavenie podvozku
Zostavenie podvozku

Najprv zostavte šasi podľa pokynov dodaných so šasi alebo videom. Po dokončení by ste mali mať niečo ako obrázok. POZNÁMKA: Pri montáži dielu na krk nechajte montážny držiak vypnutý.

Na svojom topánke som sa rozhodol vymeniť kolesá, s ktorými bol podvozok dodávaný, pre 4 ťažké kolesá. Toto je voliteľné a nie je potrebné, ak nechcete urobiť to isté.

Krok 3: Montáž elektroniky

Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky

Gooseneck má veľa priestoru a možností montáže vašej elektroniky. Tieto obrázky vám dávam ako vodítko, ale môžete si vybrať, ako by ste to chceli celé rozložiť. Na pripevnenie dosky a batérií môžete použiť dištančné podložky, obojstrannú pásku, suchý zips alebo servopásku.

Krok 4: Pridanie webovej kamery

Pridanie webovej kamery
Pridanie webovej kamery
Pridanie webovej kamery
Pridanie webovej kamery
Pridanie webovej kamery
Pridanie webovej kamery

Na tento krok vezmite 90 stupňovú konzolu, ľahký servopohon a štyri (4) skrutky.3125 :

  • Vezmite servo náboj a umiestnite ho na jednu stranu konzoly a zaistite ich spolu skrutkami.2125 "ako na obrázku.
  • Potom namontujte servo do držiaka serva
  • Pripojte 90 -stupňovú konzolu so servo klaksónom k chrbtici serva a pomocou skrutky na klaksóne, ktorá bola dodaná so servom, ich spojte dohromady.
  • Teraz pomocou zostávajúcich skrutiek namontujte servo v držiaku na vrch husieho krku
  • Namontujte kameru pomocou zipsov alebo obojstrannej pásky na držiak 90 stupňov

V prípade potreby použite obrázky ako sprievodcu.

Krok 5: Všetko zapojte

Celé zapojenie
Celé zapojenie
Celé zapojenie
Celé zapojenie
Celé zapojenie
Celé zapojenie
Celé zapojenie
Celé zapojenie

Kábel je pre tohto robota pomerne tesne.

Motory:

Ak ste tak ešte neurobili, spájkovacie káble na oboch motoroch

S robotmi spredu (koniec s husím krkom) smerom od vás:

  • Pripojte vodiče motora na ľavom motore ku kanálu M1A a M1B
  • Pripojte vodiče motora na pravom motore ku kanálu M2A a M2B

Uzemnenie (GND):

  • Pripojte jeden uzemňovací kolík na RoboClaw k doske uzemňovacieho mostíka. Uzemňovacia čiara na RoboClaw je najbližšie k stredu (pozri obrázok)
  • Pripojte PIN 6 na RPI k prepojovacej doske. Priradenia pinov nájdete na obrázku hlavičky RPI.
  • Pripojte GND zo sady batérií serva k jednému z kolíkov na prepojovacej doske.
  • Veďte prepojovací kábel z prepojovacej dosky na vodič GND serva.

RPI pre RoboClaw:

Pripojte kolík RPI GPIO14 TXD k kolíku RoboClaw S1

Moc:

  • Pripojte kábel POS zo serva batérie k POS káblu serva
  • Pripojte kábel POS z batérie motora k POS (+) na vstupnom termináli motora RoboClaw. Terminál GND zatiaľ necháme odpojený.

Krok 6: Nastavenie RPI

Nastavenie RPI
Nastavenie RPI

Predpokladám, že užívateľ tu vie niečo o Linuxe a RPI. Nezaoberám sa tým, ako ho nastaviť alebo sa k nemu pripojiť. Ak s tým potrebujete pomôcť, použite nižšie uvedené stránky.

Ak chcete získať nastavenie RPI, pozrite sa na nasledujúce stránky:

  • Základné nastavenie RPI
  • Stručný sprievodca RPI
  • Guilde nastavenia NOOBS

Pokiaľ ide o všeobecné skokové stránky, hlavná stránka RPI a stránky eLinux sú skvelými miestami na začiatok.

V tomto odkaze nájdete všeobecné nastavenie WiFi pre RPI.

Ak máte v pláne použiť na fotoaparáte nejaký fotoaparát alebo webovú kameru, pozrite sa na tieto stránky a získajte potrebné súbory.

  • Nastavenie kamery RPI
  • Nastavenie vačky eLinix RPI

Streamovanie videa:

Existuje niekoľko spôsobov, ako spustiť streamovanie videa na RPI, ale ja preferujem metódu Motion.

Ak ho chcete nainštalovať do svojho RPI, spustite toto: sudo apt-get install motion

Tento návod vás prevedie nastavením aj pre streamovanie.

Krok 7: Konfigurácia sériového portu RPI

Aby sme mohli hovoriť s ovládačom motora RoboClaw z tohto portu, budeme musieť vypnúť režim konzoly Linux pre používanie RX a TX. Na tento účel môžete použiť túto metódu alebo tento nástroj. Metóda je na vás, pretože obaja nakoniec urobia to isté.

Krok 8: Inštalácia modulov Python

Budete potrebovať python nainštalovaný na RPI a tiež inštalátor balíka python python.

Ak chcete nainštalovať pip, postupujte takto:

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

Potom:

  1. sudo pip nainštalujte banku
  2. sudo pip install pyserial
  3. sudo pip nainštalujte RPIO

Toto budú všetky moduly potrebné na spustenie kódu.

Krok 9: Nastavenie RoboClaw

Mám kód robota, ktorý hovorí s RoboClaw v štandardnom sériovom režime pri 19 200 baudoch.

Ak chcete RoboClaw nastaviť na tento účel, postupujte takto:

  1. Kliknite na tlačidlo „REŽIM“na RoboClaw
  2. Stláčajte tlačidlo set, kým LED dióda 5 (päťkrát) medzi oneskoreniami nezabliká
  3. Uložte kliknutím na tlačidlo „LIPO“
  4. Potom kliknite na tlačidlo „SET“, kým LED dióda medzi oneskoreniami nezabliká 3 (trikrát)
  5. Uložte stlačením tlačidla LIPO

To je všetko pre nastavenie ovládača motora. V prípade potreby nájdete ďalšie informácie v nižšie uvedenom súbore pdf.

Krok 10: Inštalácia programu/súborov Rover

Prevezmite a skopírujte súbor rover.zip do svojho RPI v používateľskom adresári pi.

Ak používate Linux alebo Mac, môžete na to použiť príkaz „scp“:

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

V systéme Windows si môžete stiahnuť a použiť pscp a potom urobiť:

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

Akonáhle je súbor zip skopírovaný do RPI, prihláste sa doň ako používateľ pí.

Teraz spustite:

rozbaliť rover.zip

Tým sa rozbalia súbory do priečinka s názvom „rover“a v tomto priečinku budú nasledujúce položky:

  • restrover.py (Pythonov kód pre robota)
  • statický (obsahuje obrazové súbory pre tlačidlá na kontrolnej stránke)
  • šablóny (obsahuje súbor index.htlm, kontrolnú webovú stránku)

Ak používate webovú kameru, upravte riadok v spodnej časti súboru index.html v priečinku šablón. Zmeňte adresu URL v riadku IFRAME tak, aby zodpovedala adrese URL src pre váš stream videa.

Krok 11: Spustenie robota hore

Spustenie programu Bot Up
Spustenie programu Bot Up

Pripojte napájanie USB k RPI.

Ak chcete spustiť kód robota, prihláste sa ako používateľ pí a spustite:

  • cd rover
  • sudo python restrover.py

Ak bolo všetko v poriadku, v tomto kroku by sa vám mala zobraziť obrazovka podobná obrázku

Ak uvidíte nejaké chyby alebo problémy, budete ich musieť opraviť, než budete pokračovať.

Teraz pripojte vodič GND (-) k terminálu NEG (-) na vstupe motora RoboClaw.

Krok 12: Prístup na stránku ovládania robotov

Prístup na stránku ovládania robotov
Prístup na stránku ovládania robotov
Prístup na stránku ovládania robotov
Prístup na stránku ovládania robotov

Keď je skript robota spustený, zapnite RoboClaw a potom prejdite na ip svojho RPI ako:

your_rpi_ip

Mali by ste vidieť vyskočenú stránku ovládania webu ako na obrázkoch. Ak nie, skontrolujte výstupný terminál RPI a vyhľadajte chyby a opravte ich.

Keď ste na stránke, ste pripravení ovládať robota.

Robot sa spustí v nastavení „Stredný chod“a pri stredných otáčkach.

Robota je možné ovládať pomocou tlačidiel na stránke alebo pomocou klávesov na klávesnici.

Kľúče sú:

  • w - dopredu
  • z - vzad/vzad
  • a - dlhá ľavotočivá zákruta
  • s - dlhá pravotočivá zákruta
  • q - krátke odbočenie doľava
  • e - krátke odbočenie doprava
  • 1 - panvová kamera vľavo
  • 2 - panvová kamera vpravo
  • 3 - panvica úplne vľavo
  • 4 - panvica úplne vpravo
  • / - domáca/ stredová kamera
  • h - zastaviť/zastaviť robota

Medzi odoslanými príkazmi je polsekundová vyrovnávacia pamäť oneskorenia. Urobil som to, aby som eliminoval nechcené opakované príkazy. Toto môžete samozrejme z kódu odstrániť, ak chcete (v index.html)

Ostatné ovládacie prvky a ich ovládanie by malo byť samozrejmé.

Krok 13: Kód Python/Flask

Tento robot používa webový rámec Python a Flask. Ak máte záujem, môžete sa o banke dozvedieť viac tu.

Veľkým rozdielom od aplikácie Flask a bežného skriptu Python je trieda/metóda @app.route, ktorá sa používa na spracovanie URI. Okrem toho je to z väčšej časti celkom normálny Python.

#!/usr/bin/env python

# # Wifi/Web Rover # # Napísal Scott Beasley - 2015 # # Používa RPIO, pyserial a Flask # čas importu sériového importu z RPIO import PWM z importu banky Flask, render_template, žiadosť app = Flask (_name_, static_url_path = ") # Pripojte sa k komunikačnému portu a porozprávajte sa s ovládačom motora Roboclaw skúste: # Zmeňte prenosovú rýchlosť, ak sa líši od 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) okrem IOError: print („Comm port not nájdené ") sys.exit (0) # Premenné riadenia rýchlosti a pohonu last_direction = -1 speed_offset = 84 turn_tm_offset = 0,166 run_time = 0,750 # Servo neutrálna poloha (domáca) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Malé zdržanie sa pri nastavovaní času.spánok (3) # # Obslužné rutiny URI - všetky akcie stránky robota sa vykonávajú tu # # Odošlite stránku ovládania robotov (domovská stránka) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti vytlačím „Vpred“go_forward () last_direction = 0 # spánok 100 ms + čas_behu.spánok (0,100 + čas_behu) # Ak nie je nepretržitý, potom sa zastaví po oneskorení, ak je beh_time> 0: last_direction = -1 zastaví () vráti „ok“@ app.route ("/backward") def backward (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Ak nie je nepretržité, potom sa zastaví po oneskorení 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 () # spánok @1/2 druhýkrát. spánok (0,500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0,100) vrátiť "ok" @app.route ("/ltforward") def ltforward (): global last_direction, turn_t m_offset tlač "Otočenie doľava" go_left () # spánok @1/8 druhýkrát. spánok (0,250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0,100) návrat "ok" @app.route ("/rtforward") def rtforward (): globálny posledný_smer, turn_tm_offset tlač "Otočné dopredu" go_right () # spánok @1/8 druhýkrát. spánok (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) 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) # sleep 150ms time. spánok (0,150) návrat "ok" @app.route ("/home") def home (): globálne servo_pos vytlačiť "domov" servo_pos = 1250 servo.set_servo (18, servo_pos) # spánok 150 ms čas.spánok (0,150) návrat "ok" @app.route ("/panfull_lt") def panfull_lt (): globálna tlač servo_pos "Pan full l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # spánok 150 ms čas.spánok (0,150) návrat" ok " @app.route ("/panfull_rt ") def panfull_rt (): globálna tlač servo_pos" Posunúť úplne doprava "servo_pos = 2500 servo.set_servo (18, servo_pos) # spánok 150 ms čas.spánok (0,150) návrat "ok" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0,001 # Aktualizujte aktuálny smer, aby ste získali novú rýchlosť, ak 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 # Aktualizujte aktuálny smer, aby ste získali novú rýchlosť, ak last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) vrátiť "ok" @app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0,332 # Aktualizujte aktuálny smer, aby ste získali novú rýchlosť, ak last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/continuous ") 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 () # spánok 100 ms čas.spánok (0,100) návrat "ok" # # Funkcie motorového pohonu # def go_forward (): globálna odchýlka rýchlosti, ak je odchýlka rýchlosti! = 42: roboclaw.write (chr (1 + rýchlosť_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 + offset speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - offset rýchlosti)) roboclaw.write (chr (128 + offset rýchlosti)) else: roboclaw.write (chr (1 + offset rýchlosti) 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_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)

Ak nechcete alebo potrebujete informácie o ladení z banky, nastavte na riadku app.run ladenie na hodnotu „false“.

ak _name_ == "_main_":

app.run (hostiteľ = '0.0.0.0', port = 80, ladenie = nepravda)

Môžete tu tiež zmeniť port, na ktorom server Flask http počúva.

Krok 14: Použitie iného hardvéru

Ak chcete použiť iný hardvér, napríklad iný typ SBC (jednodoskový počítač), mali by ste mať malé problémy so spustením systému Python a Flask na iných doskách, ako sú Beagle Bone, PCDuino atď … Budete musieť zmeniť kód tak, aby zodpovedal GPIO rozloženie a využitie možností riadenia servopohonu novej dosky.

Ak chcete použiť iný typ ovládača motora, stačí upraviť funkcie go_forward, go_backward, go_left, go_right a halt, aby urobili čokoľvek, čo náhradný ovládač motora potrebuje, aby motor vykonal danú funkciu.

Odporúča: