在 当天讨论记录 的基础上,把整套"调酒服务"任务拆成 要训练 / 能编程 / 要仿真 三类,逐一给出跑在哪、谁负责、要不要采数据,并把当前失败模式对上深度相机的真实作用。 带 复现 的是他人已发表的真机结果,推理 是我的推断,实测 是本机跑过的。
"换个杯子/位置/形状就抓不起来"这个担心 —— 只对"写死坐标"成立,不是"编程"的全部。要分三层:
| 方式 | 怎么工作 | 换位置 | 换形状/杯子 | 要你采数据 |
|---|---|---|---|---|
| ① 写死坐标 | 走到固定 XYZ | ✗ 挪一下就抓空 | ✗ | 不要 |
| ② 感知+编程抓取 (黑客松那种) | 每一帧检测杯子→用深度算它此刻 3D 位置/形状→算抓取姿态→伸过去 | ✓ 能 | ✓ 大体能 | 不要 (用别人训好的通用模型) |
| ③ 模仿训练 (现状 ACT/SmolVLA) | 采人示范→训"画面→动作" | ✓ 分布内 | ⚠ 仅示范覆盖过的 | 要,且要很多 |
那模仿训练(③)的优势在哪?它买的是"难以用几何写出来的行为":柔顺接触、多步串联、利用难以描述的视觉线索、应对遮挡杂乱; 且不需要你搭抓取位姿模型+手眼标定,只要示范给它看。代价是天花板 = 示范质量/覆盖,且要大量你自己的数据(正是当前卡点)。
仿真(simulation)是第三个轴 —— 不是"怎么抓",而是"训练数据从哪来":用仿真器造海量数据/让机器人在仿真里试错, 好处是数据便宜、试错安全,代价是 sim-to-real 差距、搭建重(接触/流体尤难)。仓库已探讨,结论先别转仿真。
| 模仿(IL)真正擅长 | 经典感知+编程更好 |
|---|---|
| 柔顺接触/"手感"(软的/易变形/插配合) | 刚性、位姿可测的物体 |
| 杂乱场景靠细微外观分辨"是哪一个" | 场景干净、目标明确 |
| 多步隐式策略(边倒边看液面) | 动作可脚本化 |
| 不想搭感知栈、宁愿"示范给它看" | 愿搭一次感知栈换免数据 |
| 泛化到列举不完的真实变化 | 变化有限、可枚举 |
现在没深度的 RGB 数据白采了吗? 不是 —— 它已证明"录制→训练→部署"链路通、且策略确实在看杯子(不是背坐标)。 但若转路线 A,这些作为"最终方法训练数据"会被取代。我加的深度录制保证以后的示范自带深度,不被锁死在某条路线。
| 技能 | 归类 | 依据 |
|---|---|---|
| 整车 A→B 移动 | 编程 | 经典导航,确定性问题,学习又贵又不安全(见 §6) |
| 抓起 / 放下杯子 | 模仿 或 经典深度模块化 | 接触密集、依赖实时位姿。深度收益最大处(见 §3、§4) |
| 把杯子伸向顾客 | 感知+编程 | ①哪侧=感知算 3D 点;②伸过去=IK+规划。只有"交接一下"值得极少量学习(见 §5) |
| 倒水到指定位置 | 位置=编程;动作=先开环脚本 | 固定杯不看液面时脚本够;防洒闭环才需流体仿真,代价高,暂不做 |
| 递交放爪触发 | 编程+感知 | 语音 KWS+状态门控+手部确认(见 §5) |
| 情绪→推荐→语言反馈 | 编程+prompt | 预训练感知+云端 LLM,几乎不训练(见 §7) |
| 人/手侧别定位 | 编程+感知 | 姿态检测+深度反投影+桌面系标定(见 §8) |
一句话:真正必须采真实示范的核心就是抓 + 放(外加"交接"极少量)。其余全部能编程/感知/prompt。
| 路线 | 怎么做 | 要采数据? | 点评 |
|---|---|---|---|
| A 经典深度模块化 | YOLO-World/Grounded-SAM 检测→深度反投影→AnyGrasp/Contact-GraspNet 出抓取→脚本靠近 | 几乎不用 | 解你们"采不到数据"死结,顺带解决"精准",可当可靠 baseline / oracle |
| B 模仿学习(现状) | ACT/SmolVLA 纯 RGB,继续;用 LeRobot 0.6.2 原生深度做"加/不加深度"A/B | 要 | 用真实数据量出深度到底帮不帮,代价低 |
| C 点云模仿(升级) | DP3/iDP3 | 要 | 前提是深度质量验证过关 |
实测 lerobot 0.6.2 数据层支持深度(38 处),但安装的 realsense 模块没暴露 use_depth;你们相机是 Orbbec,深度走 v4l2_depth.py(Z16)。
不能把 head_depth 塞进 --robot.cameras(会被视频编码压毁 16-bit、且 schema 3 通道)。
推荐旁路 sidecar:独立进程随 lerobot 同跑,把 Z16 按时间戳无损存(16-bit PNG/npy)到数据集旁,两条录制路径各加启停挂钩,完全不碰现有 RGB 录制。
深度节点 /dev/video0 现可读、headless 可自测,不依赖舵机 → 可先把"无人版"跑绿。
三段:收音→识别固定短语(离线 KWS:openWakeWord/Picovoice,或中文 FunASR/Vosk)→发放爪指令。你那句"请+名字+放开杯子"越长越独特、误触发越低,是优势。 坑:别让一句话成唯一放手依据 —— ①状态门控只在递交姿态激活;②手部确认(用深度)听到且看到手在近处才松;③可选拽力兜底(Feetech 电机读电流)。mic/speaker 已有。编程,不训练。
RTMPose-s(Jetson 友好)或 MediaPipe → 对腕/肩像素采深度反投影出相机系 3D → 一次桌面系标定 → "哪侧"=X 符号、"最近"=最小距离。⚠ 别用 MediaPipe 的相对 z,度量位置用深度。编程+感知,不训练。
两个待确认:①小车到底要移动多少?②底盘有没有激光雷达?
核心:把"看"和"想"分开 —— 看在本地、想在云端。
头相机 →①人脸检测 →②表情粗分类 ┐ (Jetson 本地,轻)
本地麦克风 →③(可选)语音输入 ────┘ 结构化信号
→ ④云端 LLM:情绪+四款酒描述 → 选哪杯 + 生成一句话 (云端,重)
→ ⑤TTS 读出来 (Jetson 本地) → ⑥把选中的酒传给抓取侧
| 环节 | 跑在哪 | 用什么 | 训不训 |
|---|---|---|---|
| ①人脸检测 | Jetson | MediaPipe Face / YOLO-face | 预训练 |
| ②表情识别 | Jetson | HSEmotion(边缘轻量),转 TensorRT | 预训练 |
| ④推理+推荐+措辞 | 云端 LLM | Claude API + prompt engineering | 写 prompt,不训练 |
| ⑤TTS | Jetson | Piper(离线) | — |
怎么训:基本不训。表情用预训练权重,推荐是 prompt engineering。⚠ 经典七情绪识别不可靠,只取粗粒度(正/中/负)当软信号喂 LLM。
Ville 远程:整条链只要 webcam+API key+扬声器,在台湾用自己笔记本摄像头就能全程开发,完全不碰芬兰机器人。
接口契约:{"mood":"tired","recommended_drink":"C","speech":"…"},抓取侧只消费 recommended_drink。
现状:头壳已打印;待装 speaker + 情绪小屏。
luma.oled/luma.lcd 或厂商库;表情用预渲染帧。内容由 §7 的 mood/speech 驱动。| 模块 | 建议负责人 | 训练/编程 | 跑在哪 | 被"采不到数据"阻塞 |
|---|---|---|---|---|
| 抓取主线(采数据+训模仿) | 芬兰现场 | 模仿 | Jetson | 是(当前死结) |
| 深度录制 sidecar + 无人自测 | 我(可先做) | 编程 | Jetson | 否 |
| 经典深度抓取 baseline(路线 A) | 待定 | 编程+感知 | Jetson | 否(可离线开发) |
| 情绪→推荐→语音反馈 | Ville(台湾) | 编程+prompt | Jetson+云 | 否(完全离机开发) |
| 语音放爪 | 待定 | 编程 | Jetson | 否 |
| 人/手侧别定位 | 待定 | 编程+感知 | Jetson | 否 |
| 底盘 A→B 导航 | 本地硬件同学 | 编程 | 底盘 | 否(待确认硬件) |
| 头部硬件装配 | 硬件同学 | 装配 | — | 否(待人+资料) |