Táto funkcia načíta obrazový súbor vo formáte PGM a overí jeho formát (musí byť vo formáte P2). Načíta rozlíšenie obrazu, maximálnu hodnotu sivej farby a samotné pixely, ktoré vracia ako dvojrozmerné pole numpy a maximálnu sivú hodnotu.
Funkcia zapisuje obrázok do PGM súboru vo formáte P2, kde sa každý pixel prepisuje do textovej reprezentácie, aby bol súbor prístupný ďalším programom.
Funkcia odstraňuje prázdne (biele) okraje z obrázka a vracia orezaný obrázok spolu s posunom orezania pre neskoršie korekcie súradníc.
Načíta súbor CSV obsahujúci body trasy a nastaví stĺpce (X
, Y
, Z
, Proximity
, Action
). Výsledkom je tabuľka s uloženými súradnicami a akciami.
Implementuje Bresenhamov algoritmus na kreslenie úsečky, ktorý generuje súradnice bodov medzi dvoma bodmi. Je užitočný na kontrolu kolízií a preverenie či je úsek medzi dvoma bodmi priamy a voľný.
Funkcia preveruje, či je priamy úsek medzi dvoma bodmi voľný, pomocou bresenham_line
. Prechádza každým bodom úsečky a kontroluje, či sa v danom bode nenachádza prekážka.
Používa BFS (Breadth-First Search) na hľadanie trasy v blízkosti cieľového bodu vo vzdialenosti proximity_radius
. Vytvára zoznam bodov pre trasu, ktorá prekonáva prekážky pomocou vyhýbania sa susedným bodom, ak je priamy prístup blokovaný.
Pre všetky trasy prevádza body z pixelových súradníc späť na metre, pričom každý bod ukladá do textového súboru vo formáte x, y
. Každá trasa je oddelená prázdnym riadkom.
Obsahuje kroky:
- Načíta PGM obrázok mapy a orezáva okraje.
- Načíta body trasy a prevedie ich na pixely s vhodným priblížením.
- Vytvára mriežku prekážok so zvýšenou bezpečnostnou vzdialenosťou.
- Vytvára trasy medzi bodmi.
- Ukladá všetky trasy do textového súboru
all_paths.txt
. - Vykreslí trasy na mape a uloží výsledný obrázok.
Obsahuje funkcie pre riadenie dronu pomocou ROS (Robot Operating System) 2. Využíva knižnice mavros_msgs na komunikáciu s dronom, umožňuje sledovanie stavov a príkazov (arming, mód, zmena polohy, vzlet, pristátie) a načítanie waypointov.
V konštruktore triedy sa vytvoria klienti a subscribery na sledovanie stavu dronu (state_cb
), na odosielanie príkazov na polohu (local_pos_pub_
) a na odoslanie príkazu na armovanie (arming_client_
) a na nastavenie režimu dronu (set_mode_client_
).
readPath
číta súbor s trasami a vytvára zoznam zoznamov bodov, kde každý bod predstavuje cestu medzi waypointmi.readWaypointsCSV
načítava body trasy (CSV) s atribútmi presnosti a ďalších príkazov.
Transformuje body z mapy na súradnicový systém dronu, čo umožňuje dronu navigovať na základe bodov z mapy.
Interpretuje príkazy z CSV súboru pre konkrétne akcie dronu, napríklad “takeoff”, “land” a “yaw180”.
Riadi pohyb dronu podľa načítaných trás a waypointov. Funkcia iteruje cez body v trase, aktualizuje pozíciu dronu a sleduje, či sa dron dostal do požadovanej vzdialenosti od cieľa, s možnosťou pristátia alebo vzletu.
Nastavuje orientáciu dronu podľa zadaného uhla. Používa quaterniony na reprezentáciu otáčania (yaw, pitch, roll) a nastavuje toleranciu pre dosiahnutie presnosti uhla.
set_mode
: Nastavuje režim dronu (napríklad “GUIDED”).arm_drone
: Armuje dron pre let.takeoff
: Riadi vzlet dronu do zadanej výšky.state_cb
,local_pos_cb
: Callbacky na spracovanie stavových správ a aktualizácií polohy dronu.
Spúšťa ROS uzol TemplateDroneControl
a inicializuje riadenie. Tento uzol čaká na udalosti a spracováva pohyb dronu, kým dron nedosiahne cieľové body.
- Python Script → C++ Script (Generované trasy).
- C++ Script ↔ ROS2 (Príkazy a spätná väzba).
- ROS2 ↔ MAVROS Middleware (Preklad príkazov a stavových údajov).
- MAVROS ↔ GAZEBO Simulátor (Príkazy na pohyb dronu a simulované senzory).
Pre správne fungovanie a spustenie je potrebné dodržať nasledovné kroky:
- V priečinku pathfinder spustiť llama.py a uistiť sa že sa v ňom nachádzajú súbory vstupnej mapy - input_map.pgm a misie v tvare bodov ako boli zadané v textovom súbore waypoints.txt.
- Následne je potrebné spustiť prerekvizície pre simuláciu, t.j. Gazebo, ArduPilot SITL a MAVROS.
- Ako poslednú spusiť node template_drone_control.cpp v podpriečinku /workspace/src/template_drone_control/src/ a uistiť sa že výstupný textový súbor all_paths.txt obsahuje body v správnom formáte a je k nemu dobre zadefinovaná cesta.
Táto dokumentácia poskytuje prehľad funkcií a štruktúry kódu. Python kód zabezpečuje spracovanie mapy a generovanie trás medzi bodmi, zatiaľ čo C++ kód implementuje algoritmy na ovládanie dronu v ROS prostredí.