1294.73 드론의 비상 대응 Fallback
1. 드론 비상 대응의 다중 전략적 특성
무인 항공기(UAV)의 비상 대응은 지상 로봇과 근본적으로 다른 특성을 가진다. 드론은 비행 중 어떤 오류가 발생하더라도 공중에 무한히 체공할 수 없으며, 반드시 안전한 착륙으로 귀결되어야 한다. 따라서 드론의 비상 대응 Fallback은 “어떤 방식으로든 안전하게 지상에 도달한다“는 최종 목표를 달성하기 위한 다중 대안 전략으로 구성된다(Colledanchise & Ogren, 2018).
2. 기본 비상 대응 Fallback 구조
2.1 정상 운영과 비상 대응의 통합
<Fallback>
<!-- 정상 비행 -->
<ReactiveSequence>
<Condition ID="IsAllSystemsNormal"/>
<Condition ID="IsBatteryAbove20Percent"/>
<Condition ID="IsGeofenceNotViolated"/>
<SubTree ID="NormalFlightMission"/>
</ReactiveSequence>
<!-- 비상 대응 -->
<SubTree ID="EmergencyResponseFallback"/>
</Fallback>
정상 비행 조건이 하나라도 위반되면 ReactiveSequence가 FAILURE를 반환하고, 외부 Fallback이 비상 대응 서브트리를 실행한다.
3. 비상 유형별 대응 Fallback
3.1 비상 상황 분류 및 단계적 대응
<Fallback>
<!-- 1순위: 복귀 가능한 경우 기지 복귀 -->
<Sequence>
<Condition ID="IsMotorHealthy"/>
<Condition ID="IsGPSValid"/>
<Condition ID="IsBatteryAbove10Percent"/>
<Action ID="ReturnToLaunch"/>
</Sequence>
<!-- 2순위: GPS 불가 시 최근 경로 역추적 -->
<Sequence>
<Condition ID="IsMotorHealthy"/>
<Condition ID="IsBatteryAbove10Percent"/>
<Action ID="BacktrackAlongPath"/>
</Sequence>
<!-- 3순위: 현 위치에서 안전 착륙 -->
<Sequence>
<Condition ID="IsMotorHealthy"/>
<Action ID="FindNearestSafeLandingZone"/>
<Action ID="LandAtSafeZone"/>
</Sequence>
<!-- 4순위: 모터 제한 시 활강 착륙 -->
<Sequence>
<Condition ID="IsPartialMotorFunctional"/>
<Action ID="ControlledDescentLanding"/>
</Sequence>
<!-- 5순위: 낙하산 전개 -->
<Sequence>
<Condition ID="IsParachuteAvailable"/>
<Action ID="DeployParachute"/>
</Sequence>
<!-- 최후 수단: 비상 모터 정지 -->
<Action ID="EmergencyMotorCutoff"/>
</Fallback>
이 구조는 점진적 퇴화(Graceful Degradation) 원칙에 따라, 가장 안전한 대안부터 시도하고 점차 제한적인 대안으로 진행한다.
3.2 Tick별 실행 흐름 분석
[시나리오: GPS 상실 상태에서의 비상 대응]
Tick 1: IsMotorHealthy→S, IsGPSValid→F (1순위 실패: GPS 불가)
IsMotorHealthy→S, IsBatteryAbove10→S,
BacktrackAlongPath→R (2순위 시작: 역추적)
Tick 2: BacktrackAlongPath→R (역추적 진행 중)
...
Tick N: BacktrackAlongPath→S → SUCCESS (기지 복귀 성공)
[시나리오: 모터 고장 상태에서의 비상 대응]
Tick 1: IsMotorHealthy→F (1순위 실패)
IsMotorHealthy→F (2순위 실패)
IsMotorHealthy→F (3순위 실패)
IsPartialMotorFunctional→S,
ControlledDescentLanding→R (4순위 시작: 활강 착륙)
4. 배터리 관련 비상 대응
4.1 배터리 잔량 기반 단계적 대응
<Fallback>
<!-- 배터리 충분: 정상 임무 -->
<Sequence>
<Condition ID="IsBatteryAbove30Percent"/>
<SubTree ID="NormalMission"/>
</Sequence>
<!-- 배터리 주의: 임무 단축 후 복귀 -->
<Sequence>
<Condition ID="IsBatteryAbove20Percent"/>
<Action ID="AbortCurrentWaypoint"/>
<Action ID="ReturnToLaunch"/>
</Sequence>
<!-- 배터리 경고: 즉시 복귀 -->
<Sequence>
<Condition ID="IsBatteryAbove10Percent"/>
<Action ID="DirectReturnToLaunch"/>
</Sequence>
<!-- 배터리 위험: 현 위치 착륙 -->
<Sequence>
<Condition ID="IsBatteryAbove5Percent"/>
<Action ID="ImmediateLanding"/>
</Sequence>
<!-- 배터리 임계: 비상 하강 -->
<Action ID="EmergencyDescent"/>
</Fallback>
배터리 잔량에 따라 5단계의 대응 전략을 제공한다. 각 단계의 조건은 배타적 범위로 설정되어 정확히 하나의 대응만 선택된다.
5. 통신 장애 비상 대응
5.1 RC 링크 상실 대응
<Fallback>
<!-- 1순위: RC 재연결 대기 -->
<Sequence>
<Condition ID="IsRCLinkLostRecently"/>
<Action ID="LoiterInPlace" duration="30000"/>
<Condition ID="IsRCLinkRestored"/>
</Sequence>
<!-- 2순위: 사전 설정된 경로로 복귀 -->
<Sequence>
<Condition ID="IsGPSValid"/>
<Action ID="FollowFailsafePath"/>
</Sequence>
<!-- 3순위: 현 위치 착륙 -->
<Action ID="LandAtCurrentPosition"/>
</Fallback>
RC 링크가 상실되면 먼저 30초간 선회하며 재연결을 대기하고, 재연결되지 않으면 사전 설정된 경로를 따라 복귀하며, GPS도 불가하면 현 위치에 착륙한다.
5.2 텔레메트리 상실 대응
<Fallback>
<Sequence>
<Condition ID="IsTelemetryLost"/>
<Condition ID="IsRCLinkActive"/>
<Action ID="ContinueWithRCOnly"/>
</Sequence>
<Sequence>
<Condition ID="IsTelemetryLost"/>
<Condition ID="IsAutonomousCapable"/>
<Action ID="AutonomousReturnToLaunch"/>
</Sequence>
<Action ID="LandAtCurrentPosition"/>
</Fallback>
6. 센서 고장 비상 대응
6.1 다중 센서 고장 대응
<Fallback>
<!-- GPS 고장: IMU 기반 추측 항법으로 복귀 -->
<Sequence>
<Condition ID="IsGPSFailed"/>
<Condition ID="IsIMUHealthy"/>
<Action ID="DeadReckoningReturn"/>
</Sequence>
<!-- IMU 고장: GPS 기반 단순 비행으로 복귀 -->
<Sequence>
<Condition ID="IsIMUFailed"/>
<Condition ID="IsGPSValid"/>
<Action ID="GPSOnlyReturn"/>
</Sequence>
<!-- 기압계 고장: GPS 고도 기반 착륙 -->
<Sequence>
<Condition ID="IsBarometerFailed"/>
<Action ID="LandUsingGPSAltitude"/>
</Sequence>
<!-- 다중 센서 고장: 즉시 착륙 -->
<Action ID="EmergencyLand"/>
</Fallback>
7. ReactiveFallback을 이용한 동적 비상 대응
7.1 상황 변화에 따른 자동 전환
<ReactiveFallback>
<!-- 1순위: 정상 비행 가능 -->
<Sequence>
<Condition ID="IsAllSystemsNormal"/>
<SubTree ID="NormalMission"/>
</Sequence>
<!-- 2순위: 기능 축소 비행 -->
<Sequence>
<Condition ID="IsSafeToFly"/>
<SubTree ID="DegradedMission"/>
</Sequence>
<!-- 3순위: 비상 복귀 -->
<Sequence>
<Condition ID="IsReturnPossible"/>
<Action ID="EmergencyReturn"/>
</Sequence>
<!-- 4순위: 비상 착륙 -->
<Action ID="EmergencyLand"/>
</ReactiveFallback>
ReactiveFallback을 사용하므로, 비상 복귀 중에 시스템이 정상으로 회복되면 정상 임무 또는 기능 축소 임무로 자동 전환한다. 반대로, 기능 축소 비행 중에 상황이 악화되면 비상 복귀 또는 비상 착륙으로 즉시 전환한다.
Tick 1: IsAllSystemsNormal→S, NormalMission→R (정상 비행)
Tick 2: IsAllSystemsNormal→F, IsSafeToFly→S,
DegradedMission→R (센서 이상 → 축소 운영)
NormalMission→Halt
Tick 3: IsAllSystemsNormal→F, IsSafeToFly→F,
IsReturnPossible→S, EmergencyReturn→R (상황 악화 → 비상 복귀)
DegradedMission→Halt
Tick 4: IsAllSystemsNormal→F, IsSafeToFly→S,
DegradedMission→R (상황 개선 → 축소 운영 복귀)
EmergencyReturn→Halt
8. 다중 모터 고장 대응
8.1 멀티콥터의 모터 고장 대응
<Fallback>
<!-- 단일 모터 고장: 비대칭 비행으로 복귀 -->
<Sequence>
<Condition ID="IsSingleMotorFailed"/>
<Action ID="ReconfigureFlightController"/>
<Action ID="ReturnToLaunchReduced"/>
</Sequence>
<!-- 다중 모터 고장: 제어된 하강 -->
<Sequence>
<Condition ID="IsPartialControlPossible"/>
<Action ID="ControlledDescent"/>
</Sequence>
<!-- 완전 동력 상실: 낙하산 전개 -->
<Sequence>
<Condition ID="IsParachuteEquipped"/>
<Condition ID="IsAltitudeAboveMinimum"/>
<Action ID="DeployParachute"/>
</Sequence>
<!-- 최후 수단 -->
<Action ID="EmergencyMotorCutoff"/>
</Fallback>
단일 모터 고장 시 비행 제어기를 재구성하여 잔여 모터로 복귀를 시도하고, 다중 고장 시 제어된 하강을 수행하며, 완전 동력 상실 시 낙하산을 전개한다.
9. 비상 대응 Fallback의 설계 원칙
-
안전 착륙 보장: 모든 Fallback 체인의 최종 대안은 반드시 착륙으로 귀결되어야 한다. 드론은 공중에 무한히 체공할 수 없으므로, 어떤 비상 상황에서든 지상에 안전하게 도달하는 것이 최소한의 안전 요구사항이다.
-
점진적 퇴화: 가장 안전한 대안(기지 복귀)부터 가장 제한적인 대안(비상 착륙)까지 순서대로 배치하여, 가능한 한 높은 수준의 안전성을 유지한다.
-
조건의 정확한 분류: 각 비상 대응의 전제 조건을 정확히 명시하여, 해당 대응이 실행 가능한 상황에서만 시도되도록 한다. 모터가 고장난 상태에서 기지 복귀를 시도하는 것은 위험하다.
-
타임아웃 적용: 대기(Loiter) 및 복귀 행동에 타임아웃을 적용하여, 무한 체공에 의한 배터리 소진을 방지한다.
-
비행 규정 준수: 비상 대응 행동은 관련 항공 규정(지오펜스, 비행 금지 구역 등)을 가능한 한 준수하되, 인명 안전이 최우선이다(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/