1317.14 ROS2 토픽을 통한 상태 모니터링

1. ROS2 토픽의 역할

ROS2 토픽(Topic)은 발행-구독(publish-subscribe) 패턴의 비동기적 통신 메커니즘이다. PlanSys2에서 토픽은 계획 실행의 진행 상황, 세계 상태의 변경 이벤트, 노드의 헬스 상태 등을 지속적으로 방송하는 데 사용된다.

2. PlanSys2의 토픽 기반 모니터링

2.1 실행 상태 모니터링

Executor 노드가 계획 실행 중 각 액션의 상태를 토픽으로 발행한다:

토픽: /executor/action_execution_info
메시지 유형: plansys2_msgs/msg/ActionExecutionInfo[]

각 항목:
  - action: "(move robot1 wp1 wp2)"
  - status: "EXECUTING" | "COMPLETED" | "FAILED" | "CANCELLED"
  - completion: 0.75  (0.0 ~ 1.0)
  - message: "Moving to wp2"
  - start_time: ROS time

2.2 모니터링 코드 예시

// 실행 상태 구독
auto subscription = node->create_subscription<plansys2_msgs::msg::ActionExecutionInfo>(
    "/executor/action_execution_info",
    10,
    [](const%20plansys2_msgs::msg::ActionExecutionInfo::SharedPtr%20msg) {
        for (const auto & action_info : msg->action_execution_status) {
            RCLCPP_INFO(rclcpp::get_logger("monitor"),
                "Action: %s | Status: %s | Progress: %.0f%%",
                action_info.action.c_str(),
                action_info.status.c_str(),
                action_info.completion * 100);
        }
    });

2.3 ExecutorClient를 통한 간편 모니터링

PlanSys2의 클라이언트 라이브러리는 토픽 구독을 추상화한다:

auto executor_client = std::make_shared<plansys2::ExecutorClient>();
executor_client->start(plan);

// 주기적 상태 확인
while (rclcpp::ok()) {
    auto feedback = executor_client->getFeedBack();
    
    for (const auto & action_status : feedback.action_execution_status) {
        if (action_status.status == "EXECUTING") {
            // 실행 중인 액션 정보 표시
        } else if (action_status.status == "FAILED") {
            // 실패 처리
        }
    }
    
    auto result = executor_client->getResult();
    if (result.has_value()) {
        if (result.value().success) {
            // 계획 성공
        } else {
            // 계획 실패 → 재계획 필요
        }
        break;
    }
    
    rclcpp::spin_some(node);
}

3. 세계 상태 변경 모니터링

Problem Expert의 상태 변경을 토픽으로 모니터링할 수 있다:

토픽: /problem_expert/update_notify
메시지: 변경 유형과 변경 내용

이를 통해 외부 노드가 세계 상태의 변경을 감지하고 반응할 수 있다.

4. 시각화 도구와의 연동

PlanSys2의 토픽 데이터는 ROS2의 표준 시각화 도구(RViz2, rqt 등)와 연동하여 실행 상태를 시각적으로 모니터링할 수 있다:

  • rqt_graph: 노드 간 토픽 연결 관계 시각화
  • rqt_topic: 토픽 메시지의 실시간 모니터링
  • 커스텀 GUI: Qt 기반 대시보드에서 실행 상태 표시

5. QoS 설정

모니터링 토픽의 QoS 설정:

auto qos = rclcpp::QoS(rclcpp::KeepLast(1))
    .reliability(rclcpp::ReliabilityPolicy::BestEffort)
    .durability(rclcpp::DurabilityPolicy::Volatile);

모니터링 데이터는 최신 정보가 중요하므로 BestEffortKeepLast(1) 정책을 사용하여 레이턴시를 최소화한다.

6. 참고 문헌

  • Gonzalez, F., Martin, F., Matellán, V., & Rodriguez, F. J. (2021). “PlanSys2: A Planning System Framework for ROS2.” IEEE ICARSC.
  • Macenski, S., Foote, T., Gerkey, B., Lalancette, C., & Woodall, W. (2022). “Robot Operating System 2: Design, Architecture, and Uses in the Wild.” Science Robotics, 7(66), eabm6074.