1292.82 Halt 시 자원 정리
1. Halt 시 자원 정리의 필요성
행동 트리의 노드가 halt를 수신하면, 실행 과정에서 할당된 모든 자원을 안전하게 해제하여야 한다. halt는 행동의 정상적인 완료가 아닌 강제 중단이므로, 자원이 자동으로 해제되지 않을 수 있다. 자원 정리가 누락되면 자원 누수(resource leak), 외부 시스템의 상태 불일치, 후속 실행에서의 오동작이 발생한다 (Faconti, BehaviorTree.CPP Documentation, 2024).
2. 정리 대상 자원의 분류
halt 시 정리하여야 하는 자원은 다음과 같이 분류된다.
| 자원 유형 | 할당 시점 | 정리 내용 | 미정리 시 영향 |
|---|---|---|---|
| 외부 시스템 요청 | onStart | 취소 요청 송신 | 좀비 행동 지속 |
| 하드웨어 인터페이스 | onStart | 정지 명령, 안전 상태 전이 | 물리적 위험 |
| 통신 자원 | onStart | 구독 해제, 클라이언트 정리 | 자원 고갈 |
| 동적 메모리 | onStart/onRunning | 할당 해제 | 메모리 누수 |
| 내부 상태 | onStart/onRunning | 초기화 | 후속 실행 오동작 |
| 파일 핸들 | onStart | 파일 닫기 | 파일 디스크립터 고갈 |
3. 자원 정리의 구현
자원 정리는 onHalted 콜백에서 구현된다.
class NavigateAction : StatefulActionNode {
goal_handle // 액션 서버 목표 핸들
data_buffer // 수집 데이터 버퍼
onStart():
goal_handle = action_client.send_goal(target)
data_buffer = allocate_buffer()
return Running
onRunning():
if navigation_completed():
release_buffer(data_buffer)
return Success
return Running
onHalted():
action_client.cancel_goal(goal_handle) // 외부 요청 취소
release_buffer(data_buffer) // 메모리 해제
goal_handle = null // 핸들 무효화
}
4. 외부 시스템에 대한 취소 요청
halt 시 가장 중요한 정리 작업은 외부 시스템에 위임된 행동의 취소이다.
4.1 ROS2 액션 서버
ROS2 액션 서버에 송신된 목표(goal)는 halt 시 취소 요청(cancel goal)을 송신하여야 한다. 취소 요청을 송신하지 않으면, 행동 트리에서 노드가 Idle로 복귀하였음에도 액션 서버에서 행동이 계속 진행되는 불일치가 발생한다.
4.2 하드웨어 명령
모터 구동, 그리퍼 작동 등의 하드웨어 명령이 진행 중인 경우, halt 시 정지 명령을 송신하여야 한다. 정지 명령이 누락되면 로봇이 의도하지 않은 물리적 행동을 계속 수행하여 안전 위험이 발생한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).
5. 정상 완료와 Halt의 정리 통합
자원 정리 로직이 정상 완료 경로와 halt 경로에서 중복되는 것을 방지하기 위해, 공통 정리 함수를 별도로 정의하여 두 경로에서 호출하는 패턴이 권장된다.
class MyAction : StatefulActionNode {
cleanup():
cancel_if_active(goal_handle)
release_buffer(data_buffer)
onRunning():
if completed():
cleanup()
return Success
return Running
onHalted():
cleanup()
}
6. 정리 실패의 처리
자원 정리 자체가 실패할 수 있다. 네트워크 오류로 취소 요청이 송신되지 않거나, 하드웨어 인터페이스가 응답하지 않는 경우가 이에 해당한다. onHalted는 반환값이 없으므로 실패를 상위 노드에 전달할 수 없다. 따라서 정리 실패는 로그 기록, 진단 이벤트 발행 등의 비동기적 방법으로 보고하여야 한다 (Faconti, 2024).
7. 로봇 공학에서의 의의
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/