Obsah:

Robo-technik: 8 krokov
Robo-technik: 8 krokov

Video: Robo-technik: 8 krokov

Video: Robo-technik: 8 krokov
Video: Мастер спорта притворился ТОЛСТЯКОМ в ЗАЛЕ #8 | FAT MAN PRANK 2024, Júl
Anonim
Robo-technik
Robo-technik

Na chvíľu si predstavte, že ste jedným z astronautov, ktorí pristávajú na Marse. Máte milión vecí, ktoré musíte urobiť, odobrať vzorky, spustiť experimenty, zhromaždiť údaje, ale raz alebo dvakrát denne musíte behať po obývaných a/alebo výskumných moduloch, v ktorých žijete a pracujete, aby ste ich mohli skontrolovať. Je nevyhnutné, aby niekto zaistil, že vec je v dobrom stave, že všetky tisíce kusov a súčiastok fungujú a sú na svojom mieste. Ale čo keby existoval automatizovaný pomocník, ktorý by vás zbavil niektorých z týchto povinností. Čo keby tam bol malý robot, ktorý by sa mohol pohybovať vnútri modulov, aby sa ubezpečil, že všetko je na svojom mieste, funguje a je v bezpečí.

Robo-technik na záchranu.

Tento kód v zásade riadi robotického technika, ktorý sleduje svetlú cestu na zemi. Bude nasledovať túto cestu, kým nenájde križovatku v ceste alebo odbočku, čo vyzve na nasnímanie fotografie na spracovanie obrazu, aby sa robotický technik mohol rozhodnúť, kam ďalej. Svetelné snímače nárazov a nárazov chránia robotika pred poškodením a snímače nárazov riadia, kedy bude nasnímaná diagnostická fotografia. Robo-technik je navrhnutý tak, aby približoval moduly Mar a uvoľňoval tak čas astronautov pri vykonávaní základnej úlohy inšpekcie, pričom volal iba po ľudskom vstupe, keď zistil, že niečo nie je v poriadku.

Opäť ako varovanie, toto je nedokončená práca. Kód, ako existuje, funguje, má však škytavku, najmä preto, že je doň zapojených viacero prekrývajúcich sa programov. Na to, aby tento projekt fungoval na skutočnej misii na Marse, by na tento konkrétny účel bolo potrebné postaviť robota, takže si myslím, že toto je opäť „dôkaz koncepcie“.

Aby ste to uviedli do prevádzky, je potrebných niekoľko vecí. Budete potrebovať drahý program, balíky podpory pre tento program a malé znalosti kódovania. Keďže som študent a poskytol som kód pre prízemie (pre malinový pi), nebudem konkrétne hovoriť o nastavení. Všetky odkazy na tento základný kód nájdete nižšie. Prejdeme k zoznamu materiálov.

Hardvér

  • Raspberry Pi (použili sme verziu 3)
  • iRobot ®
  • nejaký druh pridržiavacieho zariadenia, ktoré udržuje Raspberry Pi pripevnené k robotovi
  • Fotoaparát Raspberry Pi (nezáleží na tom, aký druh, pretože má dobré automatické zaostrovanie a rozlíšenie obrazu)
  • nejaký stojan alebo puzdro, ktoré drží kameru na robotickom technikovi dopredu
  • materiál na použitie ako pásik, biely (alebo veľmi svetlej farby), ktorý je bezpečne pripevnený k podlahe. Musí byť len o niečo širší ako priestor medzi prednými dvoma snímačmi útesu.
  • 4 znaky s veľmi veľkým textom (s vytlačenými slovami OBRÁZOK, SPRÁVNY, SPÄŤ a ĽAVÝ)
  • Listy farebného papiera (najmenej tri, najlepšie červený, zelený a modrý)

Softvér

  • Použili sa Matlab (2018a a 2017b a zdá sa, že majú malý rozdiel)
  • Balík podpory Raspberry Pi pre Matlab
  • Raspberry Pi kód na pripojenie k Matlabu (odkaz na zdrojový kód uvedený nižšie)
  • Panel na spracovanie obrazu pre Matlab (bez sady nástrojov tento projekt prakticky nemôžete robiť)
  • VOLITELNÉ: Vo vašom telefóne je nainštalovaný Matlab Mobile, ktorý vysvetlím neskôr

Krok 1: Nastavenie hardvéru

ef.engr.utk.edu/ef230-2018-08/projects/roo…

Toto je odkaz na základný kód, ktorý zaisťuje, že iRobot® môže komunikovať s Matlabom, spolu so základným návodom. Ako som už povedal, nebudem sa zaoberať touto konkrétnou časťou, pretože návod je už veľmi dobre zostavený. Spomeniem, že akonáhle ste postupovali podľa krokov v odkaze, pomocou príkazu Matlab „doc“si môžete prezrieť zahrnuté informácie. Konkrétne:

doktor roomba

A ešte jeden veľmi dôležitý bod.

Keď sťahujete súbory z vyššie uvedeného odkazu, VLOŽTE ich do priečinka, ktorý som popísal vyššie, pretože Matlab vyžaduje, aby sa súbory generované používateľom nachádzali v aktuálnom pracovnom priečinku.

Aby sme to zabránili, prejdeme ku kódu.

Krok 2: Nájdenie všetkých týchto senzorov

Nájdenie všetkých týchto senzorov
Nájdenie všetkých týchto senzorov
Nájdenie všetkých týchto senzorov
Nájdenie všetkých týchto senzorov

Na chvíľu si dajte iRobot® kontrolu. Je dobré vedieť, kde to je, aby ste mali predstavu o vstupoch, ktoré Robo-technik dostáva, a budete schopní zistiť, prečo sa to točí v kruhoch, namiesto toho, aby ste sledovali cestu, ktorú nastavíte (to môže alebo sa to nemuselo stať). Vpredu evidentne uvidíte veľký fyzický snímač nárazov. Senzory útesu sú o niečo ťažšie viditeľné, budete ich musieť prevrátiť a hľadať štyri čisté plastové okná v blízkosti predného okraja. Svetelné snímače nárazov sú ešte viac skryté, ale zatiaľ bude stačiť povedať, že naživo v lesklom čiernom páse prebieha okolo prednej časti zariadenia iRobot®, ktorý je na prednej strane panela fyzického senzora nárazov.

Existujú senzory pádu kolies, ale tieto sú v tomto projekte nepoužité, takže prejdeme k testovaniu senzorov.

Krok 3: Testovanie na nastavenie parametrov

Testovanie na nastavenie parametrov
Testovanie na nastavenie parametrov

Predtým, ako budeme môcť poslať robo-technika, aby vykonal svoju prácu, musíme zistiť jeho konkrétne zvláštnosti a rozsahy senzorov. Pretože každý iRobot® je trochu iný a mení sa počas životnosti robota, musíme zistiť, ako snímače snímajú oblasti, v ktorých bude pracovať. Najľahšie to urobíte tak, že si nastavíte svetlú cestu (Použil som pásy bieleho papiera do tlačiarne, ale na povrch, ktorý bude robotický technik používať, bude stačiť čokoľvek svetlej farby.

Spustite Matlab a otvorte nový skript. Skript uložte do rovnakého priečinka, ktorý som popísal skôr a pomenujte ho, ako chcete (snažte sa ho však skrátiť, pretože názov tohto súboru bude názvom funkcie). Zapnite robota a použite nastavenie premennej roomba z tutoriálu, pričom zadajte príkazy do príkazového okna.

Uistite sa, že je Raspberry Pi zapojený do iRobot® a váš počítač je pripojený k rovnakému internetovému pripojeniu. Strávite menej času vyťahovaním vlasov a snažíte sa zistiť, prečo sa Matlab nepripojí

r = roomba (číslo, ktoré ste nastavili)

Premenná „r“za týchto okolností nie je potrebná, môžete ju nazvať, ako chcete, ale používanie jednoduchej premennej písmena uľahčuje život.

Akonáhle je cesta nastavená a robot Roomba bol úspešne pripojený, umiestnite budúceho robota-technika tam, kde je jeden alebo dva senzory útesu nad cestou. Očividne to znamená, že ďalšie dve alebo tri sú nad vrchom povrchu, ktorý ste si vybrali.

Teraz spustite testovacie senzory príkazom:

r.testSensors

Majte na pamäti, že „r.“Je premenná, ktorú ste definovali predtým, takže ak nie je „r“, zmeňte „r“. na čokoľvek, pre čo ste sa rozhodli. Zobrazí sa obrazovka testovacieho senzora s množstvom informácií.

V tomto projekte sa zamerajte na sekcie lightBumpers, nárazníky a útesy. Pohybujte s robotom a sledujte, ako sa senzory menia na rôznych povrchoch alebo ako blízko musí byť objekt, aby sa mohli zmeniť hodnoty nárazníka atď. Tieto čísla majte na pamäti (alebo si ich zapíšte), pretože budete potrebujú, aby vám v sekunde nastavili parametre.

Krok 4: Spustenie kódu

Najprv budete konštruovať funkciu. Nazval som to „cesta“, ale opäť nie je tento názov potrebný, ale odteraz ho budem označovať ako „cesta“.

Horná časť kódu nastavuje niektoré možnosti zadávania používateľmi. Vytvorí niekoľko zoznamov, ktoré sa použijú v súbore listdlg, a potom vyvolá dialógové okno so zoznamom. Užívateľ si tak môže vybrať, akú farbu cesty chce nasledovať, ktorá príde do hry neskôr.

zoznam = {'červená', 'modrá', 'zelená'}

problist = {'Núdzový, Uložiť obrázok', 'Komponent nie je na mieste, Uložiť obrázok', 'Očakávané, Pokračovať'} pathcolor = listdlg ('PromptString', 'Select a Path Color', … 'SelectionMode', 'single', 'ListString', list) prob = 0; pohon = ;

Tu je potrebné deklarovať premenné „prob“a „driv“, pretože sa použijú v slučke main while, ale opäť, ak chcete premenovať ktorúkoľvek z týchto premenných alebo zmeniť výbery v zozname, je to v poriadku, pokiaľ vo zvyšku kódu ste konzistentní.

Krok 5: Top of the While loop: Physical Bump Sensors

Horná časť slučky while obsahuje fyzickú logiku snímača nárazov. V zásade, keď robotický technik narazí na niečo, čo sa zastaví (alebo čo sa týka senzora predného nárazu, zálohuje to 0,1 metra), potom sa umiestni a urobí fotografiu. Poďme najskôr pokryť časť na ovládanie rýchlosti a polohy.

Ak ste v predchádzajúcich krokoch vyskúšali všetky senzory na robotovi, budete vedieť, že snímače nárazov majú logickú hodnotu (0 alebo 1), pričom nula predstavuje normálnu, nestlačenú polohu senzora. Pri kóde to pamätajte.

zatiaľ čo true %main while loop %receive bumper info S = r.getBumpers if S.left ~ = 0 r.stop elseif S.right ~ = 0 r.stop elseif S.front ~ = 0 r.stop end

Toto je základná časť „Ak na niečo narazí, zastavte“. Ak senzory detegujú kolíziu, prejdú na ďalšiu časť kódu, ktorá upraví pozíciu robotického technika, aby získal fotografiu.

ak S.left ~ = 0 %, ak slučka preberá informácie o nárazníku a zarovná fotoaparát s fotografiou r.turnAngle (5) pauza (0,5) img = r.getImage %urobí fotografiu a zobrazí obrázok (obrázok) %dialógové okno prob = listdlg (' PromptString ',' Found an Nečekaná prekážka, Identifikujte '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) pause (0,5) img = r. getImage image (img) prob = listdlg ('PromptString', 'Found an Neočakávaná prekážka, prosím identifikujte' …, 'SelectionMode', 'single', 'ListString', problém) elseif S.front ~ = 0 r.moveDistance (- 0,1) pauza (0,5) img = r.getImage obrázok (img) prob = listdlg ('PromptString', 'Found an Neočakávaná prekážka, prosím identifikujte' …, 'SelectionMode', 'single', 'ListString', problém) koniec

Po nasnímaní obrázka sa v zásade zobrazí ďalšie dialógové okno s tromi možnosťami. Prvé dve možnosti uložia fotografiu do určeného priečinka, ktorý zakryjem neskôr, zatiaľ čo tretia možnosť jednoducho zatvorí dialógové okno a pokračuje v slučke. Ak si nepamätáte možnosti, pozrite sa na predchádzajúci krok.

Teraz som vložil sekciu kódu medzi časť snímača nárazu a časť na ukladanie fotografií. To vezme hodnoty lightBumper a nastaví rýchlosť jazdy na 0,025 metra/sekundu (veľmi pomalá), čo v skutočnosti nie je potrebné, ale obmedzuje to robota a technika, ktorý bije do vecí a nakoniec opotrebováva fyzické snímače nárazov.

L = r.getLightBumpers ak L.vľavo> 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 driv = 0,025 r.setDriveVelocity (0,025) else driv = 0,1 konca

Toto by bola časť, kde vstúpia do hry hodnoty, ktoré ste predtým pozorovali (a dúfajme, že ste si ich zapísali)

„L. (strana a smer snímača)> 100“vychádzal z hodnôt, ktoré som pozoroval, takže ak sú vaše pozorovania odlišné, zmeňte tieto čísla. Ide o to, že ak robotický technik niečo cíti niekoľko centimetrov pred sebou, spomalí to, viac ako to je zbytočné.

V ďalšej časti sú uložené fotky na neskôr.

%ak bola v dialógovom okne prob prob vybraná prvá alebo druhá možnosť, uloží obrázok, ak je prob == 1 %, ak slučka vytvorí informácie o súbore pre fotografiu, zapíše s časovou pečiatkou t = hodiny; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); priečinok = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (priečinok, meno_základu); imwrite (img, fullFileName) zavrieť Obrázok 1 pauza (2) elseif prob == 2 t = hodiny; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); priečinok = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (priečinok, meno_základu); imwrite (img, fullFileName) zavrieť Obrázok 1 pauza (2) koniec

Všetky názvy súborov a umiestnenia, kde sú fotografie uložené, sú voliteľné. Vybral som priečinok, ktorý je vnorený do priečinka Roomba, ktorý som vytvoril v úvodnom kroku, ale môže byť kdekoľvek, kam sa vyberiete. Fotografie sú tiež uložené s časovou pečiatkou, ale nie je to nevyhnutné (aj keď by to bolo hypoteticky užitočné pre misiu na Marse).

Keď sú zakryté snímače fyzického nárazu, môžeme sa presunúť na snímače útesu a sledovať cestu.

Krok 6: Po ceste

Kód pre snímače útesu je nastavený na porovnávanie hodnôt dvoch hodnôt predného a dvoch bočných senzorov. Tieto hodnoty budete musieť zmeniť (pravdepodobne) na základe vašich pozorovaných hodnôt. Tiež budete pravdepodobne musieť upraviť tieto hodnoty po niekoľkých testovacích jazdách a zmeniť ich podľa okolitého svetla, dennej doby (v závislosti od toho, ako dobre je testovaná oblasť osvetlená) alebo keď sú špinavé okná senzorov.

Predtým, ako sa dostaneme k kódu senzora útesu, je však vložený krátky segment kódu, ktorý vyprázdni niektoré nepotrebné údaje z programu Matlab. Táto časť nie je potrebná, ale použil som ju na zníženie úložného priestoru potrebného na spustenie programu.

clear img clear t clear basename clear fullFileName vymazať priečinok

Ďalším segmentom kódu je mäso projektu. Umožňuje robotickému technikovi sledovať svetlú cestu, ktorá bola položená na podlahu. Stručne povedané, pokúša sa riadiť sám, takže dva predné snímače útesu sú nad prahom, na základe vašich pozorovaných hodnôt, a umožňuje programu začať kroky spracovania obrazu o niečo neskôr.

C = r.getCliffSensors %if loop nasleduje a color band (white) if C.leftFront> 2000 && C.rightFront> 2000 %straight path guidance r.setDriveVelocity (driv) elseif C.leftFront 2000 %otočí vpravo, ak robot ide príliš ďaleko vľavo r.turnAngle (-2,5) elseif C.leftFront> 2000 && C.rightFront <2000%sa otočí doľava, ak robot prejde príliš ďaleko vpravo r.turnAngle (2,5) elseif C.leftFront <2000 && C.rightFront 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 img = r.getImage end %zkontroluje, či je v ceste ohyb, ak C.left> 2800 && C.right <2800 r.turnAngle (2.5) elseif C.left 2800 r.turnAngle (- 2.5) koncový %koncový držiak miesta na koniec konca konca rozpoznávania obrazu cesty („ZÍSKÁVANIE OBRAZU“)

Majte na pamäti, že názvy premenných, ktoré som vybral, sú voliteľné, ale opäť si myslím, že je jednoduchšie používať jednopísmenové premenné, ak je to možné

Na vysvetlenie strednej časti kódu, keď dva predné senzory zbehnú z okraja cesty (pokiaľ ide o križovatku alebo keď sa dostane na koniec cesty), vyzerá to, že je niečo pred ňou.. Aby to fungovalo, budete musieť položiť predmet na zem na koniec cesty alebo na akékoľvek križovatky.

Akonáhle je fotografia nasnímaná, rozpoznáva obrázky, aby zistila, čo robiť. V tejto sekcii kódu je aj miestodržiteľ:

%držiteľa miesta pre rozpoznávanie obrazu cesty („ZÍSKÁVANIE OBRAZU“)

Momentálne som to použil, pretože som chcel hovoriť konkrétne o texte a farebnom spracovaní, ktoré prebieha, čo je v nasledujúcom kroku.

Krok 7: Spracovanie obrazu

Spracovanie obrazu má dve časti. Prvým je rozpoznávanie farieb, ktoré vypočíta intenzitu farieb v obrázku a rozhodne, či má alebo nemá pokračovať v rozpoznávaní textu. Farebné výpočty sú založené na tom, čo bolo urobené v prvom dialógovom okne na začiatku (použil som červenú, modrú, zelenú, ale môžete si vybrať akékoľvek farby, ktoré chcete, pokiaľ priemerné hodnoty intenzity farby rozpoznajú Kamera Raspberry Pi).

img = r.getImage img = imcrop (img, [0 30 512 354]) imgb = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) červená = priemer (priemer (imgb (:,:, 1))); g = priemer (priemer (imgb (:,:: 2))); b = priemer (priemer (imgb (:,:, 3)));

Toto je kontrola intenzity. Toto sa použije v nasledujúcom segmente na rozhodnutie, čo chce urobiť.

ak je červená> g && červená> b ak farba cesty == 1 obr. = obr. R. Words {2} == OBRAZ || R. Words {3} == OBRAZ t = hodiny; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); priečinok = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (priečinok, meno_základu); imwrite (img, fullFileName) pauza (2) elseif R. Words {1} == RIGHT || R. Words {2} == SPRÁVNE || R. Words {3} == RIGHT r.turnAngle (-75) elseif R. Words {1} == LEFT || R. Words {2} == VLEVO || R. Words {3} == VLEVO r.turnAngle (75) elseif R. Words {1} == SPÄŤ || R. Words {2} == SPÄŤ || R. Words {3} == SPÄŤ r.turnAngle (110) end else r.turnAngle (110) end end

Tento segment rozhoduje, či farba, ktorá bola vybratá v prvom dialógovom okne, zodpovedá farbe, ktorú vidí fotoaparát. Ak to urobí, spustí rozpoznávanie textu. Zdá sa, že sa zobrazí slovo (OBRÁZOK, SPÄŤ, VPRAVO alebo Vľavo) a potom sa buď otočí (vpravo a vľavo), otočí sa (dozadu) alebo nasníma obrázok a uloží ho rovnakým spôsobom ako predtým.

Poskytol som iba jednu časť kódu pre rôzne farby

Aby kód rozpoznal modrú a zelenú, jednoducho skopírujte kód a zmeňte kontrolu logiky v hornej časti segmentu a nastavte „pathcolor == (číslo)“tak, aby zodpovedalo výberom farieb z horného dialógového okna (pre kód, ako je zobrazený, modrá bude 2 a zelená bude 3).

Krok 8: Hotový výrobok

Hotový výrobok
Hotový výrobok

Robo-technik by sa mal teraz priblížiť k modulom misie na Marse a informovať astronautov, keď niečo nie je na mieste.

Nezabudnite, že všetky hodnoty senzora útesu a svetelného nárazníka je potrebné zmeniť na hodnoty, ktoré sú pozorované. Tiež zo skúsenosti považujem za lepšie testovať tento projekt na tmavej podlahe a ešte lepšie je, ak je táto podlaha nereflexná. Tým sa zvyšuje kontrast medzi cestou a podlahou, čo zvyšuje pravdepodobnosť, že ju robotický technik bude správne nasledovať.

Dúfam, že sa vám páčilo nastavovanie malého pomocníka na misiu na Marse a bavilo vás stavanie.

Odporúča: