> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# QRB ROS Benchmark

[`qrb_ros_benchmark`](https://github.com/qualcomm-qrb-ros/qrb_ros_benchmark) extends the upstream [`ros2_benchmark`](https://github.com/qualcomm-qrb-ros/ros2_benchmark) framework with first-class awareness of QRB transport types and `dmabuf_transport` types — so you can measure zero-copy wins **apples-to-apples** against stock `sensor_msgs`.

<Note>
  If you're evaluating Qualcomm for robotics, this is how you verify the perf claims. Same harness, same methodology, three transport types — pick the one that tells you what you need.
</Note>

## What it measures

Out of the box, the package knows how to benchmark:

| Transport                                                                  | Types                                                             |
| -------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| [`qrb_ros_transport`](./qrb-ros-transport)                                 | `Image`, `Imu`, `PointCloud2`, `TensorList`                       |
| [`dmabuf_transport`](https://github.com/qualcomm-qrb-ros/dmabuf_transport) | `Image`, `PointCloud2`                                            |
| Stock ROS                                                                  | `sensor_msgs/Image`, `sensor_msgs/Imu`, `sensor_msgs/PointCloud2` |

The per-type awareness is what makes the apples-to-apples comparison possible — running `ros2_benchmark` against `sensor_msgs::Image` and then against `qrb_ros::transport::type::Image` with the same producer and consumer isolates the cost of serialization + memcpy from everything else.

## Quick start

<Steps>
  <Step title="Install on Qualcomm Ubuntu">
    ```bash theme={null}
    sudo add-apt-repository ppa:ubuntu-qcom-iot/qcom-ppa
    sudo add-apt-repository ppa:ubuntu-qcom-iot/qirp
    sudo apt update
    sudo apt install ros-jazzy-qrb-ros-benchmark
    ```
  </Step>

  <Step title="Run a benchmark">
    Usage follows the upstream `ros2_benchmark` conventions — see the [upstream README](https://github.com/qualcomm-qrb-ros/qrb_ros_benchmark#-usage) for the full flow. The typical pattern is a launch file that wires your node under test + `ros2_benchmark`'s data-loader and monitor nodes, and a Python driver that runs the measurement sweep.
  </Step>
</Steps>

## Why this helps

| Alternative                               | Short take                                                                                            |
| ----------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| Stock `ros2_benchmark` (NVIDIA Isaac ROS) | The upstream baseline; knows nothing about QRB transport types or DMA-buf fds.                        |
| Hand-rolled latency / throughput loops    | Works, but doesn't share methodology across projects or teams — every team reinvents the measurement. |
| `ros2 topic hz` / `ros2 topic bw`         | Fine for spot-checking, not for structured multi-run reports or regression CI.                        |

Extends `ros2_benchmark` with awareness of QRB transport types and DMA-buf types — measure zero-copy wins apples-to-apples against stock `sensor_msgs`. Pairs naturally with [`qrb-ros-dds-optimizer.mdx`](./qrb-ros-dds-optimizer), which uses `ros2_benchmark` as its measurement harness.

## Related

* [`qrb-ros-transport.mdx`](./qrb-ros-transport) — the transport being measured.
* [`qrb-ros-dds-optimizer.mdx`](./qrb-ros-dds-optimizer) — uses `ros2_benchmark` as its measurement loop, so a benchmark you wire up here can drive the DDS optimizer too.
* Upstream: [`qualcomm-qrb-ros/qrb_ros_benchmark`](https://github.com/qualcomm-qrb-ros/qrb_ros_benchmark), [`ros2_benchmark`](https://github.com/qualcomm-qrb-ros/ros2_benchmark).
