1295.5 SUCCESS_ALL 정책의 정의와 동작

1. 형식적 정의

SUCCESS_ALL 정책은 Parallel 노드의 모든 자식 노드가 SUCCESS 상태를 반환할 때에만 Parallel 노드 자체가 SUCCESS를 반환하도록 규정하는 성공 정책이다. N개의 자식 노드 C_1, C_2, \ldots, C_N에 대해 이 정책의 성공 조건은 다음과 같이 정의된다(Colledanchise & Ögren, 2018).

\text{SUCCESS\_ALL}: \quad \forall i \in \{1, 2, \ldots, N\}, \quad \text{status}(C_i) = \text{SUCCESS}

이는 성공 임계값 M = N인 SUCCESS_COUNT(M)의 특수 사례에 해당하며, 논리적으로 모든 자식 상태의 합집적(conjunctive) 평가, 즉 논리적 AND 연산과 동치이다.

2. 상태 전이 규칙

SUCCESS_ALL 정책 하에서 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}] = N

2.2 FAILURE 반환 조건

하나 이상의 자식이 FAILURE를 반환하면 Parallel 노드가 FAILURE를 반환한다. SUCCESS_ALL에서 M = N이므로, 실패 조건은 N - M = 0, 즉 하나의 실패만으로도 전체가 실패한다.

\text{status}(P) = \text{FAILURE} \iff \exists 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{FAILURE} \;\land\; \exists j : \text{status}(C_j) = \text{RUNNING}

3. 틱별 동작 추적 예시

3개의 자식 노드 C_1, C_2, C_3을 갖는 Parallel 노드에 SUCCESS_ALL 정책이 적용된 경우의 틱별 동작을 추적한다.

3.1 시나리오 1: 모든 자식이 순차적으로 완료

C_1C_2C_3Parallel 상태
1RUNNINGRUNNINGRUNNINGRUNNING
2SUCCESSRUNNINGRUNNINGRUNNING
3SUCCESSSUCCESSRUNNINGRUNNING
4SUCCESSSUCCESSSUCCESSSUCCESS

모든 자식이 SUCCESS를 반환한 틱 4에서 비로소 Parallel 노드가 SUCCESS를 반환한다.

3.2 시나리오 2: 중간에 하나의 자식이 실패

C_1C_2C_3Parallel 상태
1RUNNINGRUNNINGRUNNINGRUNNING
2SUCCESSRUNNINGRUNNINGRUNNING
3SUCCESSFAILURERUNNINGFAILURE

틱 3에서 C_2가 FAILURE를 반환하는 즉시, 나머지 RUNNING 상태인 C_3halt()가 호출되고 Parallel 노드는 FAILURE를 반환한다. SUCCESS_ALL 정책에서는 단 하나의 실패로도 전체 성공이 불가능해지므로, 조기 종료가 발생한다.

3.3 시나리오 3: 첫 틱에서 즉시 실패

C_1C_2C_3Parallel 상태
1FAILURE(틱 전달됨)(틱 전달됨)FAILURE

C_1이 첫 틱에서 FAILURE를 반환하면, 나머지 자식이 어떤 상태를 반환하든 Parallel 노드는 즉시 FAILURE를 반환한다. 단, 구현에 따라 C_2C_3에도 동일 틱에서 틱이 전달될 수 있으며, 이 경우 상태 수집 후 정책 평가 단계에서 FAILURE가 판정된다.

4. 실패 감지의 즉시성

SUCCESS_ALL 정책의 중요한 동작 특성은 실패 감지의 즉시성이다. M = N일 때 실패 임계값은 N - M + 1 = 1이므로, 단 하나의 자식이라도 FAILURE를 반환하면 Parallel 노드의 전체 실패가 즉각 확정된다. 이는 로봇 시스템에서 다음과 같은 함의를 갖는다.

  1. 조기 리소스 해제: 실패가 확정되면 아직 RUNNING 상태인 자식들이 즉시 중단되므로, 불필요한 계산 및 액추에이터 동작이 방지된다.
  2. 빠른 오류 전파: 하위 행동의 실패가 상위 행동 트리로 신속히 전파되어, 대안 행동이나 복구 절차가 조기에 개시될 수 있다.
  3. 안전성 보장: 부분적 실패 상태에서의 지속적 실행이 방지되어, 불완전한 상태에서의 위험한 동작이 예방된다.

5. 로봇공학 적용 사례

5.1 다중 센서 동기화 수집

로봇의 센서 융합(sensor fusion)을 위해 LiDAR, 카메라, IMU 데이터를 모두 성공적으로 수집해야 하는 경우에 SUCCESS_ALL 정책이 적합하다.

<Parallel success_count="3">
    <AcquireLidarScan/>
    <AcquireCameraFrame/>
    <AcquireIMUReading/>
</Parallel>

세 개의 센서 수집 노드 모두가 SUCCESS를 반환해야 후속 융합 처리가 진행된다. 하나의 센서라도 데이터 수집에 실패하면 불완전한 데이터로 융합을 시도하는 것을 방지한다.

5.2 초기화 시퀀스

로봇의 구동 시 여러 서브시스템을 동시에 초기화하고, 모든 서브시스템이 정상적으로 초기화되어야 운영 모드로 전환하는 경우이다.

<Parallel success_count="4">
    <InitializeMotorController/>
    <InitializeSensorDriver/>
    <InitializeCommunication/>
    <InitializeNavigationStack/>
</Parallel>

5.3 다중 로봇 동기화

다중 로봇 시스템에서 모든 로봇이 지정 위치에 도달해야 다음 협업 작업을 개시하는 경우이다.

<Parallel success_count="3">
    <Robot1_NavigateToPosition/>
    <Robot2_NavigateToPosition/>
    <Robot3_NavigateToPosition/>
</Parallel>

6. Sequence 노드와의 비교

SUCCESS_ALL 정책을 적용한 Parallel 노드는 Sequence 노드와 “모든 자식이 성공해야 전체가 성공한다“는 동일한 논리적 의미를 공유하지만, 실행 방식에서 근본적인 차이가 존재한다.

비교 항목SequenceParallel (SUCCESS_ALL)
실행 방식순차적 (하나씩)논리적 동시적 (모두 매 틱)
실패 시 동작즉시 중단, 이후 자식 미실행이후 자식도 동일 틱에서 실행됨
RUNNING 처리해당 자식에서 중단다른 자식도 계속 틱 수신
적합한 상황순서 의존적 행동독립적 병행 행동

Sequence는 이전 자식이 완료되어야 다음 자식이 실행되는 순서 의존적 패턴에 적합하고, SUCCESS_ALL 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