Timeout의 시간 제한 설정 (Timeout's Time Limit Configuration)

Timeout의 시간 제한 설정 (Timeout’s Time Limit Configuration)

1. 개요

Timeout 데코레이터의 시간 제한 설정은 msec 매개변수를 통해 자식 노드에 허용할 최대 실행 시간을 밀리초(ms) 단위로 지정하는 것이다. 이 설정은 행동의 응답성 요구, 시스템 자원 관리, 안전 요구 등을 고려하여 결정되며, 행동 트리의 전체적인 시간 예측 가능성을 보장하는 핵심 매개변수이다.

2. msec 매개변수

2.1 기본 설정

<Timeout msec="30000">
    <Action ID="NavigateToGoal"/>
</Timeout>

msec="30000"은 30초(30,000 밀리초)의 타임아웃을 설정한다.

2.2 블랙보드를 통한 동적 설정

<Timeout msec="{nav_timeout_ms}">
    <Action ID="NavigateToGoal"/>
</Timeout>

블랙보드의 nav_timeout_ms 값에 따라 타임아웃 시간이 동적으로 결정된다. 임무 거리, 환경 복잡도, 배터리 잔량 등에 따라 타임아웃을 조정할 수 있다.

3. 타임아웃 시간 설정 기준

3.1 행동별 권장 타임아웃

행동 유형권장 타임아웃근거
센서 초기화5~15초드라이버 로딩 시간
서비스 호출1~5초네트워크 응답 시간
경로 계획5~30초계획 복잡도
근거리 내비게이션 (< 10m)30~60초이동 시간 + 여유
장거리 내비게이션 (> 50m)120~600초이동 시간 + 장애물 회피
파지/배치 작업15~60초작업 복잡도
도킹/충전30~120초정밀 위치 조정

3.2 타임아웃 계산 공식

동적 타임아웃 계산 시, 예상 실행 시간에 안전 여유를 포함한다.

T_{\text{timeout}} = T_{\text{expected}} \times k_{\text{safety}}

여기서 T_{\text{expected}}는 예상 실행 시간, k_{\text{safety}}는 안전 계수(일반적으로 1.5~3.0)이다.

내비게이션의 경우:

T_{\text{timeout}} = \frac{d}{v_{\text{min}}} \times k_{\text{safety}}

여기서 d는 목표까지의 거리, v_{\text{min}}는 최소 예상 속도이다.

4. 타임아웃의 단위 주의

BehaviorTree.CPP에서 Timeout의 msec 매개변수는 밀리초 단위이다.

원하는 시간msec 값
1초1000
10초10000
1분60000
5분300000
1시간3600000

5. 매우 짧은 타임아웃의 주의

타임아웃을 행동 트리의 tick 주기보다 짧게 설정하면, 자식이 한 번도 tick되지 못하고 타임아웃이 발생할 수 있다. tick 주기가 100ms인 경우, 최소 타임아웃은 200ms 이상으로 설정하여야 한다.

6. 매우 긴 타임아웃의 주의

타임아웃이 과도하게 길면, 교착 상태나 무한 실행에 대한 보호 기능이 약화된다. 행동의 최대 합리적 실행 시간을 기준으로 설정하여야 한다.

7. 설계 시 고려 사항

7.1 시뮬레이션 환경에서의 타임아웃

시뮬레이션에서 시간이 실제보다 느리게 진행되는 경우(실시간 비율 < 1.0), 실제 시간 기반 타임아웃이 너무 빨리 만료될 수 있다. 시뮬레이션 시간에 맞춘 타임아웃 조정이 필요하다.

7.2 네트워크 지연 환경

원격 서비스 호출을 포함하는 행동에서는 네트워크 왕복 시간(RTT)을 타임아웃에 포함하여야 한다.

7.3 다중 Timeout의 중첩

중첩된 Timeout 중 외부 Timeout이 내부 Timeout보다 짧으면, 외부 Timeout이 먼저 만료되어 내부 행동이 중단된다. Timeout의 중첩 관계를 신중히 설계하여야 한다.

<!-- 외부 > 내부 (올바름) -->
<Timeout msec="60000">
    <Timeout msec="30000">
        <Action ID="Task"/>
    </Timeout>
</Timeout>

<!-- 외부 < 내부 (내부 Timeout이 무의미) -->
<Timeout msec="10000">
    <Timeout msec="60000">
        <Action ID="Task"/>
    </Timeout>
</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초안 작성