1297.1 조건 노드의 개념과 역할

1. 조건 노드의 정의

조건 노드(Condition Node)는 행동 트리(Behavior Tree)에서 환경 상태나 내부 변수의 참/거짓을 평가하는 리프 노드(leaf node)이다. 행동 트리의 실행 흐름에서 조건 노드는 특정 조건이 충족되었는지를 판별하여 SUCCESS 또는 FAILURE를 즉시 반환하며, RUNNING 상태를 반환하지 않는다는 점에서 액션 노드(Action Node)와 본질적으로 구별된다(Colledanchise & Ogren, 2018).

행동 트리의 형식적 정의에서 조건 노드는 다음과 같이 표현된다. 조건 노드 c는 함수 f_c: \mathcal{S} \rightarrow \{\text{SUCCESS}, \text{FAILURE}\}로 정의되며, 여기서 \mathcal{S}는 시스템의 상태 공간(state space)을 나타낸다. 이 함수는 현재 상태 s \in \mathcal{S}를 입력으로 받아 조건의 충족 여부에 따라 두 가지 상태 중 하나를 결정적으로 반환한다.

2. 행동 트리에서의 위치와 구조적 역할

행동 트리는 루트 노드(root node), 제어 노드(control node), 데코레이터 노드(decorator node), 그리고 리프 노드로 구성된다. 리프 노드는 다시 액션 노드와 조건 노드로 분류된다. 조건 노드는 트리의 말단에 위치하여 자식 노드를 갖지 않으며, 오직 부모 노드로부터 tick 신호를 수신하여 조건 평가를 수행한다.

제어 노드는 조건 노드의 반환값에 따라 실행 흐름을 결정한다. 예를 들어, Sequence 노드 하위에 배치된 조건 노드가 FAILURE를 반환하면 해당 Sequence의 실행이 즉시 중단된다. Fallback 노드 하위에서는 조건 노드가 SUCCESS를 반환하면 이후의 자식 노드 평가가 생략된다. 이러한 메커니즘을 통해 조건 노드는 행동 트리의 분기 결정(branching decision)을 제어하는 핵심 요소로 기능한다.

3. 조건 노드의 핵심 역할

3.1 환경 상태 감지

조건 노드의 가장 기본적인 역할은 로봇이 처한 환경의 상태를 감지하고 평가하는 것이다. 센서 데이터, 토픽 메시지, 블랙보드(blackboard)에 저장된 값 등을 참조하여 현재 상황이 특정 기준을 만족하는지를 판별한다. 장애물 존재 여부, 배터리 잔량 수준, 목표 지점 도달 여부 등이 대표적인 조건 평가 대상이다.

3.2 행동 실행의 전제 조건 검증

조건 노드는 액션 노드의 실행 전에 사전 조건(precondition)을 검증하는 역할을 수행한다. Sequence 노드의 첫 번째 자식으로 조건 노드를 배치하면, 해당 조건이 충족되지 않을 경우 후속 액션 노드의 실행이 원천적으로 차단된다. 이는 행동 트리가 안전하고 논리적인 순서로 동작하도록 보장하는 가드(guard) 패턴을 구현한다.

Sequence
├── ConditionNode: "배터리 충분한가?"
└── ActionNode: "목표 지점으로 이동"

위 구조에서 배터리 잔량이 임계값 이하이면 조건 노드가 FAILURE를 반환하여 이동 액션의 실행을 방지한다.

3.3 반응적 행동 제어

ReactiveSequence나 ReactiveFallback과 같은 반응적 제어 노드(reactive control node)와 결합할 때, 조건 노드는 매 tick마다 재평가되어 실시간으로 환경 변화에 대응하는 반응적 행동 제어를 가능하게 한다. 액션 노드가 RUNNING 상태를 유지하는 동안에도 조건 노드가 지속적으로 평가되므로, 조건 위반이 감지되면 진행 중인 액션을 즉시 중단(halt)할 수 있다.

ReactiveSequence
├── ConditionNode: "경로가 안전한가?"
└── ActionNode: "경로 추종"

이 패턴에서는 경로 추종 중에도 매 tick마다 안전 조건이 재평가되어, 경로 상에 장애물이 출현하면 추종 행동이 즉각 중단된다.

3.4 의사 결정 분기 제어

Fallback 노드와 결합된 조건 노드는 복수의 행동 대안 중 적절한 것을 선택하는 의사 결정 구조를 형성한다. 각 분기의 선두에 조건 노드를 배치하여 현재 상황에 가장 부합하는 행동을 선택하도록 트리를 구성할 수 있다.

Fallback
├── Sequence
│   ├── ConditionNode: "목표 근접한가?"
│   └── ActionNode: "정밀 접근"
├── Sequence
│   ├── ConditionNode: "경로 존재하는가?"
│   └── ActionNode: "경로 추종"
└── ActionNode: "경로 탐색"

이 구조에서 Fallback 노드는 상위 조건부터 순차적으로 평가하여, 가장 먼저 성공하는 분기의 행동을 실행한다.

4. 조건 노드와 상태 머신의 전이 조건 비교

유한 상태 머신(Finite State Machine, FSM)에서 상태 전이(transition)는 전이 조건(guard condition)에 의해 제어된다. 행동 트리의 조건 노드는 FSM의 전이 조건과 유사한 기능을 수행하지만, 본질적인 차이가 존재한다.

FSM에서 전이 조건은 특정 상태 쌍 사이에 고정적으로 결합되어 있어, 상태의 수가 증가하면 전이 조건의 수가 급격히 증가하는 상태 폭발(state explosion) 문제를 초래한다. 반면, 행동 트리에서 조건 노드는 트리 구조 내에서 독립적인 모듈로 존재하며, 위치를 변경하거나 재사용하는 것이 용이하다. 이러한 모듈성(modularity)은 행동 트리가 복잡한 로봇 임무를 표현할 때 FSM 대비 우월한 확장성을 제공하는 핵심 요인이다(Colledanchise & Ogren, 2018).

5. BehaviorTree.CPP에서의 조건 노드

BehaviorTree.CPP 라이브러리에서 조건 노드는 BT::ConditionNode 클래스를 기반으로 구현된다. 이 클래스는 BT::LeafNode를 상속하며, tick() 메서드만을 재정의하여 조건 평가 로직을 구현한다. halt() 메서드는 조건 노드에서 비활성화되어 있으며, 이는 조건 노드가 항상 즉시 완료되어 중단 처리가 불필요함을 반영한다.

class ConditionNode : public LeafNode
{
public:
    ConditionNode(const std::string& name, const NodeConfig& config)
        : LeafNode(name, config)
    {}

    virtual ~ConditionNode() = default;

    // halt은 조건 노드에서 아무 동작도 수행하지 않는다
    virtual void halt() override final
    {
        resetStatus();
    }
};

조건 노드는 tick() 메서드 내에서 NodeStatus::SUCCESS 또는 NodeStatus::FAILURE만을 반환해야 하며, NodeStatus::RUNNING을 반환할 경우 라이브러리 수준에서 예외가 발생한다. 이는 조건 노드의 즉시 반환 원칙을 강제하는 설계이다.

6. 조건 노드의 학술적 기반

조건 노드의 개념은 게임 인공지능(Game AI) 분야에서 처음 형식화되었으며, 이후 로봇공학에 본격적으로 도입되었다. Marzinotto 등(2014)은 행동 트리의 형식적 분석에서 조건 노드를 환경 관측(observation)의 추상화로 정의하였으며, 조건 노드의 존재가 행동 트리의 반응성(reactivity)을 보장하는 필수 요소임을 증명하였다.

Colledanchise와 Ogren(2018)은 저서 Behavior Trees in Robotics and AI: An Introduction에서 조건 노드를 행동 트리의 네 가지 기본 노드 유형 중 하나로 분류하고, 조건 노드가 행동 트리의 모듈성과 반응성을 동시에 달성하는 데 핵심적 역할을 수행한다고 기술하였다.

7. 참고 문헌

  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Marzinotto, A., Colledanchise, M., Smith, C., & Ogren, P. (2014). Towards a unified behavior trees framework for robot control. Proceedings of the 2014 IEEE International Conference on Robotics and Automation (ICRA), 5420-5427.
  • Faconti, D., & Colledanchise, M. (2022). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/

version: 0.1.0