31.3 원시 데이터 타입 매핑 및 텐서 수준 배열 자료구조 명세
로보틱스 어플리케이션은 1비트의 스위치 상태부터 수 메가바이트의 3D 포인트 클라우드까지 극단적인 스펙트럼의 데이터를 네트워크에 싣는다. 이 이질적인 데이터 더미를 ROS2 미들웨어 계층이 단 1바이트의 오차도 없이 직렬화(Serialize)하기 위해서는, 가장 기초가 되는 원시 자료구조의 명세와 메모리 매핑 방식이 엄격하게 규정되어야만 한다. 본 절에서는 인터페이스 정의 언어(IDL)를 지탱하는 원시 데이터 타입(Primitive Data Types)의 구성 체계를 해부하고, 고차원 센서 데이터 전송을 위한 텐서(Tensor) 수준의 배열 자료구조 명세와 제어 최적화 기법을 학술적으로 서술한다.
1. 원시 데이터 타입(Primitive Type)의 이기종 언어 매핑 모델
ROS2 IDL의 원시 타입 설계는 통신에 참여하는 이기종 간의 바이트 너비(Byte-width) 표준화를 지향한다. 정수형의 경우 메모리 크기와 부호(Sign)를 명시하는 int8, uint16, int32, uint64 형태로 엄격히 선언되며, 부동소수점 역시 IEEE 754 표준을 순수하게 계승하는 float32, float64 체계를 제공한다. 이외에도 bool (부울리언), string (문자열), 그리고 바이트 스트림을 위한 byte 및 char 타입이 존재한다.
코드 제너레이터(Code Generator)는 이 명세를 읽어 각기 다른 언어의 네이티브 데이터 타입으로 치환(Mapping)한다. 예컨대 IDL의 int32는 C++ 런타임에서는 int32_t로, Python에서는 동적 할당되는 기본 int형으로 자동 변환된다. 수학적으로 엄밀히 통제된 바이트 규격의 명시는 파이썬과 같이 메모리를 자율로 관리하는 고수준 언어가 송출한 모터 제어 신호를, C++ 기반의 펌웨어가 언더플로우(Underflow)나 논리 시프트(Logical Shift) 오류 없이 수신하여 완벽한 비트 단위 동기화를 달성케 하는 근본적 담보이다.
2. 한정 문자열(Bounded String)과 힙(Heap) 메모리 단편화 제어
로봇 통계나 로깅을 위해 사용되는 string 데이터 타입은 그 본질 상 길이가 확정되지 않은 원시 힙(Heap) 포인터의 집합을 상징한다. 만일 ROS2 미들웨어 소켓에 string 패킷이 고주파로 지속 유입될 경우, 하부 RTOS(Real-Time OS)나 임베디드 코어는 가변 공간의 동적 할당(malloc())과 해제(free())를 반복하게 되고, 필연적으로 메모리 단편화(Memory Fragmentation)에 따른 실시간 스케줄링 붕괴 위험을 초래한다.
이러한 지연 결함 엣지 케이스를 극복하기 위해 IDL은 한정 길이(Bounded) 선언 구문을 지원한다. 개발자가 string<=20 frame_id 와 같이 상한선을 명시하면, 컴파일러는 이를 가변 길이의 힙 참조 포인터가 아니라, 정확히 20바이트로 예약된 사전 할당(Pre-allocated) 스택 메모리 배열로 캐스팅(Casting)한다. 이 작은 구문상의 통제는 자율 항법의 고빈도 제어 루프 내부에서 메모리 가비지 컬렉션(GC)의 개입을 배제시키는 결정적 공학 기법이다.
3. 다차원 배열(Array) 매핑 및 선언의 3대 매커니즘
단일 원시 데이터를 넘어 군집 센서나 웨이포인트(Waypoint) 궤적을 송출하기 위한 배열(Array) 선언은 괄호([]) 문법을 사용하며, 그 용도에 따라 3가지 상이한 아키텍처 매커니즘을 부여받는다.
첫째, “고정 길이 배열(float32[16])”은 선언된 상수 길이만큼 연산 공간을 영구 점유한다. C++ 변환 시 std::array 로 매핑되어 가장 빠른 이터레이션(Iteration) 접근 속도를 보장한다.
둘째, “제한 없는 가변 배열(float32[])”은 데이터 길이 제한이 없으며, 수신 페이로드 크기에 따라 런타임에 동적으로 크기가 확장된다. C++의 std::vector 로 매핑되는 이 구조는 무한한 데이터 유연성을 제공하지만, 수신 버퍼 재할당(Re-allocation)에 따른 레이턴시 스파이크(Latency Spike) 요인을 내포한다.
셋째, 이를 보완한 “상한 가변 배열(float32[<=100])”은 앞선 두 모델의 트레이드오프(Trade-off) 산물이다. 최대 상한치 만큼의 공간만 시스템이 보증하며 메모리 재할당 오버헤드를 한계치 안으로 규제하는, 실시간 제어 모델의 황금률로 평가된다.
4. 컴퓨터 비전 텐서(Tensor) 평탄화 모델 및 바이트 직렬화 가속
LiDAR의 포인트 클라우드나 카메라 영상(Image)은 본질적으로 다차원으로 구축된 고밀도 텐서(Tensor) 자원이다. ROS2 메시지 프레임워크는 이런 다차원 메트릭스를 자체적으로 지원하지 않으며, 이들은 무조건 단일한 1차원 바이트 배열 규격(예: uint8[] data)으로 평탄화(Flattening)되어 명세된다.
영상 등 고해상도 행렬을 평탄화 배열로 압축하는 과정은 픽셀의 스트라이드(Stride)와 인코딩 메타데이터를 통합하여 직렬화 병목을 타파하는 전략적 추상화이다. 만약 이미지 픽셀 하나하나를 개별 Object로 IDL 상에 정의했다면, DDS 미들웨어 계층의 시리얼라이제이션 엔진은 수백만 번의 반복적인 멤버 검증 루틴을 거치며 시스템을 마비시켰을 것이다. 대신, 모든 데이터를 최하위 바이트 단위 uint8[] 1차원 패킹으로 취급함으로써 컴파일 타임 최적화를 도모하고 DMA(Direct Memory Access) 수준의 초고속 전송 파이프라인의 이점을 만끽할 수 있게 설계되었다.