1291.39 행동 트리의 반환 상태 (Status) 정의
1. 반환 상태의 기본 개념
행동 트리(Behavior Tree, BT)에서 반환 상태(return status)는 각 노드가 Tick 신호를 처리한 후 부모 노드에게 보고하는 이산적 결과값이다. 반환 상태는 행동 트리의 실행 흐름을 제어하는 핵심 메커니즘으로서, 제어 흐름 노드가 자식 노드들의 반환 상태에 기반하여 다음 행동을 결정하는 근거가 된다.
행동 트리의 표준 정의에서 반환 상태는 정확히 세 가지 값으로 구성되는 유한 집합이다.
\mathcal{S} = \{\text{Success}, \text{Failure}, \text{Running}\}
모든 노드 N은 Tick을 수신한 후 \mathcal{S} 집합의 원소 중 하나를 반환한다. 이 삼진(ternary) 상태 체계는 행동 트리의 설계에서 가장 근본적인 의미론적 기반을 구성한다.
2. 세 가지 반환 상태의 형식적 정의
2.1 Success
Success는 해당 노드에 위임된 작업이 성공적으로 완료되었음을 나타내는 상태이다. 액션 노드의 경우 의뢰된 행동이 정상적으로 수행 완료되었음을, 조건 노드의 경우 평가된 조건이 참(true)임을 의미한다. 제어 흐름 노드의 경우, 자식 노드들의 반환 상태를 해당 노드의 의미론에 따라 조합한 결과가 성공 조건을 충족하였음을 나타낸다.
2.2 Failure
Failure는 해당 노드에 위임된 작업이 실패하였음을 나타내는 상태이다. 액션 노드의 경우 의뢰된 행동이 완료되지 못하였음을, 조건 노드의 경우 평가된 조건이 거짓(false)임을 의미한다. Failure는 시스템 오류(error)와는 구별되어야 한다. Failure는 정상적인 실행 흐름의 일부로서, 해당 행동이 현재 조건에서 수행 불가능하거나 목표를 달성하지 못하였음을 나타내는 의미론적 결과이다.
2.3 Running
Running은 해당 노드에 위임된 작업이 아직 진행 중이며, 결과가 확정되지 않은 과도적(transient) 상태임을 나타낸다. Running은 실시간 로봇 시스템에서 불가피한 상태로서, 물리적 행동의 실행에는 복수의 Tick 주기에 걸친 시간이 소요되기 때문이다. Running 상태는 현재 Tick에서는 최종 결과를 보고할 수 없으며, 후속 Tick에서 해당 노드를 재방문하여 진행 상태를 다시 확인하여야 함을 의미한다.
3. 반환 상태의 삼진 체계 설계 근거
행동 트리가 이진(binary) 체계가 아닌 삼진 체계를 채택한 이유는 실시간 로봇 시스템의 시간적 특성에 기인한다. 이진 체계(Success/Failure)만으로도 논리적 의사 결정은 표현 가능하나, 로봇의 물리적 행동은 시간을 소요하는 과정(process)이므로, 행동의 진행 중 상태를 표현할 수단이 필요하다.
만약 Running 상태가 존재하지 않는다면, 액션 노드는 행동이 완료될 때까지 호출 스레드를 차단(block)하여야 하며, 이는 행동 트리 전체의 Tick 순회를 중단시킨다. Tick 순회가 중단되면 행동 트리의 반응성(reactivity)이 상실되어, 환경 변화에 대한 즉각적 대응이 불가능해진다. Running 상태는 비차단(non-blocking) 실행 모델을 가능하게 하여, 행동 트리가 진행 중인 행동을 감시하면서도 환경 변화에 반응할 수 있는 체계를 제공한다.
4. 반환 상태와 제어 흐름 노드의 의미론적 결합
반환 상태의 삼진 체계는 제어 흐름 노드의 의미론과 결합하여 행동 트리 전체의 실행 로직을 형성한다. 각 제어 흐름 노드 유형이 자식의 반환 상태를 처리하는 방식을 정리하면 다음과 같다.
| 제어 흐름 노드 | 자식이 Success 반환 시 | 자식이 Failure 반환 시 | 자식이 Running 반환 시 |
|---|---|---|---|
| Sequence | 다음 자식에 Tick 전달 | 즉시 Failure 반환 | 즉시 Running 반환 |
| Fallback | 즉시 Success 반환 | 다음 자식에 Tick 전달 | 즉시 Running 반환 |
| Parallel | 성공 카운터 증가 | 실패 카운터 증가 | 계속 실행 |
이 표에서 확인할 수 있듯이, Success와 Failure는 Sequence와 Fallback 노드에서 대칭적(symmetric) 역할을 수행한다. Sequence 노드에서 Failure가 수행하는 단축 평가 역할을 Fallback 노드에서는 Success가 수행하며, 이 쌍대성(duality)은 행동 트리의 논리적 완결성을 보장한다.
5. 반환 상태의 전파 메커니즘
반환 상태는 리프 노드(실행 노드)에서 생성되어, 부모 노드를 거쳐 루트 노드까지 역방향으로 전파된다. Tick 신호가 루트에서 리프 방향으로 하향 전파되는 것과 반대로, 반환 상태는 리프에서 루트 방향으로 상향 전파된다.
이 양방향 전파를 형식적으로 표현하면 다음과 같다. 시각 t에서의 Tick 전파와 상태 반환은 다음과 같이 진행된다.
\text{tick}(r) \xrightarrow{\text{하향}} \text{tick}(n_1) \xrightarrow{\text{하향}} \cdots \xrightarrow{\text{하향}} \text{tick}(l)
\text{status}(l) \xrightarrow{\text{상향}} \text{status}(n_k) \xrightarrow{\text{상향}} \cdots \xrightarrow{\text{상향}} \text{status}(r)
여기서 r은 루트 노드, l은 리프 노드, n_i는 이들 사이의 경로에 위치하는 내부 노드이다. 각 내부 노드는 자식의 반환 상태를 자신의 의미론에 따라 변환하여 부모에게 전달한다.
6. 반환 상태와 노드 유형별 사용 패턴
6.1 액션 노드에서의 반환 상태
액션 노드는 세 가지 상태를 모두 사용한다. 최초 Tick에서 비동기 행동을 개시하고 Running을 반환하며, 이후 Tick에서 행동의 완료 여부를 확인하여 Success 또는 Failure를 반환한다.
6.2 조건 노드에서의 반환 상태
조건 노드는 Success와 Failure만을 사용하며, Running을 반환하지 않는 것이 표준적 관례이다. 이는 조건 평가가 즉시 완료되어야 한다는 설계 원칙에 기인한다.
6.3 Decorator 노드에서의 반환 상태 변환
Decorator 노드는 자식의 반환 상태를 변환하는 역할을 수행한다. 예를 들어, Inverter Decorator는 Success를 Failure로, Failure를 Success로 반전시키며, Running은 그대로 전달한다. 이를 형식적으로 표현하면 다음과 같다.
f_{\text{Inverter}}(s) = \begin{cases} \text{Failure} & \text{if } s = \text{Success} \\ \text{Success} & \text{if } s = \text{Failure} \\ \text{Running} & \text{if } s = \text{Running} \end{cases}
7. 반환 상태의 구현
BehaviorTree.CPP 라이브러리에서 반환 상태는 NodeStatus 열거형(enum)으로 정의된다.
enum class NodeStatus {
IDLE,
RUNNING,
SUCCESS,
FAILURE,
SKIPPED
};
여기서 IDLE은 노드가 아직 Tick을 수신하지 않은 초기 상태를, SKIPPED는 특정 조건에 의하여 노드의 실행이 생략된 상태를 나타낸다. IDLE과 SKIPPED는 표준 행동 트리 이론의 삼진 체계에는 포함되지 않으나, 실용적 구현에서 노드의 생명 주기(lifecycle)를 관리하기 위하여 도입된 확장 상태이다.
8. 참고 문헌
- 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).
- Faconti, D. (2022). BehaviorTree.CPP 4.x Documentation. https://www.behaviortree.dev/
- Iovino, M., Scukins, E., Styrud, J., Ögren, P., & Smith, C. (2022). “A Survey of Behavior Trees in Robotics and AI.” Robotics and Autonomous Systems, 154, 104096.
- Ögren, P. (2012). “Increasing Modularity of UAV Control Systems using Computer Game Behavior Trees.” AIAA Guidance, Navigation, and Control Conference.
버전: 2026-03-31