1291.41 Failure 반환 상태의 의미
1. Failure 상태의 정의
Failure는 행동 트리(Behavior Tree, BT) 노드가 Tick 신호를 처리한 후, 위임된 작업이 목표를 달성하지 못하였음을 부모 노드에게 보고하는 반환 상태이다. Failure는 행동 트리의 삼진 상태 체계 \mathcal{S} = \{\text{Success}, \text{Failure}, \text{Running}\}에서 부정적 종결(negative termination)을 나타내는 상태이다.
형식적으로, 노드 N이 시각 t에서 Tick을 수신하여 처리한 결과 Failure를 반환하는 조건은 다음과 같이 정의된다.
\text{tick}_t(N) = \text{Failure} \iff N\text{에 위임된 작업이 의도한 목표를 달성하지 못하였음}
2. Failure와 오류의 구별
행동 트리에서 Failure는 시스템 오류(error)나 예외(exception)와는 본질적으로 구별되는 개념이다. Failure는 정상적인 실행 흐름의 일부로서, 해당 행동이 현재 환경 조건에서 수행 불가능하거나 소기의 결과를 달성하지 못하였음을 나타내는 의미론적 결과이다.
시스템 오류는 소프트웨어의 비정상적 동작이나 하드웨어의 고장에 의하여 발생하는 예측 불가능한 사건이며, 일반적으로 예외 처리(exception handling) 메커니즘을 통하여 관리된다. 반면, Failure는 행동 트리의 설계 시점에서 예상되고 계획된 결과이며, 제어 흐름 노드가 이를 수신하여 대안적 행동을 탐색하는 정상적 분기(branching)의 기반이 된다.
예를 들어, 로봇의 경로 계획 노드가 Failure를 반환하는 것은 “현재 지도 정보를 기반으로 목표 지점까지의 유효한 경로가 존재하지 않는다“라는 정상적 판단 결과이다. 이와 달리, 경로 계획 알고리즘의 메모리 부족으로 인한 비정상 종료는 시스템 오류에 해당한다.
3. 노드 유형별 Failure의 의미론
3.1 액션 노드에서의 Failure
액션 노드(action node)가 Failure를 반환하는 것은, 해당 노드에 할당된 행동의 실행이 완료되었으나 목표를 달성하지 못하였음을 의미한다. 로봇공학에서의 대표적 Failure 사례는 다음과 같다.
| 액션 노드 | Failure 의미 |
|---|---|
| NavigateToPose | 목표 좌표까지의 이동이 장애물 등으로 불가 |
| GripperClose | 그리퍼 폐쇄 시도 후 물체 파지 실패 |
| ComputePathToPose | 유효한 경로 산출 불가 |
| DetectObject | 지정된 물체를 센서 범위 내에서 인식 실패 |
| Dock | 충전 스테이션과의 정렬 실패 |
비동기식 액션 노드의 경우, Running 상태를 거쳐 최종적으로 Failure를 반환할 수 있다. 이는 행동이 진행 중이었으나 결국 목표 달성에 실패하였음을 나타낸다. 또한, 행동의 개시 자체가 불가능한 경우에는 최초 Tick에서 즉시 Failure를 반환할 수도 있다.
3.2 조건 노드에서의 Failure
조건 노드(condition node)가 Failure를 반환하는 것은, 평가된 조건이 거짓(false)임을 의미한다.
\text{tick}_t(\text{Condition}) = \text{Failure} \iff \text{predicate}(t) = \text{false}
조건 노드에서의 Failure는 환경 상태가 기대 조건을 충족하지 않음을 나타내며, 이는 후속 행동의 실행 여부를 결정하는 선행 조건(precondition) 검사에서 핵심적 역할을 수행한다.
3.3 제어 흐름 노드에서의 Failure
Sequence 노드: 하나의 자식 노드라도 Failure를 반환하면 즉시 Failure를 반환한다. 이는 순차적 행동 중 하나의 단계가 실패하였으므로 전체 수행을 중단한다는 의미론을 구현한다.
\text{Sequence}(c_1, c_2, \ldots, c_n) = \text{Failure} \iff \exists i \in \{1, \ldots, n\}: \text{tick}(c_i) = \text{Failure}
Fallback 노드: 모든 자식 노드가 Failure를 반환하였을 때 Failure를 반환한다. 이는 제시된 모든 대안적 행동이 실패하였음을 의미한다.
\text{Fallback}(c_1, c_2, \ldots, c_n) = \text{Failure} \iff \forall i \in \{1, \ldots, n\}: \text{tick}(c_i) = \text{Failure}
4. Failure 상태의 제어 흐름에 대한 영향
Failure는 행동 트리의 제어 흐름에서 대안적 행동 탐색을 유발하는 핵심 동인(trigger)이다.
Sequence 노드에서 자식의 Failure는 단축 평가를 촉발하여, 나머지 후속 자식의 실행을 즉시 중단한다. 이는 선행 단계가 실패한 상황에서 후속 단계를 수행하는 것이 무의미하다는 논리에 기반한다.
Fallback 노드에서 자식의 Failure는 다음 대안 자식으로의 진행을 촉발한다. 이는 “현재 방법이 실패하였으므로 다음 방법을 시도하라“라는 의미론을 구현한다. 이러한 Failure 기반의 대안 탐색이 Fallback 노드의 본질적 기능이다.
이러한 제어 흐름 역할을 간결하게 표현하면, Sequence 노드에서 Failure는 조기 종료 조건(early termination condition)으로 기능하고, Fallback 노드에서 Failure는 순차적 진행을 촉진하는 통과 조건(pass-through condition)으로 기능한다. 이는 Success의 역할과 정확히 쌍대적(dual)이다.
5. Failure의 의미론적 설계 고려 사항
5.1 실패 원인의 분류
행동의 실패 원인이 다양한 경우, 단일 Failure 상태만으로는 실패의 구체적 원인을 상위 노드에 전달하기 어렵다. 이러한 한계를 극복하기 위하여, 실패 원인에 대한 상세 정보를 블랙보드(blackboard)에 기록하는 패턴이 활용된다. 예를 들어, 내비게이션 실패 시 “경로 미발견”, “장애물에 의한 차단”, “시간 초과” 등의 구체적 원인을 블랙보드의 오류 코드(error code) 변수에 저장하면, 후속 노드가 이 정보를 참조하여 적절한 복구 전략을 선택할 수 있다.
5.2 Failure의 적극적 활용
행동 트리 설계에서 Failure는 부정적 사건이 아니라, 대안적 행동을 탐색하기 위한 구조적 메커니즘으로 적극적으로 활용되어야 한다. Fallback 노드의 의미론은 Failure의 발생을 전제로 설계되어 있으며, Failure가 없다면 Fallback 노드의 대안 탐색 기능이 발휘되지 않는다.
따라서, 조건 노드와 액션 노드는 실행 환경의 상태에 따라 적절하게 Failure를 반환하도록 설계되어야 하며, 모든 상황에서 Success를 반환하려는 과도한 방어적 설계는 행동 트리의 반응성과 유연성을 저해한다.
5.3 Failure의 전파와 복구 전략
Failure가 최종적으로 루트 노드까지 전파되면, 행동 트리 전체의 실행 결과가 Failure가 된다. 이 경우 외부 실행 엔진이 적절한 복구 조치를 수행하여야 한다. 일반적인 복구 전략으로는 행동 트리의 재실행, 대체 행동 트리로의 전환, 또는 안전 행동(safe behavior)의 발동 등이 있다.
6. 참고 문헌
- Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- 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.
- 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.
버전: 2026-03-31