1294.60 조건 기반 분기 Fallback 패턴

1. 패턴의 정의

조건 기반 분기 Fallback 패턴이란, Fallback 노드의 각 자식이 “조건-행동” Sequence로 구성되어, 조건에 따라 서로 다른 행동을 선택하는 구조이다. 이 패턴은 프로그래밍 언어의 if-elseif-else 조건 분기문에 대응하며, 행동 트리에서 조건부 의사 결정을 구현하는 가장 일반적인 구조이다(Colledanchise & Ogren, 2018).

2. 기본 구조

<Fallback>
    <Sequence>
        <Condition ID="ConditionA"/>
        <Action ID="ActionA"/>
    </Sequence>
    <Sequence>
        <Condition ID="ConditionB"/>
        <Action ID="ActionB"/>
    </Sequence>
    <Sequence>
        <Condition ID="ConditionC"/>
        <Action ID="ActionC"/>
    </Sequence>
    <Action ID="DefaultAction"/>      <!-- else 절 -->
</Fallback>

2.1 프로그래밍 언어 대응

if (ConditionA) {
    ActionA();
} else if (ConditionB) {
    ActionB();
} else if (ConditionC) {
    ActionC();
} else {
    DefaultAction();
}

3. 실행 흐름

3.1 분기 선택 과정

  1. Fallback이 첫 번째 Sequence를 평가한다.
  2. Sequence 내부에서 ConditionA가 평가된다.
  • SUCCESS이면 ActionA를 실행하고, Sequence가 SUCCESS를 반환하여 Fallback이 종료된다.
  • FAILURE이면 Sequence가 FAILURE를 반환하고, Fallback이 다음 Sequence로 진행한다.
  1. 동일한 과정이 ConditionB, ConditionC에 대해 반복된다.
  2. 모든 조건이 FAILURE이면 DefaultAction이 실행된다.

3.2 실행 추적

시나리오: ConditionA=F, ConditionB=S

Fallback:
  Sequence 1:
    ConditionA → FAILURE
  → Sequence 1 FAILURE (ActionA 미실행)

  Sequence 2:
    ConditionB → SUCCESS
    ActionB → SUCCESS
  → Sequence 2 SUCCESS

→ Fallback SUCCESS (Sequence 3, DefaultAction 미평가)

4. 조건의 상호 배타성

4.1 상호 배타적 조건

조건들이 상호 배타적(mutually exclusive)이면, 정확히 하나의 분기만 실행된다.

<Fallback>
    <Sequence>
        <Condition ID="IsObjectSmall"/>     <!-- 소형 물체 -->
        <Action ID="PrecisionGrasp"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsObjectMedium"/>    <!-- 중형 물체 -->
        <Action ID="NormalGrasp"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsObjectLarge"/>     <!-- 대형 물체 -->
        <Action ID="TwoHandGrasp"/>
    </Sequence>
</Fallback>

4.2 비상호 배타적 조건

조건들이 상호 배타적이지 않으면, 여러 조건이 동시에 참일 수 있다. 이 경우 Fallback의 좌→우 평가 순서에 의해 가장 왼쪽의 참인 조건에 해당하는 행동만 실행된다.

<Fallback>
    <Sequence>
        <Condition ID="IsEmergency"/>       <!-- 비상 (최우선) -->
        <Action ID="EmergencyStop"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsLowBattery"/>      <!-- 배터리 부족 -->
        <Action ID="GoCharge"/>
    </Sequence>
    <Action ID="ContinueMission"/>
</Fallback>

비상 상황과 배터리 부족이 동시에 참이면, 비상 정지가 우선 실행된다.

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

5.1 사례 1: 로봇 상태 기반 행동 선택

<Fallback>
    <Sequence>
        <Condition ID="IsBatteryBelow10"/>
        <Action ID="EmergencyReturn"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsBatteryBelow30"/>
        <Action ID="GoToChargingStation"/>
    </Sequence>
    <Sequence>
        <Condition ID="HasAssignedTask"/>
        <Action ID="ExecuteTask"/>
    </Sequence>
    <Action ID="Patrol"/>
</Fallback>

배터리가 10% 미만이면 비상 귀환, 30% 미만이면 충전, 할당된 작업이 있으면 작업 수행, 그 외에는 순찰한다.

5.2 사례 2: 환경 기반 이동 전략 선택

<Fallback>
    <Sequence>
        <Condition ID="IsNarrowCorridor"/>
        <Action ID="UseWallFollowing"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsOpenArea"/>
        <Action ID="UseGlobalPlanner"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsCrowdedArea"/>
        <Action ID="UseSocialNavigation"/>
    </Sequence>
    <Action ID="UseDefaultNavigation"/>
</Fallback>

5.3 사례 3: 센서 가용성 기반 위치 추정 선택

<Fallback>
    <Sequence>
        <Condition ID="IsGPSAndLidarAvailable"/>
        <Action ID="FusedLocalization"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsLidarOnly"/>
        <Action ID="LidarLocalization"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsGPSOnly"/>
        <Action ID="GPSLocalization"/>
    </Sequence>
    <Action ID="DeadReckoning"/>
</Fallback>

6. Reactive 변형에서의 분기 패턴

ReactiveFallback을 사용하면, 조건의 변화에 따라 분기가 동적으로 전환된다.

<ReactiveFallback>
    <Sequence>
        <Condition ID="IsHighPriorityTask"/>
        <Action ID="HandleHighPriority"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsMediumPriorityTask"/>
        <Action ID="HandleMediumPriority"/>
    </Sequence>
    <Action ID="HandleLowPriority"/>
</ReactiveFallback>

중간 우선순위 작업을 처리하는 동안 높은 우선순위 작업이 발생하면, 중간 우선순위 처리가 Halt되고 높은 우선순위 작업으로 즉시 전환된다.

7. 설계 시 고려사항

  1. 조건 평가 순서: 가장 긴급하거나 중요한 조건을 먼저 배치한다.
  2. 기본 행동(else 절): 마지막 자식에 무조건 실행되는 기본 행동을 배치하면, Fallback이 FAILURE를 반환하는 것을 방지한다.
  3. 조건의 완전성: 모든 가능한 상태를 조건으로 포함하지 않으면, 기본 행동이 없는 경우 Fallback이 FAILURE를 반환할 수 있다.
  4. 변형 선택: 조건 변화에 대한 동적 전환이 필요하면 ReactiveFallback을, 현재 분기를 완료할 때까지 유지해야 하면 FallbackWithMemory를 사용한다(Faconti, 2022).

참고 문헌

  • 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/