1294.32 Fallback 노드의 자식 실행 순서 (좌→우)
1. 좌에서 우로의 순차 평가
Fallback 노드는 자식 노드를 왼쪽에서 오른쪽(좌→우)으로 순차적으로 평가한다. 이 순서는 행동 트리의 XML 정의에서 자식이 기술된 순서와 동일하며, 내부적으로는 자식 배열의 인덱스 0부터 N-1까지의 순서에 해당한다. 이 평가 순서는 고정적이며, 실행 중에 동적으로 변경되지 않는다(Colledanchise & Ogren, 2018).
<Fallback>
<Action ID="FirstChild"/> <!-- 인덱스 0: 가장 먼저 평가 -->
<Action ID="SecondChild"/> <!-- 인덱스 1: 두 번째 평가 -->
<Action ID="ThirdChild"/> <!-- 인덱스 2: 세 번째 평가 -->
</Fallback>
2. 실행 순서와 우선순위의 관계
2.1 왼쪽 자식의 우선순위 우위
Fallback에서 왼쪽에 배치된 자식은 오른쪽에 배치된 자식보다 높은 우선순위를 가진다. 이는 Fallback의 조기 종료(short-circuit) 특성에 의해 보장된다. 왼쪽 자식이 SUCCESS를 반환하면 오른쪽 자식은 평가 기회를 얻지 못한다.
평가 순서: children[0] → children[1] → children[2] → ...
우선순위: 최고 ↓ ↓ 최저
이 우선순위 관계는 Fallback의 OR 의미론에서 자연스럽게 도출된다. OR 연산의 단락 평가에서 첫 번째 참(true) 값이 발견되면 나머지 평가가 중단되는 것과 동일하다.
2.2 Sequence와의 순서 비교
Sequence와 Fallback은 모두 좌→우 순서로 자식을 평가하지만, “계속 진행” 조건이 다르다.
| 구분 | 다음 자식으로 진행하는 조건 | 종료 조건 |
|---|---|---|
| Sequence | 현재 자식 SUCCESS | 현재 자식 FAILURE |
| Fallback | 현재 자식 FAILURE | 현재 자식 SUCCESS |
Sequence에서는 SUCCESS가 “다음으로“를 의미하고, Fallback에서는 FAILURE가 “다음으로“를 의미한다.
3. 실행 순서의 의미론적 해석
3.1 선호도 순서
Fallback의 좌→우 실행 순서는 선호도(preference) 순서를 표현한다. 가장 왼쪽 자식이 가장 선호되는 방안이며, 오른쪽으로 갈수록 덜 선호되는 대안이다.
<Fallback>
<Action ID="UsePrimaryPath"/> <!-- 가장 선호: 주 경로 -->
<Action ID="UseDetourPath"/> <!-- 차선: 우회 경로 -->
<Action ID="WaitForPathClear"/> <!-- 최후: 대기 -->
</Fallback>
로봇은 먼저 주 경로를 시도하고, 실패하면 우회 경로를, 그것도 실패하면 경로 정리를 기다린다.
3.2 비용 순서
대안의 비용이 다른 경우, 비용이 낮은 방안을 왼쪽에 배치하여 저비용 방안을 우선 시도하는 전략을 표현할 수 있다.
<Fallback>
<Action ID="SoftwareReset"/> <!-- 저비용: 소프트웨어 리셋 -->
<Action ID="HardwareReset"/> <!-- 중비용: 하드웨어 리셋 -->
<Action ID="FullReboot"/> <!-- 고비용: 전체 재부팅 -->
</Fallback>
3.3 안전성 순서
안전한 방안을 왼쪽에, 위험도가 높은 방안을 오른쪽에 배치하여 안전 우선 원칙을 구현할 수 있다.
<Fallback>
<Action ID="SlowSafeApproach"/> <!-- 안전: 저속 접근 -->
<Action ID="NormalApproach"/> <!-- 보통: 일반 접근 -->
<Action ID="AggressiveApproach"/> <!-- 위험: 공격적 접근 -->
</Fallback>
4. 조건-행동 패턴에서의 실행 순서
Fallback에서 조건 노드와 액션 노드를 조합할 때, 실행 순서는 조건 확인 후 행동 수행의 자연스러운 흐름을 형성한다.
<Fallback>
<Condition ID="IsGoalAlreadyAchieved"/> <!-- 먼저: 목표 달성 확인 -->
<Action ID="AchieveGoal"/> <!-- 그 다음: 목표 달성 행동 -->
</Fallback>
좌→우 순서에 의해, 조건이 먼저 평가되고 조건이 FAILURE(목표 미달성)인 경우에만 액션이 실행된다.
Tick 1: IsGoalAlreadyAchieved → SUCCESS → Fallback SUCCESS (액션 불필요)
Tick 2: IsGoalAlreadyAchieved → FAILURE → AchieveGoal 실행
5. 다중 조건-행동 쌍의 순서
Fallback 내부에 Sequence(조건-행동 쌍)를 배치하면, 우선순위 기반의 조건부 행동 선택이 구현된다.
<Fallback>
<Sequence>
<Condition ID="IsCloseToGoal"/>
<Action ID="DirectApproach"/>
</Sequence>
<Sequence>
<Condition ID="IsPathKnown"/>
<Action ID="FollowKnownPath"/>
</Sequence>
<Action ID="Explore"/>
</Fallback>
실행 순서:
- 목표에 가까운가? → 예: 직접 접근
- 경로를 아는가? → 예: 알려진 경로 추종
- 어느 것도 아니면 → 탐색
이 구조에서 Fallback의 좌→우 순서는 조건부 분기의 우선순위를 자연스럽게 표현한다.
6. 순서 변경의 영향
동일한 자식 집합이라도 배치 순서를 변경하면 Fallback의 동작이 달라진다.
6.1 순서 A: 안전 우선
<Fallback>
<Action ID="SafeStop"/>
<Action ID="SlowRetreat"/>
<Action ID="NormalOperation"/>
</Fallback>
SafeStop이 성공하면 나머지는 시도되지 않는다. 안전한 정지를 최우선으로 시도한다.
6.2 순서 B: 임무 우선
<Fallback>
<Action ID="NormalOperation"/>
<Action ID="SlowRetreat"/>
<Action ID="SafeStop"/>
</Fallback>
NormalOperation이 성공하면 나머지는 시도되지 않는다. 임무 수행을 최우선으로 시도한다.
두 순서는 동일한 자식을 포함하지만, 자식 배치 순서에 따라 로봇의 행동 특성이 “안전 우선” 또는 “임무 우선“으로 결정된다. 이는 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/