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