OR 복합 조건의 Fallback 기반 구현 (OR Compound Condition via Fallback)
1. 개요
OR 복합 조건은 복수의 조건 중 하나 이상이 참(SUCCESS)이면 전체 조건이 참이 되는 논리적 선언(disjunction)이다. 행동 트리에서는 Fallback(또는 Selector) 제어 노드를 사용하여 OR 복합 조건을 구현한다. Fallback 노드는 자식 노드를 순차적으로 평가하며, 하나라도 SUCCESS를 반환하면 자신도 SUCCESS를 반환하므로, 논리 OR 연산과 동일한 의미론을 제공한다.
2. Fallback의 OR 의미론
2.1 진리표
| C_1 | C_2 | \ldots | C_n | \text{Fallback}(C_1, C_2, \ldots, C_n) |
|---|---|---|---|---|
| S | * | \ldots | * | S |
| F | S | \ldots | * | S |
| F | F | \ldots | S | S |
| F | F | \ldots | F | F |
Fallback은 SUCCESS를 만나면 나머지 자식을 평가하지 않고 즉시 SUCCESS를 반환한다(단락 평가).
3. 구현 예시
3.1 복구 트리거 조건
복수의 이상 조건 중 하나라도 감지되면 복구 행동을 유발하는 OR 복합 조건이다.
<BehaviorTree ID="RecoveryTrigger">
<Sequence>
<Fallback name="AnyAnomalyDetected">
<Condition ID="IsObstacleDetected"
topic_name="/scan"
detection_range="0.3"/>
<Condition ID="IsBatteryLow"
topic_name="/battery_state"
threshold="0.15"/>
<Condition ID="IsLocalizationLost"
topic_name="/amcl_pose"
max_xy_std="2.0"/>
</Fallback>
<Action ID="PerformRecovery"/>
</Sequence>
</BehaviorTree>
장애물 근접, 배터리 부족, 위치 추정 실패 중 하나라도 해당되면 복구 행동을 실행한다.
3.2 다중 센서 기반 장애물 감지
복수의 센서 중 하나라도 장애물을 감지하면 전체적으로 장애물이 존재하는 것으로 판정한다.
<Fallback name="ObstacleDetectedByAnySensor">
<Condition ID="IsObstacleDetected"
topic_name="/lidar/scan"
detection_range="1.0"/>
<Condition ID="IsObstacleDetected"
topic_name="/sonar/range"
detection_range="0.5"/>
<Condition ID="IsObstacleDetected"
topic_name="/depth_camera/points"
detection_range="0.8"/>
</Fallback>
3.3 ReactiveFallback와의 차이
ReactiveFallback은 매 tick마다 첫 번째 자식부터 재평가한다. OR 복합 조건에서 ReactiveFallback을 사용하면, 이전에 SUCCESS를 반환한 자식이 다음 tick에서 FAILURE로 변경되었을 때 후속 자식을 평가할 수 있다.
| 특성 | Fallback | ReactiveFallback |
|---|---|---|
| 재평가 | SUCCESS인 자식을 건너뜀 | 매 tick 처음부터 재평가 |
| 적합한 용도 | 일회성 OR 판정 | 지속적 OR 감시 |
4. 조건 평가 순서의 최적화
OR 복합 조건에서는 SUCCESS 확률이 높은 조건을 앞에 배치하면 평균 평가 횟수가 줄어든다. 또한 계산 비용이 낮은 조건을 우선 배치하여 전체 평가 효율을 높인다.
<!-- 최적화된 순서: SUCCESS 확률이 높고 비용이 낮은 순 -->
<Fallback>
<Condition ID="IsBoolTrue" value="{emergency_flag}"/> <!-- 비용: 낮음 -->
<Condition ID="IsBatteryLow"/> <!-- 비용: 낮음 -->
<Condition ID="IsPathInvalid"/> <!-- 비용: 높음 -->
</Fallback>
5. 설계 시 고려 사항
5.1 OR 조건과 행동의 결합
OR 복합 조건의 결과에 따라 행동을 분기하려면, Fallback의 결과를 상위 Sequence나 Fallback에서 활용하여야 한다. 조건만으로 구성된 Fallback은 순수한 OR 판정기로 기능하며, 액션 노드와 혼합하면 다른 의미론을 가지게 된다.
5.2 우선순위 OR
Fallback의 단락 평가 특성에 의해, 앞쪽 조건이 SUCCESS이면 뒤쪽 조건은 평가되지 않는다. 이를 활용하여 우선순위가 높은 조건을 먼저 배치하면, 우선순위 기반의 OR 판정을 구현할 수 있다.
5.3 모든 조건의 결과 수집
단락 평가로 인해 일부 조건이 평가되지 않을 수 있다. 모든 조건의 결과를 수집하여야 하는 경우(예: 진단 보고), Parallel 노드를 사용하여 모든 자식을 평가하거나, 각 조건의 결과를 블랙보드에 기록하는 별도의 메커니즘이 필요하다.
6. 참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-04 | 초안 작성 |