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ściBool
). - 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, 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
Service
, aby obsługiwać ponowne uruchamianie urządzenia przykład serwera usługi.
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!