단일 실행 초기화 행동 (RunOnce+Initialize)

1. 개요

단일 실행 초기화 행동은 RunOnce 데코레이터와 초기화 액션을 결합하여, 시스템 시작 시 한 번만 수행되는 초기화 절차를 행동 트리에 통합하는 패턴이다. 센서 초기화, 캘리브레이션, 설정 로딩, 구독 설정 등 일회성 행동에 적합하다.

2. 기본 구조

<Sequence>
    <RunOnce>
        <Sequence>
            <Action ID="InitializeSensors"/>
            <Action ID="LoadCalibrationData"/>
            <Action ID="SetupSubscriptions"/>
        </Sequence>
    </RunOnce>
    <SubTree ID="MainMission"/>
</Sequence>

첫 번째 tick에서 센서 초기화, 캘리브레이션, 구독 설정을 수행하고, 이후 tick에서는 캐싱된 결과를 반환하여 즉시 메인 임무로 진행한다.

3. Retry와의 결합

초기화 실패 시 재시도를 포함하는 강건한 초기화 패턴이다.

<RunOnce>
    <RetryNode num_attempts="5">
        <Sequence>
            <Action ID="InitializeLidar"/>
            <Action ID="InitializeIMU"/>
            <Action ID="InitializeCamera"/>
        </Sequence>
    </RetryNode>
</RunOnce>

최대 5회 재시도하여 초기화를 시도하고, 결과를 캐싱한다.

4. ReactiveSequence에서의 사용

<ReactiveSequence>
    <Condition ID="IsSystemActive"/>
    <RunOnce>
        <Action ID="PerformStartupDiagnostics"/>
    </RunOnce>
    <Action ID="MainOperation"/>
</ReactiveSequence>

매 tick마다 시스템 활성 조건이 재평가되지만, 진단은 최초 한 번만 수행된다.

5. 초기화 실패의 영구 캐싱 문제

RunOnce는 FAILURE도 캐싱하므로, 초기화가 실패하면 이후 모든 tick에서 FAILURE가 반환된다. Retry를 내부에 배치하여 초기화 성공 확률을 최대화한다.

<RunOnce>
    <RetryNode num_attempts="10">
        <Delay delay_msec="1000">
            <Action ID="WaitForSensorDriver"/>
        </Delay>
    </RetryNode>
</RunOnce>

6. 드론 시동 및 이륙 초기화

<RunOnce>
    <Sequence>
        <Action ID="ArmMotors"/>
        <Delay delay_msec="2000">
            <Action ID="Takeoff" altitude="5.0"/>
        </Delay>
    </Sequence>
</RunOnce>

7. 참고 문헌

  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/

버전날짜변경 사항
v0.12026-04-05초안 작성