Obsah:

Robo-technik: 8 kroků
Robo-technik: 8 kroků

Video: Robo-technik: 8 kroků

Video: Robo-technik: 8 kroků
Video: robolink® - první krok do světa robotiky 2024, Červenec
Anonim
Robo-technik
Robo-technik

Na chvíli si představte, že jste jedním z astronautů, kteří přistávají na Marsu. Máte milion věcí, které musíte udělat, odebrat vzorky, spustit experimenty, shromáždit data, ale jednou nebo dvakrát denně musíte pobíhat po obytných a/nebo výzkumných modulech, ve kterých žijete a pracujete, abyste je mohli zkontrolovat. Je nutné, aby někdo zajistil, že věc je v dobrém stavu, že všechny tisíce kusů a dílů fungují a jsou na svém místě. Ale co kdyby existoval automatizovaný pomocník, který vás zbaví některých z těchto povinností. Co kdyby tam byl malý robot, který by se mohl pohybovat uvnitř modulů, aby se ujistil, že je vše na svém místě, funguje a je v bezpečí.

Robo-technik na záchranu.

Tento kód v zásadě řídí Robo-Technician, protože sleduje světlou cestu na zemi. Bude sledovat tuto cestu, dokud nenajde křižovatku v cestě nebo odbočku, což vyzve k pořízení fotografie pro zpracování obrazu, aby Robo-Technik mohl rozhodnout, kam dál. Světelné senzory nárazů a nárazů chrání Robo-Technician před poškozením a senzory nárazů kontrolují, kdy bude pořízena diagnostická fotografie. Celkově je Robo-Technik navržen tak, aby přiblížil moduly Mar a uvolnil čas astronautům při provádění základního úkolu inspekce, přičemž volá pouze po lidském vstupu, když zjistí, že je něco špatně.

Opět jako varování, toto je nedokončená práce. Kód, jak existuje, funguje, ale má škytavku, zejména proto, že je zapojeno více překrývajících se programů. Aby tento projekt fungoval na skutečné misi na Marsu, musel by být pro tento konkrétní účel postaven robot, takže opět si myslím, že toto je konstrukce „důkazu konceptu“.

K uvedení do provozu budete potřebovat několik věcí. Budete potřebovat drahý program, balíčky podpory pro tento program a trochu pozadí v kódování. Jelikož jsem student a byl poskytnut nějaký kód v přízemí (pro malinový pi), nebudu konkrétně hovořit o nastavení. Níže naleznete všechny odkazy na tento základní kód. Pojďme k seznamu materiálů.

Hardware

  • Raspberry Pi (použili jsme verzi 3)
  • iRobot ®
  • nějaký druh přidržovacího zařízení, které udrží Raspberry Pi připevněného k Robo-Technicianovi
  • Fotoaparát Raspberry Pi (nezáleží na tom, jaký druh, protože má dobré automatické zaostřování a rozlišení obrazu)
  • nějaký stojan nebo pouzdro, aby kamera na Robo-Technici směřovala dopředu
  • materiál k použití jako proužek, bílý (nebo velmi světlé barvy), který je bezpečně držen na podlaze. Musí být jen o něco širší než prostor mezi předními dvěma senzory útesu.
  • 4 znaky s velmi velkým textem (na nich jsou vytištěna slova OBRÁZEK, VPRAVO, ZPĚT a VLEVO)
  • Listy barevného papíru (nejméně tři, nejlépe červený, zelený a modrý)

Software

  • Matlab (2018a a 2017b byly použity a zdá se, že mají malý rozdíl)
  • Balíček podpory Raspberry Pi pro Matlab
  • Raspberry Pi kód pro připojení k Matlabu (odkaz na zdrojový kód uvedený níže)
  • Sada nástrojů pro zpracování obrázků pro Matlab (bez této sady nástrojů tento projekt téměř nemůžete udělat)
  • VOLITELNÉ: Na vašem telefonu je nainstalován Matlab Mobile, což vysvětlím později

Krok 1: Nastavení hardwaru

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

Toto je odkaz na základní kód, který zajistí, že iRobot® bude moci komunikovat s Matlabem, spolu se základním tutoriálem. Jak jsem již řekl, nebudu tuto konkrétní část pokrývat, protože tutoriál je již velmi dobře rozvržen. Zmíním, že jakmile budete postupovat podle kroků na odkazu, můžete použít Matlabův „doc“příkaz k prohlédnutí zahrnutých informací. Konkrétně:

doktor roomba

A ještě jeden velmi důležitý bod.

Když stáhnete soubory z výše uvedeného odkazu, VLOŽTE JE DO SLOŽKY, kterou jsem popsal výše, protože Matlab vyžaduje, aby soubory generované uživatelem byly v aktuální pracovní složce.

S tím z cesty, pojďme přejít na kód.

Krok 2: Nalezení všech těchto senzorů

Hledání všech těchto senzorů
Hledání všech těchto senzorů
Hledání všech těchto senzorů
Hledání všech těchto senzorů

Udělejte si chvilku a proveďte kontrolu iRobot®. Je dobré vědět, kde to je, takže máte představu o vstupech, které Robo-technik dostává, a budete moci zjistit, proč se věc točí v kruzích, místo toho, abyste sledovali cestu, kterou nastavíte (to by mohlo nebo se to nemusí stát). Zjevně uvidíte velký fyzický snímač nárazů na přední straně. Senzory útesu jsou o něco hůře viditelné, budete je muset převrátit a hledat čtyři průhledná plastová okna poblíž předního okraje. Světelné snímače nárazů jsou ještě skrytější, ale prozatím bude stačit říci, že naživo v lesklém černém pásu běží kolem přední části iRobot®, který je na přední straně fyzické lišty senzoru nárazů.

Existují senzory pádu kol, ale tyto nejsou v tomto projektu použity, takže se přesuneme k testování senzorů.

Krok 3: Testování pro nastavení parametrů

Testování pro nastavení parametrů
Testování pro nastavení parametrů

Než budeme moci vyslat Robo-Technicea, aby provedl svou práci, musíme zjistit jeho specifické vtípky a rozsahy senzorů. Protože každý iRobot® je trochu jiný a mění se v průběhu životnosti robota, musíme zjistit, jak senzory snímají oblasti, ve kterých bude pracovat. Nejsnadnějším způsobem, jak toho dosáhnout, je nastavit si cestu světlých barev (Použil jsem proužky bílého papíru do tiskárny, ale cokoli světlého zabere) na povrchu, který bude Robo-Technik obsluhovat.

Spusťte Matlab a otevřete nový skript. Uložte skript DO STEJNÉHO SLOŽKY I DESCRIBED EARLIER a pojmenujte jej, jak chcete (zkuste to však zkrátit, protože název tohoto souboru bude název funkce). Zapněte robota a použijte nastavení proměnné roomba z tutoriálu, zadejte příkazy do příkazového okna.

Ujistěte se, že je Raspberry Pi zapojen do iRobot® a váš počítač je připojen ke stejnému internetovému připojení. Strávíte méně času vytahováním vlasů a snažíte se zjistit, proč se Matlab nepřipojí

r = roomba (číslo, které jste nastavili)

Proměnná „r“za těchto okolností není nutná, můžete jí říkat, jak chcete, ale používání jednoduchého písmene proměnnou usnadňuje život.

Jakmile je cesta nastavena a robot Roomba byl úspěšně připojen, umístěte budoucího robota, kde jeden nebo dva senzory útesu budou nad cestou. Zjevně to znamená, že další dva nebo tři jsou nad povrchem, který jste si vybrali.

Nyní spusťte testovací senzory příkazem:

r.testSensors

Mějte na paměti, že „r.“Je proměnná, kterou jste definovali dříve, takže pokud to není „r“, změňte „r“. na cokoli, pro co jste se rozhodli. Tím se na obrazovce senzoru testu objeví spousta informací.

V tomto projektu se zaměřte na sekce lightBumpers, nárazníky a útesy. Pohybujte Robo-Technikem a sledujte, jak se senzory mění na různých površích nebo jak blízko musí být objekt, aby se mohly změnit hodnoty ligthBumper atd. Uchovávejte si tato čísla na paměti (nebo si je zapište), protože budete potřebují, aby za sekundu nastavili vaše parametry.

Krok 4: Spuštění kódu

Nejprve budete konstruovat funkci. Říkal jsem tomu „cesta“, ale název opět není nutný, ale od nynějška ho budu označovat jako „cesta“.

Horní část kódu nastavuje některé možnosti vstupu uživatele. Vytváří některé seznamy, které budou použity v souboru in listdlg, a poté vyvolá dialogové okno se seznamem. To umožňuje uživateli vybrat barvu cesty, kterou chce sledovat, která se objeví ve hře později.

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

problist = {'Nouzové, Uložit obrázek', 'Součást mimo místo, Uložit obrázek', 'Očekáváno, Pokračovat'} pathcolor = listdlg ('PromptString', 'Select a Path Color', … 'SelectionMode', 'single', 'ListString', list) prob = 0; pohon = ;

Proměnné „prob“a „driv“je třeba zde deklarovat, protože budou použity uvnitř smyčky main while funkce, ale pokud chcete některou z těchto proměnných přejmenovat nebo změnit výběry seznamu, je to v pořádku, pokud ve zbytku kódu jste konzistentní.

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

Horní část cyklu while obsahuje logiku fyzického snímače nárazů. V zásadě, když Robo-Technik narazí na něco, co se zastaví (nebo u předního nárazového senzoru zálohuje 0,1 metru), pak se umístí a pořídí snímek. Pojďme nejprve pokrýt část pro řízení rychlosti a polohy.

Pokud jste v předchozích krocích otestovali všechna čidla na Robo-Technician, budete vědět, že bump senzory mají logickou hodnotu (0 nebo 1) s nulou představující normální, nestlačenou polohu snímače. U kódu to mějte na paměti.

while 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í část „pokud něco zasáhne, přestaňte“. Pokud senzory detekovat kolizi, pak se přesune na další část kódu, který znovu upraví pozici Robo-Technik získat fotografii.

pokud S.left ~ = 0 %pokud smyčka přebírá informace o nárazníku a zarovná fotoaparát pro fotografii r.turnAngle (5) pause (0,5) img = r.getImage %pořídí fotografii a zobrazí obrázek (img) %dialogové okno prob = listdlg (' PromptString ',' Found an Nečekaná překážka, prosím 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 Unexpected Obstacle, Please Identify' …, 'SelectionMode', 'single', 'ListString', problems) elseif S.front ~ = 0 r.moveDistance (- 0,1) pauza (0,5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Found an Unexpected Obstacle, Please Identify' …, 'SelectionMode', 'single', 'ListString', problist) end

V zásadě se po pořízení obrázku zobrazí další dialogové okno se třemi možnostmi. První dvě možnosti uloží fotografii do určené složky, kterou překryji později, zatímco třetí možnost jednoduše zavře dialogové okno a pokračuje smyčkou. Pokud si nepamatujete možnosti, podívejte se na předchozí krok.

Nyní jsem vložil sekci kódu mezi část snímače nárazu a část pro uložení fotografií. To vezme hodnoty lightBumper a nastaví rychlost jízdy na 0,025 metru/sekundu (velmi pomalá), což ve skutečnosti není nutné, ale omezuje to Robo-Technician, který bije do věcí a nakonec opotřebovává fyzické snímače nárazů.

L = r.getLightBumpers, pokud L.left> 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 driv = 0,025 r.setDriveVelocity (0,025) jinak driv = 0,1 konce

To by byla část, kde vstoupí do hry hodnoty, které jste dříve pozorovali (a doufejme si zapsali)

Hodnota „L. (strana a směr snímače)> 100“vycházela z hodnot, které jsem pozoroval, takže pokud se vaše pozorování liší, změňte tato čísla. Myšlenka je, že pokud Robo-technik ucítí něco několik centimetrů před sebou, zpomalí to, víc než to je zbytečné.

Další část je místo, kde se fotografie ukládají na později.

%pokud byla vybrána první nebo druhá možnost v dialogu prob, uloží obrázek, pokud prob == 1 %, pokud smyčka vytvoří informace o souboru pro fotografii, zapíše s časovým razítkem t = hodiny; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); složka = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (složka, základní jméno); imwrite (img, fullFileName) zavřít Obrázek 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)); složka = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (složka, základní jméno); imwrite (img, fullFileName) zavřít Obrázek 1 pauza (2) konec

Všechny názvy souborů a umístění, kde jsou fotografie uloženy, jsou volitelné. Vybral jsem si složku, která je vnořena do složky Roomba, kterou jsem vytvořil v úvodním kroku, ale může být kdekoli, co si vyberete. Fotografie jsou také uloženy s časovým razítkem, ale to není zvlášť nutné (i když by to bylo hypoteticky užitečné pro misi na Marsu).

Když jsou zakryty fyzické snímače nárazu, můžeme se přesunout na senzory útesu a sledovat cestu.

Krok 6: Sledování cesty

Kód pro snímače útesu je nastaven tak, aby porovnával hodnoty obou předních a dvou bočních hodnot snímačů. Tyto hodnoty budete muset změnit (pravděpodobně) na základě pozorovaných hodnot. Pravděpodobně budete také muset upravit tyto hodnoty po několika testovacích bězích a změnit je na základě okolního světla, denní doby (v závislosti na tom, jak dobře je testovací oblast osvětlena) nebo když jsou špinavá okna senzorů.

Než se však dostaneme ke kódu senzoru útesu, je zde krátký segment kódu, který jsem vložil, abych vyprázdnil některá nepotřebná data z Matlabu. Tato část není nutná, ale použil jsem ji ke snížení úložiště potřebného ke spuštění programu.

clear img clear t clear basename clear fullFileName clear folder

Dalším segmentem kódu je maso projektu. Umožňuje robotickému technikovi sledovat světlou cestu, která byla položena na podlahu. Stručně řečeno, pokouší se řídit tak, aby přední dva senzory útesu byly nad prahem, na základě vašich pozorovaných hodnot, a umožňuje programu zahájit kroky zpracování obrazu o něco později.

C = r.getCliffSensors %pokud smyčka sleduje barevný pás (bílý), pokud C.leftFront> 2000 && C.rightFront> 2000 %přímé vedení r.setDriveVelocity (driv) elseif C.leftFront 2000 %odbočí doprava, pokud robot zajde příliš daleko vlevo r.turnAngle (-2,5) elseif C.leftFront> 2000 && C.rightFront <2000%se otáčí doleva, pokud jde robot příliš daleko 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, zda je v cestě ohyb, pokud C.left> 2800 && C.right <2800 r.turnAngle (2.5) elseif C.left 2800 r.turnAngle (- 2.5) koncový %držák místa pro konec konce konce rozpoznávání obrazu cesty („ZÍSKÁNÍ OBRAZU“)

Mějte na paměti, že názvy proměnných, které jsem vybral, jsou volitelné, ale opět si myslím, že je jednodušší používat proměnné s jedním písmenem, pokud je to možné

Abychom vysvětlili střední část kódu, když dva přední senzory vyběhnou z okraje cesty (pokud jde o křižovatku nebo když dorazí na konec cesty), vypadá to, že je něco před ní. Aby to fungovalo, budete muset umístit předmět na zem na konci cesty nebo na jakékoli křižovatce.

Jakmile je fotografie pořízena, používá rozpoznávání obrazu, aby zjistila, co dělat. V této části kódu je také držák místa:

%držák místa pro rozpoznávání obrazu cesty ('ZÍSKÁNÍ OBRÁZKU')

Pro tuto chvíli jsem to použil, protože jsem chtěl mluvit konkrétně o zpracování textu a barev, ke kterému dochází, což je v dalším kroku.

Krok 7: Zpracování obrazu

Zpracování obrazu má dvě části. Prvním je rozpoznávání barev, které vypočítá intenzitu barev v obrázku a rozhodne, zda bude pokračovat v rozpoznávání textu. Výpočty barev jsou založeny na tom, co bylo vybráno v tom úplně prvním dialogovém okně na začátku (použil jsem červenou, modrou, zelenou, ale můžete si vybrat jakékoli barvy, které chcete, pokud průměrné hodnoty intenzity barev poznají 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á = průměr (průměr (imgb (:,:, 1))); g = průměr (průměr (imgb (:,:, 2))); b = průměr (průměr (imgb (:,:, 3)));

Toto je kontrola intenzity. To bude použito v příštím segmentu k rozhodnutí, co chce dělat.

je -li červená> g&& red> b if pathcolor == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img) if R. Words {1} == IMAGE || R. Words {2} == OBRÁZEK || R. Words {3} == OBRÁZEK t = hodiny; basename = sprintf ('\ img_%d_%d_%d_%d_%d.png', t (1), t (2), t (3), t (4), t (5)); složka = 'E: / UTK / Classes / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (složka, základní jméno); imwrite (img, fullFileName) pause (2) elseif R. Words {1} == RIGHT || R. Sword {2} == PRÁVO || R.words {3} == RIGHT r.turnAngle (-75) elseif R. Words {1} == LEFT || R. Sword {2} == VLEVO || R. Words {3} == VLEVO r.turnAngle (75) elseif R. Words {1} == ZPĚT || R. Words {2} == ZPĚT || R. Words {3} == ZPĚT r.turnAngle (110) end else r.turnAngle (110) end end

Tento segment rozhoduje, zda barva, která byla vybrána v prvním dialogovém okně, odpovídá barvě, kterou vidí kamera. Pokud ano, spustí rozpoznávání textu. Vypadá to, že uvidíte, jaké slovo (OBRÁZEK, ZPĚT, VPRAVO nebo VLEVO) se objeví, a pak se buď otočí (vpravo a vlevo), otočí se (vzadu) nebo pořídí snímek a uloží jej stejným způsobem jako dříve.

Poskytl jsem pouze jednu část kódu pro různé barvy

Chcete -li, aby kód rozpoznal modrou a zelenou barvu, jednoduše zkopírujte kód a změňte kontrolu logiky v horní části segmentu a nastavte „pathcolor == (number)“tak, aby odpovídalo výběrům barev z horního dialogového okna (pro kód, jak je zobrazen, modrá by byla 2 a zelená by byla 3).

Krok 8: Hotový výrobek

Hotový výrobek
Hotový výrobek

Nyní by měl Robo-technik přiblížit moduly misí na Marsu a hlásit astronautům, když bude něco na místě.

Pamatujte, že všechny hodnoty senzoru útesu a světelného nárazníku je třeba změnit na hodnoty, které jste pozorovali. Také jsem ze zkušenosti zjistil, že je lepší testovat tento projekt na tmavě zbarvené podlaze a je ještě lepší, pokud je tato podlaha nereflexní. Tím se zvýší kontrast mezi cestou a podlahou, což zvyšuje pravděpodobnost, že ji robotický technik bude správně sledovat.

Doufáme, že jste si užili nastavení malého pomocníka pro misi Mars a užili jste si zábavu při stavění.

Doporučuje: