1294.71 로봇 행동 제어를 위한 Fallback 활용 사례

1294.71 로봇 행동 제어를 위한 Fallback 활용 사례

1. Fallback 노드의 로봇 공학 적용 개관

Fallback 노드는 로봇 행동 제어에서 “하나라도 성공하면 충분한 대안들“을 표현하는 핵심 제어 구조이다. 로봇 시스템은 센서 오류, 환경 변화, 하드웨어 고장 등 다양한 불확실성에 직면하므로, 단일 전략에 의존하지 않고 여러 대안을 순차적으로 시도하는 Fallback 구조가 필수적이다. Fallback의 OR 의미론은 “목표를 달성하는 방법이 여러 가지 존재한다“는 로봇 행동 설계의 핵심 개념을 표현한다(Colledanchise & Ogren, 2018).

2. Fallback 변형별 활용 영역

2.1 활용 영역 분류

Fallback 변형주요 활용 영역특성
FallbackWithMemory복구 행동 체인, 대안 시도실패한 대안을 반복하지 않음
ReactiveFallback우선순위 기반 전환, 조건 감시매 Tick 상위 대안 재평가
Fallback (기본)조건 분기, 상태 확인동기식 대안 선택

FallbackWithMemory는 각 대안의 시도에 시간이 소요되는 비동기 복구 시나리오에 적합하며, ReactiveFallback은 상위 우선순위 대안의 가용성이 동적으로 변하는 시나리오에 적합하다.

3. 오류 복구 분야의 활용 사례

3.1 사례 1: 네비게이션 실패 복구

<FallbackWithMemory>
    <Action ID="NavigateWithGlobalPlan"/>
    <Sequence>
        <Action ID="ClearCostmap"/>
        <Action ID="NavigateWithGlobalPlan"/>
    </Sequence>
    <Sequence>
        <Action ID="Spin" angle="1.57"/>
        <Action ID="NavigateWithGlobalPlan"/>
    </Sequence>
    <Sequence>
        <Action ID="BackUp" distance="0.5"/>
        <Action ID="NavigateWithGlobalPlan"/>
    </Sequence>
    <Action ID="WaitAndRetry" duration="10000"/>
</FallbackWithMemory>

네비게이션이 실패하면 코스트맵 정리 후 재시도 → 회전 후 재시도 → 후진 후 재시도 → 대기 후 재시도의 순서로 복구를 시도한다. FallbackWithMemory에 의해 이미 실패한 복구 방법은 건너뛰고 다음 방법으로 진행한다.

3.2 사례 2: 센서 고장 시 대체 센서 활용

<Fallback>
    <Sequence>
        <Condition ID="IsLidarOperational"/>
        <Action ID="NavigateWithLidar"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsCameraOperational"/>
        <Action ID="NavigateWithCamera"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsSonarOperational"/>
        <Action ID="NavigateWithSonar"/>
    </Sequence>
    <Action ID="StopAndRequestMaintenance"/>
</Fallback>

라이다가 정상이면 라이다 기반 네비게이션을 수행하고, 라이다 고장 시 카메라 기반으로, 카메라도 고장이면 소나 기반으로 퇴화 운영한다. 모든 센서가 고장이면 정지 후 정비를 요청한다.

3.3 사례 3: 통신 장애 복구

<Fallback>
    <Sequence>
        <Condition ID="IsWiFiConnected"/>
        <Action ID="CommunicateViaWiFi"/>
    </Sequence>
    <Sequence>
        <Condition ID="Is4GConnected"/>
        <Action ID="CommunicateVia4G"/>
    </Sequence>
    <Action ID="StoreDataLocally"/>
</Fallback>

4. 조건 기반 행동 선택의 활용 사례

4.1 사례 4: 상태 기반 행동 분기

<Fallback>
    <Sequence>
        <Condition ID="IsBatteryAbove80Percent"/>
        <Action ID="FullPerformanceMode"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsBatteryAbove30Percent"/>
        <Action ID="EcoMode"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsBatteryAbove10Percent"/>
        <Action ID="ReturnToCharge"/>
    </Sequence>
    <Action ID="EmergencyShutdown"/>
</Fallback>

배터리 잔량에 따라 전력 성능 모드, 절전 모드, 충전 복귀, 비상 종료를 선택한다. 조건 노드의 배타적 범위 설정에 의해 정확히 하나의 행동만 선택된다.

4.2 사례 5: 목표 달성 확인 후 행동

<Fallback>
    <Condition ID="IsAtGoalPosition"/>
    <Action ID="NavigateToGoal"/>
</Fallback>

이미 목표 위치에 도달한 경우 아무 행동도 수행하지 않고 SUCCESS를 반환한다. 목표에 도달하지 않은 경우에만 네비게이션을 수행한다. 이 패턴은 Fallback의 가장 기본적이면서도 빈번하게 사용되는 형태이다.

5. 우선순위 기반 전환의 활용 사례

5.1 사례 6: ReactiveFallback을 이용한 우선순위 전환

<ReactiveFallback>
    <Sequence>
        <Condition ID="IsHighPriorityTaskAvailable"/>
        <Action ID="ExecuteHighPriorityTask"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsMediumPriorityTaskAvailable"/>
        <Action ID="ExecuteMediumPriorityTask"/>
    </Sequence>
    <Action ID="Patrol"/>
</ReactiveFallback>

ReactiveFallback은 매 Tick마다 상위 우선순위 대안을 재평가하므로, 중간 우선순위 작업 수행 중 고우선순위 작업이 발생하면 즉시 전환한다. 고우선순위 작업이 완료되면 중간 우선순위 작업으로 자동 복귀한다.

5.2 사례 7: 조건 변화에 따른 동적 전환

<ReactiveFallback>
    <Sequence>
        <Condition ID="IsManualModeRequested"/>
        <Action ID="ManualControl"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsAutonomousModeEnabled"/>
        <Action ID="AutonomousOperation"/>
    </Sequence>
    <Action ID="SafeIdle"/>
</ReactiveFallback>

수동 제어 요청이 들어오면 자율 운영을 중단하고 수동 모드로 전환한다. 수동 요청이 해제되면 자율 운영으로 복귀한다.

6. 비상 대응 분야의 활용 사례

6.1 사례 8: 단계적 비상 대응

<Fallback>
    <ReactiveSequence>
        <Condition ID="IsAllSystemsNormal"/>
        <SubTree ID="NormalOperation"/>
    </ReactiveSequence>
    <Fallback>
        <Sequence>
            <Condition ID="IsRecoverableFault"/>
            <Action ID="AttemptRecovery"/>
        </Sequence>
        <Sequence>
            <Condition ID="IsSafeToMoveToBase"/>
            <Action ID="ReturnToBase"/>
        </Sequence>
        <Action ID="EmergencyStop"/>
    </Fallback>
</Fallback>

정상 운영이 불가능하면, 복구 가능한 오류인 경우 복구를 시도하고, 이동이 가능하면 기지로 복귀하며, 그 외에는 비상 정지한다.

6.2 사례 9: 전원 관리 Fallback

<Fallback>
    <Sequence>
        <Condition ID="IsExternalPowerAvailable"/>
        <Action ID="ConnectToExternalPower"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsDockingStationNearby"/>
        <Action ID="NavigateToDock"/>
        <Action ID="Dock"/>
    </Sequence>
    <Sequence>
        <Condition ID="IsBatteryAboveSurvival"/>
        <Action ID="EnterLowPowerMode"/>
    </Sequence>
    <Action ID="EmergencyShutdown"/>
</Fallback>

7. Fallback 변형 선택 기준

설계 상황권장 변형근거
비동기 대안 순차 시도FallbackWithMemory실패한 대안 반복 방지
우선순위 기반 동적 전환ReactiveFallback상위 대안 지속 감시
동기식 조건 분기Fallback (기본)즉시 반환하는 대안 선택
목표 달성 확인-행동Fallback (기본)조건-액션 패턴

8. Fallback 활용의 설계 지침

  1. 최후 수단의 포함: Fallback 체인의 마지막에 항상 성공하거나 안전한 행동을 배치하여, 모든 대안이 소진되는 상황을 방지한다. 비상 정지, 안전 모드 전환, 도움 요청 등이 최후 수단에 해당한다.

  2. 우선순위 순서 배치: 선호되는 대안을 왼쪽에, 덜 선호되는 대안을 오른쪽에 배치한다. Fallback의 좌→우 평가 순서에 의해, 선호되는 대안이 먼저 시도된다.

  3. 대안 간 독립성: 각 대안은 이전 대안의 상태나 부수 효과에 의존하지 않고 독립적으로 실행 가능해야 한다.

  4. 점진적 퇴화: 대안이 오른쪽으로 갈수록 기능이 제한되더라도, 시스템의 핵심 안전 기능은 유지해야 한다.

  5. 타임아웃 적용: 비동기 대안에 타임아웃 데코레이터를 적용하여, 단일 대안에서의 무한 대기를 방지하고 다음 대안으로의 전환을 보장한다(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/