KeepRunningUntilFailure의 활용 사례 (Use Cases of KeepRunningUntilFailure)

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.12026-04-04초안 작성