~~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!