KeepRunningUntilFailure의 활용 사례 (Use Cases of KeepRunningUntilFailure)
1. 개요
KeepRunningUntilFailure 데코레이터는 지속적 실행이 필요한 행동에 활용된다. 본 절에서는 구체적인 활용 사례를 다룬다.
2. 사례 1: 지속적 센서 감시
<KeepRunningUntilFailure>
<Sequence>
<Action ID="ReadSensorData"/>
<Action ID="ProcessAndPublish"/>
</Sequence>
</KeepRunningUntilFailure>
센서 데이터 읽기와 발행을 센서 오류가 발생할 때까지 지속한다.
3. 사례 2: 드론 호버링 유지
<ReactiveSequence>
<Condition ID="IsFlightModeCorrect" expected_mode="OFFBOARD"/>
<KeepRunningUntilFailure>
<Action ID="PublishHoverSetpoint"/>
</KeepRunningUntilFailure>
</ReactiveSequence>
OFFBOARD 모드인 동안 호버링 명령을 지속적으로 발행한다.
4. 사례 3: 웨이포인트 순찰 (무한)
<KeepRunningUntilFailure>
<Sequence>
<Action ID="NavigateTo" goal="{wp_A}"/>
<Action ID="NavigateTo" goal="{wp_B}"/>
<Action ID="NavigateTo" goal="{wp_C}"/>
</Sequence>
</KeepRunningUntilFailure>
A→B→C 순찰을 내비게이션 실패 시까지 무한 반복한다.
5. 사례 4: 이벤트 대기 루프
<KeepRunningUntilFailure>
<Fallback>
<Sequence>
<Condition ID="IsCommandReceived"/>
<ForceFailure>
<Action ID="ExecuteCommand"/>
</ForceFailure>
</Sequence>
<ForceSuccess><Action ID="Sleep" ms="50"/></ForceSuccess>
</Fallback>
</KeepRunningUntilFailure>
명령이 수신되면 실행하고, ForceFailure로 루프를 종료한다. 명령이 없으면 50ms 대기 후 재확인한다.
6. 사례 5: 배터리 감시
<KeepRunningUntilFailure>
<Condition ID="IsBatteryAbove" min_percentage="0.1"/>
</KeepRunningUntilFailure>
배터리가 10% 이상인 동안 RUNNING을 반환하고, 10% 미만이 되면 FAILURE를 반환하여 종료한다. 이를 Sequence의 앞에 배치하면 배터리 감시 가드로 기능한다.
7. 설계 시 고려 사항
KeepRunningUntilFailure는 자식이 FAILURE를 반환할 수 있는 경로가 반드시 존재하여야 한다. 외부 종료 메커니즘(ReactiveSequence + 조건, Timeout)과의 결합도 안전 설계의 중요한 요소이다.
8. 참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-04 | 초안 작성 |