> ## 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_colorspace_convert 在 NV12 和 RGB888 之间转换

> qrb_ros_colorspace_convert 示例应用在 NV12 和 RGB888 格式之间进行转换。

export const Dragonwing = "Qualcomm® Dragonwing™";

Qualcomm 的智能设备（例如 {Dragonwing} IQ-9075 开发套件）使用 NV12 作为默认的图像色彩空间转换格式。然而，更常见的色彩空间格式是 RGB888。`qrb_ros_colorspace_convert` 示例应用实现以下功能：

* 提供 ROS 节点

  * 将 NV12 转换为 RGB888 的 API

  * 将 RGB888 转换为 NV12 的 API

* 支持 dmabuf fd 作为输入和输出

* 使用 QRB ROS transport 接收和发送输入与输出图像

* 通过 OpenGL ES 实现 GPU 硬件加速

## `qrb_ros_colorspace_convert` 的管线流程

下图展示了 `qrb_ros_colorspace_convert` 的管线流程。

<Frame caption="qrb_ros_color_space_convert 管线。">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/qualcomm-prod/zh/SDKs/QIR-SDK-Ubuntu/images/image19.svg" alt="Color space conversion pipeline where a custom ROS node exchanges dmabuf fd image buffers with the colorspace_convert node over ROS topics." />
</Frame>

下表描述了 `qrb_ros_colorspace_convert` 软件架构中使用的 ROS 节点。

| ROS 节点                    | 说明                                                                              |
| ------------------------- | ------------------------------------------------------------------------------- |
| `custom_ros_node`         | `custom_ros_node` 是将输入图像信息发布到 `colorspace_convert_node` 的 ROS 包。您应实现这个 ROS2 节点。 |
| `colorspace_convert_node` | `colorspace_convert_node` 是一个用于在 NV12 和 RGB888 之间转换色彩空间的 ROS 包。                 |

下表描述了 `qrb_ros_colorspace_convert` 软件架构中使用的 ROS topic。

| ROS topic    | 消息类型                      | 发布者/订阅方                         | 说明                       |
| ------------ | ------------------------- | ------------------------------- | ------------------------ |
| `/image_raw` | `sensor_msgs::msg::Image` | 订阅来自其他节点的图像。                    | 输入的 NV12/RGB888 编码图像。    |
| `/image`     | `sensor_msgs::msg::Image` | 由 `colorspace_convert_node` 发布。 | 发布已转换的 NV12/RGB888 编码图像。 |

## 前提条件

* 您已根据 [安装 QIR SDK](./install-the-qir-sdk) 在设备上完成设备设置、安装 ROS2 Jazzy 和 Qualcomm Intelligent Robotics (QIR) SDK。

* `custom_ros_node` 已准备就绪。

* 您已将设备连接到显示器。

## 运行开箱即用的 `qrb_ros_colorspace_convert`

<Steps>
  <Step title="根据您安装的是桌面版还是服务器版 QIR SDK 镜像，安装色彩空间转换包">
    参见 [安装 QIR SDK](./install-the-qir-sdk)。

    <Note>
      * `qirp-sdk` 是 QIR SDK 服务器版镜像的软件包。
      * `qirp-sdk-desktop` 是 QIR SDK 桌面版镜像的软件包。
      * 对于 Ventuno Q，请使用 **Desktop image** 下列出的软件包。
    </Note>

    ```bash Server image theme={null}
    sudo apt install ros-jazzy-qrb-ros-colorspace-convert
    ```

    ```bash Desktop image theme={null}
    sudo apt install ros-jazzy-qrb-ros-colorspace-convert-opencv
    ```
  </Step>

  <Step title="启动 qrb_ros_color_space_convert 节点">
    ```bash Launch the node theme={null}
    source /opt/ros/jazzy/setup.bash
    # convert color space from NV12 to RGB888
    ros2 launch qrb_ros_colorspace_convert colorspace_convert.launch.py 'conversion_type:=nv12_to_rgb8' 'latency_fps_test:=False'
    # convert color space from RGB888 to NV12
    ros2 launch qrb_ros_colorspace_convert colorspace_convert.launch.py 'conversion_type:=rgb8_to_nv12' 'latency_fps_test:=False'
    ```

    使用以下命令确认色彩空间转换结果：

    ```bash theme={null}
    ros2 topic echo /image_raw | grep "encoding"
    ros2 topic echo /image | grep "encoding"
    ```
  </Step>
</Steps>

## 从源代码构建

<Steps>
  <Step title="根据您安装的是桌面版还是服务器版 QIR SDK 镜像，安装依赖项">
    参见 [安装 QIR SDK](./install-the-qir-sdk)。

    <Note>
      * `qirp-sdk` 是 QIR SDK 服务器版镜像的软件包。
      * `qirp-sdk-desktop` 是 QIR SDK 桌面版镜像的软件包。
      * 对于 Ventuno Q，请使用 **Desktop image** 下列出的软件包。
    </Note>

    ```bash Server image theme={null}
    sudo apt install ros-jazzy-qrb-ros-transport-image-type
    sudo apt install ros-jazzy-qrb-ros-transport-point-cloud2-type
    sudo apt install ros-jazzy-qrb-ros-transport-imu-type
    sudo apt install ros-jazzy-pcl-conversions
    sudo apt install qcom-adreno-dev
    sudo apt install weston
    sudo apt install weston-autostart
    # reboot is required for Weston to start automatically
    ```

    ```bash Desktop image theme={null}
    sudo apt install ros-jazzy-qrb-ros-transport-image-type
    sudo apt install ros-jazzy-qrb-ros-transport-point-cloud2-type
    sudo apt install ros-jazzy-qrb-ros-transport-imu-type
    sudo apt install ros-jazzy-pcl-conversions
    sudo apt install libopencv-dev libopencv-contrib-dev
    ```
  </Step>

  <Step title="下载源代码并使用 colcon 构建">
    ```bash Download and build theme={null}
    source /opt/ros/jazzy/setup.bash
    git clone https://github.com/qualcomm-qrb-ros/qrb_ros_color_space_convert.git

    # Server image
    colcon build --cmake-args -DUSE_OPENCV_BACKEND=OFF

    # Desktop image
    colcon build --cmake-args -DUSE_OPENCV_BACKEND=ON
    ```
  </Step>

  <Step title="运行并调试">
    ```bash Run the node theme={null}
    source install/setup.bash
    # convert color space from NV12 to RGB888
    ros2 launch qrb_ros_colorspace_convert colorspace_convert.launch.py 'conversion_type:=nv12_to_rgb8' 'latency_fps_test:=False'
    # convert color space from RGB888 to NV12
    ros2 launch qrb_ros_colorspace_convert colorspace_convert.launch.py 'conversion_type:=rgb8_to_nv12' 'latency_fps_test:=False'
    ```

    使用以下命令确认色彩空间转换结果：

    ```bash theme={null}
    ros2 topic echo /image_raw | grep "encoding"
    ros2 topic echo /image | grep "encoding"
    ```
  </Step>
</Steps>
