1292.68 Timeout 데코레이터의 동작

1. Timeout 데코레이터의 정의

Timeout 데코레이터는 자식 노드의 실행에 시간 제한을 부여하는 데코레이터 노드이다. 자식 노드가 지정된 시간 내에 완료(Success 또는 Failure)되면 그 결과를 그대로 반환하고, 시간이 초과되면 자식에 halt를 요청하고 Failure를 반환한다. Timeout은 비동기 액션 노드의 무한 대기를 방지하고, 행동의 실행 시간에 상한을 설정하는 데 사용된다 (Faconti, BehaviorTree.CPP Documentation, 2024).

2. 알고리즘

function Timeout.tick():
    if status == Idle:
        start_time = current_time()
        elapsed = 0

    child_status = child.tick()

    if child_status == Success or child_status == Failure:
        return child_status

    // child_status == Running
    elapsed = current_time() - start_time
    if elapsed > timeout_duration:
        child.halt()
        return Failure
    else:
        return Running

3. 상태 변환 규칙

조건자식 반환 상태Timeout 반환 상태
시간 내 완료SuccessSuccess
시간 내 완료FailureFailure
시간 내 진행 중RunningRunning
시간 초과RunningFailure (자식에 halt 요청)

시간 내에 자식이 완료되면 자식의 반환 상태를 그대로 전파한다. 시간이 초과되면 자식이 Running 상태에 있으므로 halt를 요청하고, Timeout 데코레이터 자체는 Failure를 반환한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

4. 실행 흐름 예제

다음의 Timeout 데코레이터를 고려한다. 자식 액션에 3초의 시간 제한을 부여한다.

Timeout [3초]
 └─ Action [A1: 목표 도달]

4.1 시간 내 성공

Tick경과 시간A1 반환Timeout 반환비고
t_10.0초RunningRunning실행 시작
t_21.0초RunningRunning진행 중
t_32.0초SuccessSuccess시간 내 완료

4.2 시간 초과

Tick경과 시간A1 반환Timeout 반환비고
t_10.0초RunningRunning실행 시작
t_21.0초RunningRunning진행 중
t_32.0초RunningRunning진행 중
t_43.1초RunningFailure시간 초과, A1에 halt 요청

tick t_4에서 경과 시간이 3초를 초과하므로, A1에 halt가 요청되고 Timeout은 Failure를 반환한다 (Faconti, 2024).

5. 내부 상태 관리

Timeout 데코레이터는 타이머 시작 시각(start_time)을 내부 상태로 유지한다. 이 시각은 노드가 Idle에서 활성화될 때 기록되며, 매 tick에서 경과 시간을 계산하여 시간 초과 여부를 판단한다.

6. Halt 전파

Timeout이 halt 요청을 수신하면, Running 상태의 자식에게 halt를 전파하고 타이머를 초기화한다.

function Timeout.halt():
    if child.status == Running:
        child.halt()
    start_time = 0
    set_status(Idle)

시간 초과에 의해 Timeout 자체가 자식에 halt를 요청하는 경우와, 외부 halt 요청에 의해 Timeout이 halt되는 경우를 구분하여야 한다. 전자는 Timeout의 내부 로직에 의한 것이고, 후자는 상위 노드의 제어 흐름에 의한 것이다.

7. 시간 측정의 정밀도

Timeout 데코레이터의 시간 측정 정밀도는 행동 트리의 tick 주기에 의존한다. tick 주기가 T인 경우, 시간 초과의 감지는 최대 T만큼의 지연이 발생할 수 있다. 즉, 설정된 시간 제한이 D이면 실제 시간 초과 감지는 D에서 D + T 사이에 발생한다.

8. 로봇 공학에서의 활용

8.1 행동의 시간 상한 설정

목표 지점 이동, 물체 탐색, 매니퓰레이션 등의 비동기 행동에 시간 상한을 설정하여, 행동이 무한히 지속되는 것을 방지한다. 시간 내에 완료되지 못한 행동은 실패로 처리되어 Fallback 노드에 의한 대안 행동으로 전환된다.

8.2 안전 시간 제한

안전이 중요한 행동에서 최대 허용 실행 시간을 설정한다. 예를 들어, 로봇 팔의 이동에 시간 제한을 설정하여, 기구적 간섭이나 제어 오류에 의한 무한 이동을 방지한다 (Colledanchise & Ögren, 2018).


참고 문헌

  • Colledanchise, M. & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D. (2024). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/