Przejdź do treści

Rozproszone Systemy Sterowania: L9-L10

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). Rozważ użycie wiadomości geometry_msgs/Twist jako wyjścia z kontrolera.

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 a base_link. Możesz założyć, że rama world 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!

Zasoby