===== Praktická robotika - cvičení (zima 2024/25) ===== ==== Organizace cvičení ==== * Na začátku semestru budou studenti rozděleni do dvoučlenných skupin. * Každá skupina bude implementovat aplikaci realizující úlohu explorace neznámého prostředí (viz [[zadani|zadání]]). * Jednotlivé podsystémy realizovaného klienta (v rámci samostatných úloh) budou studenti zkoušet nejprve na simulátoru [[http://gazebosim.org/|Gazebo]] a poté na reálných robotech TurtleBot. Zápočet bude udělen na základě následujících kritérií: * chování robotu při závěrečném předvedení cvičícím, * ústní prezentace funkčního algoritmu klienta cvičícímu, * znalost předloženého kódu klienta * K získání zápočtu je nutná pravidelná účast studenta na cvičení (povoleny jsou dvě absence). * Hodnocení ze cvičení je **jedinou** součástí celkového hodnocení studenta (známky z předmětu). {{:courses:a0m33par:lab.jpg?600| Lab}} {{ :courses:a0m33par:ex1.zip |}} ==== Úloha 1 - Obstacle avoidance ==== * Cílem cvičení je seznámit se se základní robotickou smyčkou, vyčitání senzorů a řízení robotu na úloze vyhýbání se překážkám (obstacle avoidance). * {{ :courses:a0m33par:ex1.zip | Šablona kódu}} * {{ :courses:a0m33par:modely_gazebo.zip | Modely gazebo}} - extrahujte do složky ~/.gazebo/ ve vašem domovském adresáři. Pokud neexistuje tak ji vytvořte, nebo se vytvoří sama po prvním spuštění gazebo. * {{ :courses:a0m33par:ex1.pdf | Postup řešení}} * Pro použití s reálným robotem: zaměňte v kódu při inicializaci robotu příkaz "robot.enableRequestResponseServices();" za příkaz "robot.setAsyncMode();" {{:courses:a0m33par:switch.png}} a v terminálu exportujte proměnnou "IGN_PARTITION=bridge" {{:courses:a0m33par:export.png}} * [[https://www.youtube.com/embed/dJT0tmQoFsY?rel=0&autoplay=1 | Video: motivační ukázka řešení v systému Syrotek]] ==== Úloha 2 - Plánování na binární mřížce ==== * Plánování cesty je jednou ze základních úloh, které musí řešit autonomní mobilní robot při realizaci téměř libovolné úlohy. Cílem cvičení je naimplementovat Dijkstrův algoritmus pro plánování na binární mřížce. * {{ :courses:a0m33par:ex2.zip | Šablona kódu}} * {{ :courses:a0m33par:ex2.pdf | Postup řešení }} * {{ :courses:a0m33par:planning.pdf | O plánování na mřížce}} * Videa {{ :courses:a0m33par:Dijkstra_alg_example.mp4 | Video - Dijkstra na grafu}} {{ :courses:a0m33par:Dijkstra_alg_grid.mp4 | Video - Dijkstra na mřížce}} {{ :courses:a0m33par:Dijkstra_exploration.mp4 | Video - prohledávání Dijkstrovým algoritmem}} ==== Úloha 3 - Prohledávání neznámého prostředí ==== * Prohledávání neznámého prostředí je komplexní úloha zahrnující řadu základních robotických dovedností – tvorbu mapy, plánování, řízení, lokalizaci a vyšší plánování. S některými těmito dovednostmi jste se již seznámili na předchozích cvičeních, další budete v rámci této úlohy implementovat. Výstupem by pak měl být algoritmus navigující robot v neznámém prostředí za účelem vytvoření mapy tohoto prostředí. V této úloze se předpokládá, že pozice robotu je známá. * **Prohledávání neznámého prostředí** * Modifikujte mapu prostředí na základě aktuálních dat z laserového dálkoměru. * Najděte v mapě tzv. frontiers a vyberte z nich následující cíl. * K vybranému cíli naplánujte cestu a tuto cestu realizujte driverem SND. * Proveďte experimenty v simulátoru i na reálném systému. * {{ :courses:a0m33par:ex3_v2.zip | Šablona kódu}} * {{ :courses:a0m33par:ex3.pdf | Postup řešení}} * {{ :courses:a0m33par:intro.pdf | Úvod k prohledávání}} * {{ :courses:a0m33par:mapping.pdf | O mapování}} * [[https://www.youtube.com/embed/LmOUyKEAAcI?rel=0&autoplay=1 | Video: ukázka řešení v systému Syrotek]] *V novějších verzích Ubuntu může být nutné změnit v soboru student/ex3/CMakeLists.txt verzi kompilátoru z -std=c++11 na -std=c++17 ==== Úloha 4 - Manipulace s objektem (bonusová úloha) ==== * V této bonusové úloze využijete kódy pro mapování, plánování a navigaci z předchozích úloh. Vaším úkolem bude detekovat pozici objektu (válce) v prostředí a za pomoci vašeho robotu válec přemístit na určenou lokaci. * **Postup řešení:** * Využijte kód z úlohy č. 3 * Naimplementujte funkci pro detekci válce v laserových datech * Vytvořte si zjednodušený stavový automat ve kterém budete přepínat mezi funkcemi hledání, přesouvání, a tlačení * Vaším úkolem bude * Hledání: Najděte pozici válce * Přesouvání: Navigujte robota do optimální pozice, ze které může začít tlačit válec směrem k cíli * Tlačení: Řiďte robota tak, aby dotlačil válec na vámi požadovanou pozici * {{ :courses:a0m33par:ex3_bonus.pdf | Postup řešení}} * {{ :courses:a0m33par:par_lab_valec.zip | Mapa pro simulaci úlohy}} - Mapu můžete vložit mezi gazebo světy ve vašem kódu z úlohy 3 [[start|Zpět]] na stránky předmětu.