# Observability ## Purpose Определяет доступные оператору средства наблюдения за состоянием робота и симуляции и требования к диагностике отказов без сокрытия ошибок связи или движения. ## Requirements ### Requirement: Суставная телеметрия Активный контроллер SHALL публиковать измеренное состояние семи суставов через `joint_state_broadcaster` для планирования и внешнего чтения. #### Scenario: Работа контроллера - **WHEN** аппаратный или симуляционный контроллер активен - **THEN** `/joint_states` доступен серверу движения, веб-мосту и визуализации ### Requirement: RViz по запросу Основной launch SHALL поддерживать отдельный аргумент `rviz` для визуализации модели и планирования. #### Scenario: RViz включён - **WHEN** launch получает `rviz:=true` - **THEN** запускаются RViz-узлы с конфигурацией из `digital_twin.rviz.config` ### Requirement: Foxglove bridge по настройке При `foxglove.enabled=true` система SHALL запускать `foxglove_bridge` с настроенными портом, адресом, TLS и списками разрешённых топиков, сервисов и параметров. #### Scenario: Foxglove отключён - **WHEN** `foxglove.enabled=false` - **THEN** bridge не запускается основным launch ### Requirement: Явное сообщение об отказе FRI Аппаратная подсистема MUST сообщать диагностическую причину ошибки FRI, включая ошибки SDK, тайм-аут цикла, неверный период и потерю сессии. #### Scenario: Ошибка FRI step - **WHEN** FRI `step()` завершается неуспешно - **THEN** worker отмечает отказ, прекращает нормальный обмен и выводит сообщение об ошибке ### Requirement: Различение состояний движения Action движения SHALL публиковать обратную связь `planning` и `executing`, а окончательный результат SHALL содержать сообщение, пригодное для диагностики. #### Scenario: Планирование цели - **WHEN** сервер начал обработку action-цели - **THEN** клиент получает стадию `planning`, затем `executing` до вызова планирования и исполнения