18.8 uORB 한계 극복 및 이기종(Heterogeneous) 브릿지 확장
지금까지 살펴본 uORB의 아키텍처(공유 메모리 링 버퍼, O(1) 폴링, 워크 큐 기상)는 단일 마이크로컨트롤러(MCU) 내부의 코어들 사이에서 발생하는 프로세스 내(Intra-process) 통신에 있어서는 현존하는 어떤 미들웨어보다 가볍고 빠르다.
하지만 uORB에게는 치명적인 한계가 존재한다. uORB는 오직 단일 보드(예: Pixhawk 하드웨어)의 메모리 주소 공간 안에서만 유효하다는 점이다. 만약 기체에 장착된 라즈베리 파이(Companion Computer)에서 동작하는 ROS2 객체 인식 노드와 통신해야 하거나, 지상의 군집 비행 관제 서버와 데이터를 교환해야 한다면 어떻게 해야 할까?
1. 브릿지 패러다임: uORB의 경계를 넘어서다
PX4는 uORB 자체를 무거운 분산 통신 미들웨어(DDS 등)로 개조하는 대신, 핵심 코어는 가벼운 uORB로 남겨두고 바깥세상과의 소통을 담당하는 **‘브릿지(Bridge) 모듈’**을 양방향 게이트웨이로 배치하는 우아한 설계 철학을 택했다.
이를 구현하는 핵심 모듈이 바로 uxrce_dds_client (이전 명칭: micrortps_client) 이다.
2. Micro XRCE-DDS 브릿지 아키텍처의 동작 원리
이 브릿지 모듈은 uORB 생태계 내부에서는 평범한 퍼블리셔이자 구독자로 위장하여 활동하지만, 외부로는 시리얼(UART)이나 이더넷(UDP) 포프를 열고 이기종(Heterogeneous) 시스템과 소통한다.
- Outbound (PX4 \rightarrow ROS2):
uxrce_dds_client모듈은 내부적으로orb_subscribe를 사용하여 EKF 필터가 뱉어내는vehicle_odometry토픽을 구독한다.- 새 데이터가 들어오면 복사(
orb_copy)해 온 뒤, 이를 외부 네트워크 전송에 적합한 직렬화(Serialization) 포맷인 CDR(Common Data Representation) 바이너리 스트림으로 압축한다. - 이 스트림을 UART/UDP를 통해 라즈베리 파이의 Micro XRCE-DDS Agent로 쏘아보내고, Agent는 이를 거대한 ROS2 DDS 네트워크망에
Odometry메시지로 뿌려준다.
- Inbound (ROS2 \rightarrow PX4):
- ROS2의 경로 계획 알고리즘이
TrajectorySetpoint메시지를 발행하면, Agent가 이를 스트림으로 압축하여 Pixhawk 보드로 밀어 넣는다. uxrce_dds_client모듈이 이 스트림을 역직렬화(Deserialization)하여 C++ 구조체로 복원한다.- 복원된 구조체를 들고
orb_publish를 호출하여 uORB 링 버퍼에 써넣는다. - 그러면 PX4 내부의 위치 제어기(Position Controller)는 평소처럼
orb_check를 하다가 방금 들어온 이 제어 명령을 낚아채어 기체를 조종한다. 제어기 입장에서는 이 명령이 내부 모듈에서 왔는지 태평양 너머 ROS2에서 왔는지 알 길이(알 필요도) 없다.
이 확장 아키텍처 덕분에 PX4는 비행 제어에 필수적인 O(1) 초저지연 Hard Real-time 성능을 코어 레벨에서 보장하면서도, 동시에 ROS2 기반의 고수준(High-level) 자율주행 인공지능 생태계와 단 1%의 불협화음 없이 완벽하게 융합(Integration)될 수 있었다.