18.1.3.1 ROS 1(TCPROS) 및 ROS 2(DDS) 네트워크 스택 오버헤드와의 벤치마킹
학계나 연구 목적으로 드론을 개발하는 연구자들은 종종 “왜 픽스호크 펌웨어 자체를 ROS 2로 작성하지 않고, 굳이 uORB라는 생소한 개념을 제어기 코어에서 강요하는가?“라는 의문을 품는다. 이 질문에 대한 가장 명확한 대답은 네트워크 스택 오버헤드의 물리적 한계이다. 이를 정량적으로 이해하기 위해 ROS 생태계의 기저 미들웨어들과 uORB의 데이터 전달 경로를 벤치마킹 타임라인 위에서 해부해보자.
1. ROS 1 (TCPROS)의 데이터 전달 경로와 지연
ROS 1 아키텍처에서 동일한 보드 내의 두 노드(Node A, Node B)가 통신할 때 발생하는 데이터 경로(Data Path)는 다음과 같다.
- 애플리케이션 계층: Node A가 C++ 구조체를 ROS 메시지 포맷으로 직렬화(Serialization).
- OS 사용자 공간(User Space) -> 커널 공간(Kernel Space): 직렬화된 바이트 배열을 로컬 소켓(Loopback Interface, 127.0.0.1)의 송신 버퍼로 복사하기 위해 커널 인터럽트 발생(Context Switch).
- 네트워크 계층 (TCP/IP): 커널 스케줄러가 개입하여 TCP 패킷 헤더를 조립하고, 루프백 가상 이더넷 장치를 거쳐 다시 수신 소켓 버퍼로 라우팅. TCP의 특성상 ACK(응답) 패킷 처리 로직이 동작함.
- 커널 공간 -> 사용자 공간: Node B가 데이터 수신을 감지하고 커널 버퍼에서 사용자 프로세스 메모리로 데이터 복사(Context Switch).
- 애플리케이션 계층: 수신된 바이트 스트림을 C++ 구조체로 역직렬화(Deserialization).
이 과정에서 발생하는 수차례의 메모리 복사와 커널-유저 간의 컨텍스트 스위칭은, 리눅스 기반의 고성능 PC(수 GHz 클럭)에서도 통상 수백 마이크로초(μs)에서 최대 수 밀리초(ms) 의 지연 주기(Jitter)를 수반한다.
2. ROS 2 (DDS/RTPS)의 오버헤드
ROS 2는 DDS(Data Distribution Service)를 도입하여 마스터 의존성을 없애고 UDP 멀티캐스트를 활용하는 구조로 진화했다. 하지만 기본적으로 네트워크 스택을 거친다는 점은 동일하다.
- Fast DDS나 Cyclone DDS와 같은 구현체들은 신뢰성 보장(Reliability QoS) 메커니즘, 메시지 단편화/재조립, 동적 노드 디스커버리(Discovery)를 유지하기 위해 백그라운드에서 끊임없이 하트비트(Heartbeat) 패킷을 생성한다.
- 이는 메모리가 수 MB에 불과한 STM32 계열 MCU에게는 감당할 수 없는 엄청난 런타임 메모리(RAM) 풋프린트와 CPU 사이클 낭비를 강요한다.
3. uORB의 벤치마킹 우위 (No-Network Stack)
반면, 픽스호크 내부에서 동작하는 uORB의 메시지 전달 경로는 다음과 같이 극단적으로 짧다.
- 애플리케이션 계층 (Publisher):
struct메모리를 공유 메모리 공간의 링 버퍼 헤드(Head) 위치로 1회memcpy(). - 동기화 대기 큐 해제: 대기 중인 구독자 파일 디스크립터의 플래그 1비트 전환 및 세마포어(Semaphore) Post (즉시 커널 큐 개입 없이 스케줄러 웨이크업).
- 애플리케이션 계층 (Subscriber): 공유 메모리에서 자신의 로컬
struct로 1회memcpy().
이 모든 과정은 어떠한 네트워크 프로토콜 래핑(Wrapping)이나 직렬화 없이 순수 CPU의 단일 코어 캐시(L1/L2 Cache) 계층 내에서 마무리된다. 200~400MHz 대역의 ARM Cortex-M 프로세서 기준으로, uORB의 발행-구독 전체 왕복 지연 시간(Round Time Trip)은 단 1~2 마이크로초(μs) 이내에 안정적으로 완료된다.
4. 결론: 내부 루프(Inner-loop)와 외부 루프(Outer-loop)의 분리
결과적으로 ROS 2/DDS는 “수 미터 떨어져 있는 여러 로봇이나 고성능 컴패니언 컴퓨터(마이크로프로세서, MPU) 간의 거시적 제어 데이터 교환“에 적합한 외부 루프(Outer-loop) 미들웨어이다.
반면, 단 1밀리초의 지연이나 메모리 파편화도 허용될 수 없는 모터 출력 제어, EKF 센서 퓨전 등의 내부 루프(Inner-loop)는 오직 uORB의 제로-오버헤드 매커니즘 하에서만 픽스호크 급의 MCU 연산 능력으로 처리해 낼 수 있다. PX4는 이 둘의 완벽한 분업을 위해 펌웨어 코어는 철저히 uORB로 작성하되, 외부와의 연동만을 microdds_client 모듈을 통해 이어주는 이원화 전략을 취하고 있다.