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

# 机器人开发者工作流

> 面向 Qualcomm Dragonwing 套件上 Qualcomm Linux 和 Ubuntu 的 QIR SDK 统一工作流。

export const WorkflowNavigator = () => {
  const workflows = {
    evaluate: {
      title: "评估场景",
      href: "/zh/scenarios#evaluate",
      description: "使用预构建镜像和现成示例应用评估平台能力。"
    },
    development: {
      title: "开发场景",
      href: "/zh/scenarios#development",
      description: "学习 QIR SDK、交叉编译 ROS 2 示例并将其部署到设备。"
    },
    production: {
      title: "生产场景",
      href: "/zh/scenarios#production",
      description: "按技术领域（视觉、多媒体、AI 推理和零拷贝、工具）固定 QRB ROS 包版本，并为发布构建可重复的镜像或 Debian 包。"
    }
  };
  const deviceOsSupport = {
    "IQ-9075 EVK": ["Qualcomm Linux", "Ubuntu"],
    "IQ-8275 EVK": ["Qualcomm Linux"],
    "Ventuno Q": ["Ubuntu"]
  };
  const [device, setDevice] = useState("IQ-9075 EVK");
  const [os, setOs] = useState("Ubuntu");
  const [scenario, setScenario] = useState("evaluate");
  const result = workflows[scenario];
  const supportedOs = deviceOsSupport[device];
  const handleDeviceChange = selectedDevice => {
    setDevice(selectedDevice);
    if (!deviceOsSupport[selectedDevice].includes(os)) {
      setOs(deviceOsSupport[selectedDevice][0]);
    }
  };
  const rowStyle = {
    display: "block",
    margin: "0 0 8px 0",
    lineHeight: "1.5"
  };
  return <div className="p-4 border dark:border-zinc-950/80 rounded-xl not-prose">
      <div className="space-y-4">
        <div>
          <h3 className="text-base font-semibold mb-2">步骤 1. 选择您的设备</h3>
          <div style={{
    display: "flex",
    gap: "8px",
    flexWrap: "wrap"
  }}>
            {Object.keys(deviceOsSupport).map(item => <button type="button" key={item} onClick={() => handleDeviceChange(item)} aria-pressed={device === item} style={{
    padding: "10px 16px",
    borderRadius: "8px",
    border: device === item ? "2px solid #31017D" : "1px solid #ccc",
    background: device === item ? "#31017D" : "white",
    color: device === item ? "white" : "black",
    cursor: "pointer"
  }}>
                {item}
              </button>)}
          </div>
        </div>

        <div>
          <h3 className="text-base font-semibold mb-2">步骤 2. 选择您的操作系统</h3>
          <div style={{
    display: "flex",
    gap: "8px",
    flexWrap: "wrap"
  }}>
            {["Qualcomm Linux", "Ubuntu"].map(item => {
    const isSupported = supportedOs.includes(item);
    return <button type="button" key={item} disabled={!isSupported} onClick={() => setOs(item)} aria-pressed={os === item} style={{
      padding: "10px 16px",
      borderRadius: "8px",
      border: os === item ? "2px solid #0A7C42" : "1px solid #ccc",
      background: os === item ? "#0A7C42" : "white",
      color: os === item ? "white" : "black",
      opacity: isSupported ? 1 : 0.4,
      cursor: isSupported ? "pointer" : "not-allowed"
    }}>
                  {item}
                </button>;
  })}
          </div>
        </div>

        <div>
          <h3 className="text-base font-semibold mb-2">步骤 3. 选择您的场景</h3>
          <div style={{
    display: "flex",
    gap: "8px",
    flexWrap: "wrap"
  }}>
            {[["evaluate", "评估"], ["development", "开发"], ["production", "生产"]].map(([id, label]) => <button type="button" key={id} onClick={() => setScenario(id)} aria-pressed={scenario === id} style={{
    padding: "10px 16px",
    borderRadius: "8px",
    border: scenario === id ? "2px solid #666" : "1px solid #ccc",
    background: scenario === id ? "#eeeeee" : "white",
    color: "black",
    cursor: "pointer"
  }}>
                {label}
              </button>)}
          </div>
        </div>

        <div style={{
    marginTop: "8px",
    border: "1px solid #ddd",
    borderRadius: "12px",
    padding: "20px"
  }}>
          <h3 className="text-base font-semibold" style={{
    marginBottom: "12px",
    display: "block"
  }}>
            推荐路径
          </h3>
          <div style={rowStyle}>
            <strong>设备：</strong> {device}
          </div>
          <div style={rowStyle}>
            <strong>操作系统：</strong> {os}
          </div>
          <div style={rowStyle}>
            <strong>场景：</strong> {result.title}
          </div>
          <div style={{
    ...rowStyle,
    margin: "0 0 12px 0"
  }}>{result.description}</div>
          <div style={{
    display: "block",
    marginTop: "8px"
  }}>
            <a href={result.href}>在场景页面上打开 {result.title} →</a>
          </div>
        </div>
      </div>
    </div>;
};

export const props_0 = undefined

Qualcomm® Intelligent Robotics (QIR) SDK 提供 ROS 2 包、交叉编译工具链、预构建镜像以及端到端示例，用于在 Qualcomm Dragonwing™ 平台以及 Arduino® VENTUNO™ Q 上构建机器人应用。该工作流在每个设备、操作系统和场景上都是统一的。

## QIR SDK 组件

QIR SDK 包含以下组件，可帮助您在 Qualcomm Dragonwing 硬件上构建、运行和更新机器人应用。

* 针对 Qualcomm Dragonwing 硬件调优的 ROS 2 Jazzy 包。
* 预构建的 Qualcomm Linux 机器人镜像（`qcom-robotics-image`、`qcom-robotics-proprietary-image`）以及 Ubuntu `apt` 包（`qirp-sdk`、`qirp-sdk-desktop`）。
* 用于在主机上构建应用并将其部署到设备的交叉编译工具链。
* 面向平台、机器人和 AI 视觉用例的端到端示例应用。
* Qualcomm Linux 覆盖层（可选），可在无需重新刷机的情况下将基础机器人镜像扩展为完整的 Qualcomm 专有堆栈。

要开始开发机器人应用，请执行以下步骤：

<Steps>
  <Step title="了解支持的设备、操作系统和场景。">
    首先，了解以下信息：

    <Columns cols={2}>
      <Card
        title="支持的操作系统-设备矩阵"
        href="#supported-os-device-matrix"
        icon={ <svg
xmlns="http://www.w3.org/2000/svg"
width={24}
height={24}
fill="none"
stroke="darkblue"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
className="lucide lucide-circuit-board preview-icon"
{...props_0}
>
<rect width={18} height={18} x={3} y={3} rx={2} />
<path d="M11 9h4a2 2 0 0 0 2-2V3" />
<circle cx={9} cy={9} r={2} />
<path d="M7 21v-4a2 2 0 0 1 2-2h4" />
<circle cx={15} cy={15} r={2} />
</svg>}
      >
        QIR SDK 对每个设备支持的操作系统。
      </Card>

      <Card title="设备端操作系统" href="#on-device-operating-system" icon="square-terminal">
        使用机器人工作流时 Qualcomm Linux 与 Ubuntu 操作系统的差异。
      </Card>

      <Card title="机器人工作场景" href="#robotics-working-scenarios" icon="picture-in-picture">
        三种主要场景下您可以做什么。
      </Card>
    </Columns>
  </Step>

  <Step title="选择您的组合。">
    查看[工作流决策树](#robotics-workflow-decision-tree)，并使用[工作流选择器](#pick-your-combination)选择组合。
  </Step>

  <Step title="根据您选择的场景组合，按照相应的教程操作。">
    根据您的选择，在[场景](./scenarios)页面上遵循相应的标签页。
  </Step>

  <Step title="查看端到端示例。" />
</Steps>

## 支持的操作系统-设备矩阵

QIR SDK 面向三种用于机器人应用开发的平台。每个设备在算力等级、摄像头和传感器端口以及操作系统支持方面各有差异。下表列出了统一机器人工作流所覆盖的设备与操作系统组合。

| 设备                                | 目标用途                      | Qualcomm Linux | Ubuntu |
| :-------------------------------- | :------------------------ | :------------: | :----: |
| Qualcomm Dragonwing™ IQ-9075 评估套件 | 高算力 AI 与多摄像头机器人           |        是       |    是   |
| Qualcomm Dragonwing™ IQ-8275 评估套件 | 使用 Qualcomm 专有多媒体堆栈的中端机器人 |        是       |    否   |
| Arduino® VENTUNO™ Q               | 采用双大脑架构的开发板               |        否       |    是   |

根据项目优先级选择设备：

* **IQ-9075 EVK** — 覆盖最广的示例，包括在任一操作系统上运行的每个 AI 示例、所有机器人模拟以及多摄像头管道。
* **IQ-8275 EVK** — Qualcomm Linux 上的 Qualcomm 专有多媒体堆栈（`qrb_ros_camera`、`qrb_ros_video`、`qrb_ros_audio_service`、`qrb_ros_colorspace_convert`）。
* **VENTUNO™ Q** — 一款可作为单板计算机 (SBC) 使用的低成本开发板。

## 设备端操作系统

QIR SDK 提供两个版本，它们共享 ROS 2 Jazzy 和大部分示例源代码，但在打包、镜像构建和更新模型方面存在差异。

下表列出并比较了每种主机所支持的特性。

| 属性        | Qualcomm Linux                        | Ubuntu                                           |
| :-------- | :------------------------------------ | :----------------------------------------------- |
| 基础发行版     | 基于 Yocto 的 `qcom-robotics-ros2-jazzy` | Ubuntu 24.04（Server 或 Desktop）                   |
| 安装模型      | 使用 `qdl` 刷写预构建镜像                      | 刷写 Ubuntu，然后 `sudo apt install qirp-sdk`         |
| 包来源       | CodeLinaro 预构建 zip 包，或 KAS/Yocto 构建   | Qualcomm 个人包存档 (PPA)（`ppa:ubuntu-qcom-iot/qirp`） |
| 支持的设备     | IQ-9075 EVK、IQ-8275 EVK               | IQ-9075 EVK、Arduino VENTUNO Q                    |
| 专有堆栈      | `qcom-robotics-proprietary-image`     | `qirp-sdk`（Server）或 `qirp-sdk-desktop`（Desktop）  |
| 覆盖层支持     | 是 — 使用 DNF 将配置 #1 扩展为配置 #2            | 不适用 — PPA 覆盖专有堆栈                                 |
| ROS 2 中间件 | ROS 2 Jazzy                           | ROS 2 Jazzy                                      |

* 当您计划定制操作系统或交付强化的 Yocto 镜像时，请选择 Qualcomm Linux。

* 当您希望获得基于 Debian 的体验并使用 `apt` 管理的更新且不使用 Yocto 时，请选择 Ubuntu。

<Note>
  下表将 Ubuntu 镜像变体映射到正确的 QIR SDK 包。安装错误的包会导致运行时错误。

  | Ubuntu 变体 | QIR SDK 包          | 备注                                                                                                      |
  | :-------- | :----------------- | :------------------------------------------------------------------------------------------------------ |
  | Server    | `qirp-sdk`         | 包含色彩空间转换以及对 `qrb_ros_nn_inference` 的完整 GPU 加速。                                                          |
  | Desktop   | `qirp-sdk-desktop` | 不含 `ros-jazzy-qrb-ros-colorspace-convert` 和 `ros-jazzy-qrb-colorspace-convert-lib`；跳过神经网络接口管理器的 GPU 加速。 |
</Note>

## 机器人工作场景

QIR SDK 支持三种场景，从简短的评估到完整的生产构建。

下表比较了三种场景的范围、输出和时间投入。

| 场景 | 目标                   | 典型输出                                                                   | 首次获得结果的时间      |
| :- | :------------------- | :--------------------------------------------------------------------- | :------------- |
| 评估 | 使用预构建二进制文件评估平台能力。    | 在设备上运行的示例应用。                                                           | 已刷写设备情况下不到一小时。 |
| 开发 | 学习 SDK 并开发 ROS 2 应用。 | 使用 QIR SDK 工具链构建的自定义 talker 或 listener ROS 2 节点。                       | 包括阅读在内一到两天。    |
| 生产 | 定制镜像并准备部署。           | 使用 KAS 构建的自定义 `qcom-robotics-proprietary-image`，或发布到私有 PPA 的 Debian 包。 | 包括验证在内一到两周。    |

这些场景相互衔接 — 大多数团队在通往开发的路上会经过评估，在通往生产的路上会经过开发。所有三个场景及其可运行示例都在[场景](./scenarios)页面上。

## 机器人工作流决策树

以下决策树图展示了完整的机器人工作流：从设备状态开始，按目标分支，最后落到您使用的具体工具和包上。每个叶节点都映射到[场景](./scenarios)或[端到端示例](./samples)页面上的一个可运行流程。

```mermaid theme={null}
flowchart TD
    Q1{是否已有安装了 QIR SDK<br/>并已启动的设备？}:::neutral

    Q1 -->|否| PROV{使用哪种操作系统？}:::neutral
    PROV -->|Qualcomm Linux| QDL[使用 qdl 刷写<br/>下载预构建或本地构建的镜像]:::proprietary
    PROV -->|Ubuntu| UBI[刷写 Ubuntu 镜像<br/>apt install]:::proprietary
    QDL --> Q2
    UBI --> Q2

    Q1 -->|是| Q2{使用 QIR SDK <br/>的目的}:::neutral

    Q2 -->|试用现成示例| EVAL[评估场景<br/>运行系统监控演示应用]:::proprietary
    Q2 -->|构建我自己的 ROS 2 节点| Q3{使用哪种操作系统？}:::neutral
    Q2 -->|发布产品| Q4{使用哪种操作系统？}:::neutral

    Q3 -->|Qualcomm Linux| QLIDEV[使用 QIR SDK 交叉编译工具链<br/>colcon build → scp 部署]:::proprietary
    Q3 -->|Ubuntu| UBDEV[Ubuntu 上的开发<br/>在设备上 colcon build<br/>source install/setup.bash]:::proprietary

    Q4 -->|Qualcomm Linux| KAS[Qualcomm Linux 上的<br>生产<br/>KAS 构建<br/>qcom-robotics-proprietary-image<br/>+ 可选覆盖层]:::proprietary
    Q4 -->|Ubuntu| DEB[Ubuntu 上的生产<br/>Debian 打包<br/>发布到私有 PPA]:::proprietary

    classDef proprietary fill:#31017D,color:#ffffff,stroke:#31017D
    classDef neutral fill:#eeeeee,color:#000000,stroke:#999999
```

## 选择您的组合

使用选择器选择设备、操作系统和场景。底部的卡片链接到场景页面上匹配的标签页。

<WorkflowNavigator />

## 后续步骤

选择与您想深入到什么程度相匹配的入口点。

* [场景](./scenarios) — 从评估、开发或生产中选择一个标签页。每个标签页将工作流图与可运行示例配对。
