1291.38 행동 트리의 실행 노드 개요

1. 실행 노드의 정의

실행 노드(execution node)는 행동 트리(Behavior Tree, BT)에서 리프 노드(leaf node)로 기능하며, 행동 트리가 외부 환경과 직접 상호작용하는 접점이다. 제어 흐름 노드가 자식 노드들의 실행 순서와 조합 방식을 결정하는 내부적 역할을 수행하는 반면, 실행 노드는 실제 로봇의 물리적 행동을 발동하거나 환경의 상태를 확인하는 외부적 역할을 수행한다.

트리 자료 구조의 관점에서 실행 노드는 자식 노드가 존재하지 않는 말단 노드이다. 따라서 실행 노드는 Tick 신호를 더 이상 하위로 전파하지 않으며, 자신에게 도달한 Tick에 대하여 직접 처리를 수행하고 그 결과를 반환 상태(return status)의 형태로 부모 노드에게 보고한다.

2. 실행 노드의 분류

실행 노드는 기능적 역할에 따라 액션 노드(action node)와 조건 노드(condition node)의 두 가지 유형으로 분류된다.

2.1 액션 노드

액션 노드(action node)는 로봇의 구체적인 행동을 실행하는 노드이다. 액션 노드가 Tick을 수신하면, 로봇의 액추에이터 구동, 통신 메시지 전송, 내비게이션 목표 설정 등의 실제적 동작을 수행한다. 액션 노드는 세 가지 반환 상태를 모두 사용한다.

  • Success: 의뢰된 행동이 성공적으로 완료된 경우
  • Failure: 의뢰된 행동이 실패한 경우
  • Running: 행동이 아직 진행 중이며 완료되지 않은 경우

Running 상태의 존재는 액션 노드의 핵심적 특성이다. 로봇 시스템에서 대부분의 행동은 단일 Tick 주기 내에 완료되지 않는다. 예를 들어, 특정 좌표로의 이동은 수 초에서 수 분이 소요될 수 있으며, 이 기간 동안 액션 노드는 매 Tick마다 Running을 반환하다가, 이동이 완료되거나 실패하면 Success 또는 Failure를 반환한다.

액션 노드의 실행 방식에 따라 동기식(synchronous) 액션과 비동기식(asynchronous) 액션으로 구분할 수 있다.

2.1.1 동기식 액션 노드

동기식 액션 노드는 Tick이 인가되면 해당 행동을 즉시 실행하고 완료될 때까지 호출 스레드를 차단(block)한다. 이 방식은 단순하지만, 행동의 실행 시간이 길 경우 전체 행동 트리의 Tick 순회가 지연되어 실시간성이 저해된다. 따라서 동기식 액션 노드는 변수 설정, 로그 기록, 센서 값 갱신 등 즉시 완료되는 경량 연산에만 적합하다.

2.1.2 비동기식 액션 노드

비동기식 액션 노드는 행동의 실행을 별도의 스레드나 프로세스에 위임하고, Tick 호출 시에는 현재 진행 상태만 확인하여 반환한다. 최초 Tick 시 행동의 실행을 개시하고 Running을 반환하며, 이후 Tick에서는 행동의 완료 여부를 확인하여 Success, Failure 또는 Running을 반환한다. ROS2 환경에서는 액션 클라이언트(action client)를 통한 비동기 호출이 이 패턴에 해당한다.

2.2 조건 노드

조건 노드(condition node)는 환경의 특정 상태나 조건을 평가하는 노드이다. 조건 노드는 일반적으로 다음 두 가지 반환 상태만을 사용한다.

  • Success: 평가된 조건이 참(true)인 경우
  • Failure: 평가된 조건이 거짓(false)인 경우

조건 노드는 Running 상태를 반환하지 않는 것이 표준적 관례이다. 이는 조건의 평가가 즉시 완료되어야 한다는 설계 원칙에 기인한다. 조건 노드는 환경 상태의 조회, 센서 데이터의 임계값 비교, 블랙보드 변수의 확인 등에 활용된다.

조건 노드의 대표적 예시는 다음과 같다.

조건 노드평가 대상Success 조건
IsBatteryLow배터리 잔량잔량이 임계값 미만
IsGoalReached현재 좌표와 목표 좌표좌표 차이가 허용 오차 이내
IsPathClear경로 상의 장애물장애물 미검출
IsObjectDetected센서 인식 결과대상 물체 인식 성공

3. 실행 노드와 제어 흐름 노드의 관계

행동 트리의 구조적 관점에서 실행 노드와 제어 흐름 노드는 상호 보완적 역할을 수행한다. 제어 흐름 노드가 “어떤 순서로, 어떤 방식으로” 행동을 조합할 것인지를 결정한다면, 실행 노드는 “무엇을” 할 것인지를 구체적으로 정의한다. 이 분리는 관심사의 분리(separation of concerns) 원칙에 부합하며, 행동 트리의 모듈성과 재사용성을 보장하는 구조적 기반이 된다.

전형적인 행동 트리 패턴에서, Sequence 노드의 자식으로 조건 노드와 액션 노드를 배치하여 “조건이 충족되면 행동을 실행하라“라는 의미론을 표현한다. 이때 조건 노드는 선행 조건(precondition)의 역할을 수행하며, 조건이 Failure를 반환하면 Sequence 노드의 단축 평가에 의하여 액션 노드는 실행되지 않는다.

<Sequence>
    <IsPathClear/>      <!-- 조건 노드: 경로 확인 -->
    <MoveTo goal="{target_pose}"/>  <!-- 액션 노드: 이동 실행 -->
</Sequence>

4. 실행 노드의 구현 원칙

4.1 원자성

각 실행 노드는 단일하고 명확한 기능만을 수행하도록 설계하여야 한다. 하나의 실행 노드에 복수의 행동이나 조건을 포함하면 재사용성이 저하되고, 행동 트리의 구조적 이점이 상실된다. 예를 들어, “물체를 집고 이동하라“는 하나의 액션 노드가 아닌, “물체를 파지하라“와 “이동하라“라는 두 개의 독립적 액션 노드로 분리하여야 한다.

4.2 부작용 관리

액션 노드는 로봇의 물리적 상태를 변경하는 부작용(side effect)을 수반하므로, 행동 트리의 Tick 순회에 따른 반복 실행이나 중단(preemption)에 대한 안전한 처리가 필요하다. 특히, 비동기식 액션 노드는 행동의 중단 요청(halt)을 수신하였을 때, 진행 중인 행동을 안전하게 정리(cleanup)하는 로직을 구현하여야 한다.

4.3 상태 비보존

실행 노드는 원칙적으로 내부적 상태를 보존하지 않으며, 매 Tick마다 독립적으로 평가되어야 한다. 보존이 필요한 상태 정보는 블랙보드(blackboard)를 통하여 관리하며, 실행 노드는 블랙보드로부터 데이터를 읽고 쓰는 방식으로 상태 정보에 접근한다. 이 원칙은 실행 노드의 독립성과 재사용성을 보장한다.

5. 실행 노드와 ROS2의 연동

ROS2 기반 로봇 시스템에서 실행 노드는 ROS2의 통신 메커니즘과 긴밀하게 결합된다. 액션 노드는 ROS2 액션 클라이언트(action client)를 통하여 장시간 소요되는 비동기 행동을 호출하며, 조건 노드는 ROS2 토픽(topic)의 구독이나 서비스(service) 호출을 통하여 환경 상태를 확인한다.

BehaviorTree.CPP 라이브러리에서는 RosActionNodeRosServiceNode 등의 기반 클래스를 제공하여, ROS2 액션 및 서비스와의 연동을 용이하게 지원한다. 개발자는 이러한 기반 클래스를 상속하여 도메인 특화 실행 노드를 구현할 수 있다.

6. 참고 문헌

  • Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2022). BehaviorTree.CPP 4.x Documentation. https://www.behaviortree.dev/
  • Iovino, M., Scukins, E., Styrud, J., Ögren, P., & Smith, C. (2022). “A Survey of Behavior Trees in Robotics and AI.” Robotics and Autonomous Systems, 154, 104096.
  • 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).

버전: 2026-03-31