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/