Przejdź do treści

Rozproszone Systemy Sterowania: L7-L8

System monitorowania robota (0-20 punktów)

Cel

Celem tego zadania jest stworzenie systemu monitorowania stanu wewnętrznego robota. Ogólnie rzecz biorąc, system monitorowania powinien śledzić stany wszystkich komponentów robota. Jeśli wykryte zostaną jakiekolwiek problemy z komponentem, system powinien natychmiast zgłosić błąd i próbować zainicjować proces naprawczy.

Opis

Stwórz system ROS 2, który reprezentuje system monitorowania stanu robota. Powinien być podzielony na wiele węzłów, a każdy węzeł powinien mieć jedno konkretne zadanie. System powinien zawierać następujące węzły:

  • monitor stanu (StateMonitor),
  • obsługa błędów (ErrorHandler),
  • węzły sensorów (lidar, kamera).

Poniższy diagram przedstawia strukturę systemu.

Monitor stanu (StateMonitor)

  • Pierwszym węzłem jest monitor stanu. Powinien sprawdzać stan każdego sensora, subskrybując tematy o nazwach /[sensor_name]_state (typ wiadomości Bool).
  • Lista monitorowanych sensorów powinna być zdefiniowana w pliku konfiguracyjnym.
  • Węzeł oczekuje, że otrzyma co najmniej raz w określonym okresie czasu (parametr) wiadomość ze stanem True od każdego sensora. Jeśli nie, generuje stan błędu.
  • Stan błędu może być również generowany, jeśli węzeł otrzyma wiadomość z dowolnego sensora z wartością False.
  • Jeśli zauważono stan błędu w dowolnym sensorze, monitor stanu powinien powiadomić ErrorHandler (za pomocą odpowiedniej usługi zawierającej nazwę sensora), że określony sensor ma błąd.
  • Powinien także publikować temat /robot_state (Bool) w zależności od bieżącego stanu całego systemu.

Obsługa błędów (ErrorHandler)

  • Węzeł powinien ponownie uruchomić określony sensor (za pomocą mechanizmu akcji), jeśli otrzyma takie żądanie od monitora stanu.
  • Zadaniem węzła jest raportować postęp procedury ponownego uruchamiania sensora (informacje zwrotne akcji).
  • ErrorHandler powinien zaimplementować serwer serwisu przykład serwera usługi.

Sensor (np. lidar, kamera)

  • Każdy węzeł sensora powinien publikować swój stan z określoną częstotliwością na temacie /[sensor_name]_state (Bool).
  • Powinien zaimplementować serwer Action, aby obsługiwać ponowne uruchamianie urządzenia przykład serwera akcji.
  • Ponowne uruchamianie nie powinno być natychmiastowe, ale powinno zajmować określony czas (domyślnie 5s).

Uwagi:

  • Stwórz niestandardową usługę, która będzie używana do powiadamiania węzła ErrorHandler.
  • Stwórz niestandardową akcję, która będzie używana do wywołania ponownego uruchamiania sensora i sprawdzenia postępu tej procedury.
  • Parametryzuj węzły. Wszystkie parametry powinny być umieszczone w plikach YAML.
  • Stwórz pakiet ROS 2 i umieść wszystkie pliki w pakiecie.
  • Stwórz launcher (Python), który uruchomi monitor stanu, węzeł obsługi błędów i załaduje parametry z plików (węzły sensorów można uruchamiać osobno). System powinien być uruchamiany jednym poleceniem
    ros2 launch nazwa_pakietu nazwa_uruchamiającego
  • Udokumentuj swój kod!

Zasoby: