Tutorial: Rozdiel medzi revíziami
dBez shrnutí editace |
dBez shrnutí editace |
||
| (9 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
| Riadok 133: | Riadok 133: | ||
=== 2. | === 2.2. Line-Follower === | ||
==== 2.1.1. Zastav na čiare ==== | ==== 2.1.1. Zostrojte robot Line-Follower ==== | ||
podľa [[Basic robot - Line-follower|návodu na jeho samostatnej stránke]] a vyskúšajte aj základný program, ktorý je k návodu priložený. | |||
==== 2.2.2. Zastav na čiare ==== | |||
Robot sa rozbehne vpred, neustále sníma podlahu a keď sa dostane na čiernu čiaru, zastane. | Robot sa rozbehne vpred, neustále sníma podlahu a keď sa dostane na čiernu čiaru, zastane. | ||
| Riadok 146: | Riadok 150: | ||
* robot sa po zastavení na čiare vráti naspäť približne na rovnaké miesto | * robot sa po zastavení na čiare vráti naspäť približne na rovnaké miesto | ||
==== 2. | ==== 2.2.3. Jazda medzi dvomi čiarami ==== | ||
Robot sa bude do nekonečna pohybovať medzi dvomi čiarami. | Robot sa bude do nekonečna pohybovať medzi dvomi čiarami. | ||
| Riadok 163: | Riadok 167: | ||
* robot sa bude medzi čiarami pohybovať náhodnou rýchlosťou | * robot sa bude medzi čiarami pohybovať náhodnou rýchlosťou | ||
==== 2. | ==== 2.2.4. Uzatvorený útvar ==== | ||
Robot sa bude pohybovať vnútri čiernou čiarou obkoleseného územia. | Robot sa bude pohybovať vnútri čiernou čiarou obkoleseného územia. | ||
| Riadok 179: | Riadok 183: | ||
* niekde vnútri ohraničeného územia sa nachádza väčšia čierna plocha - ktorá predstavuje cieľ jeho hľadania, robot po nájdení svojho cieľa zastane o stane stáť. | * niekde vnútri ohraničeného územia sa nachádza väčšia čierna plocha - ktorá predstavuje cieľ jeho hľadania, robot po nájdení svojho cieľa zastane o stane stáť. | ||
==== 2. | ==== 2.2.5. Sledovanie čiary ==== | ||
Naprogramujeme jednoduché jazdenie po uzavretej čiare, ktorá sa môže kľukatiť vľavo i vpravo. Napríklad takto: | Naprogramujeme jednoduché jazdenie po uzavretej čiare, ktorá sa môže kľukatiť vľavo i vpravo. Napríklad takto: | ||
| Riadok 195: | Riadok 199: | ||
* priečne čiary môžete urobiť na viacerých miestach a robot na nich bude na malú chvíľu zastavovať (trať električky so zastávkami) | * priečne čiary môžete urobiť na viacerých miestach a robot na nich bude na malú chvíľu zastavovať (trať električky so zastávkami) | ||
==== 2.2.6. Flexibilnejšie sledovanie čiary ==== | |||
==== 2. | |||
V prípade, že sú na dráhe menej prudké aj prudšie zákruty, predchádzajúci program buď vyletí na prudkých zákrutách, alebo bude na miernych zákrutách zbytočne veľa točiť. V tomto cvičení vytvoríme program, ktorý bude zatáčať rôzne prudko, podľa toho ako prudko zatáča zákruta. Napríklad: | V prípade, že sú na dráhe menej prudké aj prudšie zákruty, predchádzajúci program buď vyletí na prudkých zákrutách, alebo bude na miernych zákrutách zbytočne veľa točiť. V tomto cvičení vytvoríme program, ktorý bude zatáčať rôzne prudko, podľa toho ako prudko zatáča zákruta. Napríklad: | ||
| Riadok 214: | Riadok 216: | ||
* na niektorom mieste vytvorte prerušenie čiary - zabezpečte, aby robot cez miesto plynule prešiel a pokračoval na čiare ďalej, neskôr pridajte, aby pokračovanie čiary robot našiel aj vtedy, ak sa napríklad nadchádza v zákrute | * na niektorom mieste vytvorte prerušenie čiary - zabezpečte, aby robot cez miesto plynule prešiel a pokračoval na čiare ďalej, neskôr pridajte, aby pokračovanie čiary robot našiel aj vtedy, ak sa napríklad nadchádza v zákrute | ||
==== 2. | ==== 2.2.7. Prechod bludiskom pravidlom pravej ruky ==== | ||
V tejto technicky náročnej úlohe naprogramujeme robota, aby sa dokázal pohybovať v bludisku - ktoré má jeden vchod, ktorý je zároveň jeho východom. V bludisku budú iba kolmé "chodby" vyznačené čiernou čiarou na podlahe. Základom sú tri funkcie: 1) rozpoznanie typu križovatky - tri rôzne križovatky v tvare T, dve v tvare L, križovatka zo 4 cestami a slepá ulička (spolu 7 rôznych typov križovatiek), 2) zatočenie na križovatke vpravo a 3) zatočenie na križovatke vľavo. | V tejto technicky náročnej úlohe naprogramujeme robota, aby sa dokázal pohybovať v bludisku - ktoré má jeden vchod, ktorý je zároveň jeho východom. V bludisku budú iba kolmé "chodby" vyznačené čiernou čiarou na podlahe. Základom sú tri funkcie: 1) rozpoznanie typu križovatky - tri rôzne križovatky v tvare T, dve v tvare L, križovatka zo 4 cestami a slepá ulička (spolu 7 rôznych typov križovatiek), 2) zatočenie na križovatke vpravo a 3) zatočenie na križovatke vľavo. | ||
| Riadok 232: | Riadok 234: | ||
* pridajte detekciu cieľa - môže byť označený napríklad väčšou obdĺžnikovou plochou, keď sa na ňu konečne dostane, robot a program zastane | * pridajte detekciu cieľa - môže byť označený napríklad väčšou obdĺžnikovou plochou, keď sa na ňu konečne dostane, robot a program zastane | ||
* keď sa robot dostane do cieľa, potom prejde bludisko ešte raz pravidlom ľavej ruky a zistí, ktorá cesta je kratšia a oznámi to (napr. farbou svojej RGB LED) | * keď sa robot dostane do cieľa, potom prejde bludisko ešte raz pravidlom ľavej ruky a zistí, ktorá cesta je kratšia a oznámi to (napr. farbou svojej RGB LED) | ||
=== 2.3. Rameno === | |||
==== 2.3.1. Zostrojte robot Rameno ==== | |||
Poskladajte robotické rameno podľa [[Basic robot - Robot-Arm|návodu na jeho samostatnej stránke]] a vyskúšajte aj základný program, ktorý je k návodu priložený. | |||
Základný program zapína motory postupne po jednom, aby ste si prípadne mohli ešte opraviť ich otočenie voči modrej pripojenej súčiastke. Robot by pri 90-stupňových polohách motorov mal vyzerať ako na videu po zapnutí. | |||
==== 2.3.2. Riadenie ramena joystickom a dotykovými senzormi ==== | |||
Najskôr naprogramujte základné riadenie robota pomocou joysticku. Joystick má len dva stupne voľnosti, preto je vhodné nejakým spôsobom prepínať medzi zvolenou dvojicou kĺbov, ktoré pomocou neho práve riadime. My sme si zvolili prepínanie prvým dotykovým sennzorom a signalizáciu pommocou farebnej LED. | |||
# Naklonenie joysticku do jednej alebo druhej strany začne otáčať motorom v príslušnom kĺbe do jednej alebo druhej strany; | |||
# Vrátenie joysticku do neutrálnej polohy uvedie rameno do pokoja na tom mieste, kde sa práve nachádza; | |||
# Dotyk (a následné pustenie) prvého dotykového senzora vymení dvojicu kĺbov, ktoré sa riadia joystickom. | |||
Všimnite si, že hodnoty z joysticku sa menia pomerne rýchlo už pri jeho jemnom naklonení. | |||
Mohlo by to vyzerať napríklad takto: | |||
<youtube>LExj92AYP50</youtube> | |||
Námety: | |||
* nájdite hraničné hodnoty pre jednotlivé servá, za ktorými ďalší pohyb nie je mechanicky možný | |||
* zabezpečte podmienkami v programe, že sa servo za tieto hranice nedostane (ideálne by hranice mohli byť flexibilné vzhľadom na polohu v ktorej sa rameno nachádza) | |||
* pri rôzne prudkom naklonení joysticku sa motory budú otáčať rôznou rýchlosťou a farebná LED bude signalizovať aj smer aj rýchlosť otáčania | |||
==== 2.3.3. Zaznamenávanie a zopakovanie postupnosti pohybov ==== | |||
Program z predchádzajúceho cvičenia vylepšíme tak, že počas riadenia ramena joystickom bude možné zapnúť a zastaviť nahrávanie jeho pohybov a neskôr túto zapamätanú postupnosť znovu autonómne zopakovať. | |||
# program najskôr funguje rovnako ako program v predchádzajúcej úlohe | |||
# po stlačení (a pustení) druhého dotykového senzora sa zapne nahrávanie (signalizované farebnou LED) | |||
# od tohoto okamihu sa po každom kliknutí tlačidlom joysticku uloží aktuálna poloha všetkých 4 motorov do zoznamu zaznamenaných polôh | |||
# poloha sa zaznamenáva ako uhol serva - okrem zaḱladne, pre ktorú sa zaznamenávajú jednotlivé časy potrebné na otočenie aj bez kliknutí vždy po zmene rýchlosti otáčania ramena (alebo zastavení) | |||
# po opätovnom stlačení druhého dotykového senzora sa nahrávanie ukončí (záznam ostáva v pamäti) a robota je zasa možné riadiť bez ukladania jeho polôh | |||
# po kliknutí na tlačidlo joysticku sa zapamätaný záznam v pomalej rýchlosti (ale plynule, bez prestávok) prehrá - jednotlivé konfigurácie ramena sa postupne dosahujú pomocou plynulých pohybov motorov | |||
# po dokončení prehrávania záznamu je ho možné prehrať znovu, riadiť servo pomocou joysticku, alebo program pokračuje 2. krokom pre nový záznam pohybu | |||
Ukážka možného riešenia: | |||
<youtube>wYFqGFVK4oI</youtube> | |||
Námety: | |||
* pridajte možnosť "exportu" a "importu" zadanej postupnosti pohybov, export vypíše na výstup sériového portu v takom istom formáte ako ho import dokáže načítať - takýmto spôsobom si môžeme skopírovať z konzoly vyexportované postupnosti, uložiť si ich do textového súboru na počítači a neskôr ich odtiaľ vložiť do konzoly po zvolení funkcie import a znovu vykonať | |||
* umožnite nastaviť rýchlosť pohybov pri opakovaní naučenej postupnosti | |||
* vymeňte continuous servo za obyčajné servo - rameno bude mať síce menší pracovný priestor, ale otáčanie základne bude riadené presne | |||
==== 2.3.4. Malá ukážka "pick and place" manipulácie ==== | |||
Táto úloha je priestor pre Vašu tvorivosť. Výsledkom by malo byť malé demo, v ktorom rameno autonómne vykoná niekoľko krokov, pričom bude manipulovať/prenášať nejaké predmety, nielen sa pohybovať na rôzne miesto v pracovnom priestore. | |||
Inšpirovať sa môžete aj týmto videom: | |||
<youtube>iXiUMrsuUgM</youtube> | |||
Námety: | |||
* bezpečnostné tlačidlo - počas vykonávania pohybu dotyk senzora spôsobí okamžité zastavenie | |||
* opakovateľnosť - postupnosť skončí na rovnakom mieste ako začína, takže sa dá spustiť niekoľkokrát za sebou bez zmeny polohy ramena medzi opakovanými štartami | |||
* možnosť riadiť rameno pred spustením dema/po jeho zastavení joystickom ako v predchádzajúcich úlohách, demo sa môže štartovať napr. kliknutím joystickom | |||
==== 2.3.5. Riadený manipulátor ==== | |||
V tejto úlohe bude rameno robiť "užitočnú" prácu podľa aktuálnych požiadaviek operátora. V jeho pracovnom priestore zadefinujeme niekoľko pozícií, označíme ich napr. A, B, C, D a naprogramujeme presuny ramena medzi týmito pozíciami. Pokyny budeme postupne zadávať cez sériovú linku jeden za druhým a rameno ich bude vykonávať, napr. prelož predmet z miesta A na miesto C. | |||
Inšpirácia vo videu: | |||
<youtube>hO71R9L-JSc</youtube> | |||
Námety: | |||
* niektoré miesta môžu byť nielen priamo dole na stole, ale vyššie, pričom na tom mieste bude košík/krabička, nad ktorou rameno predmet uvoľní, aby spadol do košíka | |||
* pridajte možnosť "resetnúť"/"inicializovať" polohu základne na dohodnutom mieste | |||
* umožnite nastaviť rôzne veľkosti prenášaného predmetu pomocou nejakého príkazu zadaného pred samotnou požiadavkou na presun | |||
* umožnite nastaviť rôznu rýchlosť pohybov robota | |||
* umožnite operátorovi interaktívne zadať požiadavku na zopakovanie uchopenia predmetu, ak by sa náhodou nepodarilo na prvý raz | |||
==== 2.3.6. Manipulátor s postupnosťou krokov ==== | |||
Vylepšíme predchádzajúci program tak, aby namiesto jedného pokynu umožnil zadať postupnosť viacerých pokynov, ktoré potom naraz jeden po druhom vykoná - napr. prelož predmet z A na C, potom iný z D na A, potom ďalší z B na D, atď. | |||
Inšpirácia vo videu: | |||
<youtube>GOySTUEkf5U</youtube> | |||
Námety: | |||
* bezpečnostné tlačidlo na zastavenie postupnosti v ktoromkoľvek okamihu | |||
* korekcia pohybu základne - pomocou druhého tlačidla je kedykoľvek možné zastaviť vykonávanie pohybu a otočiť joystickom rameno, aby sme ho nastavili do požadovanej polohy pre nasledujúce cieľové miesto, ak rameno práve vykonáva nejaký pohyb, alebo do "nulovej" polohy, ak pohyb práve nevykonáva | |||
* umožnite nastaviť rôznu rýchlosť pohybov robota pre každý pohyb v postupnosti zvlášť | |||
* umožnite nastaviť rôzne veľkosti prenášaného predmetu pre každý prenášaný predmet zvlášť | |||
* umožnite používateľovi zadefinovať postupnosti pohybov ako makrá, ktoré sa potom dajú vyvolať jedným znakom prijatým cez sériovú linku, alebo dotykovým senzorom, či joystickom | |||
* upravte program tak, aby mal vedomosť o tom, ktoré miesta sú obsadené predmetmi a dovolí vykonať presun iba na prázdne miesto, v opačnom prípade sa vykonávanie sekvencie preruší | |||
* vytvorte plánovací program, do ktorého sa zadá počiatočná a cieľová konfigurácia, program potom naplánuje postupnosť krokov a aj ich vykoná, napr: ŠTART: A-zelený, B-modrý, C-červený, D-prázdne miesto, CIEĽ: A-modrý, B-červený, C-zelený, D-prázdne miesto. | |||
==== 2.3.7. Výpočet pozície koncového člena (dopredná kinematika) ==== | |||
V robotických aplikáciách nás často zaujíma momentálna poloha riadeného koncového člena v priestore - v našom prípade uzatvárateľnej ruky namontovanej na konci ramena. Program, ktorý riadi rameno v každom okamihu pozná uhly, podľa ktorých sú otočené jednotlivé stupne voľnosti - v tejto úlohe nás bude zaujímať iba poloha ruky v rovine ramena. Rovina ramena sa celá otáča pomocou základne, ale keďže ju máme riadenú pomocou continuous serva, určovanie tejto polohy by bolo priveľmi nepresné. Uvažujme rovinu ramena - súradnica ''x'' bude určovať ako ďaleko od okraja podstavca pred robotom sa ruka nachádza a súradnica ''y'' bude určovať v akej výške ruka je. Vstupom do výpočtu sú teda dva uhly ''alfa'', ''beta'', určujúce do akého uhla sú otočené servá umiestnené nad otočnou základňou a výstupom bude poloha ramena ''x'', ''y'' (môžeme uvažovať napr. referenčný bod na začiatku uchopovacieho priestoru ramena - čiže krajná poloha uchopovaného predmetu. Ak sa na rameno pozrieme z boku, vidíme, že má topológiu uzavretého 5-uhoľníka, pričom jedna strana je predĺžená a na jej konci je upevnené rameno. Pomocou stredoškolskej matematiky vieme odvodiť vzorčeky pre ''x'' a ''y'' na základne vstupného ''alfa'', ''beta'', keď poznáme dĺžky jednotlivých strán päťuholníka (pripomíname, že vzdialenosť susedných dier na dieloch stavebnice je 8 mm). | |||
[[Image:topologia_ramena.png]] | |||
Mohlo by to vyzerať napr. nejak takto (terminál zobrazuje informáciu vo formáte [''alfa'',''beta''] -> [''x'',''y'']. Robota riadime priamo joystickom a výpočet neustále prepočítava polohu ruky v rovine ramena. | |||
<youtube width="390" height="700">Qhxk5IRIhPw</youtube> | |||
Námety: | |||
* ak ste continuous servo v základni vymenili za klasické, bude priamočiare upraviť výpočet tak, aby určoval polohu v priestore [''x'',''y'',''z''] nielen v rovine | |||
* teoretický výpočet sa vždy bude trochu líšiť od skutočnej polohy ramena, pretože v každom voľnom kĺbe je vôľa (a teda chyba) približne rádu milimetrov - a tá sa cez mechanickú konštrukciu znásobuje a tiež preto, že motory sa neotáčajú dokonale presne a lineárne, zmerajte veľkosť tejto chyby v rôznych polohách ramena | |||
* pokúste sa vymyslieť nejaký spôsob kalibrácie/korekcie, ktorý zlepší výslednú presnosť | |||
==== 2.3.8. Navigácia na zadanú pozíciu (spätná/inverzná kinematika) ==== | |||
Ešte užitočnejší výpočet robí presný opak - pre zadanú cieľovú pozíciu ruky [''x'',''y''] nájde uhly ''alfa'', ''beta'', také, že ak servá nastavíme do uhlov ''alfa'' a ''beta'', tak sa ruka dostane na požadované súradnice [''x'',''y''] v rovine ramena. Vytvorte program, ktorý dovolí cez sériový port zadať ľubovoľné dostupné súradnice [''x'',''y''], vypočíta uhly ''alfa'', ''beta'' a ruku presunie na požadovanú pozíciu, alebo oznámi, že sa to nedá, ak je poloha mimo mechanicky dostupný rozsah. | |||
Mohlo by to vyzerať napríklad takto: | |||
<youtube width="390" height="700">QWAnyxz87IU</youtube> | |||
Námety: | |||
* urobte test - pre veľa generovaných pozícií alfa, beta najskôr pomocou doprednej kinematiky vypočítajte [x,y] a potom cez inverznú kinematiku vypočítajte alfa, beta - porovnajte, či ste dostali rovnaké hodnoty a ak nie, aká veľká bola chyba | |||
* ak ste continuous servo v základni vymenili za klasické, umožnite zadať priestorové súradnice [x,y,z], na ktoré sa ruka presunie | |||
* doplňte inverznú kinematiku do programu riadeného manipulátora - cieľová poloha sa bude dať zadať nielen ako A,B,C,D ale priamo súradnicami | |||
=== 2.4. Micromouse === | |||
==== 2.3.1. Zostrojte robot Myš ==== | |||
Poskladajte robotickú myš podľa [[Basic robot - Micro-mouse|návodu na jeho samostatnej stránke]] a vyskúšajte aj základný program, ktorý je k návodu priložený. | |||
Základný program otestuje servá na pohyb a potom neustále zobrazuje hodnoty zo senzorov. V okamihu, keď sa na sériovej konzole zobrazí text kalibrácia je potrebné pootáčať ho do rôznych smerov, aby sa správne nakalibroval IMU senzor. | |||
==== 2.4.2. Farebná hra s IMU ==== | |||
Začneme programom, ktorý otestuje interciálny senzor (IMU). Robot bude zobrazovať farbu a vydávať zvuk - napríklad na PIN 14 pripojíme sirénku (buzzer). | |||
# po spustení programu a inicializácii sa pohybmi do 8 nakalibruje IMU senzor | |||
# program postupne vygeneruje 20 náhodných čísel, ktoré reprezentujú 6 rôznych farieb a zvukov a nim zodpovedajúcich 6 rôznych pohybov | |||
# po zobrazení farby na zabudovanej RGB LED a vydaní priradeného zvuku (každá farba má nejaký priradený tón) sa čaká, kým používateľ neotočí robota do požadovanej polohy (podľa príslušnej osi aspoň o 70 stupňov, pričom podľa ostatných osí nie je vychýlený viac ako 10 stupňov | |||
# nakoniec sa zobrazí celkový čas, ktorý používateľ potreboval na nájdenie všetkých 20 polôh a po chvíli program pokračuje znovu krokom 2 | |||
Inšpirácia pre Vaše riešenie (na videu je farba RGB LED pre niektoré odtiene trochu zle viditeľná): | |||
<youtube>ymOgkeYMo4w</youtube> | |||
Námety: | |||
* upravte hru tak, aby mala viacero úrovní - farby postupne pribúdajú v každej ďalšej úrovni | |||
* za otočenie robota nesprávnym smerom získa hráč trestné sekundy | |||
* kombinácie farieb: robot najskôr zobrazí tri rôzne farby, hráč si ich musí zapamätať a potom robota postupne pootáčať | |||
==== 2.4.3. Sledovanie objektu pomocou IR senzorov ==== | |||
Cieľom tohto cvičenia je vyskúšať si spracovanie hodnôt z laserových senzov na meranie vzdialenosti. | |||
# po inicializácii a kalibrácii IMU sa robot rozbehne na chvíľu vpred | |||
# pokiaľ sa pred robotom nachádza nejaký objekt, bude sa pohybovať naďalej vpred | |||
# keď predmet zmizne, po niekoľkých sekundách robot zastaví | |||
# ak sa predmet vyskytne napravo alebo naľavo robota - zachytí ho niektorý bočný IR senzor, robot sa otočí tým smerom (ideálne využitím IMU) a pokračuje krokom 2 | |||
Inšpirácia pre riešenie: | |||
<youtube>WKRXE7CttdU</youtube> | |||
Námety: | |||
* keď robot príde blízko predmetu, zastane | |||
* robot bude regulovať rýchlosť podľa toho ako ďaleko sa pred ním predmet nachádza | |||
* ak sa dlhšie žiaden predmet nevyskytne, robot hľadá predmet otáčaním sa na mieste | |||
==== 2.4.4. Rovný pohyb pomocou IMU ==== | |||
V tomto cvičení vytvoríme užitočnú procedúru, ktorá umožní korigovať stratu smeru pri bežnom pohybe pomocou servomotorov. Program bude neustále sledovať natočenie robota pomocou IMU a ak sa odchýli od pôvodne určeného smeru, tak pohyb skoriguje. | |||
# po inicializácii a kalibrácii IMU robot čaká, kým pred sebou neuvidí nejaký predmet, ktorý má sledovať | |||
# zapamätá si aktuálny smer pred začiatkom pohybu a rozbehne sa vpred | |||
# neustále monitoruje svoje natočenie a ak sa jeho smer pohybu vychýli na jednu alebo druhú stranu, upraví rýchlosti servomotorov (ak si trúfate, môžete naladiť PD alebo PID regulátor, ale najjednoduchšie riešenie je reagovať na rôzne veľké vychýlenie vopred upravením rýchlostí o pevne určené konštanty). | |||
''Upozornenie: IMU typu BNO055, ktorý máme v stavebnici bežne využíva 9 stupňov voľnosti (trojosový akcelerometer, trojosový gyroskop a trojosový magnetometer) a teda bude citlivý na prítomnosť železných, alebo iných magneticky aktívnych predmetov vo svojom okolí. V interiéri v železobetónovej budove môže byť magnetické pole Zeme, na ktoré sa čiastočne spolieha nerovnomerné a preto pohyby nemusia byť také, ako by sme vždy očakávali. Našťastie, má aj režim, keď využíva iba 6 stupňov voľnosti - a vtedy nepotrebuje ani úvodnú kalibráciu - do inicializačnej funkcie begin() treba poslať argument OPERATION_MODE_IMUPLUS. Druhá možnosť by bolo nahradiť interne počítanú orientáciu výpočtom pomocou vlastnej/knižničnej funkcie. Ukazuje sa, že 6DOF funguje lepšie ako 9DOF, aj keď v našich riešeniach na videách nižšie sme všade využili režim 9DOF.'' | |||
Inšpirácia vo videu (s 9DOF): | |||
<youtube>p01wAUntr6Y</youtube> | |||
Námety: | |||
* overte ako funguje korekcia pri rôznych rýchlostiach pohybu - je potrebné upraviť korekčné konštanty? | |||
* vyskúšajte nahradiť zabudovaný výpočet z 9 stupňov voľnosti prepnutím režimu na 6DOF, prípadne softvérovým výpočtom pomocou Mahony filtra, ktorý je implementovaný napríklad v knižnici Adafruit AHRS, s funkciou <code>updateIMU(gx, gy, gz, ax, ay, az, dt);</code> uistite sa, že odovzdávate hodnoty v správnych jednotkách. | |||
==== 2.4.5. Štvorec pomocou IMU ==== | |||
V tomto programe využijeme procedúru z predchádzajúceho cvičenia, aby sme naprogramovali pohyb do štvorca: | |||
# najskôr prebehne inicializácia a kalibrácia IMU | |||
# robot sa nejaký pevne stanovený čas pohybuje vpred a koriguje svoj smer, aby išiel čo najpresnejšie rovno | |||
# zastane a otočí sa o 90 stupňov | |||
# pokračuje krokom 2 | |||
Príklad riešenia (9DOF): | |||
<youtube>N6arWySMh_U</youtube> | |||
Námety: | |||
* po spustení robota pred jeho IR senzorom niekoľkokrát zamávame, čím určíme počet vrcholov pravidelného mnohouholníka (trojuholník, štvorec, päťuholník...), ktorého tvar potom bude kopírovať | |||
* dĺžku strany štvorca určíme rukou pred dopredu smerujúcim IR senzorom - robot sa bude pohybovať dovtedy, kým pred sebou vidí predmet - ostatné strany budú mať rovnakú veľkosť | |||
==== 2.4.6. Skry sa do rohu ==== | |||
V tejto úlohe využijeme relatívnu zmenu hodnôt IR senzorov, aby sa robot mohol nasmerovať ku stene a dostať do rohu. | |||
# po inicializácii a kalibrácii: | |||
# robot sa začne pomaly otáčať na mieste vpravo | |||
# ak sa vzdialenosť k prekážke smerom vpred zväčšuje, zmení smer otáčania na doľava | |||
# kým sa vzdialenosť k prekážke smerom vpred zmenšuje, pokračuje v otáčaní, potom zastane | |||
# rozbehne sa vpred - pričom koriguje svoj smer pomocou IMU, až kým nepríde ku stene | |||
# tam sa otočí o 90 stupňov vpravo | |||
# pohybuje sa vpred (a koriguje smer pomocou IMU), až kým sa nedostane ku stene (čiže do rohu) | |||
Inšpirácia vo videu (9DOF): | |||
<youtube>snkYLDLg3Ow</youtube> | |||
Námety: | |||
* robot sa pokúsi nájsť roh priamo - pri otáčaní sa vzdialenosť bude zväčšovať, až kým nesmeruje priamo do rohu, kam sa vydá priamou cestou (šikmo) | |||
* v menšej obdĺžnikovej miestnosti (väčšej krabici) sa otočí o 360 stupňov, nájde najbližší zo 4 rohov a presunie sa do neho | |||
==== 2.4.7. Mapovanie steny chodby pomocou IR senzorov ==== | |||
V tejto úlohe bude robot počas pohybu vpred postupne zaznamenávať vzdialenosť k prekážke na jednom z bočných senzorov. Keď robot vpredu zaznamená predmet, zastane a na sériovej konzole zobrazí namerané údaje vo forme ASCII pseudografiky. Môžete využiť napríklad dátovú štruktúru pole. Uistite sa, že program nebude zapisovať mimo rozsah poľa. Počas pohybu vpred a merania bude robot zároveň korigovať smer pohybu pomocou IMU. | |||
Inšpiratívne riešenie: | |||
<youtube>H-yv8C5rjpo</youtube> | |||
Námety: | |||
* robot zmapuje a zobrazí obe strany chodby | |||
* robot je vnútri obdĺžnikovej miestnosti, v ktorej sú rozmiestnené (aj pri stenách aj v strede) rôzne predmety, prejde popri všsetkých 4 stenách a potom zobrazí mapu celej miestnosti | |||
* robot po zmapovaní chodby a jej zobrazení (s číslami riadkov) umožní zadať číslo riadku - ktorým sa určí miesto do ktorého sa má presunúť, ale pri presune nebude používať čas, ale mapu (pomocou sledovania hodnôt senzora a mapy sa bude snažiť neustále v tejto 1-rozmernej mape "lokalizovať") | |||
==== 2.4.8. Bludisko pomocou IR senzorov použitím pravidla pravej ruky ==== | |||
Podobne ako v prípade robota s čiarovými senzormi sa bude robot pohybovať v bludisku pravidlom pravej ruky. Tento raz bludisko nebude vyznačené čiernou čiarou na podlahe ale bude to skutočné bludisko so stenami. Budeme predpokladať, že všetky steny sú pravouhlé a chodbičky v ňom majú vhodnú šírku, aby sa tam robot vošiel. Pomocou IR senzorov robot nájde odbočky, slepé uličky a križovatky. | |||
V našom riešení s 9DOF senzorom si robot na začiatku zapamätá absolútnu orientáciu a namiesto relatívnych 90-stupňových otočiek sa vždy otáča vzhľadom na túto absolútnu orientáciu. V uličke sa ale snaží vycentrovať a ak sa dostáva k niektorej stene, bočí od nej, aby nenabúral. | |||
<youtube>mccPeqTYFZc</youtube> | |||
Námety: | |||
* vyskúšajte 6DOF orientáciu - či relatívne otočenia budú aj po viacerých zákrutách stále konzistentné - ak nie, skúste nájsť rovnováhu medzi dvoma informáciami - relatívnymi otočeniami pomocou 6DOF a globálneho nasmerovania pomocou kompasu. | |||
* robot počas prechodu cez bludisko vytvára v pamäti mapu, ktorú nakoniec uloží do EEPROM (emulovanej v programovej pamäti Flash, ale pomocou knižnice EEPROM), po spustení programu na vyžiadanie cez sériovú linku mapu zobrazí v konzole | |||
* upravte program tak, že ak robot nezačne pri vchode do bludiska, ale v jeho strede a zacyklí sa (vráti sa na z inej strany na miesto, kde už bol), dostane sa z bludiska von. | |||
__notoc__ | __notoc__ | ||
Aktuálna revízia z 15:27, 6. september 2026
Vitajte v tutoriále! Nájdete tu množstvo cvičení a úloh, ktoré môžete so stavebnicou vyriešiť, aby ste sa dôkladne zoznámili s obsahom stavebnice, s princípmi stavania, riadenia a programovania jednoduchých robotov. Veľa zábavy!
1. Elektronické súčiastky
2. Jednoduché roboty
2.1. Prieskumník
2.1.1. Zostrojte robot Prieskumník
podľa návodu na jeho samostatnej stránke a vyskúšajte aj základný program, ktorý je k návodu priložený.
2.1.2. Prieskumník
Naprogramujte pre Prieskumníka prieskumnícky program:
- robot sa rozbehne vpred
- pokračuje, až kým nepríde k prekážke
- pred prekážkou zastane
- mierne cúvne, aby mal dostatok miesta na otočenie
- otočí sa do iného smeru, a znovu sa rozbehne vpred, takže pokračuje krokom 1.
Môže to vyzerať napríklad takto:
Námety na vylepšenie:
- robot sa pred prekážkou bude otáčať do náhodnej strany vľavo/vpravo
- robot sa bude otáčať o náhodný uhol
- robot pred prekážkou najskôr zapípa sirénkou a chvíľu počká, ak prekážka zmizne, pokračuje ďalej rovno, ak nie, tak sa otáča do iného smeru
2.1.3. Robotický pes
Pre Prieskumníka vytvorte takýto program:
- pred robotom sa dopredu-dozadu náhodne pohybuje jeho pán - to môže byť hocijaký predmet, ktorý dobre odráža ultrazvuk a pohybujeme ho priamo rukou
- pes si udržuje vhodnú vzdialenosť:
- ak je pán príliš ďaleko (napr. ďalej ako 40 cm), pes ide rovno za ním (aby mu nebolo smutno)
- ak je pán príliš blízko (napr. bližšie ako 20 cm), pes cúva priamo vzad (aby ho pán nezašliapol)
- ak je pán v ideálnej vzdialenosti (napr. medzi 20 a 40 cm), pes sa nehýbe a čaká na ďalší pánov pohyb
Môžete začať tým, že vyriešite iba pohyb vpred/vzad (agilný pes) a zastavenie na mieste pridáte až neskôr (pes flegmatik).
Námety na vylepšenie:
- pes po zastavení vždy "zašteká" (zapípa sirénkou)
- pes sa bude rozbiehať a zastavovať postupne, nie prudko naraz
- keď sa pán dlhšie (napr. 20 sekúnd) nepohne, pes urobí malý náhodný pohyb vpred alebo vzad
2.1.4. Zameriavač
Cieľom je sledovanie predmetu ultrazvukovým senzorom.
- Senzor sa otáča od jednej krajnej polohy do druhej a naspäť, až kým nezachytí pred sebou nejaký predmet vo vzdialenosti menšej ako napr. 30 cm
- po zachytení predmetu sa neustále otáča vľavo vpravo v takom rozsahu, kým je predmet pred ním viditeľný
- to znamená, ak postupne pomaly predmet pred robotom presúvame na rôzne miesta, senzor sa bude otáčať vždy tak, aby predmet sledoval pred sebou
Mohlo by to vyzerať napríklad nejak takto:
Námety:
- takéto úlohy je šikovné riešiť pomocou stavového automatu: robot sa celý čas nachádza v nejakom stave a podľa situácie mení svoj stav, napr: HĽADÁ_PREDMET_VĽAVO, HĽADÁ_PREDMET_VPRAVO, ZACHYTIL_PREDMET_VPRAVO, ZACHYTIL_PREDMET_VĽAVO.
- skombinujte otáčanie senzora aj s otáčaním robota, aby predmet hľadal nielen v rozsahu otáčania serva pred sebou, ale aj za sebou
2.1.5. Hľadač
Vytvoríme program, aby robot zameral predmet pred sebou, pohol sa k nemu o kúsok bližšie a tento proces opakoval, až kým sa robot nedostane do jeho blízkosti.
- keď robot predmet nevidí, otáča senzorom postupne vľavo-vpravo v plnom rozsahu, až kým predmet neobjaví
- ak predmet zbadá - zistí medzi akými rôznymi uhlami je predmet senzorom viditeľnými (rozsah A-B)
- z nameraných pozícií A, B vypočíta, kde má predmet približne stred
- otočí sa smerom k predmetu
- o kúsok sa posunie vpred a pokračuje od kroku 2
- ak predmet prestane vidieť, pokračuje od kroku 1
Napríklad takto:
Námety:
- keď robot predmet nájde, oznámi to zvukovým alebo vizuálnym signálom a zastane
- robot nebude zastavovať, bude sa pohybovať plynule, ale pomaly a upravovať svoj smer podľa toho, kde predmet zachytí
2.1.6. Obchádzač
Robot sa nachádza v blízkosti krabice s obdĺžnikovým pôdorysom, rovnobežne s jej jednou hranou. Senzorom sa díva celkom do strany, aby počas pohybu krabicu dobre videl. Cieľom je, aby krabicu zo všetkých 4 strán obišiel:
- robot sa pohybuje vpred, až dokiaľ krabicu vedľa seba nezachytí
- pokračuje vpred rovnobežne so stranou krabice povedľa nej
- keď senzorom zachytí koniec krabice, otočí sa smerom k ďalšej strane krabice
- kroky 1-3 zopakuje pre všetky štyri strany krabice
Námety:
- program určí veľkosť krabice - malá, stredná, veľká a farebným signálom na konci oznámil, akú krabicu obchádzal
- robot štartuje na začiatku vedľa krabice, ale krabica sa môže nachádzať aj na ľavej aj na pravej strane - pomocou senzora najskôr zistí, kde je krabica a potom ju obíde buď zľava alebo sprava
2.1.7. Parkovač
Robot zaparkuje na voľné miesto, ak je dostatočne veľké.
- robot sa rozbehne vpred a senzorom sleduje situáciu na pravej strane cesty
- keď objaví voľné miesto, najskôr zistí aké je dlhé
- ak je miesto dostatočne veľké, aby mohol zaparkovať, zaparkuje do neho v režime pozdĺžneho parkovania
- ak miesto nie je dostatočne veľké, pokračuje krokom 1
Námety:
- ak je voľné miesto dostatočne dlhé, nehľadá jeho koniec, ale rovno tam zaparkuje
- robot striedavo sleduje situáciu vpravo a pred sebou (periodicky otáča senzor), aby čelne nenarazil do prekážky pred sebou, ale zároveň monitoroval situáciu s voľnými miestami vpravo
2.1.8. Riadené vozidlo
Naprogramujeme riadenie vozidla pomocou gesta pred ultrazvukovým senzorom.
- robot sa pohybuje vpred až kým senzor vpredu nezachytí prekážku (ktorou mu signalizujeme, že požadujeme zmenu smeru)
- robot zastane, pozrie sa senzorom vpravo aj vľavo - či tam je signálna prekážka
- ak na niektorej strane signálnu prekážku zachytil, otočí sa zodpovedajúcim smerom a pokračuje krokom 1
Námety:
- ak sa po preskúmaní situácie vpravo a vľavo pred robotom stále nachádza signálna prekážka, robot sa otočí vzad
- robot si od štartu postupne zapamätáva akou cestou išiel (čas a smery otočenia) a keď mu dáme signál (prekážka vľavo aj vpravo), zastane, môžeme ho preložiť na štart a prekážkou znovu odštartovať, robot zopakuje rovnakú zapamätanú cestu
2.2. Line-Follower
2.1.1. Zostrojte robot Line-Follower
podľa návodu na jeho samostatnej stránke a vyskúšajte aj základný program, ktorý je k návodu priložený.
2.2.2. Zastav na čiare
Robot sa rozbehne vpred, neustále sníma podlahu a keď sa dostane na čiernu čiaru, zastane.
Námety:
- robot na čiare zastaví na chvíľu, potom sa znovu rozbehne a pokračuje na ďalšiu čiaru, kde zasa zastaví, atď.
- robot sa po zastavení na čiare vráti naspäť približne na rovnaké miesto
2.2.3. Jazda medzi dvomi čiarami
Robot sa bude do nekonečna pohybovať medzi dvomi čiarami.
- robot sa rozbehne vpred
- v okamihu, keď sa dostane na čiaru, zastane
- chvíľu počká, potom začne cúvať priamo vzad
- cúva dovtedy, kým sa senzor nedostane nad druhú čiaru, kde tiež zastane
- po malej chvíli pokračuje krokom 1.
Námety:
- robot sa bude pohybovať medzi tromi (štyrmi, ...) čiarami, pričom na stredných čiarach ani nezastaví, bude zastavovať až na krajných čiarach, kde vždy zmení smer pohybu
- robot sa bude medzi čiarami pohybovať náhodnou rýchlosťou
2.2.4. Uzatvorený útvar
Robot sa bude pohybovať vnútri čiernou čiarou obkoleseného územia.
- robot sa rozbehne vpred
- keď senzorom zaznamená okraj tohoto územia, zastane, zacúva a otočí sa do iného smeru
- pokračuje krokom 1
Námety:
- robot sa bude otáčať do náhodnej strany
- robot sa bude otáčať o náhodne veľký uhol
- niekde vnútri ohraničeného územia sa nachádza väčšia čierna plocha - ktorá predstavuje cieľ jeho hľadania, robot po nájdení svojho cieľa zastane o stane stáť.
2.2.5. Sledovanie čiary
Naprogramujeme jednoduché jazdenie po uzavretej čiare, ktorá sa môže kľukatiť vľavo i vpravo. Napríklad takto:
- robot sa pohybuje neustále vpred
- ak zachytí čiaru niektorým z dvoch krajných snímačov na jednej alebo druhej strane (čiže začne vybočovať z dráhy), pohybuje sa vpred spolu s otáčaním, ktoré ho dostáva naspäť do stredu čiary
- inak ide rovno
Námety:
- vyskúšajte naprogramovať jazdenie po čiare využitím iba jedného z 8 snímačov senzora
- niekde na čiare urobte štart (priečna hrubšia čiara, ktorú zachytia všetky senzory naraz) a naprogramujte, aby robot prešiel jedno kolečko a zmeral jeho čas
- priečne čiary môžete urobiť na viacerých miestach a robot na nich bude na malú chvíľu zastavovať (trať električky so zastávkami)
2.2.6. Flexibilnejšie sledovanie čiary
V prípade, že sú na dráhe menej prudké aj prudšie zákruty, predchádzajúci program buď vyletí na prudkých zákrutách, alebo bude na miernych zákrutách zbytočne veľa točiť. V tomto cvičení vytvoríme program, ktorý bude zatáčať rôzne prudko, podľa toho ako prudko zatáča zákruta. Napríklad:
- robot sa pohybuje neustále vpred
- ak zachytí čiaru niektorým krajným snímačom, ktorý nie je celkom na kraji, ale susedí s ním - začne sa mierne otáčať tak, aby sa dostal naspäť do stredu čiary
- v prudších zákrutách to nebude stačiť a čiaru postupne zachytí niektorý snímač, ktorý je celkom na okraji senzora, vtedy sa robot začne točiť prudšie
- ak žiaden zo štyroch krajných snímačov čiaru nezachytil, robot sa pohybuje priamo vpred
Námety:
- vyskúšajte, ako sa robot správa na ostrých (napr. kolmých pravouhlých zákrutách) a nalaďte program tak, aby ich tiež zvládol
- na dráhu zaraďte rozvetvenie, ktoré sa neskôr zasa spojí, naprogramujte, aby si robot spoľahlivo na striedačku vyberal raz ľavú a raz pravú vetvu a spoľahlivo po spojení vetiev pokračoval ďalej
- na niektorom mieste vytvorte prerušenie čiary - zabezpečte, aby robot cez miesto plynule prešiel a pokračoval na čiare ďalej, neskôr pridajte, aby pokračovanie čiary robot našiel aj vtedy, ak sa napríklad nadchádza v zákrute
2.2.7. Prechod bludiskom pravidlom pravej ruky
V tejto technicky náročnej úlohe naprogramujeme robota, aby sa dokázal pohybovať v bludisku - ktoré má jeden vchod, ktorý je zároveň jeho východom. V bludisku budú iba kolmé "chodby" vyznačené čiernou čiarou na podlahe. Základom sú tri funkcie: 1) rozpoznanie typu križovatky - tri rôzne križovatky v tvare T, dve v tvare L, križovatka zo 4 cestami a slepá ulička (spolu 7 rôznych typov križovatiek), 2) zatočenie na križovatke vpravo a 3) zatočenie na križovatke vľavo.
- ak je robot na rovnej ceste, pokračuje priamo vpred až po ďalšiu križovatku, pričom využíva senzory na to, aby z cesty nezišiel - mierne koriguje svoj smer podľa potreby
- na križovatke zistí akého je typu
- ak môže zabočiť vpravo, zabočí vpravo a pokračuje krokom 1
- inak, ak môže pokračovať rovno, pokračuje rovno a krokom 1
- inak, ak môže zabočiť vľavo, zabočí vľavo a pokračuje krokom 1
- inak - je v slepej uličke, otočí sa o 180 stupňov a pokračuje krokom 1
Námety:
- upravte program tak, aby si namiesto pravidla pravej ruky na križovatke vybral náhodné pokračovanie - ale iba smerom, ktorým nejaká cesta pokračuje
- pridajte detekciu cieľa - môže byť označený napríklad väčšou obdĺžnikovou plochou, keď sa na ňu konečne dostane, robot a program zastane
- keď sa robot dostane do cieľa, potom prejde bludisko ešte raz pravidlom ľavej ruky a zistí, ktorá cesta je kratšia a oznámi to (napr. farbou svojej RGB LED)
2.3. Rameno
2.3.1. Zostrojte robot Rameno
Poskladajte robotické rameno podľa návodu na jeho samostatnej stránke a vyskúšajte aj základný program, ktorý je k návodu priložený. Základný program zapína motory postupne po jednom, aby ste si prípadne mohli ešte opraviť ich otočenie voči modrej pripojenej súčiastke. Robot by pri 90-stupňových polohách motorov mal vyzerať ako na videu po zapnutí.
2.3.2. Riadenie ramena joystickom a dotykovými senzormi
Najskôr naprogramujte základné riadenie robota pomocou joysticku. Joystick má len dva stupne voľnosti, preto je vhodné nejakým spôsobom prepínať medzi zvolenou dvojicou kĺbov, ktoré pomocou neho práve riadime. My sme si zvolili prepínanie prvým dotykovým sennzorom a signalizáciu pommocou farebnej LED.
- Naklonenie joysticku do jednej alebo druhej strany začne otáčať motorom v príslušnom kĺbe do jednej alebo druhej strany;
- Vrátenie joysticku do neutrálnej polohy uvedie rameno do pokoja na tom mieste, kde sa práve nachádza;
- Dotyk (a následné pustenie) prvého dotykového senzora vymení dvojicu kĺbov, ktoré sa riadia joystickom.
Všimnite si, že hodnoty z joysticku sa menia pomerne rýchlo už pri jeho jemnom naklonení.
Mohlo by to vyzerať napríklad takto:
Námety:
- nájdite hraničné hodnoty pre jednotlivé servá, za ktorými ďalší pohyb nie je mechanicky možný
- zabezpečte podmienkami v programe, že sa servo za tieto hranice nedostane (ideálne by hranice mohli byť flexibilné vzhľadom na polohu v ktorej sa rameno nachádza)
- pri rôzne prudkom naklonení joysticku sa motory budú otáčať rôznou rýchlosťou a farebná LED bude signalizovať aj smer aj rýchlosť otáčania
2.3.3. Zaznamenávanie a zopakovanie postupnosti pohybov
Program z predchádzajúceho cvičenia vylepšíme tak, že počas riadenia ramena joystickom bude možné zapnúť a zastaviť nahrávanie jeho pohybov a neskôr túto zapamätanú postupnosť znovu autonómne zopakovať.
- program najskôr funguje rovnako ako program v predchádzajúcej úlohe
- po stlačení (a pustení) druhého dotykového senzora sa zapne nahrávanie (signalizované farebnou LED)
- od tohoto okamihu sa po každom kliknutí tlačidlom joysticku uloží aktuálna poloha všetkých 4 motorov do zoznamu zaznamenaných polôh
- poloha sa zaznamenáva ako uhol serva - okrem zaḱladne, pre ktorú sa zaznamenávajú jednotlivé časy potrebné na otočenie aj bez kliknutí vždy po zmene rýchlosti otáčania ramena (alebo zastavení)
- po opätovnom stlačení druhého dotykového senzora sa nahrávanie ukončí (záznam ostáva v pamäti) a robota je zasa možné riadiť bez ukladania jeho polôh
- po kliknutí na tlačidlo joysticku sa zapamätaný záznam v pomalej rýchlosti (ale plynule, bez prestávok) prehrá - jednotlivé konfigurácie ramena sa postupne dosahujú pomocou plynulých pohybov motorov
- po dokončení prehrávania záznamu je ho možné prehrať znovu, riadiť servo pomocou joysticku, alebo program pokračuje 2. krokom pre nový záznam pohybu
Ukážka možného riešenia:
Námety:
- pridajte možnosť "exportu" a "importu" zadanej postupnosti pohybov, export vypíše na výstup sériového portu v takom istom formáte ako ho import dokáže načítať - takýmto spôsobom si môžeme skopírovať z konzoly vyexportované postupnosti, uložiť si ich do textového súboru na počítači a neskôr ich odtiaľ vložiť do konzoly po zvolení funkcie import a znovu vykonať
- umožnite nastaviť rýchlosť pohybov pri opakovaní naučenej postupnosti
- vymeňte continuous servo za obyčajné servo - rameno bude mať síce menší pracovný priestor, ale otáčanie základne bude riadené presne
2.3.4. Malá ukážka "pick and place" manipulácie
Táto úloha je priestor pre Vašu tvorivosť. Výsledkom by malo byť malé demo, v ktorom rameno autonómne vykoná niekoľko krokov, pričom bude manipulovať/prenášať nejaké predmety, nielen sa pohybovať na rôzne miesto v pracovnom priestore.
Inšpirovať sa môžete aj týmto videom:
Námety:
- bezpečnostné tlačidlo - počas vykonávania pohybu dotyk senzora spôsobí okamžité zastavenie
- opakovateľnosť - postupnosť skončí na rovnakom mieste ako začína, takže sa dá spustiť niekoľkokrát za sebou bez zmeny polohy ramena medzi opakovanými štartami
- možnosť riadiť rameno pred spustením dema/po jeho zastavení joystickom ako v predchádzajúcich úlohách, demo sa môže štartovať napr. kliknutím joystickom
2.3.5. Riadený manipulátor
V tejto úlohe bude rameno robiť "užitočnú" prácu podľa aktuálnych požiadaviek operátora. V jeho pracovnom priestore zadefinujeme niekoľko pozícií, označíme ich napr. A, B, C, D a naprogramujeme presuny ramena medzi týmito pozíciami. Pokyny budeme postupne zadávať cez sériovú linku jeden za druhým a rameno ich bude vykonávať, napr. prelož predmet z miesta A na miesto C.
Inšpirácia vo videu:
Námety:
- niektoré miesta môžu byť nielen priamo dole na stole, ale vyššie, pričom na tom mieste bude košík/krabička, nad ktorou rameno predmet uvoľní, aby spadol do košíka
- pridajte možnosť "resetnúť"/"inicializovať" polohu základne na dohodnutom mieste
- umožnite nastaviť rôzne veľkosti prenášaného predmetu pomocou nejakého príkazu zadaného pred samotnou požiadavkou na presun
- umožnite nastaviť rôznu rýchlosť pohybov robota
- umožnite operátorovi interaktívne zadať požiadavku na zopakovanie uchopenia predmetu, ak by sa náhodou nepodarilo na prvý raz
2.3.6. Manipulátor s postupnosťou krokov
Vylepšíme predchádzajúci program tak, aby namiesto jedného pokynu umožnil zadať postupnosť viacerých pokynov, ktoré potom naraz jeden po druhom vykoná - napr. prelož predmet z A na C, potom iný z D na A, potom ďalší z B na D, atď.
Inšpirácia vo videu:
Námety:
- bezpečnostné tlačidlo na zastavenie postupnosti v ktoromkoľvek okamihu
- korekcia pohybu základne - pomocou druhého tlačidla je kedykoľvek možné zastaviť vykonávanie pohybu a otočiť joystickom rameno, aby sme ho nastavili do požadovanej polohy pre nasledujúce cieľové miesto, ak rameno práve vykonáva nejaký pohyb, alebo do "nulovej" polohy, ak pohyb práve nevykonáva
- umožnite nastaviť rôznu rýchlosť pohybov robota pre každý pohyb v postupnosti zvlášť
- umožnite nastaviť rôzne veľkosti prenášaného predmetu pre každý prenášaný predmet zvlášť
- umožnite používateľovi zadefinovať postupnosti pohybov ako makrá, ktoré sa potom dajú vyvolať jedným znakom prijatým cez sériovú linku, alebo dotykovým senzorom, či joystickom
- upravte program tak, aby mal vedomosť o tom, ktoré miesta sú obsadené predmetmi a dovolí vykonať presun iba na prázdne miesto, v opačnom prípade sa vykonávanie sekvencie preruší
- vytvorte plánovací program, do ktorého sa zadá počiatočná a cieľová konfigurácia, program potom naplánuje postupnosť krokov a aj ich vykoná, napr: ŠTART: A-zelený, B-modrý, C-červený, D-prázdne miesto, CIEĽ: A-modrý, B-červený, C-zelený, D-prázdne miesto.
2.3.7. Výpočet pozície koncového člena (dopredná kinematika)
V robotických aplikáciách nás často zaujíma momentálna poloha riadeného koncového člena v priestore - v našom prípade uzatvárateľnej ruky namontovanej na konci ramena. Program, ktorý riadi rameno v každom okamihu pozná uhly, podľa ktorých sú otočené jednotlivé stupne voľnosti - v tejto úlohe nás bude zaujímať iba poloha ruky v rovine ramena. Rovina ramena sa celá otáča pomocou základne, ale keďže ju máme riadenú pomocou continuous serva, určovanie tejto polohy by bolo priveľmi nepresné. Uvažujme rovinu ramena - súradnica x bude určovať ako ďaleko od okraja podstavca pred robotom sa ruka nachádza a súradnica y bude určovať v akej výške ruka je. Vstupom do výpočtu sú teda dva uhly alfa, beta, určujúce do akého uhla sú otočené servá umiestnené nad otočnou základňou a výstupom bude poloha ramena x, y (môžeme uvažovať napr. referenčný bod na začiatku uchopovacieho priestoru ramena - čiže krajná poloha uchopovaného predmetu. Ak sa na rameno pozrieme z boku, vidíme, že má topológiu uzavretého 5-uhoľníka, pričom jedna strana je predĺžená a na jej konci je upevnené rameno. Pomocou stredoškolskej matematiky vieme odvodiť vzorčeky pre x a y na základne vstupného alfa, beta, keď poznáme dĺžky jednotlivých strán päťuholníka (pripomíname, že vzdialenosť susedných dier na dieloch stavebnice je 8 mm).
Mohlo by to vyzerať napr. nejak takto (terminál zobrazuje informáciu vo formáte [alfa,beta] -> [x,y]. Robota riadime priamo joystickom a výpočet neustále prepočítava polohu ruky v rovine ramena.
Námety:
- ak ste continuous servo v základni vymenili za klasické, bude priamočiare upraviť výpočet tak, aby určoval polohu v priestore [x,y,z] nielen v rovine
- teoretický výpočet sa vždy bude trochu líšiť od skutočnej polohy ramena, pretože v každom voľnom kĺbe je vôľa (a teda chyba) približne rádu milimetrov - a tá sa cez mechanickú konštrukciu znásobuje a tiež preto, že motory sa neotáčajú dokonale presne a lineárne, zmerajte veľkosť tejto chyby v rôznych polohách ramena
- pokúste sa vymyslieť nejaký spôsob kalibrácie/korekcie, ktorý zlepší výslednú presnosť
2.3.8. Navigácia na zadanú pozíciu (spätná/inverzná kinematika)
Ešte užitočnejší výpočet robí presný opak - pre zadanú cieľovú pozíciu ruky [x,y] nájde uhly alfa, beta, také, že ak servá nastavíme do uhlov alfa a beta, tak sa ruka dostane na požadované súradnice [x,y] v rovine ramena. Vytvorte program, ktorý dovolí cez sériový port zadať ľubovoľné dostupné súradnice [x,y], vypočíta uhly alfa, beta a ruku presunie na požadovanú pozíciu, alebo oznámi, že sa to nedá, ak je poloha mimo mechanicky dostupný rozsah.
Mohlo by to vyzerať napríklad takto:
Námety:
- urobte test - pre veľa generovaných pozícií alfa, beta najskôr pomocou doprednej kinematiky vypočítajte [x,y] a potom cez inverznú kinematiku vypočítajte alfa, beta - porovnajte, či ste dostali rovnaké hodnoty a ak nie, aká veľká bola chyba
- ak ste continuous servo v základni vymenili za klasické, umožnite zadať priestorové súradnice [x,y,z], na ktoré sa ruka presunie
- doplňte inverznú kinematiku do programu riadeného manipulátora - cieľová poloha sa bude dať zadať nielen ako A,B,C,D ale priamo súradnicami
2.4. Micromouse
2.3.1. Zostrojte robot Myš
Poskladajte robotickú myš podľa návodu na jeho samostatnej stránke a vyskúšajte aj základný program, ktorý je k návodu priložený. Základný program otestuje servá na pohyb a potom neustále zobrazuje hodnoty zo senzorov. V okamihu, keď sa na sériovej konzole zobrazí text kalibrácia je potrebné pootáčať ho do rôznych smerov, aby sa správne nakalibroval IMU senzor.
2.4.2. Farebná hra s IMU
Začneme programom, ktorý otestuje interciálny senzor (IMU). Robot bude zobrazovať farbu a vydávať zvuk - napríklad na PIN 14 pripojíme sirénku (buzzer).
- po spustení programu a inicializácii sa pohybmi do 8 nakalibruje IMU senzor
- program postupne vygeneruje 20 náhodných čísel, ktoré reprezentujú 6 rôznych farieb a zvukov a nim zodpovedajúcich 6 rôznych pohybov
- po zobrazení farby na zabudovanej RGB LED a vydaní priradeného zvuku (každá farba má nejaký priradený tón) sa čaká, kým používateľ neotočí robota do požadovanej polohy (podľa príslušnej osi aspoň o 70 stupňov, pričom podľa ostatných osí nie je vychýlený viac ako 10 stupňov
- nakoniec sa zobrazí celkový čas, ktorý používateľ potreboval na nájdenie všetkých 20 polôh a po chvíli program pokračuje znovu krokom 2
Inšpirácia pre Vaše riešenie (na videu je farba RGB LED pre niektoré odtiene trochu zle viditeľná):
Námety:
- upravte hru tak, aby mala viacero úrovní - farby postupne pribúdajú v každej ďalšej úrovni
- za otočenie robota nesprávnym smerom získa hráč trestné sekundy
- kombinácie farieb: robot najskôr zobrazí tri rôzne farby, hráč si ich musí zapamätať a potom robota postupne pootáčať
2.4.3. Sledovanie objektu pomocou IR senzorov
Cieľom tohto cvičenia je vyskúšať si spracovanie hodnôt z laserových senzov na meranie vzdialenosti.
- po inicializácii a kalibrácii IMU sa robot rozbehne na chvíľu vpred
- pokiaľ sa pred robotom nachádza nejaký objekt, bude sa pohybovať naďalej vpred
- keď predmet zmizne, po niekoľkých sekundách robot zastaví
- ak sa predmet vyskytne napravo alebo naľavo robota - zachytí ho niektorý bočný IR senzor, robot sa otočí tým smerom (ideálne využitím IMU) a pokračuje krokom 2
Inšpirácia pre riešenie:
Námety:
- keď robot príde blízko predmetu, zastane
- robot bude regulovať rýchlosť podľa toho ako ďaleko sa pred ním predmet nachádza
- ak sa dlhšie žiaden predmet nevyskytne, robot hľadá predmet otáčaním sa na mieste
2.4.4. Rovný pohyb pomocou IMU
V tomto cvičení vytvoríme užitočnú procedúru, ktorá umožní korigovať stratu smeru pri bežnom pohybe pomocou servomotorov. Program bude neustále sledovať natočenie robota pomocou IMU a ak sa odchýli od pôvodne určeného smeru, tak pohyb skoriguje.
- po inicializácii a kalibrácii IMU robot čaká, kým pred sebou neuvidí nejaký predmet, ktorý má sledovať
- zapamätá si aktuálny smer pred začiatkom pohybu a rozbehne sa vpred
- neustále monitoruje svoje natočenie a ak sa jeho smer pohybu vychýli na jednu alebo druhú stranu, upraví rýchlosti servomotorov (ak si trúfate, môžete naladiť PD alebo PID regulátor, ale najjednoduchšie riešenie je reagovať na rôzne veľké vychýlenie vopred upravením rýchlostí o pevne určené konštanty).
Upozornenie: IMU typu BNO055, ktorý máme v stavebnici bežne využíva 9 stupňov voľnosti (trojosový akcelerometer, trojosový gyroskop a trojosový magnetometer) a teda bude citlivý na prítomnosť železných, alebo iných magneticky aktívnych predmetov vo svojom okolí. V interiéri v železobetónovej budove môže byť magnetické pole Zeme, na ktoré sa čiastočne spolieha nerovnomerné a preto pohyby nemusia byť také, ako by sme vždy očakávali. Našťastie, má aj režim, keď využíva iba 6 stupňov voľnosti - a vtedy nepotrebuje ani úvodnú kalibráciu - do inicializačnej funkcie begin() treba poslať argument OPERATION_MODE_IMUPLUS. Druhá možnosť by bolo nahradiť interne počítanú orientáciu výpočtom pomocou vlastnej/knižničnej funkcie. Ukazuje sa, že 6DOF funguje lepšie ako 9DOF, aj keď v našich riešeniach na videách nižšie sme všade využili režim 9DOF.
Inšpirácia vo videu (s 9DOF):
Námety:
- overte ako funguje korekcia pri rôznych rýchlostiach pohybu - je potrebné upraviť korekčné konštanty?
- vyskúšajte nahradiť zabudovaný výpočet z 9 stupňov voľnosti prepnutím režimu na 6DOF, prípadne softvérovým výpočtom pomocou Mahony filtra, ktorý je implementovaný napríklad v knižnici Adafruit AHRS, s funkciou
updateIMU(gx, gy, gz, ax, ay, az, dt);uistite sa, že odovzdávate hodnoty v správnych jednotkách.
2.4.5. Štvorec pomocou IMU
V tomto programe využijeme procedúru z predchádzajúceho cvičenia, aby sme naprogramovali pohyb do štvorca:
- najskôr prebehne inicializácia a kalibrácia IMU
- robot sa nejaký pevne stanovený čas pohybuje vpred a koriguje svoj smer, aby išiel čo najpresnejšie rovno
- zastane a otočí sa o 90 stupňov
- pokračuje krokom 2
Príklad riešenia (9DOF):
Námety:
- po spustení robota pred jeho IR senzorom niekoľkokrát zamávame, čím určíme počet vrcholov pravidelného mnohouholníka (trojuholník, štvorec, päťuholník...), ktorého tvar potom bude kopírovať
- dĺžku strany štvorca určíme rukou pred dopredu smerujúcim IR senzorom - robot sa bude pohybovať dovtedy, kým pred sebou vidí predmet - ostatné strany budú mať rovnakú veľkosť
2.4.6. Skry sa do rohu
V tejto úlohe využijeme relatívnu zmenu hodnôt IR senzorov, aby sa robot mohol nasmerovať ku stene a dostať do rohu.
- po inicializácii a kalibrácii:
- robot sa začne pomaly otáčať na mieste vpravo
- ak sa vzdialenosť k prekážke smerom vpred zväčšuje, zmení smer otáčania na doľava
- kým sa vzdialenosť k prekážke smerom vpred zmenšuje, pokračuje v otáčaní, potom zastane
- rozbehne sa vpred - pričom koriguje svoj smer pomocou IMU, až kým nepríde ku stene
- tam sa otočí o 90 stupňov vpravo
- pohybuje sa vpred (a koriguje smer pomocou IMU), až kým sa nedostane ku stene (čiže do rohu)
Inšpirácia vo videu (9DOF):
Námety:
- robot sa pokúsi nájsť roh priamo - pri otáčaní sa vzdialenosť bude zväčšovať, až kým nesmeruje priamo do rohu, kam sa vydá priamou cestou (šikmo)
- v menšej obdĺžnikovej miestnosti (väčšej krabici) sa otočí o 360 stupňov, nájde najbližší zo 4 rohov a presunie sa do neho
2.4.7. Mapovanie steny chodby pomocou IR senzorov
V tejto úlohe bude robot počas pohybu vpred postupne zaznamenávať vzdialenosť k prekážke na jednom z bočných senzorov. Keď robot vpredu zaznamená predmet, zastane a na sériovej konzole zobrazí namerané údaje vo forme ASCII pseudografiky. Môžete využiť napríklad dátovú štruktúru pole. Uistite sa, že program nebude zapisovať mimo rozsah poľa. Počas pohybu vpred a merania bude robot zároveň korigovať smer pohybu pomocou IMU.
Inšpiratívne riešenie:
Námety:
- robot zmapuje a zobrazí obe strany chodby
- robot je vnútri obdĺžnikovej miestnosti, v ktorej sú rozmiestnené (aj pri stenách aj v strede) rôzne predmety, prejde popri všsetkých 4 stenách a potom zobrazí mapu celej miestnosti
- robot po zmapovaní chodby a jej zobrazení (s číslami riadkov) umožní zadať číslo riadku - ktorým sa určí miesto do ktorého sa má presunúť, ale pri presune nebude používať čas, ale mapu (pomocou sledovania hodnôt senzora a mapy sa bude snažiť neustále v tejto 1-rozmernej mape "lokalizovať")
2.4.8. Bludisko pomocou IR senzorov použitím pravidla pravej ruky
Podobne ako v prípade robota s čiarovými senzormi sa bude robot pohybovať v bludisku pravidlom pravej ruky. Tento raz bludisko nebude vyznačené čiernou čiarou na podlahe ale bude to skutočné bludisko so stenami. Budeme predpokladať, že všetky steny sú pravouhlé a chodbičky v ňom majú vhodnú šírku, aby sa tam robot vošiel. Pomocou IR senzorov robot nájde odbočky, slepé uličky a križovatky.
V našom riešení s 9DOF senzorom si robot na začiatku zapamätá absolútnu orientáciu a namiesto relatívnych 90-stupňových otočiek sa vždy otáča vzhľadom na túto absolútnu orientáciu. V uličke sa ale snaží vycentrovať a ak sa dostáva k niektorej stene, bočí od nej, aby nenabúral.
Námety:
- vyskúšajte 6DOF orientáciu - či relatívne otočenia budú aj po viacerých zákrutách stále konzistentné - ak nie, skúste nájsť rovnováhu medzi dvoma informáciami - relatívnymi otočeniami pomocou 6DOF a globálneho nasmerovania pomocou kompasu.
- robot počas prechodu cez bludisko vytvára v pamäti mapu, ktorú nakoniec uloží do EEPROM (emulovanej v programovej pamäti Flash, ale pomocou knižnice EEPROM), po spustení programu na vyžiadanie cez sériovú linku mapu zobrazí v konzole
- upravte program tak, že ak robot nezačne pri vchode do bludiska, ale v jeho strede a zacyklí sa (vráti sa na z inej strany na miesto, kde už bol), dostane sa z bludiska von.
