1295.10 FAILURE_ONE 정책의 정의와 동작
1. 형식적 정의
FAILURE_ONE 정책은 Parallel 노드의 자식 중 하나 이상이 FAILURE를 반환하면 Parallel 노드 자체가 즉시 FAILURE를 반환하도록 규정하는 실패 정책이다. N개의 자식 노드 C_1, C_2, \ldots, C_N에 대해 이 정책의 실패 조건은 다음과 같이 정의된다.
\text{FAILURE\_ONE}: \quad \exists i \in \{1, 2, \ldots, N\}, \quad \text{status}(C_i) = \text{FAILURE}
이는 실패 임계값 F_{\text{th}} = 1인 FAILURE_COUNT(K)의 특수 사례에 해당한다. FAILURE_ONE은 개별 자식의 실패에 대한 민감도가 가장 높은 정책으로, 단일 실패가 감지되는 즉시 전체 행동을 중단한다.
2. 상태 전이 규칙
2.1 FAILURE 반환 조건
N개의 자식 중 하나 이상이 FAILURE를 반환하면 Parallel 노드가 즉시 FAILURE를 반환한다.
\text{status}(P) = \text{FAILURE} \iff \sum_{i=1}^{N} \mathbb{1}[\text{status}(C_i) = \text{FAILURE}] \geq 1
2.2 SUCCESS 반환 조건
FAILURE_ONE이 독립적 실패 정책으로 사용될 때, 성공 조건은 별도로 설정된 성공 정책에 의해 결정된다. FAILURE_ONE은 성공 정책 SUCCESS_ALL(M = N)의 파생 실패 조건과 동치이다. M = N일 때 파생 실패 임계값은 N - N + 1 = 1이므로 FAILURE_ONE과 일치한다.
2.3 RUNNING 반환 조건
실패한 자식이 없고, 성공 조건도 아직 충족되지 않은 경우에 RUNNING을 반환한다.
3. 틱별 동작 추적 예시
4개의 자식 노드를 갖는 Parallel 노드에 SUCCESS_ALL 성공 정책과 FAILURE_ONE 실패 정책이 적용된 경우를 분석한다.
3.1 시나리오 1: 즉각적 실패 감지
| 틱 | C_1 | C_2 | C_3 | C_4 | Parallel 상태 |
|---|---|---|---|---|---|
| 1 | RUNNING | RUNNING | RUNNING | RUNNING | RUNNING |
| 2 | RUNNING | FAILURE | RUNNING | RUNNING | FAILURE |
틱 2에서 C_2가 FAILURE를 반환하는 즉시, FAILURE_ONE 정책에 의해 Parallel 노드가 FAILURE를 반환한다. RUNNING 상태인 C_1, C_3, C_4에 halt()가 호출되어 즉시 중단된다.
3.2 시나리오 2: 모든 자식 성공
| 틱 | C_1 | C_2 | C_3 | C_4 | Parallel 상태 |
|---|---|---|---|---|---|
| 1 | RUNNING | RUNNING | RUNNING | RUNNING | RUNNING |
| 2 | SUCCESS | RUNNING | SUCCESS | RUNNING | RUNNING |
| 3 | SUCCESS | SUCCESS | SUCCESS | RUNNING | RUNNING |
| 4 | SUCCESS | SUCCESS | SUCCESS | SUCCESS | SUCCESS |
FAILURE_ONE 정책 하에서 모든 자식이 실패 없이 순차적으로 성공하면, SUCCESS_ALL 성공 정책에 의해 모든 자식이 SUCCESS를 반환한 시점에 SUCCESS가 반환된다.
3.3 시나리오 3: 성공 진행 중 실패 발생
| 틱 | C_1 | C_2 | C_3 | C_4 | Parallel 상태 |
|---|---|---|---|---|---|
| 1 | RUNNING | RUNNING | RUNNING | RUNNING | RUNNING |
| 2 | SUCCESS | RUNNING | RUNNING | RUNNING | RUNNING |
| 3 | SUCCESS | SUCCESS | RUNNING | FAILURE | FAILURE |
C_1과 C_2가 성공적으로 완료되었지만, 틱 3에서 C_4가 FAILURE를 반환하면 FAILURE_ONE 정책에 의해 Parallel 노드가 즉시 FAILURE를 반환한다. 이미 성공한 C_1, C_2의 결과는 무효화되며, RUNNING 상태인 C_3도 중단된다.
4. 실패 감지의 즉시성
FAILURE_ONE 정책의 핵심 특성은 실패 감지의 즉시성(immediate failure detection)이다. 이 특성은 다음의 실질적 효과를 갖는다.
4.1 빠른 실패(fail-fast) 원칙
소프트웨어 공학의 빠른 실패 원칙과 동일한 철학을 따른다. 오류가 발생하면 가능한 한 빨리 감지하고 보고하여, 잘못된 상태에서의 지속적 실행을 방지한다. 로봇 시스템에서 이는 다음을 의미한다.
- 즉각적 행동 중단: 하위 행동의 실패가 감지되면 나머지 병렬 행동이 즉시 중단되므로, 불완전한 상태에서의 위험한 동작이 방지된다.
- 신속한 오류 전파: 실패 정보가 상위 행동 트리로 신속히 전달되어, 대안 행동이나 복구 절차가 조기에 개시된다.
- 리소스 낭비 방지: 실패가 확정된 상황에서 다른 자식이 계속 실행되는 불필요한 리소스 소비가 방지된다.
4.2 성공 누적의 무효화
FAILURE_ONE에서는 다수의 자식이 이미 성공했더라도 단일 자식의 실패로 전체가 즉시 실패한다. 이는 모든 자식의 성공이 필수적인 시나리오에서 적합한 동작이다.
5. 안전 민감 시스템에서의 활용
FAILURE_ONE 정책은 안전이 최우선인 로봇 시스템에서 핵심적 역할을 한다.
5.1 안전 감시 패턴
주 행동과 안전 감시를 병렬로 실행하되, 안전 위반이 감지되면 주 행동을 즉시 중단하는 패턴이다.
<Parallel success_count="2" failure_count="1">
<ExecuteManipulation/>
<MonitorForceLimit/>
</Parallel>
MonitorForceLimit이 힘·토크 센서에서 과부하를 감지하여 FAILURE를 반환하면, failure_count="1"에 의해 Parallel 노드가 즉시 FAILURE를 반환하고 ExecuteManipulation이 중단된다. 이는 로봇 매니퓰레이터의 과부하로 인한 장비 손상이나 인체 상해를 방지하는 안전 메커니즘이다.
5.2 다중 안전 조건 감시
복수의 안전 조건을 동시에 감시하고, 어느 하나라도 위반되면 즉시 중단하는 구조이다.
<Parallel success_count="1" failure_count="1">
<NavigateToGoal goal="{target}"/>
<MonitorCollisionRisk/>
<MonitorBatteryLevel/>
<MonitorCommunicationLink/>
</Parallel>
내비게이션 행동과 세 가지 안전 감시 행동을 병렬로 실행한다. 충돌 위험, 배터리 부족, 통신 단절 중 어느 하나라도 감지되면(해당 감시 노드가 FAILURE 반환) 즉시 내비게이션이 중단된다.
6. FAILURE_ALL과의 비교
| 속성 | FAILURE_ONE | FAILURE_ALL |
|---|---|---|
| 실패 임계값 | F_{\text{th}} = 1 | F_{\text{th}} = N |
| 실패 감지 속도 | 즉각적 | 지연적 |
| 실패 내성 | 없음 (0개 실패 허용) | 최대 (N-1개 실패 허용) |
| 적합한 시나리오 | 안전 최우선, 무결성 필수 | 대안 탐색, 내결함성 |
| 리소스 효율성 | 높음 (조기 중단) | 낮음 (모든 자식 완료까지 대기) |
| 대응 전략 | 비관적(pessimistic) | 낙관적(optimistic) |
FAILURE_ONE은 비관적 전략으로 최악의 경우를 가정하고 단일 실패에도 즉시 대응하는 반면, FAILURE_ALL은 낙관적 전략으로 모든 가능성이 소진될 때까지 실행을 지속한다.
7. SUCCESS_ONE과의 쌍대성
FAILURE_ONE은 SUCCESS_ONE과 쌍대 관계에 있다. 두 정책은 각각 단일 이벤트(실패 또는 성공)에 대한 즉각적 반응을 규정한다.
| 속성 | SUCCESS_ONE | FAILURE_ONE |
|---|---|---|
| 반응 대상 | 첫 번째 SUCCESS | 첫 번째 FAILURE |
| 반환 상태 | SUCCESS | FAILURE |
| 나머지 자식 처리 | halt() 호출 | halt() 호출 |
| 정책 특성 | 낙관적 성공 감지 | 비관적 실패 감지 |
8. 참고 문헌
- Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- Faconti, D., & contributors. (2024). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/
Version: 1.0-2026.04.03