Timeout의 활용 사례 (Use Cases of the Timeout Decorator)
1. 개요
Timeout 데코레이터는 행동의 실행 시간을 보장하고, 교착 상태나 무한 실행을 방지하는 핵심 안전 메커니즘이다. 본 절에서는 로봇 공학에서의 구체적인 Timeout 활용 사례를 다룬다.
2. 사례 1: 내비게이션 시간 제한
<Fallback>
<Timeout msec="60000">
<Action ID="NavigateToGoal"/>
</Timeout>
<Sequence>
<Action ID="ClearCostmap"/>
<Timeout msec="90000">
<Action ID="NavigateToGoal"/>
</Timeout>
</Sequence>
<Action ID="ReportNavigationFailure"/>
</Fallback>
1차 내비게이션 60초 시도 → 실패 시 코스트맵 초기화 후 90초 재시도 → 최종 실패 보고.
3. 사례 2: 서비스 호출 타임아웃
<Timeout msec="5000">
<Action ID="CallPathPlannerService"/>
</Timeout>
경로 계획 서비스가 5초 이내에 응답하지 않으면 FAILURE를 반환한다.
4. 사례 3: 센서 데이터 획득 시간 제한
<Timeout msec="10000">
<Action ID="WaitForGpsFix"/>
</Timeout>
GPS 신호 획득을 10초로 제한한다.
5. 사례 4: 재시도와 결합한 전체 시간 제한
<Timeout msec="120000">
<RetryNode num_attempts="10">
<Action ID="DownloadMapData"/>
</RetryNode>
</Timeout>
2분 이내에 지도 데이터 다운로드를 최대 10회 재시도한다.
6. 사례 5: 드론 이륙 시간 제한
<Timeout msec="30000">
<Sequence>
<Action ID="ArmMotors"/>
<Action ID="Takeoff"/>
<Condition ID="IsAltitudeAbove" min_altitude="2.0"/>
</Sequence>
</Timeout>
무장 → 이륙 → 고도 확인까지 30초 이내에 완료되어야 한다.
7. 사례 6: 파지 작업 시간 제한
<Timeout msec="45000">
<Sequence>
<Action ID="MoveToGraspPose"/>
<Action ID="CloseGripper"/>
<Condition ID="IsObjectGrasped"/>
<Action ID="LiftObject"/>
</Sequence>
</Timeout>
파지 전체 과정에 45초의 시간 제한을 부여한다.
8. 사례 7: 서브트리 전체 시간 제한
<Timeout msec="600000">
<SubTree ID="PatrolMission"/>
</Timeout>
순찰 임무 전체에 10분의 시간 제한을 부여한다.
9. 사례 8: 선택적 행동의 시간 제한
<Sequence>
<Action ID="MainTask"/>
<ForceSuccess>
<Timeout msec="5000">
<Action ID="OptionalDataSync"/>
</Timeout>
</ForceSuccess>
<Action ID="NextTask"/>
</Sequence>
선택적 데이터 동기화에 5초를 허용하고, 타임아웃이 되어도 다음 작업으로 진행한다.
10. Timeout과 Nav2의 통합
Nav2의 행동 트리에서 Timeout은 복구 전략의 핵심 요소로 활용된다.
<!-- Nav2의 전형적 구조 (간략화) -->
<Timeout msec="600000">
<Fallback>
<Sequence>
<Action ID="ComputePathToPose"/>
<Timeout msec="300000">
<Action ID="FollowPath"/>
</Timeout>
</Sequence>
<Sequence>
<Action ID="ClearCostmaps"/>
<Action ID="ComputePathToPose"/>
<Timeout msec="300000">
<Action ID="FollowPath"/>
</Timeout>
</Sequence>
</Fallback>
</Timeout>
11. 설계 시 고려 사항
11.1 적절한 타임아웃 값
타임아웃 값은 행동의 정상적 실행 시간보다 충분히 크되, 교착 상태를 빠르게 감지할 수 있을 정도로 작아야 한다. 일반적으로 예상 실행 시간의 2~3배를 설정한다.
11.2 모든 비동기 행동에 Timeout 적용
모든 비동기 액션 노드에 Timeout을 적용하는 것이 안전한 설계 관행이다. Timeout이 없는 비동기 행동은 잠재적으로 무한 실행의 위험을 가진다.
12. 참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- Macenski, S., et al. (2020). “The Marathon 2: A Navigation System.” arXiv preprint arXiv:2003.00368.
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-04 | 초안 작성 |