1292.75 onHalted 콜백의 역할

1. onHalted 콜백의 정의

onHalted 콜백은 행동 트리의 상태 보존 액션 노드(StatefulActionNode)가 Running 상태에서 halt 요청을 수신할 때 호출되는 생명주기 콜백이다. 이 콜백은 행동의 중단 단계(termination phase)에 해당하며, 진행 중인 행동을 안전하게 중단하고, 할당된 자원을 정리하는 역할을 수행한다 (Faconti, BehaviorTree.CPP Documentation, 2024).

2. 호출 시점

onHalted가 호출되는 조건은 다음과 같다.

조건설명
현재 상태가 Running노드가 행동을 수행 중이다
halt 요청 수신상위 노드로부터 halt 요청이 전달된다

onHalted는 노드의 정상적인 완료(Success 또는 Failure 반환)가 아닌, 외부의 강제 중단에 의해 호출된다. 노드가 Idle 상태일 때는 halt 요청이 발생하지 않으며, onHalted도 호출되지 않는다.

3. halt 요청의 발생 원인

halt 요청은 상위 제어 흐름 노드의 동작에 의해 발생한다. 주요 원인은 다음과 같다.

원인설명예시
Sequence의 실패 전파선행 자식 실패 시 Running 자식에 halt조건 노드 실패
ReactiveSequence의 재평가선행 자식 재평가 실패 시 halt안전 조건 위반
Fallback의 성공 전파상위 대안 성공 시 현재 대안 halt상위 대안 복원
Parallel의 정책 충족성공/실패 임계값 도달 시 잔여 자식 halt다수결 달성
WhileDoElse의 분기 전환조건 변화 시 이전 분기 halt조건 반전
외부 트리 중단행동 트리 전체 실행 중단비상 정지

4. 수행하여야 하는 작업

4.1 진행 중인 행동의 취소

외부 시스템에 위임된 행동에 취소 요청을 송신한다. ROS2 액션 서버에 목표 취소(cancel goal) 요청을 송신하거나, 진행 중인 계산 프로세스를 중단시킨다.

4.2 자원 해제

onStart에서 할당된 자원을 해제한다. 파일 핸들, 통신 채널, 하드웨어 인터페이스 등의 자원이 이 시점에서 정리된다.

4.3 안전 상태 전이

로봇이 안전한 상태로 전이되도록 보장한다. 모터 정지 명령 송신, 그리퍼 상태 고정, 비상 감속 등의 안전 조치가 onHalted에서 수행된다.

4.4 내부 상태 정리

노드의 내부 멤버 변수를 정리한다. 중간 결과, 타이머, 카운터 등의 내부 상태를 초기화하여, 다음 onStart 호출 시 깨끗한 상태에서 시작할 수 있도록 한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

5. 반환 상태

onHalted는 반환값이 없다(void). onHalted 호출 후 노드는 자동으로 Idle 상태로 복귀한다. halt는 행동의 성공이나 실패가 아닌 강제 중단이므로, Success 또는 Failure의 반환이 의미를 갖지 않는다.

6. 구현 예시

class NavigateToGoal : StatefulActionNode {
    action_client    // ROS2 액션 클라이언트
    goal_handle      // 액션 목표 핸들

    onHalted():
        if goal_handle is active:
            action_client.cancel_goal(goal_handle)  // 목표 취소
        goal_handle = null                           // 핸들 정리
        // 노드는 자동으로 Idle로 복귀
}

7. onHalted 미구현의 위험

onHalted를 올바르게 구현하지 않으면 다음의 문제가 발생할 수 있다.

문제설명
자원 누수할당된 자원이 해제되지 않아 시스템 자원 고갈
좀비 행동취소되지 않은 외부 행동이 계속 진행
불일치 상태노드 상태와 외부 시스템 상태 간의 불일치
안전 위험중단되어야 할 물리적 행동이 계속 수행

8. onStart, onRunning과의 관계

세 가지 생명주기 콜백의 관계를 요약하면 다음과 같다.

콜백호출 조건역할반환값
onStartIdle → tick초기화, 행동 시작Success/Failure/Running
onRunningRunning → tick진행 확인, 완료 판단Success/Failure/Running
onHaltedRunning → halt행동 중단, 자원 정리없음

onStart에서 할당된 모든 자원은 onHalted에서 해제되어야 한다는 대칭 원칙이 적용된다 (Faconti, 2024).

9. 로봇 공학에서의 의의

onHalted는 로봇의 안전한 행동 중단을 보장하는 핵심 메커니즘이다. 행동 트리의 제어 흐름 변화에 의해 행동이 강제 중단되는 상황에서, 로봇이 물리적으로 안전한 상태로 전이되도록 보장한다. 이동 중 정지, 파지 상태 유지, 비상 감속 등의 안전 조치가 onHalted에 의해 실행된다 (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/