# ROS2 Humble에서 개선된 통신 구조

ROS2 Humble 버전에서는 기존 Foxy나 Galactic 등 이전 버전에서 제기되었던 네트워크 지연, QoS 설정의 복잡성, DDS 벤더 간 호환성 문제 등을 보다 체계적으로 해결하기 위해 통신 구조 전반에서 개선이 이뤄졌다. 이 개선 사항은 크게 DDS 계층에서의 호환성 보완, RTOS 환경에서의 고성능 실시간 통신 안정화, 노드 간 상호작용 시 품질 지표에 대한 정교한 관리 방안 제공 등으로 요약할 수 있다. 다음에서는 이러한 개선점들을 구체적으로 살펴본다.

#### DDS 계층 최적화

ROS2의 핵심은 DDS(데이터 배포 서비스)를 통해 퍼블리셔와 서브스크라이버, 서비스 클라이언트와 서버가 메시지를 주고받는 구조를 취한다. Humble에서는 여러 DDS 구현체들(eProsima Fast DDS, Cyclone DDS, RTI Connext DDS 등)의 호환성 테스트가 이전보다 엄격해졌고, RMW(ROS Middleware) 계층에서 DDS 벤더 별 특징을 최대한 반영하여 사용자 경험을 통일시키도록 개선되었다.

* DDS Discovery 개선: 기존 ROS2는 초기에 노드들이 서로를 찾는 과정에서 OS별로 브로드캐스트 설정이나 방화벽 이슈로 인해 검색 시간이 길거나 일정 노드를 인식하지 못하는 문제점이 있었다. Humble에서 Discovery 프로토콜 파라미터 설정을 간소화하고, $N$개 노드가 있을 때 Discover 요청을 효율적으로 브로드캐스팅하도록 최적화했다.
* QoS 정책 호환성 강화: 예를 들어, Cyclone DDS와 Fast DDS가 서로 다른 QoS 프로파일을 제공할 때, 가능한 겹치는 부분을 RMW에서 공통 인터페이스로 추상화하여 노드 간의 품질 설정이 달라도 상호 통신이 무리 없이 이루어지도록 유연성을 높였다.

#### 실시간 성능 고려

ROS2는 하드 실시간 시스템보다는 소프트 실시간(Semi-Real-Time)에 초점을 맞춰왔으나, Humble에서는 산업용 로봇이나 자율주행 등에서 요구되는 정밀도를 만족하기 위해 우선순위 기반 스케줄링, 스레드 할당, 메모리 할당 문제를 보다 엄격하게 처리하도록 개선했다.

* RTOS 환경 지원: VxWorks, QNX 등 RTOS에서 사용자 공간과 커널 공간 간 컨텍스트 스위칭이 줄어들도록 노드 실행 시점을 관리하며, DDS 레벨에서 발생하는 로드 밸런싱 과정을 효율화했다.
* 네트워크 스레드 최적화: 메시지 전송을 담당하는 네트워크 스레드가 다른 태스크들과 경쟁하지 않도록 ROS2 내부에서 CPU 코어 바인딩 옵션을 세분화하여 설정할 수 있게 되었다. 이를 통해 $t\_{\mathrm{comm}}$(통신에 소요되는 시간)이 이전보다 일정하게 유지된다.

#### 멀티 네트워크 인터페이스 활용

멀티 NIC(Network Interface Card)나 VPN, VLAN 등 복수의 네트워크 경로를 활용해 메시지를 송수신할 때, Humble에서는 하나의 노드가 여러 인터페이스를 감지하고 가장 높은 대역폭 혹은 가장 낮은 지연 인터페이스를 우선적으로 사용하도록 정책을 제공한다. 이는 동일 시스템 내에서 복수의 이더넷 포트를 활용하거나 로컬 네트워크와 클라우드 환경이 혼재된 경우에 유용하다.

{% @mermaid/diagram content="flowchart LR
A\["노드 A (이더넷)"]
B\["노드 B (와이파이)"]
C\["노드 B (이더넷)"]
A --> B
A --> C" %}

위 그림에서 노드 A가 네트워크 상태에 따라 노드 B와의 와이파이 연결을 임시로 유지하되, 이더넷 경로(C)를 우선적으로 활용하도록 설정이 가능해진다. 이는 네트워크 모듈에서 우선순위를 관리하는 로직을 통해 구현되며, ROS2 노드 레벨에서 별도의 라우팅 설정 없이도 자동으로 이뤄진다.

#### 노드 간 트래픽 모니터링 및 관리

Humble에서는 노드 간 메시지 트래픽을 실시간으로 추적할 수 있는 모니터링 툴과 API를 보강하였다. 이를 통해 퍼블리셔와 서브스크라이버 간에 실제로 전송되는 데이터 양, 메시지 도착 지연, 재전송 현황 등을 시각적으로 확인할 수 있다. 노드의 트래픽 양이 임계값을 넘어설 경우 QoS 정책이나 퍼블리셔의 전송 주기 등을 동적으로 재조정해 네트워크 부하를 완화할 수 있는 구조를 갖추었다.

* 트래픽 임계값 기반 동적 QoS 조정: 예를 들어, $\tau\_{\mathrm{latency}}$가 $T\_{\mathrm{max}}$를 초과하거나 전송량이 제한된 자원 환경에서 특정 임계값을 넘으면, 자동으로 신뢰 모드(Reliable)에서 베스트 에포트(Best-Effort)로 전환하거나, 메시지 버퍼 크기를 조절하는 식으로 네트워크 상황에 대응 가능하다.
* Topic 수준 모니터링: 특정 토픽에 대해 ROS2 CLI 툴이나 rqt 플러그인을 통해 토픽별 트래픽, 구독자 수, 실시간 대역폭 사용량 등을 한눈에 파악할 수 있다. 이를 통해 노드 혹은 토픽 단위로 성능 병목 구간을 분석한다.

#### Shared Memory Transport 강화

이전까지 ROS2는 노드 간 통신이 DDS를 통해 네트워크 인터페이스를 경유하는 구조에 의존했으며, 같은 물리 머신이나 동일 보드 내 노드 간 통신조차도 네트워크 스택을 지나야 했다. Humble에서는 공유 메모리를 활용한 통신 경로가 더욱 최적화되어, 시스템 자원 사용량을 줄이고 지연을 감소시키는 효과가 있다.

* 노드 간 Zero-Copy: 동일 프로세스 혹은 동일 물리 호스트 내에서 퍼블리셔가 생성한 데이터를 복사 없이 구독자가 참조하도록 하는 방안이 제공된다. 이는 $O(1)$ 수준의 메시지 전달을 목표로 하며, 특히 이미지나 포인트 클라우드 등 대용량 데이터를 다루는 로봇 애플리케이션에서 유용하다.
* 메시지 동기화 메커니즘: 공유 메모리를 이용할 때 발생할 수 있는 동기화 이슈(쓰기 중인 버퍼를 구독자가 읽는 시점 불일치)를 해결하기 위해 쓰기-읽기 락(Spin Lock, Mutex) 혹은 Atomic 연산을 사용하는 방식이 정교화되었다.

#### 네트워크-로컬 전환 자동화

네트워크 트래픽이 과도하거나 무선 환경이 불안정할 때, ROS2 메시지 전송 경로를 네트워크 인터페이스에서 로컬(shared memory) 인터페이스로 자동 전환하는 기능도 실험적으로 제공된다. 예컨대 로봇 시스템에서 메인 CPU와 여러 서브 모듈이 단일 보드 내부에 탑재되어 있고, 외부 네트워크와 상호 작용할 필요가 없는 노드 간에는 공유 메모리 방식을 우선 사용하여 성능을 높인다.

{% @mermaid/diagram content="flowchart LR
A\["퍼블리셔 (네트워크 DDS)"]
B\["퍼블리셔 (Shared Memory)"]
C\["서브스크라이버 (네트워크 DDS)"]
D\["서브스크라이버 (Shared Memory)"]
A -- 외부 연결 시 --> C
B -- 로컬 환경 시 --> D" %}

* 상태 감지 로직: DDS 계층에서 $f(\mathrm{bandwidth}, \mathrm{latency}, \mathrm{packet\_loss})$ 등의 지표를 추적해, $\mathrm{packet\_loss}$가 임계값 이상으로 치솟으면 로컬 경로를 우선시하도록 RMW가 자동 조정한다.
* 하이브리드 모드: 일부 노드는 네트워크 DDS 경로를, 일부 노드는 shared memory 경로를 사용하는 하이브리드 구성을 지원하여, 트래픽에 따라 유연하게 역할을 나눈다.

#### 도메인 브리징(Domain Bridge) 확장

ROS2에서 도메인 브리징(Domain Bridge)은 물리적으로 떨어져 있거나 네트워크 구성이 다른 ROS2 시스템 간의 통신을 중계해 주는 기능이다. Humble에서는 이러한 도메인 브리징을 보다 안정적으로 운용하도록 다음과 같은 개선이 이뤄졌다.

* 다중 도메인 지원 강화: 서로 다른 DDS 도메인이나 서로 다른 QoS 정책을 갖는 여러 시스템을 동시에 연결할 수 있도록 브리지 노드가 다중 세션을 유지하는 기능이 추가되었다.
* 자동 필터링 및 매핑: 토픽명이나 메시지 타입이 유사하더라도 실제로 다른 기능을 수행할 수 있으므로, 브리지 설정 시 자동 필터링 옵션을 통해 특정 토픽만 선별적으로 중계한다. 이때 $f(\mathrm{topic\_name})$ 형태로 정규식 필터를 지정하거나, 메시지 타입을 기준으로 매핑 규칙을 정의할 수 있다.
* 지연 보정 로직: 도메인 간 통신 지연을 최소화하기 위해 중간 브리지 노드가 DDS Discovery 데이터를 캐싱하고, 송수신 노드가 상호 인식되는 즉시 데이터 채널을 맺도록 개선되었다. 이를 통해 Bridge 노드가 장애가 되거나 일시적으로 다운되어도 빠르게 복구 가능하다.

#### 보안 및 접근 제어 (SROS2 개선)

ROS2의 보안 아키텍처인 SROS2(Security for ROS2)는 DDS Security를 기반으로 노드 인증, 암호화, 접근 제어 등을 제공한다. Humble에서는 산업 현장에서 더욱 엄격한 보안 수칙을 만족하기 위해 다음 부분이 강화되었다.

* 권한 기반 세분화: 노드별로 퍼블리시·구독 권한을 명시적으로 설정할 수 있는 정책 파일을 더욱 직관적으로 작성할 수 있게 되었다. 예를 들어, 특정 노드가 `/cmd_vel`토픽에 퍼블리시 권한은 있어도, `/tf` 토픽에는 접근 권한이 없도록 설정 가능하다.
* 암호화 알고리즘 선택지 확대: DDS Security 레이어에서 TLS 1.3 기반 암호화나 AES-GCM 모드 등 최신 보안 스펙을 옵션으로 제공한다. 이를 통해 CPU 리소스나 암호화 강도, 인증서 발급 체계 등 시스템 요구사항에 맞는 알고리즘을 선택할 수 있다.
* Key Management 자동화: 노드 혹은 로봇 단위로 키·인증서를 갱신해야 하는 경우가 많은데, Humble에서는 파일 기반이 아닌 로컬 툴링을 통해 자동으로 인증서를 발급·갱신하고 노드별로 분배해주는 절차가 표준화되었다.

#### 시뮬레이션 및 테스트 환경 확장

통신 구조의 개선 효과를 검증하기 위해, ROS2 Humble에서는 시뮬레이션 및 테스트 툴 체인이 크게 보강되었다.

* ROS2 Turtlesim 확장판: Turtlesim 예제에 DDS Discovery, QoS 설정, Domain Bridge 시나리오 등을 적용해볼 수 있는 학습용 시뮬레이션 툴이 제공된다. 이를 통해 노드 간 성능 차이, 네트워크 트래픽 변화 등을 가볍게 실험 가능하다.
* 대규모 환경 테스트: 수십\~수백 개 노드를 동시에 시뮬레이션하기 위해 Gazebo(또는 Ignition)에서 ROS2 메시지 상호작용 로깅을 효율화했다. 고빈도(High-Frequency) 토픽의 트래픽을 추적하고, $t\_{\mathrm{pub}} - t\_{\mathrm{sub}}$ 등의 지연을 실시간으로 시각화하는 플러그인이 추가되었다.
* 인프라 스트레스 테스트 도구: DDS 계층에 인위적으로 패킷 유실이나 지연을 유발해, QoS 설정 변경 전후의 성능 변화를 수치화해 볼 수 있는 테스트 툴을 제공한다. 예컨대 $\mathrm{packet\_loss}$를 10%에서 30%까지 점진적으로 증가시키며 신뢰 모드(Reliable)와 베스트 에포트(Best-Effort) 간의 차이를 분석한다.

#### micro-ROS 연동 개선

초소형 마이크로컨트롤러(MCU) 환경에서 ROS2 기능을 일부 사용하도록 설계된 micro-ROS는 Humble 버전과의 호환성이 개선되어, 임베디드 장치와 상위 레벨 로봇 시스템 간의 통신이 한층 원활해졌다.

* RMW 마이크로 프로파일 최적화: micro-ROS와 상위 레벨 ROS2 노드 간에 DDS 벤더를 달리해도 QoS 충돌이 최소화되도록 RMW 레벨에서 프로파일 호환성을 개선했다.
* 연결 관리 자동화: MCU가 자주 재부팅되거나 절전 모드에서 깨어나는 상황을 고려해, DDS Discovery 절차가 누락되지 않도록 Micro XRCE-DDS 세션 재연결 로직이 보강되었다.
* 자원 사용 제한: MCU 상에서 사용 가능한 메모리가 매우 제한적이므로, QoS 프로파일에 따라 가능한 최대 토픽 수나 메시지 버퍼 크기를 동적으로 제한하는 기능이 추가되었다. 예를 들어, $n\_{\mathrm{max\_topics}}$나 $m\_{\mathrm{max\_msg\_size}}$ 등과 같은 파라미터를 설정해 MCU에서 허용 가능한 자원 범위 내에서만 동작하도록 제어한다.

#### 네트워크 지능형 라우팅(Adaptive Routing) 시도

Humble에서는 분산 시스템에서 흔히 사용하는 라우팅 및 로드 밸런싱 기법을 일부 DDS 구현체에 적용해보는 연구가 진행되었다. 목적은 네트워크 트래픽이 집중되는 노드 혹은 경로를 피하여, 전체 ROS2 시스템의 메시지 전달 품질을 향상시키는 것이다.

* Topology 인식: 동일 도메인 안에 여러 라우터, 스위치, 혹은 복수의 서브넷이 존재할 때, DDS 계층이나 RMW가 노드 배치를 인식하고 가장 효율적인 경로를 선정한다. 예컨대 “Node A - Switch 1 - Router - Switch 2 - Node B” 구조를 “Node A - Switch 1 - Node B” 구조로 단축할 수 있다면, 우회 경로를 제거한다.
* 대역폭 기반 라우팅: 노드가 다수의 네트워크 인터페이스(유선, 무선 등)에 동시에 연결되어 있으면, DDS에서 각 인터페이스의 대역폭(throughput)과 지연(latency)을 측정해 최적의 인터페이스를 동적으로 선택한다.
* 플러그인 아키텍처: DDS 벤더별 라우팅 로직이 상이할 수 있으므로, Humble에서는 RMW 차원에서 라우팅 정책을 플러그인으로 구성할 수 있게 설계되었다.

#### Edge & Cloud 연동 구간 최적화

로봇 시스템이 클라우드로 일부 처리를 위임하는 사례가 늘어나면서, ROS2 Humble에서는 엣지(Edge)와 클라우드 간 통신의 효율을 높이는 기능이 도입되었다.

* 라이트웨이트 메시지 구조: 동영상 스트리밍이나 대용량 센서 데이터를 클라우드에 전송할 때, 모든 데이터를 원본 그대로 전송하기보다는 전처리(Downsampling, ROI 추출) 후에 전송하도록 퍼블리셔 측에서 옵션을 제공한다.
* 클라우드 골백(Goal-Back) 서비스: 클라우드에서 연산 결과를 받을 노드가 오랫동안 응답을 기다리지 않도록, 서비스의 요청-응답 구조에 타임아웃과 재시도 로직이 포함되었다. 응답이 늦어질 경우 부분 결과를 먼저 반환하는 식의 구조도 적용 가능하다.
* 하이브리드 Discovery: 로컬 LAN 내에서는 DDS Discovery 프로토콜을 사용하되, 클라우드 측에는 별도의 게이트웨이 노드가 존재하여 노드 목록과 토픽 정보를 중앙에서 관리한다. 이를 통해 로컬-원격 간 Discovery 시 지연을 최소화한다.

#### 트래픽 우선순위 기반 스위칭

Humble에서는 전체 네트워크 트래픽 중 특정 토픽(예: 안전 정지 명령, 충돌 회피 센서 데이터 등)에 우선순위를 매겨 중요한 메시지가 먼저 전송되도록 네트워크 계층과 협력한다.

* DSCP/802.1p와 연동: DDS 메시지 헤더에 DiffServ Code Point(DSCP)나 802.1p VLAN 태그 등을 설정해, QoS가 지원되는 네트워크 장비에서 자동으로 우선순위 큐에 할당되도록 한다.
* 동적 우선순위 조정: 시스템 상황에 따라 우선순위를 즉시 변경할 수 있는 API가 제공되며, 예컨대 로봇의 비상 상황일 경우 “안전” 관련 토픽의 우선순위를 최상으로 올리고, 일반적인 로깅 토픽은 최하로 내린다.
* 컨플릭트 해소 메커니즘: 여러 토픽이 동시에 높은 우선순위를 요청할 경우, 사전에 정의된 규칙(일정 우선순위 계층 구조 혹은 동적 가중치 할당)에 따라 자동 중재한다.

#### 메시지 직렬화(Serialization) 최적화

ROS2의 메시지는 주로 CDR(Common Data Representation) 포맷을 사용하며, 메시지 정의에 따라 IDL(Interface Definition Language)이 자동 생성된다. Humble에서는 다음과 같은 최적화가 진행되었다.

* Zero-Copy 시 직렬화 최소화: 공유 메모리로 전달 가능한 구간에서는 직렬화를 생략하고, DDS에서 외부 노드와 통신할 때만 직렬화를 수행한다. 이를 통해 불필요한 인코딩/디코딩 과정을 줄인다.
* 압축 알고리즘 옵션: 이미지나 포인트클라우드처럼 큰 메시지에 대해 무손실 압축(Zstandard 등) 혹은 손실 압축(사용자 지정)을 적용해 네트워크 대역폭을 절감할 수 있다. 압축 여부와 압축률은 메시지 타입별로 정할 수 있다.
* Custom Allocator 지원: 임베디드 환경이나 대용량 데이터 처리 시, 런타임 메모리 할당을 최소화하기 위해 커스텀 Allocator를 적용할 수 있다. 특히, $O(1)$ 고정 버퍼 할당 등을 통해 지연을 줄이고, 예측 가능한 성능을 확보한다.
