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