Repeat의 활용 사례 (Use Cases of the Repeat Decorator)
1. 개요
Repeat 데코레이터는 동일한 행동을 복수 회 반복하여야 하는 로봇 임무에서 핵심적으로 활용된다. 순찰, 검사, 샘플 수집, 매핑 등 반복적 행동 패턴을 간결하게 표현할 수 있다. 본 절에서는 로봇 공학에서의 구체적인 Repeat 활용 사례를 다룬다.
2. 사례 1: 고정 횟수 순찰
정해진 횟수만큼 순찰 경로를 반복한다.
<Repeat num_cycles="8">
<Sequence>
<Action ID="NavigateTo" goal="{waypoint_A}"/>
<Action ID="NavigateTo" goal="{waypoint_B}"/>
<Action ID="NavigateTo" goal="{waypoint_C}"/>
<Action ID="NavigateTo" goal="{waypoint_D}"/>
</Sequence>
</Repeat>
A→B→C→D 순찰 경로를 8회 반복한다.
3. 사례 2: 다중 지점 검사
복수의 검사 지점에서 검사를 수행한다.
<Repeat num_cycles="5">
<Sequence>
<Action ID="MoveToNextInspectionPoint"/>
<Action ID="PerformVisualInspection"/>
<Action ID="RecordInspectionResult"/>
</Sequence>
</Repeat>
4. 사례 3: 반복 시도를 통한 목표 탐색
<Repeat num_cycles="10">
<Sequence>
<Action ID="RotateInPlace" angle="36"/>
<Fallback>
<Sequence>
<Condition ID="IsTargetVisible"/>
<ForceFailure>
<Action ID="RecordTargetLocation"/>
</ForceFailure>
</Sequence>
<ForceSuccess>
<Action ID="DoNothing"/>
</ForceSuccess>
</Fallback>
</Sequence>
</Repeat>
10회(36° × 10 = 360°) 회전하면서 목표물을 탐색한다.
5. 사례 4: 매니퓰레이터 파지 반복 시도
<Repeat num_cycles="3">
<Sequence>
<Action ID="AdjustGraspPose"/>
<Action ID="AttemptGrasp"/>
<Condition ID="IsObjectGrasped"/>
</Sequence>
</Repeat>
파지 자세를 조정하면서 최대 3회 파지를 시도한다. 파지에 성공하면(IsObjectGrasped SUCCESS) 다음 반복으로 진행하나, 일반적으로 파지 성공 후 반복을 중단하려면 조건을 반전하여 FAILURE를 유발하는 방식을 사용한다.
6. 사례 5: 무한 반복 환경 감시
<ReactiveSequence>
<Condition ID="IsSystemActive"/>
<Repeat num_cycles="-1">
<Sequence>
<Action ID="ScanEnvironment"/>
<Action ID="UpdateOccupancyGrid"/>
<Delay delay_msec="500">
<ForceSuccess><Action ID="DoNothing"/></ForceSuccess>
</Delay>
</Sequence>
</Repeat>
</ReactiveSequence>
시스템이 활성 상태인 동안 0.5초 간격으로 환경을 스캔하고 점유 격자를 갱신한다.
7. 사례 6: 드론 웨이포인트 임무
<Sequence>
<Action ID="Takeoff"/>
<Repeat num_cycles="{num_waypoints}">
<Sequence>
<Action ID="FlyToNextWaypoint"/>
<Action ID="HoverAndCapture"/>
</Sequence>
</Repeat>
<Action ID="ReturnToLaunch"/>
<Action ID="Land"/>
</Sequence>
이륙 후 지정된 수의 웨이포인트를 순회하며 데이터를 수집하고, 귀환하여 착륙한다.
8. Repeat와 다른 데코레이터의 조합
8.1 Repeat + Timeout
<Timeout msec="300000">
<Repeat num_cycles="20">
<Action ID="ProcessBatch"/>
</Repeat>
</Timeout>
5분 이내에 최대 20회 배치 처리를 수행한다.
8.2 Repeat + ForceSuccess
<Repeat num_cycles="10">
<ForceSuccess>
<Action ID="OptionalScan"/>
</ForceSuccess>
</Repeat>
스캔의 실패와 관계없이 10회 반복을 보장한다.
9. 설계 시 고려 사항
9.1 반복 횟수와 임무 요구의 일치
반복 횟수는 임무의 실제 요구에 맞추어 설정하여야 한다. 과소 설정은 임무 미완료를, 과다 설정은 불필요한 시간 소모를 초래한다.
9.2 반복 간 상태 초기화
반복되는 자식 행동이 이전 반복의 상태에 영향을 받지 않도록, 블랙보드 값이나 내부 상태가 각 반복 시작 시 적절히 초기화되어야 한다.
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 | 초안 작성 |