1292.48 ReactiveFallback 노드의 동작 원리
1. ReactiveFallback 노드의 정의
ReactiveFallback 노드는 행동 트리(Behavior Tree)의 제어 흐름 노드 중 하나로, 매 tick마다 항상 첫 번째 자식부터 재평가하는 변형된 Fallback 노드이다. 일반 Fallback 노드가 이전 tick에서 Running을 반환한 자식의 인덱스를 기억하고 해당 자식부터 실행을 재개하는 것과 달리, ReactiveFallback 노드는 매 tick마다 예외 없이 첫 번째 자식부터 순차적으로 실행한다. 이 재평가 특성에 의해 더 높은 우선순위의 대안이 가용해지면 즉각적으로 전환할 수 있다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).
2. ReactiveFallback 노드의 알고리즘
ReactiveFallback 노드의 동작을 의사 코드로 표현하면 다음과 같다.
function ReactiveFallback.tick():
for i = 0 to N:
status = child[i].tick()
if status == Running:
halt_children_after(i)
return Running
if status == Success:
halt_children_after(i)
return Success
return Failure
이 알고리즘은 ReactiveSequence의 알고리즘과 쌍대(dual) 관계에 있다. ReactiveSequence에서 Failure가 조기 종료를 유발하고 Success가 진행을 허용하는 것과 반대로, ReactiveFallback에서는 Success가 조기 종료를 유발하고 Failure가 진행을 허용한다. halt_children_after(i) 함수는 인덱스 i 이후의 Running 상태 자식에 halt를 요청한다 (Faconti, BehaviorTree.CPP Documentation, 2024).
3. 재평가에 의한 우선순위 복원
ReactiveFallback의 핵심적인 동작 특성은 우선순위 복원(priority restoration)이다. 이전에 Failure를 반환하여 건너뛰었던 상위 우선순위 대안이 환경 변화에 의해 Success 또는 Running을 반환할 수 있게 되면, 현재 실행 중인 하위 우선순위 대안을 즉시 중단하고 상위 우선순위 대안으로 전환한다.
4. 실행 흐름 예제
다음의 ReactiveFallback 노드를 고려한다.
ReactiveFallback [RF1]
├─ Sequence [S1: 최적 경로 추종]
│ ├─ Condition [C1: 최적 경로 존재]
│ └─ Action [A1: 최적 경로 추종]
└─ Action [A2: 대체 경로 추종]
4.1 최적 경로가 없어 대체 경로 사용
| Tick | C1 | S1 | A2 | RF1 |
|---|---|---|---|---|
| t_1 | Failure | Failure | Running | Running |
| t_2 | Failure | Failure | Running | Running |
매 tick마다 C1이 재평가된다. 최적 경로가 존재하지 않으므로 S1이 Failure를 반환하고, RF1은 A2(대체 경로 추종)에 tick을 전달한다.
4.2 최적 경로가 복원되어 전환
| Tick | C1 | S1 | A2 | RF1 |
|---|---|---|---|---|
| t_3 | Success | A1(Running) | halt 요청 | Running |
tick t_3에서 최적 경로가 발견되어 C1이 Success를 반환한다. S1이 Running을 반환하므로, RF1은 Running을 반환한다. 동시에 A2에 halt를 요청하여 대체 경로 추종을 중단한다. 상위 우선순위 대안(최적 경로)으로의 즉각적 전환이 이루어진다.
4.3 최적 경로가 다시 소실
| Tick | C1 | S1 | A1 | A2 | RF1 |
|---|---|---|---|---|---|
| t_4 | Failure | Failure | halt | Running (onStart) | Running |
최적 경로가 다시 소실되어 C1이 Failure를 반환하면, S1이 Failure를 반환하고, RF1은 A2에 새로 tick을 전달한다. A1에는 halt가 요청되고, A2는 onStart() 콜백을 통해 새로 활성화된다 (Colledanchise & Ögren, 2018).
5. 논리적 의미론
ReactiveFallback의 논리적 의미론은 “매 tick마다 가장 높은 우선순위의 성공 가능한 대안을 선택하라“로 요약된다. 일반 Fallback 노드가 “한 번 선택한 대안을 결과가 나올 때까지 고수하라“인 것과 대비된다.
이 의미론에 의해, ReactiveFallback은 환경 변화에 따라 매 tick마다 최선의 대안을 동적으로 선택하는 적응적 대안 선택(adaptive fallback selection) 메커니즘을 제공한다.
6. Halt 전파의 동작
ReactiveFallback에서 상위 우선순위 대안이 Success 또는 Running을 반환하면, 현재 Running 상태의 하위 우선순위 대안에 halt가 요청된다. 이 halt 전파는 다음의 규칙을 따른다.
- 인덱스 i의 자식이 Success 또는 Running을 반환한다.
- 인덱스 i + 1부터 N까지의 자식 중 Running 상태인 노드에 halt를 요청한다.
- halt된 노드는 Idle 상태로 복귀한다.
이 규칙에 의해, 한 시점에서 Running 상태에 있는 자식은 최대 하나이다.
7. 로봇 공학에서의 활용
7.1 동적 우선순위 기반 행동 선택
ReactiveFallback은 로봇이 가용한 대안 중 가장 높은 우선순위의 대안을 동적으로 선택하여야 하는 상황에서 활용된다. 센서 상태, 환경 조건, 시스템 자원의 변화에 따라 최선의 대안이 수시로 바뀌는 환경에서, ReactiveFallback은 매 tick마다 현재 시점에서의 최선 대안을 자동으로 선택한다.
7.2 다중 항법 전략 전환
ReactiveFallback
├─ Sequence: [GPS 기반 항법]
│ ├─ Condition: GPS 신호 양호
│ └─ Action: GPS 항법 수행
├─ Sequence: [비전 기반 항법]
│ ├─ Condition: 카메라 정상
│ └─ Action: 비전 항법 수행
└─ Action: 관성 항법 수행
GPS 신호가 양호하면 GPS 항법을 사용하고, GPS가 불가하면 비전 항법으로 전환하며, 카메라도 불가하면 관성 항법을 사용한다. GPS 신호가 복원되면 즉시 GPS 항법으로 복귀한다 (Faconti, 2024).
참고 문헌
- 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/