~~NOTOC~~ ====== Staň se na den expertem na umělou inteligenci ====== * Vítejte v [[https://comrob.fel.cvut.cz/|Laboratoři výpočetní robotiky]] [[https://www.aic.fel.cvut.cz/|Centra umělé inteligence]] [[https://cs.fel.cvut.cz|katedry počítačů]] na [[https://fel.cvut.cz/cs|Fakultě elektrotechnické ČVUT]]. * Na tomto pracovišti naprogramujeme autonomní pohyb kráčejícího robotu, který můžete vidět v přiložené animaci níže na obrázku. * Robot jde do definovaného místa a vyhýbá se překážkám. * Tuto webovou stránku naleznete na adrese [[https://cw.fel.cvut.cz/wiki/courses/crl-courses/aed23|cw.fel.cvut.cz/wiki/courses/crl-courses/aed23]]. /* (Aneb první dvě cvičení předmětu [[https://cw.fel.cvut.cz/b221/courses/uir|Umělá inteligence v robotice]] za 45 minut.) */ {{ :courses:crl-courses:aed23:t1b-react.gif?nolink&600 |}} ====== Úvodem ====== /*{{ :courses:crl-courses:aed23:hexapod-3dof-scaled.jpg?nolink&600 }}*/ {{ :courses:crl-courses:aed23:photo_bothrobots_u.jpg?nolink&600 |}} * Mechanika + elektronika + vnímání (senzory) + řízení + **umělá inteligence** = robotika. * Každá ze zmíněných disciplín je zajímavá sama o sobě, na FEL ČVUT se můžete naučit každé z nich. * Umělá inteligence má v robotice mnoho využití, například: * Plnit zadaný úkol, prioritizovat úkoly, detekovat nové úkoly. * Plánovat a vykonávat pohyb a akce tak, aby se zadaný úkol splnil. * Rozpoznávat, detekovat, mapovat, sbírat data. * Učit se, využívat nová data ke zlepšení svého chování. * Kooperovat a komunikovat s ostatními roboty nebo lidmi. * **Rozhodovat se** - autonomně, bez cizího zásahu. * Reagovat na situace, adaptovat se na změny v prostředí. * Na tomto stanovišti naučíme robot pohybovat se za svým cílem a zároveň reagovat na překážky a vyhýbat se jim. {{ :courses:crl-courses:aed23:hebi_nav.png?nolink&600 |}} ====== Robot a jeho popis ====== /* Nákres robotu, popis senzorů, aktuátorů, kinematiky ... ? */ * Robot je složen z * aktuátorů (motorů, servomotorů, jiných zásahových členů), * senzorů (akcelerace, polohy, obrazu, tlaku, odražených paprsků, ...), * výpočetní jednotky (Raspberry PI, Intel NUC, Arduino, ...), * zdroje energie (baterie, solární panely, externí zdroj, ...), * těla (LEGO, Merkur, 3D tištěné součástky, ...). * Existuje mnoho typů mobilních robotů: Kolové, létající, kráčející, pásové, které se líší principem pohybu. {{ :courses:crl-courses:aed23:cras-robots.jpg?nolink&800 }} * U všech mobilních robotů můžeme jejich **polohu** a **orientaci** popsat **souřadnicemi** vůči nějaké **vztažné soustavě**. * V našem případě vystačíme s určením polohy v rovině X a Y, orientace určená úhlem sevřeným vůči kladnému směru osy X. * Univerzální **rychlostní příkaz** (//velocity command//) může ovládat libovolný typ robotu, pokud pro něj existuje řídicí algoritmus, který jej dle tohoto příkazu správně rozpohybuje. * Náš šestinohý robot má každou nohu složenou ze tří aktuátorů, řídicí algoritmus tak generuje 18 hodnot, které se mění v čase. Samotné generování takových signálů je možné řešit různým způsobem, např., //centrálním generátorem vzorů chůze//, neboť robot vlastně vykonová každou nohou stejný pohyb. (Nohu zvedá a pohybuje jí dopředu za současného posunu těla vpřed.) Základní vzor chůze (//tripod gait//) si můžeme představit jako střídání dvou trojic nohou tak, že těžiště robotu je vždy v //podpůrném trojúhelníku//, definovaném nohami, o které se robot právě opírá. /* pohybu přední levé, zadní levé a prostředí pravé s pohybem přední pravé, zadní pravé a prostřední levé nohy. V takovém případě je těžiště robotu vždy v trojúhelníku definovaném nohami, o které se robot během pohybu opírá. */ /* * V našem případě budeme pohybovat modelem šestinohého kráčejícího robotu (hexapoda), který využívá biologicky inspirovaný kontrolér.*/ /* * Těleso v prostoru (3D) lze lokalizovat šesti souřadnicemi, např.: * X, Y, Z (poloha) * rotace okolo X, rotace okolo Y, rotace okolo Z (orientace). * Způsobů určení polohy je mnoho (Kartézská soustava, GPS, adresa), lze mezi nimi převádět. * Stejně tak orientaci lze určit různými způsoby: Eulerovské úhly, rotační matice, kvaterniony, osa-úhel, ... * Ve 2D nám stačí souřadnice X, Y (poloha) a úhel od osy X (orientace). */ ====== Simulace ====== * Na počítačích je připraven operační systém [[https://ubuntu.com/download/desktop|Ubuntu]] se všemi potřebnými programy. * Přihlašte se podle přiřazeného lístečku. * Budeme používat robotický simulátor [[https://www.coppeliarobotics.com/|CoppeliaSim]]. * (Simulátor si můžete stáhnout a používat doma.) * Otevřete terminál, např. klávesovou zkratkou ''Ctrl+Alt+T''. * Spusťte simulátor příkazem ''/opt/CoppeliaSim_Edu_V4_3_0_Ubuntu20_04/coppeliaSim.sh''. * Stáhněte si podklady pro simulaci: {{ :courses:crl-courses:aed23:aed23_resource_pack.zip |}}. * Podklady obsahují model scény, model šestinohého robotu a skripty, které robot ovládají. * Rozbalte stažený ''zip'' soubor. * V simulátoru načtěte scénu. (''Files'' -> ''Open scene...'' -> ''~/Downloads/aed23_resource_pack/scenes/aed23.ttt''.) * Robot je v simulaci ovládaný skriptem v [[https://www.python.org/|jazyce Python]]. * Otevřete druhý terminál (''Ctrl+Alt+T''). * Spusťte příkaz ''cd ~/Downloads/aed23_resource_pack; ./main.py''. * Robot by nyní měl kráčet na místě. ====== Navigace naslepo ====== * Chceme, aby robot postupně navštívil dva ++ cílové body|, které mohou být zadány různě, například vypočítané plánovačem jako místa, kde má robot provést měření nebo doručit, či vyzvednout, balíček. ++, zvýrazněné zelenou tečkou. * Robot zná svoji aktuální lokalizaci (bod ''R''), zná svůj cíl (bod ''W''), avšak **potřebuje spočítat rychlostní příkaz**. * Pomocí editoru otevřete skript, který definuje chování robotu. * ''/opt/VSCode-linux-x64/code ~/Downloads/aed23_resource_pack/hexapod_robot/HexapodController.py'' * Nejprve smažte ''return result_command'' na řádku 28. * Robot se musí otočit tak, aby šel rovně za cílem. Ve vyznačeném místě implementujte výpočet směru k cíli. desired_heading_radian = math.atan2(dy,dx) {{ :courses:crl-courses:aed23:clash.png?nolink&600 |}} /* //Gedit//: V novém terminálu spusťte ''gedit ~/aed23/hexapod_robot/HexapodController.py''.*/ ====== Reakce na překážky ====== * V souboru ''main.py'' změňte typ kontroléru na ''goto_reactive''. * Tento kontrolér využívá konceptu [[https://mitpress.mit.edu/books/vehicles|Braitenbergových vozidel]]. ^ ^ Vozidlo 2a ^ Vozidlo 2b ^ Vozidlo 3a ^ Vozidlo 3b ^ | | {{:courses:uir:labs:breitenberg_2a.jpg?nolink&100}} | {{:courses:uir:labs:breitenberg_2b.jpg?nolink&100}} | {{:courses:uir:labs:breitenberg_3a.jpg?nolink&100}} | {{:courses:uir:labs:breitenberg_3b.jpg?nolink&100}} | | **Spojení** | excitační | excitační | inhibiční | inhibiční | | **Chování** | strach | agrese | láska | průzkum | | **Vlastnosti** | Štítí se stimulu. | Útočí na stimul. | Zastaví čelem ke stimulu. | Zastaví čelem od stimulu. | * Dálkoměrný senzor (++LiDAR| si můžeme představit jako vějíř dálkoměrných měření pro jednolivé úhly.++) je pro nás stimulem. Čím blíže jsme k překážce, tím více nás odpuzuje. * Zkuste měnit různé parametry, experimentujte s různými repulsními funkcemi. {{ :courses:crl-courses:aed23:react.png?nolink&600 |}} ====== Děkujeme za pozornost ====== ... a těšíme se na shledanou!