Chapter 30. 장기 실행(Long-Running) 테스크 제어를 위한 액션(Action) 서버-클라이언트 통신망

Chapter 30. 장기 실행(Long-Running) 테스크 제어를 위한 액션(Action) 서버-클라이언트 통신망

자율 드론 시스템의 임무 제어 아키텍처 고도화에 있어서, 통신 미들웨어는 단순한 데이터 교환을 넘어 에이전트의 행위(Behavior) 생명주기를 완벽히 통제할 수 있는 구조적 메커니즘을 제공해야 한다. ROS2가 지원하는 전통적인 퍼블리셔-서브스크라이버(Topic) 모델은 데이터의 연속적인 흐름을 비동기적으로 분배하는 데 탁월하며, 클라이언트-서버(Service) 모델은 단발적이고 즉각적인 질의-응답 트랜잭션을 처리하는 데 특화되어 있다. 그러나 이 두 가지 단일 패러다임만으로는 이동 표적의 지속적 추적, 복잡한 실내 공간 점유 매핑(Occupancy Mapping), 다중 웨이포인트(Waypoint) 자율 비행 등 수 초에서 수십 분에 걸쳐 실행되는 장기 실행 연산(Long-Running Task)을 효과적으로 통제하는 데 한계가 따른다. 본 장에서는 이러한 장기 블로킹 방해 요소를 극복하고 안정적인 임무 제어망을 구축하기 위해 고안된 ROS2 액션(Action) 서버-클라이언트 비동기 통신망의 구조적 원리와 제어 철학을 학술적으로 논의한다.

ROS2의 액션(Action) 통신망은 단일 인터페이스 하부에 복수의 토픽(Topic)과 서비스(Service) 프로토콜을 계층적으로 결합하여 완성된 추상화 모델이다. 이는 본질적으로 목표(Goal) 시작을 지시하는 서비스 요청과, 연산의 완료(Result) 여부를 반환하는 또 다른 서비스 트랜잭션을 양단에 배치하고, 그 사이의 실행 기간 동안 현재의 진척도(Progress)를 브로드캐스팅하는 피드백(Feedback) 토픽을 샌드위치 형태로 결합한 3원 통신 구조를 띤다.

장기 실행 태스크 모델에서 가장 중대한 공학적 난제는 연산이 완료되기 전 어플리케이션 스레드가 블로킹(Blocking) 상태에 빠짐으로써 발생하는 노드(Node)의 제어 불능(Unresponsiveness) 현상이다. 액션 아키텍처는 이를 방어하기 위해 비동기(Asynchronous) 이벤트 루프 통제 방식을 표준으로 삼는다. 클라이언트 노드는 액션 서버로 목표(Goal) 달성 명령을 하달한 즉시 제어 스레드의 실행권(Execution Right)을 반환받으며, 이후 독립된 엑시큐터(Executor) 콜백 프로세스를 통해 실시간으로 수신되는 피드백(Feedback) 정보를 지역 상태 머신(State Machine)에 동기화(Synchronization)시킨다. 이러한 비동기적 동시성 연산 설계는 물리 엔진이나 센서 퓨전 노드가 임무 수행 중간에도 장애물 회피 등의 긴급 인터럽트(Interrupt) 루틴을 정상적으로 처리할 수 있도록 보장하는 소프트웨어 아키텍처의 핵심 축으로 작용한다.

더 나아가, 액션 서버-클라이언트 모델은 태스크의 런타임 생명주기를 클라이언트가 동적으로 개입(Intervention)하여 통제할 수 있는 취소(Cancel) 파이프라인을 내재화하고 있다.
드론이 특정 웨이포인트로 자율 비행 중이던 상황에서 오퍼레이터의 긴급 정지(E-Stop) 명령이 하달되거나, 동적 장애물이 출현하여 현재 궤적의 유효성이 상실된 경우, 클라이언트 노드는 액션 서버 측으로 기발행된 목표(Goal)를 폐기하고 진행 중인 연산을 회수(Preempt)하라는 취소 요청 패킷을 발송한다. 엑시큐터 단의 타임아웃 감시와 결합된 이러한 취소 및 상태 전이(State Transition) 메커니즘은, 드론의 기구학적 한계를 고려한 서킷 브레이커(Circuit Breaker) 방어망 구축과 함께 고신뢰성 무인 이동체 제어 시스템을 완성하는 필수 기반 기술이다. 본 장을 통해 우리는 복합 상태를 지닌 액션 메시지의 IDL 확장 원리와, 액션 엑시큐터를 구성하는 멀티스레딩 최적화 기법에 이르기까지 액션 모델의 학술적 제어 이론 전반을 심도 있게 분석할 것이다.