> ## 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.

# 开发示例 ROS2 应用

本信息介绍如何使用 QIR SDK 工具链编译一个简单的 ROS 2 示例应用。同时提供了 Python 和 C++ 开发的演示和代码作为示例。

## 在主机上安装预构建的 QIR SDK

开始之前，请按照[下载预构建软件包](./download-the-prebuilt-packages)中的说明下载并解压 **QIR SDK** 软件包。请使用 `qirpsdk_artifacts` 下的 QIR SDK 软件包；不要使用 `sdk/` 下的 robotics eSDK，后者用于重新构建机器人镜像。

在主机上，进入 QIR SDK 产物目录并解压 QIR SDK 归档文件：

```shell theme={null}
cd <decompressed_workspace>/images/iq-9075-evk/qirpsdk_artifacts/iq-9075-evk
tar -zxvf qirp-sdk_<qirp_version>.tar.gz
```

此命令会生成 `qirp-sdk` 目录。`QIR SDK` 是产品名称；`qirp-sdk_<qirp_version>.tar.gz`、`qirpsdk_artifacts` 和 `qirp-sdk` 是交付产物使用的软件包和目录名称。

<Note>
  **注意**

  * `qirp-sdk_<qirp_version>.tar.gz` 位于 QIR 产物的部署路径中。`<qirp_version>` 会随每个版本变化，例如 2.0.0、2.0.1。例如，完整的软件包名称可以是 `qirp-sdk_2.7.0.tar.gz`。
  * 有关所有已发布的版本，请参阅 [Qualcomm® Intelligent Robotics SDK (QIR SDK) 2.0 发行说明](../../Key-Documents/QIR-SDK-Release-Notes/)。
  * QIR SDK 支持以下 Qualcomm Linux 开发套件：
    |                   **开发套件**                   |    **机器名称**   |
    | :------------------------------------------: | :-----------: |
    | Qualcomm Dragonwing<sup>TM</sup> IQ-9075 EVK | `iq-9075-evk` |
    | Qualcomm Dragonwing<sup>TM</sup> IQ-8275 EVK | `iq-8275-evk` |
</Note>

## 使用 QIR SDK 开发应用

1. 从解压后的 `qirp-sdk` 目录设置 QIR SDK 交叉编译环境。
   ```shell theme={null}
   cd <decompressed_workspace>/images/iq-9075-evk/qirpsdk_artifacts/iq-9075-evk/qirp-sdk
   source setup.sh
   ```
2. 获取项目作为代码基线。
   ```shell theme={null}
   git clone https://github.com/ros2/demos.git -b jazzy
   ```
3. 使用 C++ 或 Python 开发您自己的应用。

   <Tabs>
     <Tab title="使用 C++ 开发 ROS 应用">
       1. 开发您自己的 C++ 应用。以下是一个示例。
          ```powershell theme={null}
          cd demos/demo_nodes_cpp
          vim src/topics/talker.cpp +46
          ```
          修改 `demo_nodes_cpp/src/topics/talker.cpp` 第 `46` 行的 msg 数据：
          ```cpp talker.cpp icon="code" theme={null}
          msg_->data = "Hello World : Qualcomm : " + std::to_string(count_++);
          ```
       2. 设置必要的环境变量，并使用 colcon 工具构建 ROS2 软件包 demo\_nodes\_cpp 及其依赖项。
          ```powershell theme={null}
          colcon build --merge-install --packages-up-to demo_nodes_cpp --cmake-args ${CMAKE_ARGS}
          ```
       3. 将演示程序推送到设备。
          ```powershell theme={null}
          cd demo_nodes_cpp/install
          tar -czvf demo_nodes_cpp.tar.gz lib share
          scp demo_nodes_cpp.tar.gz root@[ip-addr]:/opt/
          ssh root@[ip-addr]
          (ssh) mount -o remount,rw /usr
          (ssh) tar --no-overwrite-dir --no-same-owner -zxf /opt/demo_nodes_cpp.tar.gz -C /usr/ros/jazzy/
          ```
       4. 在设备上运行演示应用。

          i. 在第一个终端中，运行以下命令：

          ```shell theme={null}
          (ssh) source /usr/share/qirp-setup.sh
          (ssh) ros2 run demo_nodes_cpp talker
          ```

          ii. 在第二个终端中，运行以下命令：

          ```shell theme={null}
          (ssh) source /usr/share/qirp-setup.sh
          (ssh) ros2 run demo_nodes_cpp listener
          ```
       5. 检查输出。

          终端 1 输出：

          ```shell theme={null}

          [INFO] [1739864779.759719598] [talker]: Publishing: 'Hello World : Qualcomm : 1'
          [INFO] [1739864780.759687179] [talker]: Publishing: 'Hello World : Qualcomm : 2'
          [INFO] [1739864781.760812014] [talker]: Publishing: 'Hello World : Qualcomm : 3'
          ...
          ```

          终端 2 输出：

          ```shell theme={null}

          [INFO] [1739864779.760348380] [listener]: I heard: [Hello World : Qualcomm : 1]
          [INFO] [1739864780.760276535] [listener]: I heard: [Hello World : Qualcomm : 2]
          [INFO] [1739864781.762066296] [listener]: I heard: [Hello World : Qualcomm : 3]
          ...

          ```
     </Tab>

     <Tab title="使用 Python 开发 ROS 应用">
       1. 开发您自己的 Python 应用。以下是一个示例。
          ```powershell theme={null}
          cd demos/demo_nodes_py
          vim demo_nodes_py/topics/talker.py +33
          ```
          修改 `demo_nodes_py/topics/talker.py` 第 `33` 行的 msg 数据：
          ```python talker.py icon="python" theme={null}
          msg.data = 'Hello World : Qualcomm : {0}'.format(self.i)
          ```
       2. 设置必要的环境变量，并使用 colcon 工具构建 ROS 2 软件包 demo\_nodes\_py 及其依赖项。
          ```powershell theme={null}
          colcon build --merge-install --packages-up-to demo_nodes_py
          ```
       3. 将演示程序推送到设备。
          ```powershell theme={null}
          cd demo_nodes_py/install
          tar -czvf demo_nodes_py.tar.gz lib share
          scp demo_nodes_py.tar.gz root@[ip-addr]:/opt/
          ssh root@[ip-addr]
          (ssh) mount -o remount,rw /usr
          (ssh) tar --no-overwrite-dir --no-same-owner -zxf /opt/demo_nodes_py.tar.gz -C /usr/ros/jazzy/
          ```
       4. 在设备上运行演示应用。

          i. 在第一个终端中，运行以下命令：

          ```shell theme={null}
          (ssh) export HOME=/home
          (ssh) source /usr/share/qirp-setup.sh
          (ssh) ros2 run demo_nodes_py talker
          ```

          ii. 在第二个终端中，运行以下命令：

          ```shell theme={null}
          (ssh) export HOME=/home
          (ssh) source /usr/share/qirp-setup.sh
          (ssh) ros2 run demo_nodes_py listener
          ```
       5. 检查输出。

          终端 1 输出：

          ```shell theme={null}
          [INFO] [1739864779.759719598] [talker]: Publishing: 'Hello World : Qualcomm : 1'
          [INFO] [1739864780.759687179] [talker]: Publishing: 'Hello World : Qualcomm : 2'
          [INFO] [1739864781.760812014] [talker]: Publishing: 'Hello World : Qualcomm : 3'
          ...
          ```

          终端 2 输出：

          ```shell theme={null}
          [INFO] [1739864779.760348380] [listener]: I heard: [Hello World : Qualcomm : 1]
          [INFO] [1739864780.760276535] [listener]: I heard: [Hello World : Qualcomm : 2]
          [INFO] [1739864781.762066296] [listener]: I heard: [Hello World : Qualcomm : 3]
          ...

          ```
     </Tab>
   </Tabs>
