1292.11 액션 노드 (Action Node)의 개요

1. 서론

액션 노드(Action Node)는 행동 트리(Behavior Tree)의 실행 노드(Execution Node) 중 하나로, 로봇 시스템에서 구체적인 물리적 동작이나 계산적 작업을 수행하는 리프 노드(Leaf Node)이다. 행동 트리의 의사결정 구조가 제어 흐름 노드에 의해 형성된다면, 그 의사결정의 결과로 실제 실행되는 행동은 액션 노드에 의해 구현된다. 본 절에서는 액션 노드의 정의, 동작 원리, 실행 모델, 그리고 로봇 공학에서의 역할을 형식적으로 기술한다.

2. 액션 노드의 정의

액션 노드는 Tick을 수신하였을 때 지정된 작업(Task)을 실행하고, 작업의 수행 결과에 따라 반환 상태(Return Status)를 생성하는 노드이다. 형식적으로, 액션 노드 A는 다음과 같이 정의된다:

A : (\text{Tick}, \Sigma) \rightarrow (\{\text{Success}, \text{Failure}, \text{Running}\}, \Sigma')

여기서 \Sigma는 작업 실행 전의 시스템 상태, \Sigma'는 작업 실행 후의 시스템 상태이다. 조건 노드(Condition Node)와 달리, 액션 노드는 시스템 상태를 변경하는 부작용(Side Effect)을 수반할 수 있다. 즉, \Sigma \neq \Sigma'일 수 있으며, 이 점이 액션 노드를 조건 노드와 본질적으로 구별하는 핵심 특성이다.

3. 액션 노드의 반환 상태

액션 노드는 세 가지 반환 상태를 생성할 수 있다:

반환 상태의미
Success지정된 작업이 성공적으로 완료되었다.
Failure작업 수행 중 오류가 발생하였거나, 목표 달성에 실패하였다.
Running작업이 아직 진행 중이며, 완료되지 않았다.

Success와 Failure는 작업의 최종 결과를 나타내는 종결 상태(Terminal Status)이며, Running은 작업이 다수의 Tick 주기에 걸쳐 수행됨을 나타내는 중간 상태(Intermediate Status)이다.

4. 액션 노드의 실행 모델

액션 노드는 수행하는 작업의 시간적 특성에 따라 두 가지 실행 모델로 분류된다.

4.1 동기적 액션 노드 (Synchronous Action Node)

동기적 액션 노드는 단일 Tick 주기 내에서 작업을 완료하고, Success 또는 Failure를 즉시 반환한다. 이 모델에서 Running 상태는 반환되지 않는다. 동기적 액션 노드는 블랙보드(Blackboard)에 대한 값 기록, 내부 변수 갱신, 단순 제어 명령 발행 등 실행 시간이 극히 짧은 작업에 적합하다.

A_{\text{sync}} : (\text{Tick}, \Sigma) \rightarrow (\{\text{Success}, \text{Failure}\}, \Sigma')

동기적 액션 노드는 Tick을 수신한 스레드(Thread)를 차단(Block)하므로, 실행 시간이 길어질 경우 전체 행동 트리의 Tick 주기를 초과하여 실시간성(Real-Time Property)을 위반할 위험이 있다.

4.2 비동기적 액션 노드 (Asynchronous Action Node)

비동기적 액션 노드는 작업이 단일 Tick 주기 내에 완료되지 않을 수 있으며, Running 상태를 반환하여 작업의 진행 중임을 나타낸다. 비동기적 액션 노드의 실행 흐름은 다음과 같다:

  1. 최초 Tick 수신: onStart 콜백이 호출되어 작업을 개시하고, Running을 반환한다.
  2. 후속 Tick 수신: onRunning 콜백이 호출되어 작업 진행 상황을 확인한다. 작업이 완료되면 Success 또는 Failure를 반환하고, 진행 중이면 Running을 다시 반환한다.
  3. Halt 수신: onHalted 콜백이 호출되어 작업을 안전하게 중단하고, 할당된 자원을 해제한다.

A_{\text{async}} : (\text{Tick}, \Sigma, \text{state}) \rightarrow \begin{cases} (\text{Running}, \Sigma, \text{state}') & \text{작업 진행 중} \\ (\text{Success}, \Sigma', \text{Idle}) & \text{작업 성공} \\ (\text{Failure}, \Sigma'', \text{Idle}) & \text{작업 실패} \end{cases}

비동기적 액션 노드는 로봇 공학에서 대부분의 물리적 행동을 구현하는 데 사용된다. 이동(Navigation), 매니퓰레이션(Manipulation), 센서 캘리브레이션(Calibration) 등은 수 초에서 수 분에 이르는 실행 시간을 요구하므로, 비동기적 실행 모델이 필수적이다.

5. 액션 노드의 상태 관리

5.1 상태 보존 액션 노드 (Stateful Action Node)

상태 보존 액션 노드는 Tick 간에 내부 상태를 유지하며, 이전 Tick의 실행 결과가 현재 Tick의 동작에 영향을 미친다. Running 상태를 반환한 후 다음 Tick에서 이전 진행 지점부터 작업을 재개할 수 있는 것은 상태 보존 특성에 기인한다.

상태 보존 액션 노드는 다음과 같은 내부 상태 변수를 유지할 수 있다:

  • 작업 진행률(Progress)
  • 누적 오류 횟수
  • 중간 계산 결과
  • 외부 서비스 요청의 핸들(Handle)

5.2 무상태 액션 노드 (Stateless Action Node)

무상태 액션 노드는 각 Tick에서 독립적으로 작업을 수행하며, 이전 Tick의 실행 결과를 내부적으로 보존하지 않는다. 무상태 액션 노드는 매 Tick마다 동일한 초기 조건에서 작업을 시작하므로, 멱등성(Idempotency)이 보장된다.

6. 액션 노드의 부작용과 외부 시스템 상호작용

6.1 부작용의 유형

액션 노드는 다음과 같은 부작용을 수반할 수 있다:

부작용 유형설명
물리적 상태 변경모터 구동, 그리퍼 개폐, LED 점등 등 로봇 하드웨어의 물리적 상태를 변경한다.
통신 메시지 발행ROS2 토픽(Topic) 발행, 서비스(Service) 요청, 액션(Action) 목표 전송 등 통신 채널을 통해 메시지를 전달한다.
데이터 기록블랙보드에 값을 기록하거나, 외부 데이터베이스·파일 시스템에 데이터를 저장한다.
환경 상태 변경시뮬레이션 환경에서 객체의 위치, 속성을 변경하는 등 외부 환경의 상태를 수정한다.

6.2 ROS2 인터페이스와의 통합

로봇 공학에서 액션 노드는 ROS2의 통신 인터페이스와 긴밀하게 통합된다. 주요 통합 유형은 다음과 같다:

  1. 토픽 발행자(Publisher) 래핑: 액션 노드가 Tick을 수신하면 특정 토픽에 메시지를 발행한다. 예를 들어, 속도 명령(cmd_vel)을 발행하여 로봇을 이동시키는 액션 노드가 이에 해당한다.
  2. 서비스 클라이언트(Service Client) 래핑: 액션 노드가 ROS2 서비스를 호출하고 응답을 대기한다. 서비스 호출이 동기적이므로, 동기적 액션 노드에 적합하다.
  3. 액션 클라이언트(Action Client) 래핑: 액션 노드가 ROS2 액션 서버에 목표를 전송하고, 피드백(Feedback)을 수신하며, 결과(Result)를 대기한다. 장시간 소요 작업에 적합한 비동기적 패턴이다.

7. 액션 노드의 생명주기

액션 노드의 생명주기는 행동 트리 노드의 일반적 생명주기 모델을 따르며, 다음의 상태 전이를 거친다:

Idle ──[최초 Tick]──> Running ──[작업 완료]──> Success 또는 Failure
                         │
                    [Halt 수신]
                         │
                         v
                       Idle

7.1 onStart 콜백

최초 Tick 수신 시 호출된다. 자원 할당, 외부 서비스 연결 초기화, 목표 설정 등의 준비 작업을 수행한다. 동기적 액션 노드의 경우, 이 콜백 내에서 작업 전체가 완료될 수 있다.

7.2 onRunning 콜백

Running 상태에서 후속 Tick을 수신할 때 호출된다. 작업 진행 상황을 확인하고, 완료 여부를 판정한다. 비동기적 액션 노드에서 핵심적인 역할을 수행한다.

7.3 onHalted 콜백

상위 제어 흐름 노드로부터 Halt 요청을 수신하였을 때 호출된다. 진행 중인 작업을 안전하게 중단하고, 할당된 자원(소켓, 파일 핸들, ROS2 액션 핸들 등)을 해제한다. Halt 처리의 완전성은 시스템 안정성에 직결되므로, 모든 비동기적 액션 노드는 이 콜백을 반드시 구현하여야 한다.

8. 액션 노드의 설계 원칙

액션 노드를 설계할 때 다음의 원칙을 준수하여야 한다:

  1. 단일 행동 원칙(Single Action Principle): 하나의 액션 노드는 하나의 명확하고 원자적인 행동만을 수행하여야 한다. 복수의 행동을 하나의 액션 노드에 결합하면 재사용성이 저하되고 디버깅이 곤란해진다.
  2. Halt 안전성: 어떤 시점에서든 Halt 요청을 수신하였을 때, 자원 누수(Resource Leak)나 불일치 상태(Inconsistent State) 없이 안전하게 중단될 수 있어야 한다.
  3. 블랙보드 기반 매개변수화: 액션 노드의 동작 매개변수는 하드코딩이 아닌 블랙보드 포트를 통해 외부에서 주입되어야 한다. 이를 통해 동일한 액션 노드 유형을 상이한 컨텍스트에서 재사용할 수 있다.
  4. 실행 시간의 예측 가능성: 동기적 액션 노드의 실행 시간은 Tick 주기를 초과하지 않아야 하며, 비동기적 액션 노드는 Running 상태를 적절히 활용하여 Tick 주기의 실시간 제약을 준수하여야 한다.
  5. 오류 처리의 명확성: 작업 실패 시 Failure를 반환하되, 실패 원인에 대한 정보를 블랙보드에 기록하여 상위 수준의 예외 처리 또는 복구 메커니즘이 활용할 수 있도록 하여야 한다.

9. 액션 노드의 로봇 공학적 의의

액션 노드는 행동 트리의 추상적 의사결정 논리를 로봇 시스템의 구체적 물리적 행동으로 변환하는 실체화(Materialization) 계층이다. 제어 흐름 노드가 “무엇을 할 것인가“의 논리를 정의한다면, 액션 노드는 “어떻게 할 것인가“의 실행을 담당한다.

로봇 공학에서 전형적인 액션 노드의 예시는 다음과 같다:

액션 노드기능
NavigateToPose로봇을 목표 자세(위치 및 방향)로 이동시킨다.
PickObject로봇 팔이 대상 객체를 파지한다.
PlaceObject로봇 팔이 파지한 객체를 지정 위치에 배치한다.
Spin로봇이 제자리에서 회전하여 장애물 회피를 시도한다.
Wait지정된 시간 동안 대기한다.
ComputePathToPose전역 경로 계획기를 호출하여 경로를 계산한다.
ClearCostmap비용 지도(Costmap)의 장애물 데이터를 초기화한다.

이러한 액션 노드들은 행동 트리의 조합적 구성을 통해 복잡한 로봇 임무—예를 들어, 탐색, 물체 운반, 순찰 등—를 체계적으로 구현할 수 있는 기본 단위가 된다.


참고 문헌

  • Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Marzinotto, A., Colledanchise, M., Smith, C., & Ögren, P. (2014). “Towards a Unified Behavior Trees Framework for Robot Control.” Proceedings of the IEEE International Conference on Robotics and Automation (ICRA), 5420–5427.
  • Faconti, D., & Contributors. (2024). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/
  • Macenski, S., Martín, F., White, R., & Clavero, J. G. (2020). “The Marathon 2: A Navigation System.” Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS).

v1.0