1295.6 SUCCESS_ONE 정책의 정의와 동작
1. 형식적 정의
SUCCESS_ONE 정책은 Parallel 노드의 자식 중 하나 이상이 SUCCESS를 반환하면 Parallel 노드 자체가 SUCCESS를 반환하도록 규정하는 성공 정책이다. N개의 자식 노드 C_1, C_2, \ldots, C_N에 대해 이 정책의 성공 조건은 다음과 같이 정의된다(Colledanchise & Ögren, 2018).
\text{SUCCESS\_ONE}: \quad \exists i \in \{1, 2, \ldots, N\}, \quad \text{status}(C_i) = \text{SUCCESS}
이는 성공 임계값 M = 1인 SUCCESS_COUNT(M)의 특수 사례에 해당하며, 논리적으로 선언적(disjunctive) 평가, 즉 논리적 OR 연산과 동치이다.
2. 상태 전이 규칙
SUCCESS_ONE 정책 하에서 Parallel 노드의 상태 결정 규칙은 다음과 같다.
2.1 SUCCESS 반환 조건
N개의 자식 중 하나 이상이 SUCCESS를 반환하면 Parallel 노드가 즉시 SUCCESS를 반환한다.
\text{status}(P) = \text{SUCCESS} \iff \sum_{i=1}^{N} \mathbb{1}[\text{status}(C_i) = \text{SUCCESS}] \geq 1
2.2 FAILURE 반환 조건
모든 자식이 FAILURE를 반환해야 Parallel 노드가 FAILURE를 반환한다. M = 1일 때 실패 임계값은 N - M + 1 = N이므로, 모든 자식이 실패해야 전체 실패가 확정된다.
\text{status}(P) = \text{FAILURE} \iff \forall i \in \{1, \ldots, N\}, \quad \text{status}(C_i) = \text{FAILURE}
2.3 RUNNING 반환 조건
성공한 자식이 없고, 아직 모든 자식이 실패하지 않은 경우(즉, 하나 이상의 자식이 RUNNING 상태인 경우) Parallel 노드는 RUNNING을 반환한다.
\text{status}(P) = \text{RUNNING} \iff \nexists i : \text{status}(C_i) = \text{SUCCESS} \;\land\; \exists j : \text{status}(C_j) = \text{RUNNING}
3. 틱별 동작 추적 예시
3개의 자식 노드 C_1, C_2, C_3을 갖는 Parallel 노드에 SUCCESS_ONE 정책이 적용된 경우의 시나리오를 분석한다.
3.1 시나리오 1: 빠른 성공 감지
| 틱 | C_1 | C_2 | C_3 | Parallel 상태 |
|---|---|---|---|---|
| 1 | RUNNING | RUNNING | RUNNING | RUNNING |
| 2 | RUNNING | SUCCESS | RUNNING | SUCCESS |
틱 2에서 C_2가 SUCCESS를 반환하는 즉시 Parallel 노드가 SUCCESS를 반환한다. 이때 RUNNING 상태인 C_1과 C_3에 halt()가 호출되어 실행이 중단된다.
3.2 시나리오 2: 점진적 실패 후 최종 성공
| 틱 | C_1 | C_2 | C_3 | Parallel 상태 |
|---|---|---|---|---|
| 1 | RUNNING | RUNNING | RUNNING | RUNNING |
| 2 | FAILURE | RUNNING | RUNNING | RUNNING |
| 3 | FAILURE | FAILURE | RUNNING | RUNNING |
| 4 | FAILURE | FAILURE | SUCCESS | SUCCESS |
C_1과 C_2가 순차적으로 실패하더라도, C_3가 아직 RUNNING 상태이므로 Parallel 노드는 RUNNING을 유지한다. 틱 4에서 C_3가 SUCCESS를 반환하면 Parallel 노드가 SUCCESS를 반환한다.
3.3 시나리오 3: 모든 자식 실패
| 틱 | C_1 | C_2 | C_3 | Parallel 상태 |
|---|---|---|---|---|
| 1 | RUNNING | RUNNING | RUNNING | RUNNING |
| 2 | FAILURE | RUNNING | FAILURE | RUNNING |
| 3 | FAILURE | FAILURE | FAILURE | FAILURE |
모든 자식이 FAILURE를 반환한 틱 3에서 비로소 Parallel 노드가 FAILURE를 반환한다. SUCCESS_ONE 정책에서는 모든 자식이 실패해야만 전체 실패가 확정되므로, 가능한 한 오래 성공 가능성을 유지한다.
4. 성공 감지의 즉시성과 실패 판정의 지연
SUCCESS_ONE 정책의 동작 특성은 SUCCESS_ALL 정책과 정확히 대칭적이다.
| 특성 | SUCCESS_ALL | SUCCESS_ONE |
|---|---|---|
| 성공 감지 | 지연적 (모든 자식 완료 후) | 즉시적 (첫 성공 시) |
| 실패 감지 | 즉시적 (첫 실패 시) | 지연적 (모든 자식 실패 후) |
| 성공 민감도 | 낮음 (전원 필요) | 높음 (1개 충분) |
| 실패 내성 | 없음 (1개 실패로 전체 실패) | 높음 (전원 실패까지 유지) |
SUCCESS_ONE에서는 첫 번째 성공이 감지되는 즉시 나머지 자식이 중단되므로 성공 반응이 빠르다. 반면 실패 판정은 모든 자식의 실패가 확인될 때까지 지연되므로, 성공 가능성이 남아 있는 한 실행을 지속한다.
5. 로봇공학 적용 사례
5.1 주 행동과 보조 감시의 병행
가장 보편적인 SUCCESS_ONE 활용 패턴은 주 행동(primary action)과 보조 감시(auxiliary monitoring)를 병행하는 구조이다.
<Parallel success_count="1">
<NavigateToGoal goal="{target_pose}"/>
<MonitorBatteryLevel/>
</Parallel>
이 구조에서 NavigateToGoal이 목표 도달에 성공하면 Parallel 노드가 즉시 SUCCESS를 반환하고, MonitorBatteryLevel은 중단된다. MonitorBatteryLevel은 배터리 수준이 정상인 동안 RUNNING을 유지하고, 임계값 이하로 떨어지면 FAILURE를 반환하도록 설계된다. 그러나 SUCCESS_ONE 정책에서는 MonitorBatteryLevel의 실패만으로 Parallel 노드가 실패하지 않으므로, 이 패턴은 감시 결과에 의한 중단보다는 주 행동의 완료에 초점을 맞춘 구조이다.
5.2 대안적 접근 경로의 병렬 시도
복수의 대안적 방법을 동시에 시도하여 가장 먼저 성공하는 방법을 채택하는 패턴이다.
<Parallel success_count="1">
<PlanPathViaRRT/>
<PlanPathViaPRM/>
<PlanPathViaAPF/>
</Parallel>
RRT(Rapidly-exploring Random Tree), PRM(Probabilistic Roadmap), APF(Artificial Potential Field) 세 가지 경로 계획 알고리즘을 동시에 실행하여, 가장 먼저 유효한 경로를 생성한 알고리즘의 결과를 채택한다. 하나의 알고리즘이 성공하면 나머지는 즉시 중단된다.
5.3 경쟁적 행동 선택
복수의 행동 후보 중 가장 빠르게 완료되는 행동을 선택하는 경쟁적 병렬(competitive parallelism) 패턴이다.
<Parallel success_count="1">
<PickObjectFromLeft/>
<PickObjectFromRight/>
</Parallel>
매니퓰레이터가 좌측 또는 우측에서 물체를 파지(grasping)하는 두 가지 접근 방식을 동시에 시도하여, 먼저 성공하는 접근 방식을 채택한다.
6. Fallback 노드와의 비교
SUCCESS_ONE 정책을 적용한 Parallel 노드는 Fallback 노드와 “하나의 자식이 성공하면 전체가 성공한다“는 동일한 논리적 의미를 공유하지만, 실행 방식에서 차이가 존재한다.
| 비교 항목 | Fallback | Parallel (SUCCESS_ONE) |
|---|---|---|
| 실행 방식 | 순차적 (하나씩) | 논리적 동시적 (모두 매 틱) |
| 성공 시 동작 | 이후 자식 미실행 | 다른 자식도 동일 틱에서 실행될 수 있음 |
| 대안 시도 방식 | 이전 자식 실패 후 다음 시도 | 모든 대안 동시 시도 |
| 적합한 상황 | 순차적 대안 시도 | 동시적 대안 시도 |
Fallback은 C_1이 실패한 후에야 C_2를 시도하는 순차적 대안 탐색에 적합하고, SUCCESS_ONE Parallel은 모든 대안을 동시에 시도하여 가장 빠른 성공을 채택하는 동시적 대안 탐색에 적합하다.
7. 참고 문헌
- 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