1293.13 Tick 주기와 시스템 응답성의 관계
1. 시스템 응답성의 정의
시스템 응답성(system responsiveness)이란 외부 환경의 변화나 내부 상태의 전이가 발생한 시점으로부터 행동 트리(Behavior Tree)가 해당 변화를 감지하고 적절한 행동을 결정하여 실행 명령을 출력하기까지의 시간 지연을 의미한다. 이 지연 시간은 반응 지연(reaction latency)이라고도 하며, 로봇 시스템의 안전성과 작업 효율성에 직접적인 영향을 미친다(Colledanchise & Ogren, 2018).
행동 트리에서 시스템 응답성은 Tick 주기에 의해 근본적으로 제약된다. 행동 트리는 Tick이 발생하는 시점에서만 환경 상태를 평가하고 의사 결정을 수행하므로, 두 Tick 사이에 발생하는 환경 변화는 다음 Tick이 도래할 때까지 감지되지 않는다.
2. Tick 주기와 최악 반응 지연
행동 트리의 최악 반응 지연(worst-case reaction latency) L_{worst}는 Tick 주기 T_{tick}과 단일 Tick의 실행 시간 T_{exec}의 합으로 표현된다.
L_{worst} = T_{tick} + T_{exec}
이는 환경 변화가 Tick 직후에 발생하여 다음 Tick까지 T_{tick}만큼 대기하고, 해당 Tick의 실행이 완료되기까지 T_{exec}가 추가로 소요되는 최악의 경우를 나타낸다.
평균 반응 지연(average reaction latency)은 환경 변화가 Tick 주기 내에서 균등하게 분포한다고 가정할 때 다음과 같다.
L_{avg} = \frac{T_{tick}}{2} + T_{exec}
따라서 Tick 주기를 절반으로 줄이면 평균 반응 지연도 대략 절반으로 감소한다. 그러나 이는 Tick 실행 시간 T_{exec}가 무시 가능할 정도로 작은 경우에만 성립하며, T_{exec}가 T_{tick}에 비해 무시할 수 없는 비율을 차지하는 경우에는 Tick 주기를 줄여도 응답성 개선 효과가 제한적이다.
3. 감지 지연과 행동 지연의 분리
시스템 응답성은 감지 지연(detection latency)과 행동 지연(action latency)으로 세분화할 수 있다.
3.1 감지 지연
감지 지연은 환경 변화가 실제로 발생한 시점부터 행동 트리의 조건 노드가 해당 변화를 인식하는 시점까지의 시간이다. 감지 지연은 Tick 주기뿐만 아니라 센서 데이터의 수신 지연, ROS2 토픽의 전달 지연, 조건 노드의 평가 순서 등에 의해 영향을 받는다.
L_{detect} = L_{sensor} + L_{comm} + L_{tick\_wait}
여기서 L_{sensor}는 센서 측정 지연, L_{comm}은 통신 지연, L_{tick\_wait}는 다음 Tick까지의 대기 시간이다.
3.2 행동 지연
행동 지연은 조건 변화가 감지된 후 행동 트리가 적절한 액션 노드를 활성화하고 해당 액션이 실행되기까지의 시간이다. 행동 지연은 트리의 깊이, 제어 노드의 분기 로직, 액션 노드의 초기화 시간 등에 의해 결정된다.
L_{action} = T_{tree\_traversal} + T_{action\_init}
트리 깊이가 깊어지거나 노드 수가 증가하면 T_{tree\_traversal}이 증가하므로, 복잡한 행동 트리일수록 동일한 Tick 주기에서도 행동 지연이 커진다.
4. Tick 주기와 조건 변화 감지율
Tick 주기는 조건 변화의 감지율(detection rate)에 직접적으로 영향을 미친다. 짧은 시간 동안만 유지되는 일시적 조건(transient condition)의 경우, Tick 주기가 해당 조건의 지속 시간보다 길면 감지에 실패할 수 있다.
조건의 지속 시간을 D_{condition}이라 하면, 해당 조건이 최소 한 번의 Tick에 의해 감지되기 위한 필요 조건은 다음과 같다.
T_{tick} \leq D_{condition}
이 조건이 충족되지 않으면 조건의 발생과 소멸이 두 Tick 사이에서 완결되어 행동 트리가 전혀 인지하지 못하는 상황이 발생한다. 이는 Nyquist-Shannon 샘플링 정리의 행동 트리적 해석에 해당한다.
5. Reactive 노드와 응답성의 관계
ReactiveSequence 및 ReactiveFallback과 같은 반응형 제어 노드는 매 Tick마다 모든 자식 노드를 처음부터 재평가하므로, 조건 변화에 대한 응답성이 높다. 반면 WithMemory 모드의 제어 노드는 이미 성공한 자식 노드를 건너뛰므로, 해당 노드에 연관된 조건 변화를 감지하지 못한다.
Reactive 노드의 응답성 이점은 다음과 같이 정량화할 수 있다.
| 노드 유형 | 조건 재평가 빈도 | 조건 변화 감지 지연 |
|---|---|---|
| ReactiveSequence | 매 Tick | \leq T_{tick} |
| SequenceWithMemory | 재진입 시에만 | \leq N \times T_{tick} (N: 잔여 자식 수) |
Reactive 노드를 사용하면 Tick 주기와 동일한 수준의 조건 감지 지연을 보장할 수 있으나, 매 Tick마다 추가적인 조건 평가 비용이 발생하므로 T_{exec}가 증가하는 트레이드오프가 존재한다.
6. 응답성과 계산 부하의 트레이드오프
Tick 주기를 줄여 응답성을 높이면 단위 시간당 Tick 횟수가 증가하여 CPU 사용률이 상승한다. 단위 시간당 행동 트리 실행에 소비되는 CPU 비율 U_{bt}는 다음과 같이 추정된다.
U_{bt} = \frac{T_{exec}}{T_{tick}}
T_{tick}을 줄이면 U_{bt}가 증가하며, T_{tick} = T_{exec}인 극단적 경우 CPU의 100%가 행동 트리 실행에 점유된다. 이 상태에서는 ROS2의 다른 콜백(토픽 구독, 서비스 응답 등)이 실행될 기회를 얻지 못하여 시스템 전체의 응답성이 오히려 저하될 수 있다.
따라서 적절한 Tick 주기는 행동 트리의 응답성 요구와 시스템 전체의 계산 자원 배분을 균형 있게 고려하여 결정해야 한다. 일반적으로 U_{bt} \leq 0.3 (30% 이하)을 유지하는 것이 권장되며, 이는 나머지 70%의 CPU 시간을 센서 처리, 통신, 제어 등 다른 서브시스템에 할당할 수 있음을 의미한다.
7. 다단계 응답성 설계
로봇 시스템에서 모든 의사 결정이 동일한 응답성을 요구하지는 않는다. 안전 관련 조건(장애물 감지, 비상 정지 등)은 극도로 짧은 반응 지연을 요구하는 반면, 고수준 임무 계획(목표 재설정, 경로 재계획 등)은 상대적으로 긴 반응 지연을 허용한다.
이러한 요구 사항의 차이를 수용하기 위해 다단계 응답성(multi-tier responsiveness) 설계를 적용할 수 있다.
| 계층 | 응답성 요구 | 구현 방식 |
|---|---|---|
| 안전 계층 | < 10 ms | 하드웨어 인터럽트 또는 전용 고주파 루프 |
| 반응 계층 | 10 \sim 100 ms | 높은 Tick 주파수의 ReactiveSequence |
| 계획 계층 | 100 ms \sim 1 s | 낮은 Tick 주파수의 SequenceWithMemory |
안전 관련 의사 결정은 행동 트리의 Tick 메커니즘에 의존하지 않고, 별도의 하드웨어 수준 보호 메커니즘이나 전용 고주파 소프트웨어 루프로 처리하는 것이 안전성 관점에서 바람직하다.
8. 응답성 측정과 검증
시스템 응답성을 실험적으로 측정하기 위해서는 알려진 시점에 환경 변화를 주입하고, 행동 트리가 해당 변화에 반응하여 출력을 변경하는 시점까지의 시간을 계측한다. 이 과정에서 다음 지표를 수집한다.
- 최소 반응 지연: 환경 변화가 Tick 직전에 발생한 최선의 경우
- 최대 반응 지연: 환경 변화가 Tick 직후에 발생한 최악의 경우
- 평균 반응 지연: 다수의 시행에 걸친 통계적 평균
- 반응 지연의 표준 편차: 응답 시간의 변동성(jitter)
측정 결과를 바탕으로 Tick 주기가 시스템의 응답성 요구 사항을 충족하는지를 정량적으로 검증하고, 필요한 경우 Tick 주기를 조정한다.
참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- Faconti, D. (2022). BehaviorTree.CPP documentation and API reference. https://www.behaviortree.dev/