데코레이터 노드의 분류 체계 (Classification System of Decorator Nodes)

데코레이터 노드의 분류 체계 (Classification System of Decorator Nodes)

1. 개요

데코레이터 노드의 분류 체계는 행동 트리에서 사용되는 다양한 데코레이터를 기능적 특성, 상태 보존 여부, 적용 대상 등의 기준에 따라 체계적으로 분류한 것이다. 이 분류는 적합한 데코레이터를 선택하고, 사용자 정의 데코레이터를 설계할 때 기존 분류 체계 내에서의 위치를 파악하는 데 도움을 준다.

2. 기능 기반 분류

2.1 상태 변환 데코레이터 (Status Transformation Decorators)

자식 노드의 반환 상태를 다른 상태로 변환하는 데코레이터이다.

데코레이터변환 규칙용도
Inverter\text{S} \leftrightarrow \text{F}, \text{R} \rightarrow \text{R}NOT 조건, 의미 반전
ForceSuccess* \rightarrow \text{S} (\text{R} 제외)실패 무시
ForceFailure* \rightarrow \text{F} (\text{R} 제외)강제 실패

(S=SUCCESS, F=FAILURE, R=RUNNING)

2.2 반복 제어 데코레이터 (Repetition Control Decorators)

자식 노드의 실행 횟수를 제어하는 데코레이터이다.

데코레이터동작종료 조건
RetryNodeFAILURE 시 재시도SUCCESS 또는 최대 시도 횟수 초과
RepeatNodeSUCCESS 시 반복FAILURE 또는 최대 반복 횟수 도달
RunOnce최초 1회만 실행첫 실행 완료
KeepRunningUntilFailureFAILURE까지 반복FAILURE 반환

2.3 시간 제어 데코레이터 (Time Control Decorators)

자식 노드의 실행 시점이나 시간을 제어하는 데코레이터이다.

데코레이터동작시간 매개변수
TimeoutNode실행 시간 제한최대 실행 시간 (ms)
Delay실행 전 지연지연 시간 (ms)
RateControllertick 빈도 제한주파수 (Hz)

2.4 조건부 실행 데코레이터 (Conditional Execution Decorators)

특정 조건에서만 자식을 실행하는 데코레이터이다.

데코레이터조건미충족 시
SkipUnlessUpdated입력 포트 변경이전 결과 반환
사전 조건 스크립트_skipIf, _failureIf설정된 결과 반환

3. 상태 보존 기반 분류

3.1 무상태 데코레이터 (Stateless Decorators)

내부 상태를 유지하지 않으며, 자식의 현재 반환값만으로 결과를 결정한다.

  • Inverter
  • ForceSuccess
  • ForceFailure

이 데코레이터들은 동일한 자식 반환값에 대해 항상 동일한 결과를 반환하므로, 순수 함수(pure function)의 특성을 가진다.

3.2 상태 유지 데코레이터 (Stateful Decorators)

내부 상태(카운터, 타이머, 플래그)를 유지하며, 이전 tick의 이력에 따라 동작이 달라진다.

  • RetryNode (재시도 카운터)
  • RepeatNode (반복 카운터)
  • TimeoutNode (경과 시간)
  • Delay (지연 타이머)
  • RunOnce (실행 완료 플래그)
  • RateController (마지막 실행 시각)

상태 유지 데코레이터는 halt() 시 내부 상태를 초기화하여야 한다.

4. 적용 대상 기반 분류

4.1 조건 노드 적용에 적합한 데코레이터

데코레이터적합성이유
Inverter매우 적합NOT 조건 구현
ForceSuccess적합조건 실패 무시
RateController적합비용 높은 조건의 평가 빈도 제한

4.2 액션 노드 적용에 적합한 데코레이터

데코레이터적합성이유
RetryNode매우 적합실패한 행동의 재시도
RepeatNode매우 적합반복 행동 구현
TimeoutNode매우 적합행동 실행 시간 제한
Delay적합행동 시작 전 지연

4.3 서브트리 적용에 적합한 데코레이터

데코레이터적합성이유
TimeoutNode매우 적합서브트리 전체의 시간 제한
RetryNode적합서브트리 실패 시 재시도
RunOnce적합초기화 서브트리의 일회 실행

5. BehaviorTree.CPP 4.x의 스크립트 기반 데코레이터

BehaviorTree.CPP 4.x에서는 스크립트를 통한 경량 데코레이터를 지원한다.

<Action ID="MoveBase"
        _skipIf="goal_reached == true"
        _failureIf="battery_low == true"
        _onSuccess="mission_complete = true"/>

_skipIf, _failureIf 등의 속성은 별도의 데코레이터 노드 없이 조건부 실행을 구현한다.

6. 사용자 정의 데코레이터의 분류 체계 배치

새로운 데코레이터를 설계할 때, 기존 분류 체계 내에서의 위치를 먼저 파악하여야 한다.

  1. 기능 분류: 상태 변환, 반복 제어, 시간 제어, 조건부 실행 중 어디에 해당하는가?
  2. 상태 보존 여부: 내부 상태를 유지하는가?
  3. 적용 대상: 조건 노드, 액션 노드, 서브트리 중 주된 적용 대상은 무엇인가?

이 분류를 통해 기존 데코레이터와의 중복을 방지하고, 일관된 설계 원칙을 적용할 수 있다.

7. 참고 문헌

  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/

버전날짜변경 사항
v0.12026-04-04초안 작성