RunOnce의 활용 사례 (Use Cases of the RunOnce Decorator)

1. 개요

RunOnce 데코레이터는 시스템 초기화, 일회성 설정, 환경 준비 등 한 번만 수행하면 되는 행동에 활용된다. 본 절에서는 로봇 공학에서의 구체적인 RunOnce 활용 사례를 다룬다.

2. 사례 1: 하드웨어 초기화

<Sequence>
    <RunOnce>
        <Sequence>
            <Action ID="InitializeLidar"/>
            <Action ID="InitializeIMU"/>
            <Action ID="InitializeCamera"/>
        </Sequence>
    </RunOnce>
    <SubTree ID="MainMission"/>
</Sequence>

센서 초기화를 최초 한 번만 수행하고, 이후에는 메인 임무를 직접 실행한다.

3. 사례 2: 센서 캘리브레이션

<RunOnce>
    <RetryNode num_attempts="3">
        <Action ID="CalibrateIMU"/>
    </RetryNode>
</RunOnce>

IMU 캘리브레이션을 한 번만 수행하되, 실패 시 최대 3회 재시도한다.

4. 사례 3: 시작 알림

<Sequence>
    <RunOnce>
        <Action ID="PlayStartupSound"/>
    </RunOnce>
    <Action ID="BeginOperation"/>
</Sequence>

5. 사례 4: 환경 지도 로딩

<RunOnce>
    <Action ID="LoadStaticMap"/>
</RunOnce>

6. 사례 5: ReactiveSequence 내 일회성 설정

<ReactiveSequence>
    <Condition ID="IsSystemActive"/>
    <RunOnce>
        <Action ID="SubscribeToTopics"/>
    </RunOnce>
    <Action ID="ProcessData"/>
</ReactiveSequence>

매 tick마다 시스템 활성 조건을 확인하면서도, 토픽 구독은 한 번만 수행한다.

7. 사례 6: 드론 시동 및 이륙

<Sequence>
    <RunOnce>
        <Sequence>
            <Action ID="ArmMotors"/>
            <Action ID="Takeoff" altitude="5.0"/>
        </Sequence>
    </RunOnce>
    <SubTree ID="FlightMission"/>
</Sequence>

무장과 이륙을 한 번만 수행하고, 이후에는 비행 임무를 수행한다.

8. 사례 7: 초기 위치 기록

<RunOnce>
    <Action ID="RecordStartPosition"
            output_position="{start_position}"/>
</RunOnce>

시작 위치를 한 번만 기록하여 블랙보드에 저장한다. 이후 귀환 시 이 위치를 참조한다.

9. 설계 시 고려 사항

RunOnce는 “한 번만 실행“의 의미를 명확히 하여 사용하여야 한다. 행동 트리가 재시작되면 RunOnce도 리셋되므로, 시스템 전체 생명주기에서의 단일 실행이 필요한 경우에는 별도의 상태 관리(파일, 파라미터 등)가 필요하다.

10. 참고 문헌

  • 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초안 작성