Repeat의 고정 횟수 반복 규칙 (Repeat's Fixed Count Repetition Rule)

Repeat의 고정 횟수 반복 규칙 (Repeat’s Fixed Count Repetition Rule)

1. 개요

Repeat 데코레이터의 고정 횟수 반복 규칙은 자식 노드를 사전에 지정된 정확한 횟수 N만큼 성공적으로 실행하는 것을 보장하는 규칙이다. num_cycles 매개변수로 반복 횟수를 지정하며, 자식이 N번째 SUCCESS를 반환하면 Repeat 데코레이터가 SUCCESS를 반환한다.

2. 규칙의 정형적 정의

2.1 반복 종료 조건

반복 카운터 k가 지정된 횟수 N에 도달하면 반복이 종료된다.

\text{terminate}(k, N) = \begin{cases} \text{true} & \text{if } k \geq N \\ \text{false} & \text{if } k < N \end{cases}

카운터 갱신 규칙

자식이 SUCCESS를 반환할 때마다 카운터가 1 증가한다.

k_{t+1} = \begin{cases} k_t + 1 & \text{if } s_{\text{child}}(t) = \text{SUCCESS} \\ k_t & \text{otherwise} \end{cases}

3. 고정 횟수 반복의 동작 흐름

3.1 N = 3인 경우의 tick 시퀀스

Tick 1:  Child tick → RUNNING          | k=0, Repeat=RUNNING
Tick 2:  Child tick → SUCCESS          | k=1, Repeat=RUNNING
Tick 3:  Child tick (새 실행) → RUNNING | k=1, Repeat=RUNNING
Tick 4:  Child tick → SUCCESS          | k=2, Repeat=RUNNING
Tick 5:  Child tick (새 실행) → RUNNING | k=2, Repeat=RUNNING
Tick 6:  Child tick → SUCCESS          | k=3, Repeat=SUCCESS ✓

6번의 tick 후, 자식이 3회 성공적으로 완료되어 Repeat가 SUCCESS를 반환한다.

3.2 N = 1인 경우

자식을 한 번만 실행하므로, Repeat 없이 자식을 직접 실행하는 것과 동일한 효과이다. 그러나 코드의 명시성을 위해 Repeat num_cycles="1"을 사용하는 경우도 있다.

4. num_cycles 매개변수의 유효 값

의미동작
N > 0고정 횟수 반복N회 SUCCESS 후 완료
N = 0즉시 완료자식을 tick하지 않고 SUCCESS 반환
N = -1무한 반복자식이 FAILURE를 반환할 때까지 반복

N = 0인 경우의 동작은 구현에 따라 다를 수 있으며, BehaviorTree.CPP에서는 즉시 SUCCESS를 반환하는 것이 일반적이다.

5. XML에서의 설정

<!-- 5회 반복 -->
<Repeat num_cycles="5">
    <Action ID="ScanArea"/>
</Repeat>

<!-- 블랙보드 값으로 동적 지정 -->
<Repeat num_cycles="{scan_count}">
    <Action ID="ScanArea"/>
</Repeat>

블랙보드를 통해 반복 횟수를 동적으로 지정하면, 런타임에 임무 요구에 따라 반복 횟수를 변경할 수 있다.

6. 고정 횟수 반복의 실용적 사례

6.1 순찰 반복

<Repeat num_cycles="10">
    <Sequence>
        <Action ID="NavigateToWaypoint_A"/>
        <Action ID="NavigateToWaypoint_B"/>
        <Action ID="NavigateToWaypoint_C"/>
    </Sequence>
</Repeat>

A→B→C 경로를 10회 순찰한다.

6.2 샘플 수집

<Repeat num_cycles="3">
    <Sequence>
        <Action ID="MoveToSamplePoint"/>
        <Action ID="CollectSample"/>
    </Sequence>
</Repeat>

3개의 샘플 지점에서 샘플을 수집한다.

7. 설계 시 고려 사항

7.1 반복 중 조건 변화

고정 횟수 반복 중에 외부 조건이 변화하여 반복을 조기에 중단하여야 하는 경우, ReactiveSequence와 조건 노드를 결합하여 감시 메커니즘을 추가한다.

<ReactiveSequence>
    <Condition ID="IsBatteryAbove" min_percentage="0.15"/>
    <Repeat num_cycles="10">
        <Action ID="PatrolWaypoint"/>
    </Repeat>
</ReactiveSequence>

배터리가 부족해지면 반복이 halt되어 중단된다.

7.2 반복 횟수의 합리적 설정

과도하게 큰 반복 횟수는 장시간 실행을 초래하므로, Timeout과 함께 사용하여 전체 실행 시간을 제한하는 것이 안전하다.

8. 참고 문헌

  • 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초안 작성