1294.61 시도-대안 패턴 (Try-Alternative Pattern)

1. 패턴의 정의

시도-대안 패턴(Try-Alternative Pattern)은 Fallback 노드를 사용하여 주 방안(primary approach)을 먼저 시도하고, 실패 시 하나 이상의 대안(alternative)을 순차적으로 시도하는 구조이다. 이 패턴은 Fallback의 가장 본질적인 사용 사례이며, “첫 번째 방법이 안 되면 두 번째를, 두 번째도 안 되면 세 번째를” 시도하는 점진적 대안 탐색(escalation) 전략을 구현한다(Colledanchise & Ogren, 2018).

2. 기본 구조

<Fallback>
    <Action ID="PrimaryMethod"/>        <!-- 주 방안 -->
    <Action ID="AlternativeMethod"/>    <!-- 대안 -->
</Fallback>

PrimaryMethod가 SUCCESS를 반환하면 AlternativeMethod는 실행되지 않는다. PrimaryMethod가 FAILURE를 반환하면 AlternativeMethod가 실행된다.

3. 다중 대안 구조

<Fallback>
    <Action ID="Method1"/>    <!-- 1순위: 최선의 방안 -->
    <Action ID="Method2"/>    <!-- 2순위: 차선의 방안 -->
    <Action ID="Method3"/>    <!-- 3순위: 차차선의 방안 -->
    <Action ID="LastResort"/> <!-- 최후 수단 -->
</Fallback>

대안은 일반적으로 다음 기준 중 하나로 정렬된다:

  • 효율성 순: 가장 효율적인 방법을 먼저 시도
  • 비용 순: 가장 비용이 낮은 방법을 먼저 시도
  • 안전성 순: 가장 안전한 방법을 먼저 시도
  • 성공 확률 순: 성공 확률이 높은 방법을 먼저 시도

4. 조건 기반 시도-대안 패턴

각 대안에 적용 조건을 추가하여, 조건이 충족되는 대안만 시도하는 확장 구조이다.

<Fallback>
    <Sequence>
        <Condition ID="IsToolAAvailable"/>
        <Action ID="UseToolA"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsToolBAvailable"/>
        <Action ID="UseToolB"/>
    </Sequence>
    <Action ID="UseManualMethod"/>
</Fallback>

도구 A가 가용하면 도구 A를 사용하고, 가용하지 않으면 도구 B를 확인한다. 둘 다 불가하면 수동 방법을 사용한다.

5. 로봇 공학에서의 적용 사례

5.1 사례 1: 경로 탐색의 점진적 대안

<Fallback>
    <Action ID="FollowGlobalPlan"/>
    <Action ID="ComputeLocalDetour"/>
    <Action ID="WaitAndRetry"/>
    <Action ID="RequestHumanAssistance"/>
</Fallback>

글로벌 경로를 따르다 실패하면 로컬 우회로를 계산하고, 그래도 실패하면 대기 후 재시도, 최후에는 사람의 도움을 요청한다.

5.2 사례 2: 통신 채널의 점진적 대안

<Fallback>
    <Action ID="TransmitViaWifi"/>
    <Action ID="TransmitVia5G"/>
    <Action ID="TransmitViaSatellite"/>
    <Action ID="BufferLocally"/>
</Fallback>

WiFi 전송을 먼저 시도하고, 실패하면 5G, 위성 순서로 시도한다. 모든 통신이 불가하면 로컬에 버퍼링한다.

5.3 사례 3: 물체 파지의 점진적 대안

<Fallback>
    <Action ID="GraspFromTop"/>
    <Action ID="GraspFromSide"/>
    <Action ID="SuctionGrasp"/>
    <Action ID="PushToEdgeAndGrasp"/>
</Fallback>

5.4 사례 4: 센서 오류 복구

<Fallback>
    <Action ID="RecalibrateInPlace"/>
    <Action ID="MoveAndRecalibrate"/>
    <Action ID="SwitchToBackupSensor"/>
    <Action ID="OperateWithoutSensor"/>
</Fallback>

6. WithMemory와 Reactive에서의 시도-대안 동작

6.1 FallbackWithMemory

이미 실패한 대안을 건너뛰고, 현재 RUNNING인 대안부터 재개한다.

Tick 1: Method1→F, Method2→R (idx=1)
Tick 2: Method2→R             (Method1 건너뜀)
Tick 3: Method2→S → SUCCESS

6.2 ReactiveFallback

매 Tick마다 처음부터 재평가하므로, 이전에 실패한 앞쪽 대안이 성공 가능해지면 현재 대안을 중단하고 전환한다.

Tick 1: Method1→F, Method2→R
Tick 2: Method1→S             (Method1 복구 → Method2 Halt)
        → SUCCESS

7. 최후 수단(Last Resort)의 설계

시도-대안 패턴의 마지막 자식은 “최후 수단“으로, 가능한 한 항상 SUCCESS를 반환하도록 설계하는 것이 권장된다. 이렇게 하면 Fallback이 FAILURE를 반환하는 상황을 방지한다.

<Fallback>
    <Action ID="AdvancedMethod"/>
    <Action ID="BasicMethod"/>
    <Action ID="SafeStop"/>          <!-- 최후 수단: 안전 정지 (항상 성공) -->
</Fallback>

최후 수단이 없거나 최후 수단마저 실패하면, Fallback이 FAILURE를 반환하며 이는 상위 노드에서 처리해야 하는 심각한 상황을 나타낸다(Faconti, 2022).

8. 점진적 확대(Escalation) 전략

시도-대안 패턴은 자연스럽게 점진적 확대 전략을 구현한다. 각 대안은 이전 대안보다 비용이 높거나, 침습적이거나, 시간이 오래 걸리지만 성공 가능성이 다른 접근 방식을 제공한다.

단계대안비용침습도성공 확률
1소프트웨어 리셋낮음낮음중간
2센서 재보정중간중간높음
3하드웨어 리셋높음높음높음
4안전 모드 진입매우 높음매우 높음매우 높음

이러한 점진적 확대는 불필요하게 비용이 높은 방법을 먼저 시도하는 것을 방지하면서도, 최종적으로 문제를 해결할 수 있는 포괄적 복구 체계를 제공한다.


참고 문헌

  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2022). BehaviorTree.CPP documentation and API reference. https://www.behaviortree.dev/