Retry의 활용 사례 (Use Cases of the Retry Decorator)
1. 개요
Retry 데코레이터는 간헐적 실패가 예상되는 행동에 대한 자동 복구 메커니즘을 제공한다. 본 절에서는 로봇 공학에서의 구체적인 Retry 활용 사례를 다룬다.
2. 사례 1: 센서 초기화 재시도
센서 드라이버의 초기화가 일시적으로 실패하는 경우를 처리한다.
<RetryNode num_attempts="5">
<Action ID="InitializeLidar"/>
</RetryNode>
USB 연결 불안정이나 드라이버 로딩 지연에 의한 초기화 실패를 자동으로 재시도한다.
3. 사례 2: 내비게이션 경로 계획 재시도
경로 계획기가 일시적으로 유효한 경로를 찾지 못하는 경우를 처리한다.
<RetryNode num_attempts="3">
<Action ID="ComputePathToPose"
goal="{target_pose}"
path="{computed_path}"/>
</RetryNode>
코스트맵 갱신 타이밍이나 일시적 장애물에 의해 경로 계획이 실패하면 재시도한다.
4. 사례 3: 파지 행동 재시도
물체 파지가 미끄러짐이나 위치 오차에 의해 실패하는 경우를 처리한다.
<RetryNode num_attempts="3">
<Sequence>
<Action ID="AdjustGraspApproach"/>
<Action ID="ExecuteGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</RetryNode>
각 재시도에서 파지 접근 방식을 조정하여 성공 확률을 높인다.
5. 사례 4: 서비스 호출 재시도
ROS2 서비스 호출이 일시적으로 실패하는 경우를 처리한다.
<RetryNode num_attempts="3">
<Action ID="CallLocalizationService"/>
</RetryNode>
서비스 서버의 일시적 과부하나 통신 지연에 대응한다.
6. 사례 5: 착륙 재시도 (드론)
드론의 착륙이 바람이나 지형 조건에 의해 실패하는 경우를 처리한다.
<RetryNode num_attempts="3">
<Sequence>
<Action ID="DescendToLandingAltitude"/>
<Condition ID="IsLandingZoneClear"/>
<Action ID="ExecuteLanding"/>
</Sequence>
</RetryNode>
착륙 지점이 안전하지 않으면 상승 후 재시도한다.
7. 사례 6: 지연을 포함한 재시도
재시도 사이에 대기 시간을 삽입하여 서버 부하를 분산하거나 환경 변화를 기다린다.
<RetryNode num_attempts="5">
<Sequence>
<Delay delay_msec="2000">
<Action ID="DownloadMapUpdate"/>
</Delay>
</Sequence>
</RetryNode>
8. 사례 7: Timeout과 결합한 시간 제한 재시도
<Timeout msec="30000">
<RetryNode num_attempts="10">
<Action ID="WaitForGpsFix"/>
</RetryNode>
</Timeout>
30초 이내에 GPS 신호를 획득할 때까지 최대 10회 재시도한다. 시간이 먼저 초과되면 Timeout이 FAILURE를 반환한다.
9. 사례 8: 점진적 복구와의 결합
<Fallback>
<RetryNode num_attempts="3">
<Action ID="NavigateDirectly"/>
</RetryNode>
<RetryNode num_attempts="2">
<Sequence>
<Action ID="ClearCostmap"/>
<Action ID="NavigateWithRecovery"/>
</Sequence>
</RetryNode>
<Action ID="RequestHumanAssistance"/>
</Fallback>
직접 내비게이션 3회 실패 → 코스트맵 초기화 후 재시도 2회 → 최종 실패 시 인간 지원 요청.
10. Retry와 다른 데코레이터의 조합 요약
| 조합 | 효과 |
|---|---|
| Retry + Delay | 재시도 간 대기 |
| Retry + Timeout | 전체 시간 제한 |
| Retry + ForceSuccess | 최종 실패도 무시 |
| Retry + Inverter | 성공 시 재시도 (Repeat와 유사) |
11. 설계 시 고려 사항
재시도가 유효하려면 각 시도 사이에 상황이 변화하여야 한다. 동일한 조건에서의 반복 실패는 재시도로 해결되지 않으므로, 복구 행동(상태 초기화, 대체 경로 탐색 등)을 재시도 내부에 포함하는 것이 효과적이다.
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 | 초안 작성 |