需求分析(R1-R10)
从"让机器帮我搬货"的一句话出发,梳理 R1-R10 十条需求:交互、任务、播报打断、安全、工程组织五组; 分清 R8 语音打断与 R9 雷达危险的边界,建立"可验收"的需求观。
- ① 问题引入:一句话需求为什么会越做越多⭐4 学时 · 开始
- ② 动画:R1-R10 需求全景与五组划分⭐动画
- ③ 互动:需求优先级裁剪实验台⭐互动
- ④ 实操:grep 按 R 编号走读需求文档⭐实操
- ⑤ 总结与思考:R8 与 R9 之辨⭐总结
9 个实验贯穿一个完整的具身智能工厂项目:从需求工程 R1-R10 到五节点系统架构与 A/C/D/E/F 接口族, 落地语音交互、AprilTag tag36h11 + PnP 视觉自适应装货、定点分拣、光电停靠码垛与激光雷达 60°/20cm/0.5s 危险急停, 最终一键启动全功能快速验证 —— 每个实验均配原理讲解、动画演示与互动沙盒。
一句话需求拆成四块拼图:任务链、语音入口、视觉/执行、安全底线。
装货区 → 分拣区 → 流水线(定点停靠)→ 码垛区。装货靠视觉找位置,分拣靠人工教点位,码垛等光电传感器到位再下手——难度逐级递增。
唤醒词(如"小飞小飞")→ ASR 热词增强 → LLM 意图分类 → 固定话术回放与任务触发;R8 允许随时打断复位。
N1 语音、N2 调度、N-grasp 抓取、N-conveyor 流水线、N3 安全各司其职,N-vision 提供 AprilTag 位姿,复用底盘与机械臂底层。
R9:激光雷达前方 60° 扇区、20cm、持续 0.5s 判定危险 → 释放 6 舵机力矩;R9.1:雷达打断 > 语音打断。
开餐厅先定菜单再排厨房工位:先把需求写清楚、把节点分工定下来、把接口契约钉死,后面的功能开发才不会返工。
从"让机器帮我搬货"的一句话出发,梳理 R1-R10 十条需求:交互、任务、播报打断、安全、工程组织五组; 分清 R8 语音打断与 R9 雷达危险的边界,建立"可验收"的需求观。
N1 语音 → N2 调度 → N-grasp / N-conveyor 执行 → N3 安全护航的分工拓扑; 异步 run_until_sensor、2s 自动重试、状态话题回报完成,理解"触发 ≠ 完成"的编排语义。
A(语音交互)/ C(安全)/ D(复用底层)/ E(任务触发)/ F(流水线)五大接口族一张表钉死; yaml 集中管理点位与意图映射,用 ros2 命令实测话题与服务,识别文档与代码的偏差。
让工厂真正动起来:嘴(语音)、眼(AprilTag 视觉)、手(机械臂)、腿(流水线)依次接进调度链路。
唤醒 → ASR 热词增强 → LLM 意图分类(装载/分拣/码垛,不做关键词硬匹配)→ 固定话术播报; 掌握 R8 语音打断的四步复位,打通"说一句话 → 任务跑起来 → 完成播报"闭环。
AprilTag tag36h11(tag_id=3、tag_size=0.025)+ solvePnP 求解目标位姿,经 camera→base_link TF 变换、 pick_offset 补偿后抓取:观察位 → 检测 → 抓取 → 放置 → 回 work 八步闭环,debug/production 双模式微调。
vision=false 的定点抓取路线:人工教学 observe/place 点位,固定八步"提前开爪→到位→闭爪→抬升→ 放置→开爪→再抬 5cm→回 work",配合 lift_height / place_lift 调参解决拖拽回刮。
最完整的跨节点编排:N2 调 run_until_sensor 送料 → 光电传感器(GPIO17)清沿/挡沿 + 防抖定点停 → sensor_blocked 状态回调触发定点抓取,2s 失败自动重试,急停与恢复嵌入状态机。
功能做完只是起点:危险时先放开手(力矩释放),验收时一条命令带起全系统、一条命令清干净。
激光雷达前方 60° 扇区(±30° 跨 0° 环绕)、20cm 距离阈值、0.5s 持续判定防误报; 触发即释放 6 舵机力矩(臂变软可手推),解除后恢复力矩并 go_work 回位——雷达打断 > 语音打断。
launch 一键启动 + 7 个 start_* 开关按需裁剪;装货/分拣/码垛/急停四条链路"语音 + 服务"双通道闭环验证, stop_eai_factory.sh 收尾清理,做到"一条命令启动、全链路闭环、干净停止"。
全课程围绕 eai_factory 五节点功能包与真实外设展开,参数全部来自 config/eai_factory.yaml 实配。
EXP-01~03 是工程地基:拿不准需求就动手,后面每个"改一点参数重调两小时"都是它的利息。
EXP-04 语音、EXP-05 视觉、EXP-06 分拣、EXP-07 码垛逐一对通再串联——每个实验都有独立验证命令。
EXP-08 的急停逻辑要在每次实操前默念一遍:障碍对准雷达正前方、机械臂放安全位、手离抓取区。
EXP-09 的四链路 checklist 是全课程成绩单:能独立跑完"启动→任务→急停→清理",才算真正通关。
开做之前对齐四件事:硬件在位、配置文件读懂、语音服务活着、启停命令记牢。
6 自由度总线舵机机械臂(舵机 ID 0-5)、差速底盘、麦克风阵列、单目摄像头(内参 fx=592.9 / fy=593.1 / cx=335.4 / cy=237.7)、 激光雷达、流水线直流电机 M1 + GPIO17 光电传感器。做实验前逐一确认串口、GPIO17 导出与雷达 frame 就绪。
mode(debug/production)双模式;vision:tag_id=3、tag_size=0.025、tag_family=tag36h11; grasp.tasks 三任务各自的 vision 开关与 observe/place 点位;pick_offset(+0.015 / -0.010 / +0.023); safety:±30°、0.20m、0.5s;intents 意图映射与 wakeup_words 唤醒词。
本地 LLM 为 Qwen3.5-0.8B(w4a16 量化约 500MB,监听 127.0.0.1:8080),起来后先 curl http://127.0.0.1:8080/v1/models 自检;TTS 用 Matcha 声学模型 + vocos 声码器; 8080 起不来是 EXP-04 / EXP-09 的头号失败点。
ros2 launch 一条命令带 7 个 start_* 开关(start_base / viz / voice / vision / grasp / conveyor / radar, 其中 radar 默认 false、独立于 start_base);收工用 stop_eai_factory.sh 五段清理,直至打印"已全部清理干净"。
需要 ROS2 与视觉基础:会用 colcon 构建与 ros2 topic/service/launch 基本命令,了解相机成像与 TF 概念即可, 课程内的需求工程、接口设计部分不要求任何嵌入式经验。
yaml 中 sort / palletize 任务 vision=false,走人工示教定点(observe_pose / place_pose),稳定且可复现; 只有装货 load 任务 vision=true,因为货物每次来的位置不同——这正是"能定点就定点,必须自适应才上视觉"的工程取舍。
危险判定触发后释放 6 舵机力矩、传送带停转,抓取与流水线进入受控中断;障碍离开并满足解除条件后自动恢复力矩并 go_work 回位,但按 R9.1 任务需要手动重新触发,不会凭空续跑半截动作。
第 1 章 12 学时打地基(EXP-01~03),第 2 章 24 学时做功能(EXP-04~07),第 3 章 12 学时收口(EXP-08~09); 难度 ⭐ 的 EXP-01 可与理论课并行,⭐⭐⭐ 的 EXP-05 / 09 各留足整块实验时段,别拆开做。
各实验满分 100,评分构成摘自每页"重点与易错点"一节,可用于互评与验收打分。
| 实验 | 主题 | 评分构成(合计 100) |
|---|---|---|
| EXP-01 | 需求分析 | 需求分组 40 · 逐条解读 30 · R8/R9 边界 20 · 追溯矩阵 10 |
| EXP-02 | 五节点架构 | 节点分工 30 · 数据流讲清 30 · 编排语义 20 · 日志核对 20 |
| EXP-03 | 接口设计 | 接口族梳理 40 · 命令实测 30 · 文档偏差 20 · 配置管理 10 |
| EXP-04 | 语音交互 | 链路日志 15 · LLM 意图 20 · TC 用例 25 · 打断复位 15 · 总结 25 |
| EXP-05 | 视觉装货 | 检测链 15 · PnP+TF 20 · 八步验收 30 · offset 整定 20 · 总结 15 |
| EXP-06 | 智能分拣 | 示教点位 25 · 八步日志 30 · 参数调优 20 · TG7 打断 15 · 总结 10 |
| EXP-07 | 自主码垛 | GPIO 就绪 15 · 全链路 30 · 状态机 35 · 急停恢复 10 · 总结 10 |
| EXP-08 | 危险急停 | 扇区判定 15 · TS 用例 30 · 打断分层 35 · 恢复回位 10 · 总结 10 |
| EXP-09 | 全功能验证 | 启动裁剪 15 · 四链路 30 · checklist 35 · 清理 10 · 总结 10 |