intermediate - topic statistics

Overview

ROS 2는 어떤 구독(subscription)이 받은 메시지에 대한 통계를 내장 측정할 수 있다. 구독별로 통계를 수집하면 시스템 성능을 파악하거나 문제 진단에 활용할 수 있다.

측정 항목은 수신 메시지 주기(received message period)수신 메시지 나이(received message age) 이다. 각 항목마다 평균·최대·최소·표준편차·샘플 수가 제공되며, 이동 윈도우(moving window) 안에서 계산된다.

How statistics are calculated (계산 방식)

각 통계 집합은 libstatistics_collector 유틸리티로 상수 시간·상수 메모리로 계산된다. 구독이 새 메시지를 받을 때마다 현재 측정 윈도우에 샘플이 하나 추가된다. 평균은 이동 평균, 최대·최소·샘플 수는 샘플마다 갱신되고, 표준편차는 Welford의 온라인 알고리즘으로 구한다.

Types of statistics calculated (통계 종류)

항목단위설명
Received message periodms시스템 시계로 측정한 연속 수신 메시지 간 간격.
Received message agems메시지가 퍼블리셔에서 나온 뒤 얼마나 지났는지. 메시지 헤더에 타임스탬프가 있어야 계산 가능.

Behavior (동작)

  • 기본값: 토픽 통계는 꺼져 있다. 해당 노드의 구독 설정 옵션에서 이 기능을 켜면, 그 구독에 대해 주기·나이 측정이 모두 활성화된다.
  • 발행: 통계는 statistics_msg/msg/MetricsMessage 타입으로, 설정 가능한 주기(기본 1초)에 설정 가능한 토픽(기본 /statistics)에 발행된다. 이 발행 주기가 샘플 수집 윈도우 주기이기도 하다.
  • 나이(age): 헤더에 타임스탬프가 없으면 나이를 구할 수 없으므로, 값을 채우지 않고 NaN으로 발행한다. 아예 발행하지 않는 것보다 “측정 불가”를 명시해 신호 부재로 오해하지 않게 한다.
  • 주기(period): 윈도우의 첫 번째 샘플에서는 주기 값을 내지 않는다. “이전 메시지 도착 시각”이 필요하기 때문이며, 그 다음 샘플부터 주기가 계산된다.

Comparison to ROS 1

ROS 1 토픽 통계와 비슷하게 메시지 나이·주기를 구독 측에서 계산한다. ROS 1에 있던 드롭된 메시지 수, 트래픽량 같은 지표는 현재 제공하지 않는다.

Support (지원)

문서 기준으로 이 기능은 rclcpp(C++) 에서 지원된다. Python 지원 등 추가 개선은 공식 문서의 해당 섹션에서 확인할 수 있다.


참고: Topic statistics — ROS 2 Jazzy