🌐 课程总览
0%

🌐课程总览

Agent OS · 基于工业智能体的操作系统开发
15天学习路径

🎯 课程核心问题

当 AI 既能帮你写代码、又能驱动机器人自主决策时,机器人软件应该怎么开发?

两大范式升级
  1. 开发范式升级:不再逐行手写代码,而是用 AI 编程智能体按"规格→计划→实现→验证"工作流开发
  2. 运行时架构升级:机器人不再是被遥控的执行器,而是一台具身智能体

📋 学习目标矩阵

#目标对应天数产出
1理解 Chatbot/Agent/具身智能体区别Day 1概念对比文档
2掌握 AI 编程工作流Day 2规格→代码示例
3搭建 OminiX-API 多模态服务Day 3-4ASR+LLM+TTS demo
4OpenCV 视觉识别Day 4-5网球检测程序
5Octos Agent 任务规划Day 6-7规划流程设计
6理解 StarryOS 分层架构Day 8-9架构分析报告
7World Model 设计Day 9-10状态模型实现
8dora-rs 数据流节点开发Day 10-11自定义节点
9完整任务流水线Day 12-13端到端 demo
10失败恢复与重规划Day 13-14容错机制
11项目答辩Day 15完整项目+报告

📅 15天学习进度

15天学习进度 D1D2D3D4D5D6D7D8D9D10D11D12D13D14D15 概念认知 AI编程 OminiX-API OpenCV视觉 Octos Agent StarryOS World Model dora-rs节点 完整流水线 恢复 答辩

🧠AI 原生开发范式

从手写代码到人机协作编程

🔄 三种编程范式对比

传统手写编码 人: 写全部代码 逐行编写、调试 手动测试 ❌ 效率低 ❌ 难以扩展 代表: 传统课程 AI 辅助编程 人: 写提示词 AI: 生成代码片段 人: 审查、修改 ⚠️ 仍需大量人工 ⚠️ 缺乏系统性 代表: Copilot, ChatGPT AI 原生开发 ✨ 人: 写规格说明 AI: 规划→实现→测试 人: 评审、验证、迭代 ✅ 高效系统化 ✅ 可验证可追溯 代表: 本课程

📋 规格驱动开发 (Spec-Driven)

AI 原生开发的核心是规格驱动——你写清楚"要什么",AI 负责"怎么做"。

# 规格示例: 网球检测节点
名称: tennis_detector
输入: camera_frame (RGB, 640x480)
输出: detections [{x, y, confidence, class}]
要求:
  - 检测黄色球形物体 (HSV 范围: H=20-35, S=100-255, V=100-255)
  - 最小面积阈值: 500px
  - 返回置信度 > 0.7 的检测结果
  - 处理延迟 < 33ms (30fps)
异常:
  - 无检测结果 → 返回空列表
  - 帧读取失败 → 报错并跳过

✅ 你的角色变化

规格工程师

写清需求、约束、验收标准。AI 依赖你的规格来生成正确代码。

代码评审员

审查 AI 生成的代码,发现逻辑错误、边界情况、安全隐患。

系统架构师

设计整体架构、接口、数据流。AI 负责填充实现细节。

验证工程师

设计测试用例,验证 AI 代码的正确性和鲁棒性。

💡 练习:AI 原生开发与传统 AI 辅助编程的最大区别是?
  • A. 使用了更好的大语言模型
  • B. 代码生成速度更快
  • C. 以规格驱动的系统化工作流替代零散的代码补全
  • D. 不再需要程序员
答案 C:AI 原生开发的核心差异在于工作流的系统化——从规格到计划到实现到验证的完整闭环。

🏗️系统总体架构

从用户语音到机器人动作的完整链路

🔗 端到端数据流

用户语音/文本任务 OminiX-API (ASR/LLM/TTS) Octos Agent (规划/工具/记忆) World Model (状态/位置/置信度) dora-rs 数据流 (StarryOS) 辛龙机器人 (底盘+机械臂+夹爪) OpenCV 视觉 → World Model 更新 开发侧贯穿全程 AI 编程智能体 规格→计划→实现→验证 每层都用此工作流开发

📦 各层职责速览

层次组件职责技术栈
交互层OminiX-API语音识别、语言理解、语音合成ASR/LLM/TTS
认知层Octos Agent任务理解、规划、工具调用LLM + ReAct
记忆层World Model环境状态、物体位置、置信度JSON/Vector DB
运行时dora-rs数据流图、节点调度Rust 数据流
OS层StarryOSPOSIX 接口、驱动抽象ArceOS 内核
硬件层辛龙机器人底盘移动、机械臂、夹爪串口/ROS

💬Chatbot → Agent → 具身智能体

理解三者的本质区别

📊 三者对比

💬 Chatbot 输入: 文本 输出: 文本 无记忆 无工具调用 无环境感知 单轮问答 · 无自主性 🧩 AI Agent 输入: 任务描述 输出: 动作序列 ✅ 有记忆 ✅ 工具调用 ❌ 无物理感知 ReAct 循环 · 规划+执行 🦾 具身智能体 输入: 多模态(语音/视觉) 输出: 物理动作 ✅ 有记忆 ✅ 工具调用 ✅ 物理环境感知 感知-规划-执行循环 🔄 失败→重规划
具身智能体的核心特征
  • 感知-行动闭环:通过传感器感知物理世界,通过执行器改变物理世界
  • World Model:维护环境的内部表示(物体、位置、状态)
  • 自主恢复:执行失败时能重新感知、重新规划
💡 练习:AI Agent 相比 Chatbot 的关键区别是?
  • A. 更大的上下文窗口
  • B. 能调用外部工具并维护记忆
  • C. 更快的响应速度
  • D. 更好的多语言支持
答案 B:Agent 的核心是工具调用记忆,使其能与外部世界交互并保持上下文连贯。

🎤OminiX-API 多模态服务

语音识别 + 语言理解 + 语音合成
Day 3-4

🔊 三阶段流水线

🎤 ASR 语音→文本 (Whisper) 🧠 LLM 理解→意图/规划 🔊 TTS 文本→语音 (VITS) 用户听到反馈

🛠️ 搭建步骤

# 1. 克隆 OminiX-API
git clone https://github.com/OminiX-Team/OminiX-API.git
cd OminiX-API

# 2. 安装依赖
pip install -r requirements.txt

# 3. 配置 ASR
export ASR_MODEL=whisper-large-v3

# 4. 配置 LLM
export LLM_API_KEY=your_key
export LLM_BASE_URL=https://api.openai.com/v1

# 5. 启动服务
python app.py --port 8080

# 6. 测试
curl -X POST http://localhost:8080/asr -F "audio=@test.wav"
curl -X POST http://localhost:8080/tts -d '{"text":"收到"}' -o out.wav

💡 关键接口

接口方法输入输出
/asrPOST音频文件{ text }
/llm/chatPOST{ messages }{ reply }
/ttsPOST{ text }音频流
/pipelinePOST音频文件{ text, intent, audio }

👁️OpenCV 视觉感知

网球检测与目标识别
Day 4-5

🎯 检测流程

摄像头采集 BGR→HSV 颜色阈值过滤 形态学处理 轮廓检测 目标坐标输出

HSV 范围: H=20-35 (黄色), S=100-255, V=100-255。形态学: 膨胀→腐蚀 去除噪点。

📝 核心代码

import cv2, numpy as np

def detect_tennis_ball(frame):
    """检测网球,返回 (x, y, radius, confidence) 或 None"""
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    lower = np.array([20, 100, 100])
    upper = np.array([35, 255, 255])
    mask = cv2.inRange(hsv, lower, upper)
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5))
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    if not contours: return None
    c = max(contours, key=cv2.contourArea)
    if cv2.contourArea(c) < 500: return None
    (x, y), r = cv2.minEnclosingCircle(c)
    return (int(x), int(y), int(r), 0.9)
💡 为什么选择 HSV 而不是 BGR 做颜色过滤?
  • A. HSV 计算更快
  • B. HSV 图像更清晰
  • C. HSV 将颜色(H)与亮度(V)分离,对光照变化更鲁棒
  • D. OpenCV 默认使用 HSV
答案 C:HSV 的 H 通道独立于亮度,颜色过滤对光照变化更鲁棒

🧩Octos Agent 任务规划

ReAct 模式下的任务理解与规划
Day 6-7

🔄 ReAct 循环

🤔 思考Thought ⚡ 行动Action 👁️ 观察Observation ✅ 判断Done? 是 → 完成 否 → 继续 循环直到任务完成或达到最大步数

🛠️ 工具定义示例

tools = [
    {"name": "move_base", "desc": "移动底盘到指定位置",
     "params": {"x": float, "y": float, "theta": float}},
    {"name": "scan_area", "desc": "扫描区域寻找目标",
     "params": {"direction": ["left","right","full"]}},
    {"name": "pick_object", "desc": "抓取指定位置的物体",
     "params": {"x": float, "y": float, "z": float}},
]

🗺️World Model

环境状态的内部表示
Day 9-10

📊 数据模型

{
  "objects": [{
    "id": "tennis_ball_1",
    "position": { "x": 1.2, "y": 0.5, "z": 0.05 },
    "confidence": 0.92,
    "last_seen": "2026-07-06T13:45:00Z",
    "status": "visible"
  }],
  "robot": {
    "position": { "x": 0, "y": 0, "theta": 0 },
    "arm_state": "home",
    "gripper": "open"
  },
  "task": {
    "goal": "pick and place tennis ball",
    "current_step": "scanning",
    "retries": 0
  }
}

🧠 设计原则

时效性

每个观测带时间戳。过期观测应降权或丢弃。

不确定性

置信度量化感知不确定性。低于阈值时触发重新扫描。

一致性

同一物体的多次观测应融合。用加权平均或 EKF。

可查询

Agent 可随时查询"最近的网球在哪"。

dora-rs 数据流

Rust 数据流运行时
Day 10-11

📊 数据流图

camera视频采集 mic音频采集 detector目标检测 asr语音识别 planner任务规划 arm_ctrl机械臂 base_ctrl底盘控制

🦀 自定义 Rust 节点

use dora_node_api::{DoraEvent, DoraOutputSender};

fn main() -> eyre::Result<()> {
    let (_node, mut events) = dora_node_api::DoraNode::init_from_env()?;
    let sender = DoraOutputSender::new()?;
    while let Some(event) = events.recv() {
        if let DoraEvent::Input { id, data, .. } = event {
            if id == "camera_frame" {
                let detections = detect_tennis_ball(&data.try_into()?);
                sender.send_output("detections", detections)?;
            }
        }
    }
    Ok(())
}

🌟StarryOS 分层架构

ArceOS 内核 → StarryOS POSIX → dora-rs 应用

🏗️ 三层架构

应用层: dora-rs 数据流 + 用户节点 StarryOS: POSIX 接口 + 驱动抽象 ArceOS 内核: 模块化 Rust unikernel

🔑 各层特点

ArceOS 内核

模块化 Rust unikernel。可选组件:内存管理、文件系统、网络栈。单一地址空间,高性能。

StarryOS

在 ArceOS 上提供 POSIX 兼容接口。进程管理、文件 I/O、设备驱动抽象。

dora-rs 应用

数据流编程模型。节点通过消息传递通信。声明式 YAML 配置数据流图。

🦾机器人技能与动作

移动、扫描、对准、抓取、投放

🎯 技能分解

🎵 接收语音指令 🚗 移动到目标区域 👁️ 扫描寻找目标 🎯 对准目标 🦾 机械臂就位 ✊ 夹爪抓取 🚗 移动到投放点 🤲 投放物体 ✅ 完成 物体已投放 TTS 语音反馈

🔧 关键命令

技能底层命令参数
移动cmd_vellinear_x, linear_y, angular_z
扫描arm_scanpan_angle, tilt_angle
对准arm_tracktarget_x, target_y
抓取gripper_closeforce_limit
投放gripper_open

🔗完整任务流水线

从语音指令到机器人动作的端到端实现
Day 12-13

🔗 端到端流程

1. 用户说: "帮我把网球捡起来放到盒子里"
2. ASR → 文本: "帮我把网球捡起来放到盒子里"
3. LLM 理解意图 → 结构化任务:
   {"action": "pick_and_place",
    "object": "tennis_ball",
    "destination": "box"}
4. Octos Agent 生成计划:
   Step 1: scan_area(direction="full")
   Step 2: move_to(target=ball.position)
   Step 3: pick_object(ball.position)
   Step 4: move_to(target=box.position)
   Step 5: place_object(box.position)
5. dora-rs 逐步执行每个技能
6. World Model 实时更新状态
7. TTS 反馈: "已将网球放入盒中"

🔄失败恢复与重规划

当执行失败时怎么办

⚠️ 常见失败场景

目标丢失

网球被遮挡或移动。解决方案:重新扫描,更新 World Model。

抓取失败

夹爪未对准或力度不够。解决方案:重试,调整姿态。

路径阻塞

前方有障碍物。解决方案:重新规划路径。

记忆过期

目标位置信息过时。解决方案:重新感知,刷新 World Model。

🔄 恢复策略

def execute_with_recovery(plan, max_retries=3):
    for step in plan:
        for attempt in range(max_retries):
            result = execute_step(step)
            if result.success:
                world_model.update(result)
                break
            elif attempt < max_retries - 1:
                tts.speak("正在重试...")
            else:
                # 重新感知 → 重新规划
                new_state = scan_and_update()
                plan = replan(goal, new_state)

🤖AI 编程工作流

规格 → 计划 → 实现 → 验证

📋 四步工作流

📝 规格Spec 📋 计划Plan ⚙️ 实现Implement ✅ 验证Verify

📝 你的职责

  • 写规格:用自然语言 + 结构化格式描述"要什么"
  • 审计划:检查 AI 的实现计划是否合理
  • 评代码:审查 AI 生成的代码,发现 bug 和改进点
  • 验结果:运行测试,确认行为符合规格
⚠️ 常见陷阱
  • 不写规格直接让 AI 写代码 → 结果不可预测
  • 不验证就认为 AI 代码正确 → 隐藏 bug
  • 不迭代一次就放弃 → 错过改进机会

🎯项目与答辩

最终交付物清单

📦 交付物清单

#交付物要求
1可运行的机器人系统完成"识别→抓取→投放"任务
2实验报告架构设计、技术选型、测试结果
3AI 开发日志记录每次 AI 交互的规格、计划、评审
4系统说明文档部署步骤、接口说明、已知问题
5答辩演示现场演示 + 回答问题

📅 最后3天安排

Day 13: 集成测试
端到端测试、修复 bug、优化性能
Day 14: 文档撰写
实验报告、AI 日志、系统文档
Day 15: 答辩准备
PPT 制作、演示排练、问题准备
🎉 祝你成功!
记住:你不是在手写每一行代码,而是在设计系统、评审 AI、验证结果。这才是 AI 原生开发的精髓。