1292.59 조건 노드의 동작 원리

1. 조건 노드의 정의

조건 노드(Condition Node)는 행동 트리(Behavior Tree)의 리프 노드(leaf node) 중 하나로, 환경의 상태나 시스템의 조건을 검사하여 그 결과를 Success 또는 Failure로 반환한다. 조건 노드는 자식 노드를 갖지 않는 실행 노드(execution node)이며, 액션 노드와 함께 행동 트리의 리프를 구성한다. 액션 노드가 환경의 상태를 변경하는 수행자(effector)라면, 조건 노드는 환경의 상태를 관찰하는 관찰자(observer)이다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

2. 조건 노드의 반환 상태

조건 노드는 tick을 수신하면 다음 두 가지 반환 상태 중 하나만을 반환한다.

반환 상태의미
Success조건이 참(true)임을 나타낸다
Failure조건이 거짓(false)임을 나타낸다

조건 노드는 Running 상태를 반환하지 않는다. 이는 조건 노드의 핵심적 제약으로, 조건의 평가는 항상 즉각적으로 완료되어야 함을 의미한다. 조건의 평가에 시간이 소요되는 경우(예: 원격 서버에 상태를 질의하는 경우), 해당 노드는 조건 노드가 아닌 액션 노드로 구현하여야 한다 (Faconti, BehaviorTree.CPP Documentation, 2024).

3. 알고리즘

조건 노드의 동작을 의사 코드로 표현하면 다음과 같다.

function ConditionNode.tick():
    result = evaluate_condition()
    if result == true:
        return Success
    else:
        return Failure

이 알고리즘은 단일 함수 호출로 완결되며, 내부 상태의 보존이나 다중 tick에 걸친 실행이 발생하지 않는다.

4. 조건 노드의 특성

4.1 즉각적 평가

조건 노드는 tick을 수신하면 즉각적으로 조건을 평가하고 결과를 반환한다. Running 상태를 반환하지 않으므로, 조건 노드의 실행은 단일 tick 내에서 완결된다. 이 특성은 조건 노드가 행동 트리의 tick 주기에 영향을 미치지 않음을 보장한다.

4.2 부작용 금지

조건 노드는 환경의 상태를 변경하는 부작용(side effect)을 수반하지 않아야 한다. 조건 노드는 순수하게 관찰과 판단만을 수행하며, 센서 데이터 읽기, 변수 값 비교, 상태 검사 등의 읽기 전용(read-only) 연산만을 수행한다. 이 원칙은 조건 노드가 제어 흐름 노드에 의해 임의의 빈도로 재평가될 수 있음을 전제로 한다 (Colledanchise & Ögren, 2018).

4.3 무상태성

조건 노드는 tick 간에 내부 상태를 유지하지 않는다. 매 tick에서 조건을 독립적으로 평가하며, 이전 tick의 평가 결과가 현재 tick의 평가에 영향을 미치지 않는다. 이 무상태적 특성은 조건 노드의 동작을 예측 가능하고 결정론적으로 만든다.

5. 제어 흐름 노드에서의 역할

조건 노드는 제어 흐름 노드의 자식으로 배치되어, 제어 흐름의 분기 결정에 관여한다.

5.1 Sequence에서의 전제 조건

Sequence 노드의 선행 자식으로 배치된 조건 노드는 후속 액션 노드의 실행 전제 조건(precondition)을 검사한다.

Sequence
 ├─ Condition [C1: 배터리 잔량 충분]    ← 전제 조건
 └─ Action [A1: 임무 수행]

C1이 Success를 반환하면 A1이 실행되고, Failure를 반환하면 A1은 실행되지 않는다.

5.2 Fallback에서의 대안 조건

Fallback 노드의 자식 Sequence 내에 배치된 조건 노드는 해당 대안의 적용 가능 조건을 정의한다.

Fallback
 ├─ Sequence
 │   ├─ Condition [C1: GPS 가용]
 │   └─ Action [A1: GPS 항법]
 └─ Sequence
     ├─ Condition [C2: 비전 가용]
     └─ Action [A2: 비전 항법]

5.3 ReactiveSequence에서의 지속적 감시

ReactiveSequence 노드의 선행 자식으로 배치된 조건 노드는 매 tick마다 재평가되어, 조건이 위반되면 후속 액션 노드를 즉시 중단시킨다.

ReactiveSequence
 ├─ Condition [C1: 장애물 없음]    ← 매 tick 재평가
 └─ Action [A1: 전진 이동]

C1이 Failure를 반환하면, Running 상태의 A1에 halt가 요청되어 즉시 이동이 중단된다 (Faconti, 2024).

6. 조건 노드의 입력 원천

조건 노드가 조건을 평가하기 위해 참조하는 입력의 원천은 다음과 같다.

입력 원천설명예시
블랙보드 변수행동 트리의 공유 데이터목표 좌표, 동작 모드
센서 데이터외부 센서로부터의 측정값거리 센서 값, 카메라 데이터
시스템 상태로봇 내부 시스템의 상태배터리 잔량, 통신 상태
외부 파라미터구성 파라미터임계값, 허용 범위

조건 노드는 이러한 입력을 읽기 전용으로 접근하여 조건을 평가한다.

7. 액션 노드와의 비교

속성조건 노드액션 노드
환경 변경없음 (읽기 전용)있음 (부작용 수반)
Running 반환불가가능 (비동기 액션)
Halt 처리불필요필요 (비동기 액션)
실행 시간즉각적즉각적 또는 장시간
역할상태 관찰행동 수행

조건 노드와 액션 노드의 구분은 행동 트리의 설계에서 관찰(observation)과 행동(action)의 분리 원칙을 반영한다. 이 분리를 통해 제어 흐름 노드는 조건의 재평가가 부작용을 유발하지 않음을 보장받으며, ReactiveSequence나 ReactiveFallback과 같은 반응형 노드에서 조건을 안전하게 반복 평가할 수 있다 (Colledanchise & Ögren, 2018).

8. 로봇 공학에서의 활용

8.1 안전 조건 검사

로봇의 안전 관련 조건을 지속적으로 검사하는 데 조건 노드가 활용된다. 배터리 잔량, 온도, 장애물 근접 여부, 비상 정지 신호 등의 안전 조건은 조건 노드로 구현되어 ReactiveSequence의 선행 자식으로 배치된다.

8.2 환경 상태 판별

로봇이 동작하는 환경의 상태를 판별하는 데 조건 노드가 활용된다. 목표 도달 여부, 물체 감지 여부, 통신 가용성 등의 환경 상태는 조건 노드를 통해 검사되며, 그 결과에 따라 제어 흐름이 결정된다.

8.3 블랙보드 기반 조건

블랙보드에 저장된 변수의 값을 검사하는 조건 노드는 행동 트리 내부의 데이터 흐름에 기반한 의사 결정을 가능하게 한다. 이전 액션 노드가 블랙보드에 기록한 결과를 후속 조건 노드가 검사하여 제어 흐름을 분기시키는 패턴이 대표적이다 (Faconti, 2024).


참고 문헌

  • Colledanchise, M. & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2024). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/