단일 실행 초기화 행동 (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.1 | 2026-04-05 | 초안 작성 |