드론 호버링 유지 행동 (KeepRunningUntilFailure+Hover)
1. 개요
드론 호버링 유지 행동은 KeepRunningUntilFailure 데코레이터와 호버링 명령 발행 액션을 결합하여, 드론이 특정 위치에서 지속적으로 호버링(hovering)을 유지하는 패턴이다. 외부 조건(배터리 소진, 풍속 초과, 비행 모드 변경)에 의해 FAILURE가 반환될 때까지 호버링을 지속한다.
2. 기본 구조
<KeepRunningUntilFailure>
<Action ID="PublishHoverSetpoint"
x="{hover_x}" y="{hover_y}" z="{hover_z}"/>
</KeepRunningUntilFailure>
PublishHoverSetpoint가 매 tick마다 SUCCESS를 반환하면, KeepRunningUntilFailure가 이를 RUNNING으로 변환하여 다음 tick에서 재실행한다. 호버링 명령이 실패하면(FAILURE) KeepRunningUntilFailure가 종료된다.
3. 안전 조건과의 결합
<ReactiveSequence>
<Condition ID="IsFlightModeCorrect" expected_mode="OFFBOARD"/>
<Condition ID="IsBatteryAbove" min_percentage="0.15"/>
<Condition ID="IsWindSpeedAcceptable" max_wind_speed="10.0"/>
<KeepRunningUntilFailure>
<Action ID="PublishHoverSetpoint"/>
</KeepRunningUntilFailure>
</ReactiveSequence>
비행 모드, 배터리, 풍속 조건을 지속적으로 감시하면서 호버링을 유지한다. 조건 중 하나라도 위반되면 ReactiveSequence가 KeepRunningUntilFailure를 halt하여 호버링이 중단된다.
4. 호버링 후 행동 전환
<Sequence>
<Action ID="FlyToWaypoint"/>
<KeepRunningUntilFailure>
<Sequence>
<Condition ID="IsHoverRequired"/>
<Action ID="MaintainHover"/>
</Sequence>
</KeepRunningUntilFailure>
<Action ID="ProceedToNextWaypoint"/>
</Sequence>
웨이포인트 도착 후 호버링이 필요한 동안 호버링을 유지하고, 호버링 조건이 해제되면(IsHoverRequired FAILURE → Sequence FAILURE → KeepRunningUntilFailure 종료) 다음 웨이포인트로 이동한다.
5. OFFBOARD 모드에서의 명령 주기 보장
PX4에서 OFFBOARD 모드를 유지하려면 최소 2Hz(0.5초 간격)로 setpoint를 발행하여야 한다. KeepRunningUntilFailure는 행동 트리의 tick 주기(일반적으로 10~100Hz)마다 setpoint를 발행하므로, 이 요구를 충족한다.
6. 설계 시 고려 사항
6.1 통신 두절 시 동작
setpoint 발행이 실패하면(통신 오류 등) KeepRunningUntilFailure가 종료되고, 상위 구조에서 안전 행동(귀환, 착륙)이 실행되어야 한다.
6.2 halt 시 로터 명령
KeepRunningUntilFailure가 halt되면, 마지막으로 발행된 setpoint가 FCU에 남아있다. halt 후 별도의 안전 명령(위치 유지 또는 착륙)을 발행하여야 한다.
7. 참고 문헌
- Meier, L., et al. (2015). “PX4: A Node-Based Multithreaded Open Source Robotics Framework for Deeply Embedded Platforms.” ICRA 2015.
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-05 | 초안 작성 |