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.12026-04-04초안 작성