13.9.3.2 카메라 DDS 스니핑(Sniffing) 및 Zenoh-Flow 강제 흡입(Source) 메커니즘
로보틱스 세계에서 ROS 2 패러다임을 따르는 하드웨어 제조업체들은 수십 MB짜리 거대 점군(Point Cloud)이나 4K 영상을 여전히 낡고 무거운 ROS 2 DDS Topic (/camera/image_raw) 규격으로 퍼블리싱하길 고집한다.
하지만 이 무거운 UDP 프로토콜 덩어리는 백엔드 개발자가 구성한 Zenoh-Flow 파이프라인 배관 안으로 절대 부드럽게 흘러 들어갈 수 없다.
이종 프로토콜의 벽을 부수겠다고 카메라 제조사의 ROS C++ 소스코드를 수정해 Zenoh Publish API로 개조하는 것은 멍청한 타협이다.
본 절에서는 ROS 2 생태계에 피 한 방울 흘리지 않고, 파이프라인(Dataflow) 앞단의 소스 노드(Source Node) 자체가 거대한 DDS 저인망 그물이 되어 허공에 떠다니는 ROS 이미지를 무차별로 스니핑(Sniffing)해 파이프라인 속으로 강제 흡수(Ingestion)시키는 폭력적 진입 런북을 갈파한다.
1. DDS/RTPS 규격의 폐쇄성과 브릿지 플러그인의 침투
보통 zenoh-bridge-dds 스탠드얼론 데몬을 띄워(13.9.3.1장 참조) 망을 연결할 수도 있지만, Zenoh-Flow 의 최첨단 파이프라인 아키텍처는 데몬 이중화를 혐오한다.
가장 완벽한 설계는, 파이프라인의 시작점인 Source 노드 어플리케이션(Plugin) 자체가 내부적으로 소형 DDS 브릿지 엔진을 갈비뼈 안에 이식한 채 C++ 클래스로 부활하는 것이다.
2. 매니페스트(YAML) 기반 ROS 2 흡입구(Ingestion) 강제 개방
파이프라인 아키텍트는 YAML 디스크립터 상단에 어마어마한 파괴력을 지닌 기본 제공(Built-in) DDS 브릿지 플러그인 경로를 선언해 버린다.
# [파이프라인 최전방 DDS 안테나 강제 개방 런북]
sources:
- id: "ROS2_Lidar_Ingestor"
# Zenoh-Flow 가 공식 지원하는 DDS 직결 플러그인(Source)의 위치!
uri: "file:///opt/zenoh_flow/builtin_sources/zenoh_dds_source.so"
configuration:
# [타겟 락온] 로컬망 허공에 떠도는 수많은 ROS Topic 중, 딱 이 놈만 색출해라!
dds_topic_name: "rt/lidar/point_cloud"
dds_type_name: "sensor_msgs::msg::PointCloud2"
저 zenoh_dds_source.so C++ 플러그인이 데몬 메모리에 컴파일 로딩되는 순간, 그 노드는 파이프라인 안에서 평범하게 센서를 읽어 내는 짓을 집어치운다. 운영체제 네트워크 인터페이스(UDP) 밑단으로 스레드를 뻗치고 내려가 ROS 2 RTPS/DDS 멀티캐스트 패킷들을 훔쳐 듣기(Sniffing) 시작한다.
3. 구조체(Struct) 역파싱과 Zero-Copy Dataflow 전환
라이다(LiDAR) 하드웨어가 “rt/lidar/point_cloud” 토픽으로 거대한 10MB짜리 바이트를 던졌다.
이 YAML 에 의해 가동된 뼈대 플러그인은 다음과 같은 무자비한 분해 및 이계 차원 이동(Trans-coding) 마법을 0.01ms 내에 집행한다.
- DDS 껍데기 발골: 무겁고 잡다한 헤더(Header)가 덕지덕지 붙은 ROS 2 RTPS
Message껍데기(UDP 패킷)를 갈라내고, 순수 레이저 포인트 배열 텐서 위치(Memory Offset)만 핀포인트로 탈취한다. - 복사 방어(Zero-Copy 포장): 10MB의 데이터 덩어리를 새로운 램 구역에
memcpy복사하지 않는다! RAM에 자리 잡은 그대로 포인터 주소만 따낸 뒤,Zenoh-Flow만이 인정하는 절대 규격 캡슐(zflow::Data)의 껍질로 포인터를 감싸 덮어씌운다(Wrapping). - 파이프라인 방류(Injection): 비로소
DDS의 신분에서 타락하여Zenoh-Flow캡슐로 탈바꿈한 이 불경한 데이터는, 곧바로 자율주행 추론 오퍼레이터 노드 방향 파이프 큐(Queue)를 향해 광속으로 밀려 들어간다.
로컬망의 수많은 로봇 관제 엔지니어들은 카메라 데이터가 ROS 2 통신망 위를 평화롭게 날아다닌다고 생각할 것이다. 그러나 L7 아키텍트는 그 패킷이 스쳐 지나가는 허공의 인터페이스를 거대한 C++ 공유 라이브러리 스니퍼(Sniffer)로 낚아채어, 로직 수정 없이 그대로 폐쇄적인 시계열 데이터플로우 엔진의 아갈창에 처넣는(Ingest) 마법을 선보인다. 이로써 외부 기성 하드웨어 생태계(ROS)와 폐쇄적 커스텀 백엔드(Zenoh Dataflow) 간의 궁극적인 비침투(Non-Invasive) 공생 연맹이 체결된다.