30.4 액션 서버 상태 머신(State Machine) 구조 및 전이 제어 알고리즘

30.4 액션 서버 상태 머신(State Machine) 구조 및 전이 제어 알고리즘

분산 제어 환경에서 클라이언트가 하달한 장기 실행 명령(Long-Running Task)을 서버 측에서 안정적으로 완수하기 위해서는, 무한정 대기하거나 충돌하는 스레드의 오류를 방지하기 위한 엄격한 통제 규율이 요구된다. ROS2 액션(Action) 아키텍처는 이를 달성하기 위해 개별 목표 트랜잭션마다 독립된 유한 상태 기계(Finite State Machine, FSM)를 메모리에 인스턴스화하여 관리한다. 본 절에서는 액션 서버 내부에서 작동하는 상태 기계의 구조적 특징과, 각 상태 간의 결정론적 전이(Deterministic Transition)를 제어하는 알고리즘 파이프라인을 학술적으로 분석한다.

1. 액션 서버 상태 기계(FSM) 아키텍처 및 생명주기

액션 서버가 클라이언트로부터 새로운 목표(Goal) 패킷을 할당받으면, 해당 목표를 식별하기 위한 고유한 컨텍스트 객체인 ServerGoalHandle 구조를 생성한다. 이 핸들 객체의 내부 코어는 트랜잭션의 현재 진행 국면을 명시하는 엄격한 상태 열거형(Enum) 변수를 포함하여, 어플리케이션 개발자가 엑추에이터 제어 함수 호출 사이사이 시스템의 거시적인 방향을 제약할 수 있도록 보장한다.

공식적인 ROS2 액션 상태 기계는 크게 ‘실행 중인 가변 상태군’(Unknown, Accepted, Executing, Canceling)과, 트랜잭션의 종결을 선언하고 메모리 자원을 반환하는 ‘종단 상태군(Terminal States)’(Succeeded, Aborted, Canceled)으로 양분된다. 상태 기계의 핵심 설계 철학은, 한 번 종단 상태로 진입한 목표 핸들은 어떠한 역방향 호출(Reverse Callback) 조건에서도 다른 상태로 거슬러 올라가거나 재활성화되지 않는 단방향(Unidirectional) 전이의 완전성(Completeness)을 보장한다는 것이다.

2. 목표 승인(Accept) 및 실행(Executing) 전이 메커니즘

상태 머신의 초기 점화는 클라이언트로부터 네트워크를 통해 도착한 목표가 엑시큐터를 거쳐 handle_goal_callback에 인계되는 시점(Unknown 상태)부터 시작된다. 이 단계에서 액션 서버 모델의 비즈니스 로직은 임무의 무결성 검증, 궤적 생성을 위한 온보드(On-board) 메모리 가용성, 하드웨어 센서 상태 등을 검사하여 연산 승낙(Accept) 또는 거부(Reject)를 결정해야 한다.

승낙 플래그가 반환되면 상태는 Accepted로 전환되며, 서버는 이 목표 핸들을 자신의 독립적인 워커 스레드 큐(또는 태스크 코루틴 큐)에 디스패치(Dispatch)한다. 이후 백그라운드 스레드가 해당 목표의 execute_callback 루틴을 실행하기 시작하는 찰나에 상태는 비로소 Executing으로 전이된다. 본 전이 과정의 체계적 분리는, 데이터 트래픽 수신과 무거운 백그라운 연산 개시 시점 사이에 유동적 스케줄링 갭(Gap)을 허용함으로써 병목(Bottleneck) 충돌을 지연시키는 아키텍처 설계의 정수이다.

3. 예외 상황 하의 취소(Canceling) 및 중단(Aborted) 분기 제어

제어 루프가 Executing 상태에 놓여 있을 때, 돌발 기류 조우 등 안전 임계 조건이 위반되면 물리 로직은 해당 목표 달성을 강제 포기해야 한다. 로컬 내부 연산 로직이 스스로 더 이상 비행 임무 완료가 불가능하다고 판단하여 오류 코드를 포함한 터미널 커맨드를 발생시키면, 목표 핸들의 상태는 즉시 Aborted(중단) 분기로 향한다.

반대로, 이종 노드(예: 오퍼레이터 GCS 클라이언트)로부터 다이렉트로 네트워크 취소(Cancel) 요청이 수신되는 외생적 개입 상황이 발생할 수 있다. 이때 서버가 일방적으로 비행 연산을 즉각 처형(Kill)하는 것이 아니라, 액션 스펙에 정의된 handle_cancel_callback에 도달하여 ’취소 수락 여부’를 결정해야 한다. 취소가 허용될 경우 상태 머신은 Canceling(취소 중) 상태로 임시 전이되며, Executing 루프의 스레드가 진행 중이던 메모리 할당을 안전하게 정비하고 모터 전력을 안전 종료할 때까지의 폴백 연산 유예 시간을 보장한다. 안전 시퀀스가 수렴된 후에야 비로소 Canceled라는 종단 상태로 도달하는 2단계(Two-phase) 철수 파이프라인을 지원한다.

4. 성공적 터미널 수렴(Succeeded)과 단방향 동기화 모델의 의의

Executing 상태 동안 목표 오차 거리나 비전 타겟 일치율 등 모든 임무 조건이 정상 수렴하여 더 이상 백그라운드 제어 루프를 반복할 필요가 없을 때, 목표 핸들의 비즈니스 종료 인터페이스(예: succeed())가 유발되며 상태는 Succeeded로 안착한다.

상술된 이 모든 상태 전환의 마일스톤(Milestone)은 클라이언트 노드의 피드백 감시망에 네트워크 이벤트 형식으로 실시간 동기화된다. 엑추에이터 에러, 네트워크 단절, 오퍼레이터 명령 취소 등 불확정 다차원 공간에서 발생할 수 있는 모든 복합 변수를 7개의 결정론적 노드 집합 및 단방향 엣지로 제약하는 ROS2 액션 FSM 설계는, 예외 처리 파이프라인의 복잡도를 \mathcal{O}(1)의 상태 검증 조건 분기로 획기적으로 축소시키는 결정적 소프트웨어 공학 토대이다.