1292.80 Halt 메커니즘의 상세 동작
1. Halt 메커니즘의 정의
Halt 메커니즘은 행동 트리에서 Running 상태의 노드를 강제로 중단시키는 체계적인 절차이다. 이 메커니즘은 제어 흐름의 변화, 조건 위반, 시간 초과, 외부 중단 신호 등의 사유에 의해 작동하며, 중단 대상 노드와 그 하위 노드의 안전한 종료를 보장한다 (Faconti, BehaviorTree.CPP Documentation, 2024).
2. Halt의 동작 절차
Halt 메커니즘의 동작은 다음의 순서로 진행된다.
2.1 단계: Halt 요청 발생
상위 제어 흐름 노드가 하위 노드에 halt 요청을 발행한다. halt 요청은 Running 상태의 자식 노드에 대해서만 발행되며, Idle 상태의 노드에는 halt가 전달되지 않는다.
2.2 단계: 하위 노드로의 재귀적 전파
halt 요청을 수신한 노드가 제어 흐름 노드 또는 데코레이터 노드인 경우, 자신의 Running 상태 자식에게 halt를 재귀적으로 전파한다. 이 전파는 트리의 리프(액션 노드)에 도달할 때까지 계속된다.
function ControlNode.halt():
for each child in children:
if child.status == Running:
child.halt()
reset_internal_state()
set_status(Idle)
2.3 단계: 리프 노드에서의 처리
리프 노드(액션 노드)가 halt를 수신하면, onHalted 콜백이 호출되어 진행 중인 행동의 중단과 자원 정리가 수행된다. 처리 완료 후 노드는 Idle 상태로 복귀한다.
2.4 단계: 상태 복귀
halt 처리가 완료되면, 관련된 모든 노드가 Idle 상태로 복귀한다. 이는 상향식(bottom-up)으로 진행되며, 리프 노드의 halt 완료 후 상위 노드의 halt가 완료된다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).
3. Halt의 동기적 처리
BehaviorTree.CPP 라이브러리에서 halt는 동기적(synchronous)으로 처리된다. halt 요청이 발행되면, halt의 전체 처리가 완료될 때까지 호출자(caller)의 실행이 차단된다. halt가 반환된 시점에서 모든 관련 노드가 Idle 상태로 복귀해 있음이 보장된다.
// 동기적 halt 처리 예시
ControlNode.tick():
child_status = child[0].tick()
if child_status == Failure:
child[1].halt() // halt 완료 후 반환
return Failure // 이 시점에서 child[1]은 Idle
4. 노드 유형별 Halt 동작
| 노드 유형 | halt 수신 시 동작 |
|---|---|
| 액션 노드 (Stateful) | onHalted 호출, 자원 정리, Idle 복귀 |
| 액션 노드 (Sync) | halt 불필요 (Running 미진입) |
| 조건 노드 | halt 불필요 (Running 미진입) |
| 제어 흐름 노드 | Running 자식에 halt 전파, 내부 상태 초기화 |
| 데코레이터 노드 | Running 자식에 halt 전파, 내부 상태 초기화 |
5. Halt와 Tick의 배타성
단일 tick 내에서 하나의 노드에 대해 halt와 tick이 동시에 발생하지 않는다. halt가 완료된 후에야 새로운 tick이 전달될 수 있으며, 이는 노드 상태의 일관성을 보장한다.
| 순서 | 동작 | 노드 상태 |
|---|---|---|
| 1 | halt 요청 수신 | Running |
| 2 | onHalted 실행 | Running → Idle |
| 3 | halt 완료 | Idle |
| 4 | (다음 tick에서) tick 수신 가능 | Idle → Running/Success/Failure |
6. Halt 발생의 빈도
Halt의 발생 빈도는 행동 트리의 구조와 환경의 동적 특성에 의존한다. 반응형 노드(ReactiveSequence, ReactiveFallback)를 사용하는 트리에서는 조건의 변화에 따라 halt가 빈번하게 발생할 수 있다. 일반 Sequence, Fallback을 사용하는 트리에서는 halt 발생이 상대적으로 드물다 (Faconti, 2024).
7. 로봇 공학에서의 의의
Halt 메커니즘은 로봇의 안전한 행동 전환을 보장하는 핵심 기제이다. 안전 조건 위반 시 진행 중인 모든 행동이 체계적으로 중단되고, 로봇이 안전한 상태로 전이되어야 하며, halt 메커니즘이 이 요구를 충족한다. halt의 동기적 처리는 중단 완료 후 새로운 행동이 시작되기 전에 이전 행동의 완전한 정리가 이루어짐을 보장한다 (Colledanchise & Ögren, 2018).
참고 문헌
- 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/