1293.53 Fallback에서의 조기 종료 (Success 시)

1. Fallback 조기 종료의 원리

Fallback 노드에서 자식이 SUCCESS를 반환하면, Fallback은 나머지 자식을 평가하지 않고 즉시 SUCCESS를 반환한다. 이는 Fallback의 OR 의미론에 기반한다. 자식 중 하나라도 SUCCESS를 반환하면 Fallback 전체가 SUCCESS이므로, 하나의 자식이 성공하면 나머지 대안의 시도가 불필요하다(Colledanchise & Ogren, 2018).

2. 조기 종료의 상세 알고리즘

function Fallback.tick():
    for i = start_index to children.size() - 1:
        child_status = children[i].tick()
        
        if child_status == SUCCESS:
            // 조기 종료: 즉시 SUCCESS 반환
            haltRunningChildren()
            resetIndex()
            return SUCCESS
        
        if child_status == RUNNING:
            // 현재 자식에서 멈춤 (이후 자식 Tick 안 함)
            return RUNNING
    
    resetIndex()
    return FAILURE

3. 구체적 실행 흐름

3.1 첫 번째 대안의 즉시 성공

Fallback
├── NavigateDirect    (비동기)  → SUCCESS  ← 조기 종료
├── NavigateDetour    (비동기)  → (Tick 안 됨)
└── WaitAndRetry      (비동기)  → (Tick 안 됨)

직선 경로 네비게이션이 성공하면, 우회 경로나 대기 전략은 시도되지 않는다.

3.2 두 번째 대안의 성공

Fallback
├── NavigateDirect    (비동기)  → FAILURE  (직선 경로 차단)
├── NavigateDetour    (비동기)  → SUCCESS  ← 조기 종료
└── WaitAndRetry      (비동기)  → (Tick 안 됨)

직선 경로가 실패하고 우회 경로가 성공하면, 대기 전략은 시도되지 않는다.

4. 조기 종료와 Halt의 연동

4.1 ReactiveFallback에서의 조기 종료와 Halt

ReactiveFallback에서 상위 자식이 SUCCESS를 반환하여 조기 종료가 발생하면, 이전 Tick에서 RUNNING이었던 하위 자식에 Halt가 호출된다.

ReactiveFallback:
  Tick N-1:
    UseGPS.tick() → FAILURE
    UseVisualOdom.tick() → RUNNING
    반환: RUNNING

  Tick N:
    UseGPS.tick() → SUCCESS         ← 조기 종료
    → UseVisualOdom에 Halt 호출     (RUNNING → IDLE)
    반환: SUCCESS

GPS가 복구되어 SUCCESS를 반환하면, RUNNING 중이던 시각 주행 거리 측정이 Halt되고 GPS로 즉시 전환된다.

4.2 WithMemory Fallback에서의 조기 종료

WithMemory Fallback에서 현재 시도 중인 대안이 SUCCESS를 반환하면, 이후 대안은 Tick되지 않고 메모리 인덱스가 리셋된다.

Fallback (WithMemory):
  Tick 3: current_index=1
    NavigateDetour.tick() → SUCCESS  ← 조기 종료
    current_index = 0 (리셋)
    반환: SUCCESS

5. Sequence 조기 종료와의 대칭 구조

특성Sequence 조기 종료Fallback 조기 종료
종료 조건자식 FAILURE자식 SUCCESS
반환 상태FAILURESUCCESS
논리적 의미AND 단락 (하나라도 거짓)OR 단락 (하나라도 참)
건너뛴 자식후속 자식 전부후속 대안 전부
안전성 함의전제 조건 미충족 → 작업 방지대안 확보 → 추가 시도 불필요

6. 조기 종료의 성능 이점

Fallback 조기 종료에 의한 성능 이점은 시도하지 않은 대안들의 실행 비용의 합이다.

T_{saved} = \sum_{i=j+1}^{N-1} T_{child_i}

특히 하위 대안이 고비용 비동기 작업인 경우, 조기 종료에 의한 절약이 크다. 성공 확률이 높은 대안을 앞에 배치하면 조기 종료 빈도가 높아져 전체 성능이 향상된다.

7. 로봇공학에서의 적용

7.1 센서 우선순위 선택

<Fallback>
    <UseHighPrecisionLiDAR/>     <!-- 우선: 성공 시 조기 종료 -->
    <UseLowPrecisionLiDAR/>      <!-- 대안 1 -->
    <UseUltrasonicSensor/>       <!-- 대안 2 -->
    <UseDeadReckoning/>          <!-- 최후 수단 -->
</Fallback>

고정밀 LiDAR가 사용 가능하면(SUCCESS), 나머지 센서 대안은 시도되지 않는다.

7.2 복구 전략 선택

<Fallback>
    <AutoRecover/>               <!-- 자동 복구 시도 -->
    <RequestRemoteAssistance/>   <!-- 원격 지원 요청 -->
    <EnterSafeMode/>             <!-- 안전 모드 진입 -->
</Fallback>

자동 복구가 성공하면 원격 지원 요청이나 안전 모드 진입은 수행되지 않는다.

8. 조기 종료와 부수 효과

Fallback의 조기 종료는 하위 대안의 부수 효과를 방지한다. 예를 들어, 자동 복구가 성공한 상태에서 불필요한 원격 지원 요청을 전송하는 것을 방지한다. 이는 불필요한 자원 소비와 운영자 혼란을 예방한다.


참고 문헌

  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2022). BehaviorTree.CPP documentation and API reference. https://www.behaviortree.dev/