1292.50 ReactiveFallback과 일반 Fallback의 차이

1. 개요

ReactiveFallback 노드와 일반 Fallback 노드(FallbackWithMemory)는 동일한 논리합(OR) 의미론을 공유하지만, Running 상태에서의 후속 tick 처리 방식에서 근본적으로 다르다. 이 차이는 ReactiveSequence와 일반 Sequence의 차이와 쌍대(dual) 관계에 있으며, 대안 선택의 적응성(adaptivity)과 실행 안정성(stability) 사이의 설계 균형을 결정한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

2. 핵심 차이의 요약

속성일반 FallbackReactiveFallback
후속 tick 시작 위치이전 Running 자식부터항상 첫 번째 자식부터
이전 Failure 자식 재평가하지 않음매 tick마다 재평가
상위 우선순위 대안 복원불가즉각적 복원
tick당 실행 노드 수적음많음
halt 발생 빈도낮음높음
실행 안정성높음상대적으로 낮음

3. 대안 전환 동작의 차이

3.1 일반 Fallback의 대안 고수

일반 Fallback 노드는 Running 상태의 자식 인덱스를 기억하고, 후속 tick에서 해당 자식부터 실행을 재개한다. 이전에 Failure를 반환한 상위 우선순위 대안은 재평가되지 않으며, 해당 대안이 다시 가용해지더라도 현재 실행 중인 대안을 계속 수행한다.

Fallback [F1]
 ├─ Action [A1: 최적 경로]
 └─ Action [A2: 대체 경로]
TickA1A2F1비고
t_1FailureRunningRunningA1 실패, A2 사용
t_2(미평가)RunningRunningA1 재평가 안 함
t_3(미평가)SuccessSuccessA2로 완료

tick t_2에서 A1이 가용해졌더라도, 일반 Fallback은 A1을 재평가하지 않고 A2를 계속 실행한다 (Faconti, BehaviorTree.CPP Documentation, 2024).

3.2 ReactiveFallback의 동적 대안 전환

ReactiveFallback 노드는 매 tick마다 첫 번째 자식부터 재평가하므로, 상위 우선순위 대안이 가용해지면 즉시 전환한다.

ReactiveFallback [RF1]
 ├─ Action [A1: 최적 경로]
 └─ Action [A2: 대체 경로]
TickA1A2RF1비고
t_1FailureRunningRunningA1 실패, A2 사용
t_2Runninghalt 요청RunningA1 복원, A2 중단
t_3Success(Idle)SuccessA1로 완료

tick t_2에서 A1이 Running을 반환하면(최적 경로가 복원됨), RF1은 A2에 halt를 요청하고 A1으로 전환한다.

4. 실행 안정성의 차이

4.1 일반 Fallback의 안정성

일반 Fallback은 한 번 선택한 대안을 완료될 때까지 고수하므로, 대안 간의 빈번한 전환(thrashing)이 발생하지 않는다. 이는 실행의 안정성과 예측 가능성을 보장한다.

4.2 ReactiveFallback의 전환 위험

ReactiveFallback은 상위 대안의 가용성이 불안정한 경우, 매 tick마다 대안 간의 전환이 반복될 수 있다. 예를 들어, 상위 대안이 한 tick에서 Success를 반환하고 다음 tick에서 Failure를 반환하면, 현재 대안의 halt와 새로운 대안의 시작이 매 tick마다 반복된다. 이러한 진동(oscillation)은 로봇의 물리적 행동에 부정적인 영향을 미칠 수 있다 (Colledanchise & Ögren, 2018).

이 문제를 완화하기 위해, 상위 대안의 가용성 판단에 히스테리시스(hysteresis)를 적용하거나, 조건 노드에서 일정 시간 이상 조건이 유지된 경우에만 Success를 반환하도록 설계하는 방법이 사용된다.

5. 실행 효율의 차이

일반 Fallback은 Running 상태의 자식만 tick을 수신하므로 tick당 계산 비용이 최소화된다. ReactiveFallback은 매 tick마다 선행 자식을 모두 재평가하므로 추가적인 계산 비용이 발생한다. 선행 자식이 조건 노드로 구성된 경우 이 비용은 미미하지만, 계산 비용이 높은 액션 노드가 선행 자식인 경우 성능에 영향을 줄 수 있다.

6. 선택 기준

일반 Fallback을 사용하는 경우:

  • 한 번 선택한 대안을 완료될 때까지 유지하여야 하는 경우
  • 대안 간 빈번한 전환이 물리적 행동에 부정적인 영향을 주는 경우
  • 상위 대안의 재가용 여부를 감시할 필요가 없는 경우
  • 예시: 장시간 소요되는 복구 작업의 안정적 완료

ReactiveFallback을 사용하는 경우:

  • 상위 우선순위 대안이 가용해지면 즉시 전환하여야 하는 경우
  • 환경 변화에 따라 최선의 대안이 수시로 변하는 경우
  • 선행 자식이 계산 비용이 낮은 조건 노드인 경우
  • 예시: 센서 가용성에 따른 항법 전략의 동적 전환

7. ReactiveSequence/Sequence 차이와의 대칭성

ReactiveSequence와 일반 Sequence의 차이에서 Success와 Failure의 역할을 교환하면, ReactiveFallback과 일반 Fallback의 차이가 도출된다. 이 쌍대적 대칭성은 행동 트리의 체계적 설계 원리를 반영한다 (Faconti, 2024).

비교 쌍재평가 대상 상태중단 유발 상태
ReactiveSequence vs Sequence이전 Success 자식Failure 시 halt
ReactiveFallback vs Fallback이전 Failure 자식Success/Running 시 halt

참고 문헌

  • Colledanchise, M. & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2024). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/