# Test ROS message transport with `qrb_ros_transport`
The `qrb_ros_transport` sample application implements zero-copy transport of ROS messages on Qualcomm robotics platforms.
The implementation has its base on [REP 2007](https://ros.org/reps/rep-2007.html), which provides interfaces to define methods for serializing custom types and/or using those types in intra-process communication without conversion.
The `qrb_ros_transport` sends image DMA buffer file descriptors (fd) between ROS nodes, rather than sending the image data itself.
Hardware accelerators, such as cameras, GPUs, and EVA, share image data zero-copy through mmap DMA buffers.
## Pipeline flow for `qrb_ros_transport`
The figure shows the pipeline flow for `qrb_ros_transport`.

**`qrb_ros_transport` pipeline**
## Prerequisites
You have set up the device, installed ROS2 Jazzy and QIR SDK on the device according to [Install the QIR SDK](https://docs.qualcomm.com/doc/80-90441-2/topic/2-install-the-qir-sdk.html#install-qir-sdk).
## Run out-of-the-box `qrb_ros_transport`
**Steps**
1. Install the qrb\_ros\_transport packages.
sudo apt install ros-jazzy-qrb-ros-transport-\*
Copy to clipboard
2. Use `qrb_ros::transport::type::Image`. For example,
1. Add the dependencies in your `package.xml`:
qrb_ros_transport_image_type
Copy to clipboard
2. Use ament\_cmake\_auto to find dependencies in your CMakeLists.txt:
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
Copy to clipboard
3. Use the adapted types in your ROS node.
#include "qrb_ros_transport_image_type/image.hpp"
// Create message
auto msg = std::make_unique();
msg->header = std_msgs::msg::Header();
msg->width = width;
msg->height = height;
msg->encoding = "nv12";
// Allocate dmabuf for message
auto dmabuf = lib_mem_dmabuf::DmaBuffer::alloc(size, "/dev/dma_heap/system");
// ... set data to dmabuf
msg->dmabuf = dmabuf;
// Publish message
pub->publish(std::move(msg));
Copy to clipboard
## Build from source
Build from the source of `qrb_ros_transport` and run this application.
**Steps**
1. Install dependencies.
sudo apt install ros-dev-tools \\
ros-jazzy-lib-mem-dmabuf \\
ros-jazzy-qrb-sensor-client \\
ros-jazzy-pcl-conversions colcon
Copy to clipboard
2. Clone the repository to the device.
mkdir -p ~/qrb_ros_ws/src
cd ~/qrb_ros_ws/src
source /opt/ros/jazzy/setup.bash
git clone https://github.com/qualcomm-qrb-ros/qrb_ros_transport.git
Copy to clipboard
3. Build the sample application.
cd ~/qrb_ros_ws
colcon build
Copy to clipboard
Last Published: Sep 07, 2026
[Previous Topic
Verify the basic communication of qrb\_ros\_interfaces](https://docs.qualcomm.com/bundle/publicresource/80-90441-2/topics/verify-the-basic-communication-of-qrb_ros_interfaces.md) [Next Topic
Implement model inference with qrb\_ros\_nn\_inference](https://docs.qualcomm.com/bundle/publicresource/80-90441-2/topics/implement-model-inference-with-qrb_ros_nn_inference.md)