1292.78 노드 중단의 시점
1. 노드 중단의 정의
노드 중단(halt)이란 Running 상태의 노드가 상위 노드의 요청에 의해 행동을 강제로 중단하고 Idle 상태로 복귀하는 과정이다. 중단은 노드의 정상적인 완료(Success 또는 Failure 반환)와 구별되며, 제어 흐름의 변화에 의해 행동이 더 이상 필요하지 않게 되었을 때 발생한다 (Faconti, BehaviorTree.CPP Documentation, 2024).
2. 중단이 발생하는 시점
노드 중단이 발생하는 시점은 상위 제어 흐름 노드의 동작에 의해 결정된다.
2.1 Sequence 노드에 의한 중단
Sequence 노드에서 선행 자식이 Failure를 반환하면, Running 상태의 후속 자식에 halt가 요청된다. 일반 Sequence에서는 Running 자식이 이전 tick에서 기억되므로, 해당 자식이 직접 halt를 수신한다.
2.2 ReactiveSequence에 의한 중단
ReactiveSequence에서 선행 조건 자식이 Failure를 반환하면, Running 상태의 후속 액션 자식에 즉시 halt가 요청된다. 이 중단은 매 tick에서 발생할 수 있다.
2.3 Fallback 노드에 의한 중단
ReactiveFallback에서 상위 우선순위 자식이 Success 또는 Running을 반환하면, 이전에 Running 상태이던 하위 우선순위 자식에 halt가 요청된다.
2.4 Parallel 노드에 의한 중단
Parallel 노드에서 성공 또는 실패 임계값에 도달하면, 아직 완료되지 않은 잔여 Running 자식에 halt가 요청된다.
2.5 분기 전환에 의한 중단
IfThenElse, WhileDoElse, Switch 노드에서 분기가 전환되면, 이전 분기의 Running 자식에 halt가 요청된다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).
2.6 데코레이터에 의한 중단
Timeout 데코레이터에서 시간이 초과되면, Running 상태의 자식에 halt가 요청된다.
3. 중단 시점의 요약
| 원인 | 중단 시점 | 중단 대상 |
|---|---|---|
| Sequence 자식 실패 | 자식 Failure 반환 시 | Running 상태의 자식 |
| ReactiveSequence 조건 실패 | 매 tick에서 조건 재평가 시 | Running 상태의 액션 자식 |
| ReactiveFallback 상위 대안 복원 | 매 tick에서 재평가 시 | Running 상태의 하위 대안 |
| Parallel 임계값 도달 | 임계값 충족 시 | 잔여 Running 자식 |
| 분기 전환 | 분기 선택 변경 시 | 이전 분기의 Running 자식 |
| Timeout 시간 초과 | 경과 시간 > 제한 시간 | Running 상태의 자식 |
| 행동 트리 전체 중단 | 외부 중단 신호 시 | 모든 Running 노드 |
4. 중단의 전파 순서
중단은 상위 노드에서 하위 노드 방향으로 전파된다. 제어 흐름 노드가 halt를 수신하면, 자신의 Running 자식에게 halt를 전파한다. 이 전파는 재귀적으로 진행되어, Running 상태의 리프 노드(액션 노드)까지 도달한다.
halt 전파: ControlNode → ChildControl → ... → ActionNode
5. 중단과 정상 완료의 차이
| 속성 | 정상 완료 | 중단 (Halt) |
|---|---|---|
| 발생 원인 | 행동 자체의 완료 | 외부의 강제 요청 |
| 반환 상태 | Success 또는 Failure | 없음 (Idle로 복귀) |
| 호출 콜백 | onRunning에서 결과 반환 | onHalted |
| 자원 정리 | 반환 후 자동 | onHalted에서 명시적 수행 |
6. 로봇 공학에서의 의의
중단 시점의 정확한 이해는 로봇의 안전한 행동 전환을 보장하는 데 필수적이다. 안전 조건 위반 시 즉각적인 행동 중단, 임무 우선순위 변경에 따른 행동 전환, 비상 정지 등의 상황에서 중단이 적시에 발생하여야 로봇의 안전성이 보장된다 (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/