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

# 开发示例 ROS2 应用

export const QIR_VERSION = '2.8.0';

以下信息描述了如何使用 QIR SDK 工具链编译一个简单的 ROS 2 示例应用。作为示例，提供了 Python 和 C++ 两种开发方式的演示和代码。

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

在开始之前，请按照 [下载预构建包](./download-the-prebuilt-packages) 中所述下载并解压 **QIR SDK** 包。使用 `qirpsdk_artifacts` 下的 QIR SDK 包；不要使用 `sdk/` 下的 robotics eSDK，那是用于重建 robotics 镜像的。

在主机计算机上，进入 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。例如，完整的包名可以是 <code>qirp-sdk\_{QIR_VERSION}.tar.gz</code>。
  * 有关所有已发布版本，请参见 [Qualcomm® Intelligent Robotics SDK (QIR SDK) 2.0 发布说明](../../Key-Documents/QIR-SDK-Release-Notes/)。
  * QIR SDK 支持这些 Qualcomm Linux 开发套件：
    |                   **开发套件**                   | **Machine 名称** |
    | :------------------------------------------: | :------------: |
    | 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++ 应用。以下是一个示例。
          ```bash 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 及其依赖项。
          ```bash theme={null}
          colcon build --merge-install --packages-up-to demo_nodes_cpp --cmake-args ${CMAKE_ARGS}
          ```
       3. 将 demo 推送到设备。
          ```bash 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]
          ```
          ```shell SSH Terminal theme={null}
          mount -o remount,rw /usr
          tar --no-overwrite-dir --no-same-owner -zxf /opt/demo_nodes_cpp.tar.gz -C /usr/ros/jazzy/
          ```
       4. 在设备上运行 demo 应用。

          i. 在第一个终端上运行这些命令：

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

          ii. 在第二个终端上运行这些命令：

          ```shell SSH Terminal theme={null}
          source /usr/share/qirp-setup.sh
          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 应用。以下是一个示例。
          ```bash 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 及其依赖项。
          ```bash theme={null}
          colcon build --merge-install --packages-up-to demo_nodes_py
          ```
       3. 将 demo 推送到设备。
          ```bash 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]
          ```
          ```shell SSH Terminal theme={null}
          mount -o remount,rw /usr
          tar --no-overwrite-dir --no-same-owner -zxf /opt/demo_nodes_py.tar.gz -C /usr/ros/jazzy/
          ```
       4. 在设备上运行 demo 应用。

          i. 在第一个终端上运行这些命令：

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

          ii. 在第二个终端上运行这些命令：

          ```shell SSH Terminal theme={null}
          export HOME=/home
          source /usr/share/qirp-setup.sh
          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>
