659.113 TF2의 QoS 설정과 네트워크 부하 관리 (TF2 QoS Configuration and Network Load Management)

659.113 TF2의 QoS 설정과 네트워크 부하 관리 (TF2 QoS Configuration and Network Load Management)

1. QoS 정책의 개념과 TF2에서의 역할

ROS2는 DDS(Data Distribution Service) 미들웨어 위에 구축되어 있으며, DDS의 서비스 품질(Quality of Service, QoS) 정책을 통해 토픽 기반 통신의 신뢰성, 내구성, 이력 심도 등의 특성을 세밀하게 제어할 수 있다. TF2 좌표 변환 시스템은 /tf/tf_static 두 개의 토픽을 통해 변환 데이터를 전송하며, 각 토픽에 서로 상이한 QoS 정책이 적용된다. 이러한 QoS 설정은 변환 데이터의 전달 특성뿐만 아니라, 시스템 전체의 네트워크 부하에 직접적인 영향을 미치므로 정밀한 이해와 적절한 구성이 필수적이다.

2. TF2 토픽별 기본 QoS 프로파일

2.1 /tf 토픽의 QoS 프로파일

/tf 토픽은 동적 변환(dynamic transform)의 전송에 사용되며, 다음의 QoS 정책이 기본으로 적용된다.

QoS 정책설정값설명
신뢰성 (Reliability)RELIABLE메시지 전달의 신뢰성을 보장한다
내구성 (Durability)VOLATILE구독 시점 이전의 메시지를 보관하지 않는다
이력 (History)KEEP_LAST최근 N개의 메시지만 보관한다
이력 심도 (Depth)100이력 버퍼의 크기를 100으로 설정한다
수명 (Lifespan)무한메시지의 유효 기간을 제한하지 않는다
기한 (Deadline)무한발행 기한을 강제하지 않는다
활성도 (Liveliness)AUTOMATICDDS가 자동으로 활성도를 관리한다

VOLATILE 내구성 정책은 구독자가 /tf 토픽에 새로 연결될 때 과거에 발행된 변환 메시지를 수신하지 못함을 의미한다. 동적 변환은 주기적으로 갱신되므로, 구독자는 연결 이후의 새로운 발행으로부터 변환 데이터를 축적한다.

2.2 /tf_static 토픽의 QoS 프로파일

/tf_static 토픽은 정적 변환(static transform)의 전송에 사용되며, /tf와 구별되는 핵심 QoS 정책은 내구성이다.

QoS 정책설정값설명
신뢰성 (Reliability)RELIABLE메시지 전달의 신뢰성을 보장한다
내구성 (Durability)TRANSIENT_LOCAL발행된 메시지를 발행자의 메모리에 보관하고, 이후에 연결되는 구독자에게 재전달한다
이력 (History)KEEP_ALL모든 발행 메시지를 보관한다
이력 심도 (Depth)KEEP_ALL 정책이므로 심도 제한이 적용되지 않는다

TRANSIENT_LOCAL 내구성 정책은 정적 변환의 특성에 최적화된 설정이다. StaticTransformBroadcaster가 발행한 변환은 DDS 계층의 발행자 측 이력 캐시에 영구적으로 보관되며, 이후에 새로운 TransformListener가 연결되면 보관된 모든 정적 변환이 자동으로 전달된다. 이로 인해 정적 변환은 발행 노드의 수명 동안 단 한 번만 발행하면 충분하다.

3. QoS 호환성과 변환 수신 실패

3.1 발행자-구독자 간 QoS 호환성 규칙

DDS에서 발행자와 구독자의 QoS 정책이 호환되지 않으면 통신이 수립되지 않는다. TF2의 변환 수신에 영향을 미치는 주요 호환성 규칙은 다음과 같다.

신뢰성 호환성: 발행자가 BEST_EFFORT로 설정된 경우, 구독자는 BEST_EFFORT 또는 RELIABLE 모두로 수신할 수 있다. 그러나 발행자가 RELIABLE로 설정된 경우, 구독자도 반드시 RELIABLE이어야 한다. TF2의 기본 설정은 RELIABLE이므로, 사용자가 임의로 BEST_EFFORT 구독자를 생성하면 통신이 수립되지 않을 수 있다.

내구성 호환성: 발행자가 TRANSIENT_LOCAL이고 구독자가 VOLATILE인 경우에는 통신이 수립되나, 구독자는 과거에 발행된 메시지를 수신하지 못한다. /tf_static의 경우 이는 정적 변환의 소실을 의미하므로, 구독자의 내구성 정책은 반드시 TRANSIENT_LOCAL로 설정하여야 한다.

3.2 QoS 불일치 진단

QoS 불일치로 인한 변환 수신 실패는 로그에 직접적인 오류 메시지를 생성하지 않는 경우가 많아 진단이 어렵다. 다음의 도구를 활용하면 QoS 불일치 여부를 확인할 수 있다.

# /tf 토픽의 현재 QoS 프로파일 확인
ros2 topic info /tf --verbose

# /tf_static 토픽의 QoS 프로파일 확인
ros2 topic info /tf_static --verbose

출력에는 각 발행자와 구독자의 QoS 설정이 상세하게 표시되며, 호환되지 않는 설정이 존재하면 해당 발행자-구독자 쌍 사이의 통신이 수립되지 않았음을 확인할 수 있다.

4. 네트워크 부하의 정량적 분석

4.1 변환 메시지의 대역폭 소모

단일 geometry_msgs/TransformStamped 메시지의 CDR(Common Data Representation) 직렬화 크기는 약 136바이트이며, tf2_msgs/TFMessage로 래핑할 때 배열 헤더 등을 포함하여 단일 변환당 약 160–180바이트의 유선(wire) 크기를 가진다. DDS의 전송 계층에서 추가되는 RTPS(Real-Time Publish-Subscribe) 프로토콜 헤더와 UDP/IP 헤더를 포함하면, 단일 변환 메시지의 총 네트워크 페이로드는 약 200–250바이트로 추정된다.

N개의 동적 변환이 각각 주파수 f_i (i = 1, 2, \dots, N)로 발행될 때, /tf 토픽에서의 초당 총 대역폭 소모 B_{\text{tf}}는 다음과 같다.

B_{\text{tf}} = S_{\text{wire}} \cdot \sum_{i=1}^{N} f_i \quad [\text{bytes/s}]

여기서 S_{\text{wire}}는 단일 변환 메시지의 평균 유선 크기이다.

4.2 이력 심도와 메모리 소모의 관계

QoS의 이력 심도(history depth) D는 DDS 계층에서 발행자 또는 구독자가 유지하는 메시지 버퍼의 크기를 결정한다. /tf 토픽의 기본 이력 심도는 100이므로, 각 발행자와 구독자는 최대 100개의 TFMessage 인스턴스를 DDS 이력 캐시에 보관한다.

TFMessage가 단일 변환을 포함하는 경우, 구독자 측의 DDS 이력 캐시 메모리 사용량은 다음과 같이 추정된다.

M_{\text{cache}} = D \cdot S_{\text{msg}} \cdot P \quad [\text{bytes}]

여기서 P/tf 토픽의 발행자 수이다. 이력 심도를 과도하게 크게 설정하면 메모리 사용량이 증가하고, 과도하게 작게 설정하면 네트워크 혼잡 시 메시지 유실이 발생할 수 있다.

5. 네트워크 부하 관리 전략

5.1 이력 심도 최적화

기본 이력 심도 100은 대부분의 단일 로봇 시스템에서 적절하나, 다중 로봇 환경이나 고주파 발행 시스템에서는 조정이 필요할 수 있다. 이력 심도 조정의 원칙은 다음과 같다.

  1. 메시지 처리 지연 시간 고려: 구독자 노드의 콜백 처리가 발행 속도를 따라가지 못하는 경우, 이력 심도를 증가시켜 메시지 유실을 방지한다. 필요한 최소 이력 심도는 D_{\min} = f_p \cdot \tau_{\text{delay}}로 추정할 수 있다. 여기서 \tau_{\text{delay}}는 최대 처리 지연 시간이다.
  2. 메모리 제약 고려: 임베디드 플랫폼에서는 이력 심도를 10–50 범위로 축소하여 메모리 사용량을 제한한다.

5.2 신뢰성 정책의 전환 검토

TF2의 기본 신뢰성 정책은 RELIABLE이며, 이는 DDS가 메시지 전달을 확인하고 손실된 메시지를 재전송하는 메커니즘을 포함한다. 재전송 메커니즘은 네트워크 지연을 증가시키고, 혼잡한 네트워크에서 추가적인 트래픽을 생성할 수 있다.

BEST_EFFORT 정책으로 전환하면 메시지 재전송 오버헤드가 제거되어 네트워크 부하가 감소한다. 동적 변환은 주기적으로 갱신되므로, 간헐적인 메시지 유실이 발생하더라도 다음 주기의 발행으로 보상될 수 있다. 그러나 이 전환은 TF2 프레임워크의 기본 설정을 변경하는 것이므로, 시스템 수준의 충분한 검증이 선행되어야 한다.

사용자 정의 TransformBroadcaster를 생성할 때 QoS 프로파일을 명시적으로 지정하는 방법은 다음과 같다.

#include <rclcpp/rclcpp.hpp>
#include <tf2_ros/transform_broadcaster.h>

rclcpp::QoS qos_profile(100);
qos_profile.reliability(rclcpp::ReliabilityPolicy::BestEffort);
qos_profile.durability(rclcpp::DurabilityPolicy::Volatile);

auto tf_broadcaster = std::make_shared<tf2_ros::TransformBroadcaster>(
    node, qos_profile);

이 경우 구독자 측의 TransformListener도 동일한 BEST_EFFORT 정책으로 구성하여야 하며, 정책 불일치가 발생하지 않도록 시스템 전체의 설정을 일관되게 관리하여야 한다.

5.3 DDS 전송 계층 최적화

DDS 미들웨어 구현체(예: Fast DDS, Cyclone DDS)는 전송 계층 수준의 다양한 최적화 옵션을 제공한다. TF2의 네트워크 부하 관리에 유효한 주요 설정은 다음과 같다.

공유 메모리 전송(Shared Memory Transport): 동일 호스트 내에서 실행되는 노드 간 통신에서 UDP 소켓 대신 공유 메모리를 사용하면, 직렬화/역직렬화 오버헤드와 네트워크 계층 처리 비용을 크게 절감할 수 있다. Fast DDS의 경우 공유 메모리 전송이 기본적으로 활성화되어 있으며, 프로파일 XML을 통해 세부 설정을 조정할 수 있다.

<!-- Fast DDS 프로파일: 공유 메모리 전송 활성화 -->
<profiles xmlns="http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles">
    <transport_descriptors>
        <transport_descriptor>
            <transport_id>shm_transport</transport_id>
            <type>SHM</type>
            <segment_size>1048576</segment_size>
        </transport_descriptor>
    </transport_descriptors>
</profiles>

멀티캐스트 제한: 기본적으로 DDS Discovery는 UDP 멀티캐스트를 사용한다. 다수의 노드가 /tf 토픽에 참여하는 대규모 시스템에서는 멀티캐스트 트래픽이 네트워크 대역폭을 과도하게 소모할 수 있다. 유니캐스트 기반 Discovery로 전환하거나, Discovery 서버를 사용하면 이러한 부하를 완화할 수 있다.

5.4 토픽 필터링을 통한 선택적 수신

대규모 로봇 시스템에서 모든 노드가 전체 변환 트리를 수신할 필요는 없다. DDS의 콘텐츠 필터링 토픽(content-filtered topic)을 활용하면, 특정 프레임 쌍의 변환만을 선택적으로 수신하여 구독자 측의 네트워크 수신 부하와 tf2::Buffer의 메모리 사용량을 절감할 수 있다. 그러나 TF2 프레임워크는 기본적으로 전체 /tf 토픽을 구독하도록 설계되어 있으므로, 콘텐츠 필터링의 적용은 사용자 정의 구독자를 통해 구현하여야 한다.

6. 무선 네트워크 환경에서의 QoS 전략

무선 네트워크는 유선 네트워크에 비해 대역폭이 제한적이고, 패킷 손실률이 높으며, 지연 시간의 변동(jitter)이 크다. 이러한 환경에서 TF2의 신뢰성 있는 변환 전달을 보장하려면 다음의 QoS 전략을 고려하여야 한다.

  1. BEST_EFFORT 정책 채택: 무선 네트워크에서 RELIABLE 정책의 재전송 메커니즘은 추가적인 대역폭 소모와 지연을 유발한다. 동적 변환의 주기적 발행 특성을 고려하면, BEST_EFFORT 정책이 더 적합할 수 있다.
  2. 이력 심도 축소: 제한된 대역폭 환경에서 이력 버퍼의 크기를 축소하면, 밀려 있는 메시지의 일괄 전송으로 인한 순간적 대역폭 폭증을 방지할 수 있다.
  3. 발행 주파수 제한: 무선 대역폭에 맞추어 변환 발행 주파수를 보수적으로 설정하고, 변환 소비자 측에서 보간을 통해 시간적 해상도를 보완하는 전략을 적용한다.
  4. 메시지 압축: DDS 전송 계층에서 메시지 페이로드 압축을 활성화하여 유효 대역폭 사용을 절감한다. Fast DDS는 RTPS 수준의 데이터 압축 기능을 제공한다.

7. QoS 설정의 체계적 검증

QoS 설정 변경 후에는 시스템의 변환 전달 특성이 요구 사항을 충족하는지 체계적으로 검증하여야 한다. 검증 항목은 다음과 같다.

검증 항목측정 도구수용 기준
변환 수신 연속성tf2_monitorExtrapolationException 미발생
변환 지연 시간tf2_monitor평균 지연 < 발행 주기의 50%
메시지 유실률ros2 topic echo --lost-messages유실률 < 1% (RELIABLE 모드)
CPU 사용량top, htopTF 관련 노드 CPU 점유율 < 10%
네트워크 대역폭iftop, nload/tf 트래픽 < 전체 대역폭의 20%

참고 문헌 및 출처

  • ROS2 geometry2 리포지터리, tf2_ros 패키지, https://github.com/ros2/geometry2
  • OMG Data Distribution Service (DDS) Specification, Version 1.4, https://www.omg.org/spec/DDS
  • eProsima Fast DDS Documentation, https://fast-dds.docs.eprosima.com
  • Eclipse Cyclone DDS Documentation, https://cyclonedds.io/docs
  • ROS2 QoS 설정 가이드, https://docs.ros.org/en/humble/Concepts/Intermediate/About-Quality-of-Service-Settings.html
  • Foote, T. (2013). “tf: The transform library.” IEEE International Conference on Technologies for Practical Robot Applications (TePRA), pp. 1–6.

버전: 1.0