데코레이터 노드의 분류 체계 (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)
자식 노드의 실행 횟수를 제어하는 데코레이터이다.
| 데코레이터 | 동작 | 종료 조건 |
|---|---|---|
RetryNode | FAILURE 시 재시도 | SUCCESS 또는 최대 시도 횟수 초과 |
RepeatNode | SUCCESS 시 반복 | FAILURE 또는 최대 반복 횟수 도달 |
RunOnce | 최초 1회만 실행 | 첫 실행 완료 |
KeepRunningUntilFailure | FAILURE까지 반복 | FAILURE 반환 |
2.3 시간 제어 데코레이터 (Time Control Decorators)
자식 노드의 실행 시점이나 시간을 제어하는 데코레이터이다.
| 데코레이터 | 동작 | 시간 매개변수 |
|---|---|---|
TimeoutNode | 실행 시간 제한 | 최대 실행 시간 (ms) |
Delay | 실행 전 지연 | 지연 시간 (ms) |
RateController | tick 빈도 제한 | 주파수 (Hz) |
2.4 조건부 실행 데코레이터 (Conditional Execution Decorators)
특정 조건에서만 자식을 실행하는 데코레이터이다.
| 데코레이터 | 조건 | 미충족 시 |
|---|---|---|
SkipUnlessUpdated | 입력 포트 변경 | 이전 결과 반환 |
| 사전 조건 스크립트 | _skipIf, _failureIf | 설정된 결과 반환 |
3. 상태 보존 기반 분류
3.1 무상태 데코레이터 (Stateless Decorators)
내부 상태를 유지하지 않으며, 자식의 현재 반환값만으로 결과를 결정한다.
InverterForceSuccessForceFailure
이 데코레이터들은 동일한 자식 반환값에 대해 항상 동일한 결과를 반환하므로, 순수 함수(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. 사용자 정의 데코레이터의 분류 체계 배치
새로운 데코레이터를 설계할 때, 기존 분류 체계 내에서의 위치를 먼저 파악하여야 한다.
- 기능 분류: 상태 변환, 반복 제어, 시간 제어, 조건부 실행 중 어디에 해당하는가?
- 상태 보존 여부: 내부 상태를 유지하는가?
- 적용 대상: 조건 노드, 액션 노드, 서브트리 중 주된 적용 대상은 무엇인가?
이 분류를 통해 기존 데코레이터와의 중복을 방지하고, 일관된 설계 원칙을 적용할 수 있다.
7. 참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-04 | 초안 작성 |