qrb_ros_transport 是面向 Qualcomm 机器人平台的零拷贝 ROS 2 传输。它基于 REP 2007(类型适配)实现,该规范允许 ROS 节点声明某个自定义消息类型可与标准类型互换——因此中间件可以直接传递摄像头 ISP 写入的 DMA‑buf 文件描述符,而不是序列化并复制像素载荷。
在标准路径中,每个订阅者都会收到帧的独立副本,而每份副本都是一次 CPU memcpy。在 QRB 路径中,生产者和所有消费者共享同一个 DMA 缓冲区——在 ROS 图中传输的是 fd,而不是像素。
支持的适配类型
上游还存在一个
Imu 适配类型,但通过它生产数据需要 qrb_sensor_client + RB3 Gen2 套件上特定的 ICM-42688 IMU。如果您恰好拥有该硬件,请参见 qrb_ros_imu。对于典型用例,带宽收益主要在 Image 和 PointCloud2 上——IMU 载荷非常小,零拷贝带来的收益不大。支持的目标
上游
qrb_ros_transport README 目前未列出 IQ‑8275 EVK。构建之前请查看上游仓库以获取最新支持的目标。与标准 image_transport 对比
标准 image_transport / sensor_msgs::Image 总是将载荷序列化到 ROS 消息中,并将其复制到每个订阅者的缓冲区。这对于小话题和驻留在 CPU 中的数据没问题,但当生产者是一个将帧写入 DMA 内存的硬件模块(摄像头 ISP 是常见情况)、而消费者是另一个硬件模块(GPU 用于颜色转换、NPU 用于推理、EVA 用于计算机视觉操作)时,这就是白费功夫。qrb_ros_transport 正是为这种硬件到硬件的场景而存在——像素留在 DMA 内存中,只有 fd 在移动。
如果您话题的两端都是 CPU 代码,标准 image_transport 就够用且更简单。零拷贝的收益随(载荷大小 × 订阅者数量 × 跨越的节点边界数量)而增长。
安装
这些步骤需要 Qualcomm® IoT 平台上的 Ubuntu 和 ROS 2 Jazzy。如果尚未准备好,请从在 Qualcomm IoT 平台上安装 Ubuntu 和安装 ROS Jazzy 开始。对于 Qualcomm Linux,请改用 QIRP SDK。
1
添加 Qualcomm IoT PPA
2
安装 Debian 软件包
用法
将适配类型添加为依赖项,然后像针对任何类型化 ROS 消息一样编写代码——其余交由中间件处理。从源码构建
从源码构建
安装开发依赖项:使用
colcon 克隆并构建:它是如何构建的
它是如何构建的
qrb_ros_transport 建立在同一组织中的两个上游软件包之上:使用 qrb_ros_transport 时,您不会直接与这两者交互——它们会被传递性地引入。这些链接是为想了解完整技术栈、或需要将代码移植到支持 DMA-heap 的非 Qualcomm Linux SoC 的读者提供的:dmabuf_transport— 面向Image和PointCloud2的可移植 REP 2007 适配类型。可在任何带 DMA heap 的 Linux 5.12+ SoC 上运行。lib_mem_dmabuf— 用户态 C++ DMA-buf 分配库。仅在进行非 ROS 互操作(GStreamer、V4L2、自定义驱动、OpenGL ES)时才直接使用。
相关内容
- 将
qrb_ros_transport用作摄像头路径的示例流水线:QRB ROS Samples。 - 上游源码和最新文档:
qualcomm-qrb-ros/qrb_ros_transport。

