1293.45 Halt 요청의 발생 조건
1. Halt 발생 조건의 분류
행동 트리(Behavior Tree)에서 Halt 요청은 다양한 조건에 의해 발생한다. 이러한 조건은 크게 제어 노드의 실행 논리에 의한 내부적 발생과 트리 외부의 요인에 의한 외부적 발생으로 분류된다. 각 발생 조건을 정확히 이해하는 것은 Halt 처리 로직을 올바르게 구현하기 위한 전제이다(Colledanchise & Ogren, 2018).
2. Sequence 노드에서의 Halt 발생 조건
2.1 자식의 FAILURE 반환
Sequence 노드에서 자식이 FAILURE를 반환하면, 해당 자식 이후에 RUNNING 상태인 다른 자식에 Halt가 호출된다. WithMemory Sequence에서는 이전에 성공한 자식이 RUNNING일 수 없으므로, 주로 Parallel 내부의 Sequence 또는 ReactiveSequence에서 이 조건이 발생한다.
Sequence: Child_i 반환 FAILURE
→ RUNNING 상태인 모든 자식에 Halt 호출
→ Sequence 반환: FAILURE
2.2 ReactiveSequence에서의 조건 위반
ReactiveSequence에서 앞선 조건 노드가 FAILURE를 반환하면, 뒤쪽에서 RUNNING 중이던 액션 노드에 Halt가 호출된다.
ReactiveSequence:
Tick N-1: Cond(SUCCESS), Action(RUNNING) → RUNNING
Tick N: Cond(FAILURE) → Action에 Halt → FAILURE
3. Fallback 노드에서의 Halt 발생 조건
3.1 자식의 SUCCESS 반환
Fallback 노드에서 자식이 SUCCESS를 반환하면, 해당 자식 이후에 RUNNING 상태인 다른 자식에 Halt가 호출된다.
Fallback: Child_i 반환 SUCCESS
→ RUNNING 상태인 모든 자식에 Halt 호출
→ Fallback 반환: SUCCESS
3.2 ReactiveFallback에서의 우선순위 복귀
ReactiveFallback에서 이전에 FAILURE를 반환했던 상위 자식이 SUCCESS를 반환하면, 하위에서 RUNNING 중이던 자식에 Halt가 호출된다.
ReactiveFallback:
Tick N-1: Child_0(FAILURE), Child_1(RUNNING) → RUNNING
Tick N: Child_0(SUCCESS) → Child_1에 Halt → SUCCESS
4. Parallel 노드에서의 Halt 발생 조건
4.1 성공 임계값 도달
Parallel 노드에서 SUCCESS를 반환한 자식의 수가 성공 임계값에 도달하면, 아직 RUNNING 중인 나머지 자식에 Halt가 호출된다.
Parallel (success_count=2, 자식 3개):
성공 카운트 = 2 ≥ 임계값
→ RUNNING 중인 나머지 자식에 Halt
→ Parallel 반환: SUCCESS
4.2 실패 임계값 초과
Parallel 노드에서 FAILURE를 반환한 자식의 수가 실패 임계값을 초과하면, RUNNING 중인 나머지 자식에 Halt가 호출된다.
Parallel (success_count=2, 자식 3개):
실패 카운트 = 2 > (3 - 2) = 1
→ RUNNING 중인 나머지 자식에 Halt
→ Parallel 반환: FAILURE
5. 데코레이터 노드에서의 Halt 발생 조건
5.1 Timeout 초과
Timeout 데코레이터에서 설정된 시간이 초과되면, RUNNING 중인 자식에 Halt가 호출된다.
Timeout (5초):
경과 시간 > 5초
→ 자식에 Halt 호출
→ Timeout 반환: FAILURE
5.2 Repeat/Retry의 반복 간 리셋
Repeat 데코레이터에서 자식이 SUCCESS를 반환하고 다음 반복을 시작하기 전에, 자식에 Halt가 호출되어 IDLE 상태로 리셋된다.
Repeat (3회):
자식 반환 SUCCESS → 자식에 Halt (리셋) → 다음 반복 시작
6. 외부 요인에 의한 Halt 발생
6.1 트리 실행 중단
시스템 종료, 비상 정지, 트리 전환 등의 이유로 트리 전체의 실행을 중단해야 하는 경우, 루트 노드에 Halt가 호출되어 트리 전체에 전파된다.
// 트리 실행 중단
tree.haltTree(); // 루트에서 모든 RUNNING 자식으로 Halt 전파
6.2 동적 트리 전환
실행 중인 행동 트리를 다른 트리로 전환하는 경우, 현재 트리의 모든 RUNNING 노드에 Halt가 호출된 후 새로운 트리가 시작된다.
6.3 부모의 Halt에 의한 연쇄 전파
상위 제어 노드가 Halt를 수신하면, 자신의 RUNNING 자식에 Halt를 전파한다. 이 전파는 재귀적으로 수행되어 서브트리 전체에 영향을 미친다.
Root에 Halt 호출:
→ Sequence(RUNNING)에 Halt
→ Parallel(RUNNING)에 Halt
→ ActionA(RUNNING)에 Halt
→ ActionB(RUNNING)에 Halt
→ Decorator(IDLE)에는 Halt 불필요
7. 제어 노드별 Halt 발생 조건 종합
| 제어 노드 | Halt 발생 조건 | Halt 대상 |
|---|---|---|
| Sequence | 자식 FAILURE 반환 | RUNNING 중인 자식 |
| Fallback | 자식 SUCCESS 반환 | RUNNING 중인 자식 |
| ReactiveSequence | 앞선 자식 FAILURE (재평가) | 뒤쪽 RUNNING 자식 |
| ReactiveFallback | 앞선 자식 SUCCESS (재평가) | 뒤쪽 RUNNING 자식 |
| Parallel | 임계값 도달/초과 | 나머지 RUNNING 자식 |
| Timeout | 시간 초과 | 자식 |
| Repeat/Retry | 반복 간 리셋 | 자식 |
8. Halt 발생 빈도에 영향을 미치는 요인
8.1 제어 노드의 유형
Reactive 노드는 매 Tick마다 이전 자식을 재평가하므로, 환경 변화에 따라 Halt 발생 빈도가 높아진다. WithMemory 노드는 이전 자식을 건너뛰므로 Halt 발생 빈도가 상대적으로 낮다.
8.2 환경의 동적 변화 정도
조건의 변화 빈도가 높을수록, Reactive 노드에서의 Halt 발생 빈도가 증가한다. 안정적인 환경에서는 조건이 일관되게 유지되므로 Halt가 거의 발생하지 않는다.
8.3 비동기 작업의 완료 시간
비동기 액션의 실행 시간이 길수록, 해당 액션이 RUNNING 상태를 유지하는 기간이 길어져 Halt를 수신할 가능성이 높아진다.
9. Halt와 안전성의 관계
Halt 메커니즘은 로봇 시스템의 안전성을 보장하는 핵심 요소이다. 안전 조건이 위반되었을 때 RUNNING 중인 모든 작업이 신속하게 중단되어야 하며, 이는 Halt의 올바른 구현에 의존한다. Halt가 적시에 발생하지 않거나, Halt 처리가 불완전하면 안전 위반 상태에서 작업이 계속 진행되는 위험이 발생한다.
참고 문헌
- 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/