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 示例。 - 上游源码和最新文档:
qualcomm-qrb-ros/qrb_ros_transport。

