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_1C_2C_3Parallel 상태
1RUNNINGRUNNINGRUNNINGRUNNING
2RUNNINGSUCCESSRUNNINGSUCCESS

틱 2에서 C_2가 SUCCESS를 반환하는 즉시 Parallel 노드가 SUCCESS를 반환한다. 이때 RUNNING 상태인 C_1C_3halt()가 호출되어 실행이 중단된다.

3.2 시나리오 2: 점진적 실패 후 최종 성공

C_1C_2C_3Parallel 상태
1RUNNINGRUNNINGRUNNINGRUNNING
2FAILURERUNNINGRUNNINGRUNNING
3FAILUREFAILURERUNNINGRUNNING
4FAILUREFAILURESUCCESSSUCCESS

C_1C_2가 순차적으로 실패하더라도, C_3가 아직 RUNNING 상태이므로 Parallel 노드는 RUNNING을 유지한다. 틱 4에서 C_3가 SUCCESS를 반환하면 Parallel 노드가 SUCCESS를 반환한다.

3.3 시나리오 3: 모든 자식 실패

C_1C_2C_3Parallel 상태
1RUNNINGRUNNINGRUNNINGRUNNING
2FAILURERUNNINGFAILURERUNNING
3FAILUREFAILUREFAILUREFAILURE

모든 자식이 FAILURE를 반환한 틱 3에서 비로소 Parallel 노드가 FAILURE를 반환한다. SUCCESS_ONE 정책에서는 모든 자식이 실패해야만 전체 실패가 확정되므로, 가능한 한 오래 성공 가능성을 유지한다.

4. 성공 감지의 즉시성과 실패 판정의 지연

SUCCESS_ONE 정책의 동작 특성은 SUCCESS_ALL 정책과 정확히 대칭적이다.

특성SUCCESS_ALLSUCCESS_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 노드와 “하나의 자식이 성공하면 전체가 성공한다“는 동일한 논리적 의미를 공유하지만, 실행 방식에서 차이가 존재한다.

비교 항목FallbackParallel (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