데코레이터의 로봇공학 적용 패턴 (Robotics Application Patterns of Decorators)
1. 개요
데코레이터 노드는 로봇 시스템의 다양한 행동 패턴을 구현하는 데 핵심적으로 활용된다. 본 절에서는 내비게이션, 매니퓰레이션, 드론 비행, 감시, 초기화 등 로봇 공학의 주요 응용 분야에서 데코레이터가 적용되는 대표적 패턴을 종합적으로 다룬다.
2. 내비게이션 패턴
2.1 타임아웃 기반 안전 내비게이션
<Fallback>
<Timeout msec="60000">
<Action ID="NavigateToGoal"/>
</Timeout>
<Sequence>
<Action ID="ClearCostmap"/>
<Timeout msec="90000">
<Action ID="NavigateToGoal"/>
</Timeout>
</Sequence>
<Action ID="ReportFailure"/>
</Fallback>
1차 시도 60초 → 실패 시 코스트맵 초기화 후 90초 재시도 → 최종 실패 보고.
2.2 반복 순찰
<Timeout msec="3600000">
<Repeat num_cycles="-1">
<Sequence>
<Action ID="NavigateTo" goal="{wp_A}"/>
<Action ID="NavigateTo" goal="{wp_B}"/>
<Action ID="NavigateTo" goal="{wp_C}"/>
</Sequence>
</Repeat>
</Timeout>
1시간 동안 순찰 경로를 무한 반복한다.
3. 매니퓰레이션 패턴
3.1 재시도 파지 행동
<RetryNode num_attempts="3">
<Sequence>
<Action ID="AdjustGraspPose"/>
<Action ID="ExecuteGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</RetryNode>
파지 자세를 조정하면서 최대 3회 파지를 시도한다.
3.2 일회성 캘리브레이션
<RunOnce>
<RetryNode num_attempts="5">
<Action ID="CalibrateEndEffector"/>
</RetryNode>
</RunOnce>
말단장치 캘리브레이션을 한 번만 수행하되, 실패 시 최대 5회 재시도한다.
4. 드론 비행 패턴
4.1 호버링 유지
<KeepRunningUntilFailure>
<Action ID="MaintainHoverSetpoint"/>
</KeepRunningUntilFailure>
4.2 지연 시작 임무
<Sequence>
<Action ID="Takeoff"/>
<Delay delay_msec="5000">
<SubTree ID="FlightMission"/>
</Delay>
</Sequence>
이륙 후 5초 안정화 대기 후 임무 시작.
5. 안전 패턴
5.1 조건 반전 가드
<ReactiveSequence>
<Inverter>
<Condition ID="IsEmergencyStopActive"/>
</Inverter>
<SubTree ID="MainOperation"/>
</ReactiveSequence>
5.2 실패 무시 보조 행동
<Sequence>
<Action ID="MainTask"/>
<ForceSuccess>
<Action ID="SendTelemetry"/>
</ForceSuccess>
</Sequence>
6. 초기화 패턴
6.1 시스템 시작 시 일회성 초기화
<Sequence>
<RunOnce>
<Sequence>
<RetryNode num_attempts="3">
<Action ID="InitSensors"/>
</RetryNode>
<Action ID="LoadConfig"/>
</Sequence>
</RunOnce>
<SubTree ID="NormalOperation"/>
</Sequence>
7. 복합 임무 패턴
7.1 시간 제한 + 재시도 + 지연
<Timeout msec="120000">
<RetryNode num_attempts="5">
<Delay delay_msec="2000">
<SubTree ID="ComplexTask"/>
</Delay>
</RetryNode>
</Timeout>
전체 2분 이내에서, 2초 간격으로 복합 작업을 최대 5회 재시도한다.
8. 데코레이터 선택 가이드
| 행동 요구 | 적합한 데코레이터 |
|---|---|
| 실행 시간 제한 | Timeout |
| 실패 시 재시도 | Retry |
| 횟수 지정 반복 | Repeat |
| 한 번만 실행 | RunOnce |
| 실행 전 대기 | Delay |
| 결과 반전 | Inverter |
| 실패 무시 | ForceSuccess |
| 성공까지 반복 | KeepRunningUntilFailure |
| 조건부 실행 | Precondition (_skipIf 등) |
| 빈도 제한 | RateController |
9. 참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- Macenski, S., et al. (2020). “The Marathon 2: A Navigation System.” arXiv preprint arXiv:2003.00368.
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-05 | 초안 작성 |