1292.12 조건 노드 (Condition Node)의 개요

1. 서론

조건 노드(Condition Node)는 행동 트리(Behavior Tree)의 실행 노드(Execution Node) 중 하나로, 특정 조건의 참·거짓을 평가하여 그 결과를 반환 상태로 생성하는 리프 노드(Leaf Node)이다. 액션 노드(Action Node)가 로봇 시스템의 물리적 행동을 수행하는 데 반해, 조건 노드는 환경 상태, 센서 데이터, 내부 변수 등에 대한 논리적 판별을 수행한다. 본 절에서는 조건 노드의 정의, 동작 원리, 핵심 제약 조건, 그리고 행동 트리 내에서의 역할을 형식적으로 기술한다.

2. 조건 노드의 정의

조건 노드는 Tick을 수신하였을 때 지정된 논리적 조건(Logical Condition)을 평가하고, 조건이 참이면 Success를, 거짓이면 Failure를 반환하는 노드이다. 형식적으로, 조건 노드 C는 다음과 같이 정의된다:

C : (\text{Tick}, \Sigma) \rightarrow (\{\text{Success}, \text{Failure}\}, \Sigma)

여기서 \Sigma는 시스템 상태를 나타내며, 조건 노드의 실행 전후로 시스템 상태가 동일하게 유지되는 것(\Sigma \rightarrow \Sigma)이 핵심 특성이다. 이는 조건 노드가 부작용(Side Effect)을 갖지 않는 순수 함수(Pure Function)로 모델링됨을 의미한다.

3. 조건 노드의 반환 상태

조건 노드는 오직 두 가지 반환 상태만을 생성한다:

반환 상태의미
Success평가된 조건이 참(True)이다.
Failure평가된 조건이 거짓(False)이다.

조건 노드는 Running 상태를 반환하지 않는다. 이는 조건 평가가 단일 Tick 주기 내에서 즉각적으로(Instantaneously) 완료되어야 한다는 제약에 기인한다. Running 상태의 반환이 불허되므로, 조건 노드는 항상 동기적(Synchronous) 실행 모델을 따른다.

C : \text{Tick} \rightarrow \{\text{Success}, \text{Failure}\} \quad (\text{Running} \notin \text{Range}(C))

4. 부작용 금지 원칙

4.1 원칙의 정의

조건 노드의 가장 중요한 설계 제약은 부작용 금지 원칙(No Side Effect Principle)이다. 조건 노드는 시스템의 상태를 어떠한 방식으로도 변경하여서는 안 된다. 부작용 금지의 대상에는 다음이 포함된다:

  • 로봇 하드웨어의 물리적 상태 변경 (모터 구동, 액추에이터 제어 등)
  • 블랙보드(Blackboard)에 대한 값 기록 (읽기만 허용)
  • 외부 서비스에 대한 상태 변경 요청
  • 파일 시스템, 데이터베이스 등 영구 저장소에 대한 쓰기 작업
  • ROS2 토픽 발행을 통한 제어 명령 전송

4.2 원칙의 이론적 근거

부작용 금지 원칙은 행동 트리의 결정론적 실행 보장과 직결된다. 조건 노드가 부작용을 수반하면, 동일한 행동 트리의 반복적 Tick에서 조건 평가의 결과가 조건 노드 자체의 이전 실행에 의해 변경될 수 있다. 이는 행동 트리의 실행 흐름을 비결정론적(Non-deterministic)으로 만들며, 특히 Reactive 계열의 제어 흐름 노드에서 매 Tick마다 조건 노드가 재평가될 때 심각한 문제를 야기한다.

형식적으로, 부작용 금지 원칙은 다음과 같이 표현된다:

\forall\, C \in \mathcal{C},\; \forall\, \Sigma : C(\text{Tick}, \Sigma) = (s, \Sigma) \quad \text{where } s \in \{\text{Success}, \text{Failure}\}

즉, 조건 노드의 실행은 시스템 상태 \Sigma를 항등 사상(Identity Mapping)으로 보존한다.

4.3 참조 투명성

부작용 금지 원칙을 만족하는 조건 노드는 참조 투명성(Referential Transparency)을 갖는다. 이는 동일한 시스템 상태 \Sigma에서 동일한 조건 노드를 실행하면 항상 동일한 반환 상태가 생성됨을 보장한다:

\Sigma_1 = \Sigma_2 \implies C(\text{Tick}, \Sigma_1) = C(\text{Tick}, \Sigma_2)

이 성질은 행동 트리의 정적 분석(Static Analysis), 도달 가능성 분석(Reachability Analysis), 모델 검증(Model Checking) 등 형식 검증 기법의 적용을 가능하게 한다.

5. 즉각적 평가의 특성

5.1 단일 Tick 내 완료

조건 노드의 평가는 반드시 단일 Tick 주기 내에서 완료되어야 한다. 이는 조건 노드가 Running 상태를 반환하지 않는 것과 직접 관련된다. 조건 평가에 장시간이 소요되면 전체 행동 트리의 Tick 주기가 지연되어, 실시간 제어 시스템의 시간적 제약(Temporal Constraint)을 위반할 수 있다.

5.2 평가 대상의 유형

조건 노드가 평가하는 조건의 유형은 다음과 같이 분류된다:

평가 유형설명예시
블랙보드 변수 비교블랙보드에 저장된 값을 읽어 특정 기준과 비교한다.배터리 잔량 \geq 임계값
센서 데이터 판별센서로부터 수신된 데이터를 기반으로 환경 조건을 판별한다.장애물 탐지 여부
상태 변수 확인로봇의 내부 상태 변수를 확인한다.목표 지점 도달 여부
시간 조건 확인경과 시간이나 타임스탬프를 기반으로 조건을 평가한다.작업 시작 후 t 초 경과 여부
논리 조합복수의 조건을 논리 연산자로 조합하여 평가한다.(\text{배터리} \geq 20\%) \land (\text{장애물 없음})

6. 조건 노드와 제어 흐름 노드의 상호작용

6.1 Sequence 노드에서의 전제 조건 역할

Sequence 노드의 자식으로 배치된 조건 노드는 후속 액션 노드의 실행을 위한 전제 조건(Precondition)으로 기능한다. 조건 노드가 Failure를 반환하면, Sequence 노드의 조기 종료(Short-Circuit) 규칙에 의해 후속 자식 노드들이 실행되지 않는다.

[Sequence]
   ├── [Condition: 배터리 충분?]     ← 전제 조건
   ├── [Condition: 경로 존재?]       ← 전제 조건
   └── [Action: 목표 지점 이동]      ← 실행 대상

6.2 Fallback 노드에서의 시도 조건 역할

Fallback 노드의 자식으로 배치된 조건 노드는 특정 조건이 이미 충족되었는지를 확인하는 역할을 한다. 조건 노드가 Success를 반환하면, Fallback 노드의 조기 종료 규칙에 의해 후속 대안 행동의 실행이 생략된다.

[Fallback]
   ├── [Condition: 이미 도착?]       ← 성공 시 후속 생략
   └── [Action: 목표 지점 이동]      ← 조건 미충족 시 실행

6.3 ReactiveSequence에서의 지속적 감시 역할

ReactiveSequence 노드의 자식으로 배치된 조건 노드는 매 Tick마다 재평가되어, 실행 중인 후속 액션 노드의 유효성을 지속적으로 감시하는 가드(Guard) 역할을 수행한다. 조건이 거짓으로 전환되면, Running 상태의 후속 액션 노드에 Halt가 전파되어 실행이 중단된다.

7. 조건 노드의 생명주기

조건 노드는 Running 상태를 반환하지 않으므로, 생명주기가 액션 노드에 비해 단순하다:

\text{Idle} \xrightarrow{\text{Tick}} \text{Success} \mid \text{Failure} \xrightarrow{} \text{Idle}

조건 노드는 Tick을 수신하면 즉시 평가를 수행하고 결과를 반환한 후, Idle 상태로 복귀한다. Running 상태를 경유하지 않으므로, onRunning 콜백과 onHalted 콜백은 조건 노드에서 호출되지 않는다.

8. 조건 노드의 설계 원칙

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

  1. 순수성 보장(Purity Guarantee): 조건 노드는 어떠한 부작용도 수반하지 않는 순수 함수로 구현하여야 한다. 블랙보드에 대한 읽기 연산만 허용되며, 쓰기 연산은 금지된다.
  2. 즉시 반환(Immediate Return): 모든 조건 평가는 단일 Tick 주기 내에서 완료되어야 한다. 외부 서비스 호출이나 장시간 소요 연산이 필요한 경우, 이를 별도의 비동기 액션 노드로 분리하고 결과를 블랙보드에 기록한 후, 조건 노드에서 블랙보드의 결과 값을 읽는 패턴을 사용하여야 한다.
  3. 단일 조건 원칙(Single Condition Principle): 하나의 조건 노드는 하나의 명확한 논리적 조건만을 평가하여야 한다. 복합 조건이 필요한 경우, 개별 조건 노드를 제어 흐름 노드(Sequence 또는 Fallback)로 조합하는 것이 바람직하다.
  4. 명확한 의미론(Clear Semantics): 조건 노드의 Success와 Failure가 의미하는 바가 명확하여야 한다. 노드의 명칭은 평가하는 조건을 직관적으로 반영하여야 한다 (예: IsBatteryLow, IsGoalReached, IsPathValid).

9. 조건 노드의 로봇 공학적 의의

조건 노드는 행동 트리에서 로봇의 인지(Perception)와 판단(Judgment)을 담당하는 감각적 계층(Sensory Layer)을 형성한다. 액션 노드가 “무엇을 할 것인가“를 실행한다면, 조건 노드는 “실행하여도 되는가” 또는 “실행할 필요가 있는가“를 판별한다.

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

조건 노드기능
IsBatteryLow배터리 잔량이 임계값 이하인지 평가한다.
IsGoalReached로봇이 목표 지점에 도달하였는지 판별한다.
IsPathValid현재 경로가 장애물에 의해 차단되지 않았는지 확인한다.
IsObjectDetected특정 객체가 센서에 의해 탐지되었는지 판별한다.
IsLocalizationValid위치 추정(Localization)의 신뢰도가 임계값 이상인지 확인한다.
IsEmergencyStop비상 정지 신호가 활성화되었는지 확인한다.

이러한 조건 노드들은 행동 트리 내에서 액션 노드의 전제 조건, 실행 중 감시 조건, 분기 판단 기준 등으로 활용되며, 로봇의 안전하고 적응적인 행동 제어를 가능하게 한다.


참고 문헌

  • 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/
  • Colledanchise, M., & Ögren, P. (2017). “How Behavior Trees Modularize Hybrid Control Systems and Generalize Sequential Behavior Compositions, the Subsumption Architecture, and Decision Trees.” IEEE Transactions on Robotics, 33(2), 372–389.

v1.0