Symulacja mobilnego robota w ROS 2 (0-20 punktów)
Cel
Zaprojektuj i zaimplementuj system symulujący i kontrolujący robota mobilnego.
Opis
Stwórz system, który będzie symulował ruch robota mobilnego typu monocykl.
\left\{\begin{array}{rcl} \dot{x} & = & \cos{\phi} \cdot u_1,\\ \dot{y} & = & \sin{\phi} \cdot u_1,\\ \dot{\phi} & = & u_2,\end{array}\right.gdzie:
x, y, \phi reprezentują pozę robota (położenie i orientację),
u_1 to sygnał sterowania prędkością liniową,
u_2 to sygnał sterowania prędkością kątową.
Na diagramie przedstawiono przykładowy system (w najprostszym przypadku, sterowanie w otwartej pętli)
Symulator mobilnego robota
Ten węzeł powinien obliczać kolejne stany robota, zakładając otrzymane wartości sterowania. Jeśli nie ma wartości sterowania w konkretnym punkcie czasowym, powinien przyjąć wartości sterowania równe 0 i opublikować nowy stan.
Kontroler
Powinien generować funkcje sterowania dla symulatora mobilnego robota. Wartości sterowania powinny obejmować parametry prędkości liniowej (u_1) i prędkości kątowej (u_2).
Możliwym rozszerzeniem może być dodanie kontrolera zamkniętej pętli (z trajektorią generatora).
Uwagi:
- Załóż, że robot porusza się na płaszczyźnie XY, a z jest równe 0.
- Załóż, że na początku robot znajduje się w punkcie (0,0,0).
- Opublikuj trajektorię robota jako serię wiadomości PoseStamped.
- Publikuj położenie robota również z tf2 jako transformację między ramą
world
abase_link
. Możesz założyć, że ramaworld
jest stała. - Zwizualizuj ścieżkę i ramki w rviz (alternatywnie w foxglove).
- Symulowany robot powinien poruszać się w sensowny sposób, na przykład wzdłuż kwadratu.
- Stwórz nowy pakiet ROS 2 dla swojego projektu symulacji robota.
- Stwórz launcher (oparty na Pythonie), który uruchomi wszsytkie węzły systemu, a także wczyta parametry z plików. System powinien być uruchamiany jednym poleceniem.
ros2 launch nazwa_pakietu nazwa_launcher
- Udokumentuj swój kod!