具身智能 · 遥操采集工作区

把「采数据」
变成消费级体验

一块数位板控制 6 自由度机械臂 —— 落笔跟手、抬笔悬停; 采集盒自动录制、质检、打包成可训练数据集。 不需要主臂,不需要手工标定。 机械臂与相机跑在采集盒(Ubuntu)上,你在 Mac / 浏览器里操控 —— 用户端不用装 ROS,也不用碰 Ubuntu。

电机
0
落盘帧率
0fps
丢帧
0%
数据集
0集
位置模式 · 100Hz 录制中 #3 · 1284 帧
安全盒:接近边界按剩余空间成比例减速 · 软限位 3°
笔 0 Hz 压力 0.50 ● 落笔 手势 张开手 → 张开行程
笔尖落笔 = 跟手
抬笔 = 悬停
右键单击 = 换电机

01 / 痛点

采数据这件事,今天太重了

这些坑我们都在真机上踩过 —— 不是 PPT。

01

门槛高

主臂贵、要标定、关节方向与零点一堆坑;两个人一台机器,光把机械臂跑起来就耗掉一天。

→ 我们用数位板做绝对坐标输入,落笔即跟手

02

环境割裂

ROS2 / Isaac Sim / LeRobot 默认都在 Ubuntu:装驱动、编译 workspace,光把环境跑通就耗掉一天。

→ 把环境收进采集盒:机械臂 + 相机跑在 Ubuntu 盒子上(Edge 镜像 + Docker), 用户侧只要一个客户端或网页 —— Mac / Windows 都不用装 ROS,也不用碰 Ubuntu

03

数据不可用

各家用各自的臂、各自的相机、各自的时间戳,采出来无法直接互换训练。

→ 统一成 Parquet + 视频 + meta,附设备档案与质检结论

04

没有质量保障

采集靠人盯,脏数据混进数据集,训练白跑。

→ 硬门 + A/B/C/F 评分卡,不合格的连数据集都进不去

02 / 采集流程

一次动作,三种形态

滚动看它从「笔」变成「轨迹」,再变成「数据集」。

机械臂与数位板 3D 场景静态图
① 输入 · 笔

拖拽可旋转

3D 模型(CC-BY 3.0,via Poly Pizza):Robot Arm by Yali Izzo · Tablet / Pen by Poly by Google

① 输入层 · 数位板

笔尖就是绝对坐标

  • 落笔瞬间取锚点,之后只按位移增量驱动 —— 手感与鼠标无关
  • 抬笔即停:0.4s 无输入视为抬笔,机械臂原地悬停
  • 笔右键:单击换电机(J1…J6/夹爪),长按切位置/姿态

② 采集层 · 控制与记录

100Hz 把每个动作记下来

  • 最小 jerk 曲线(10a³−15a⁴+6a⁵)下发,不是阶跃
  • 每条 episode 记录:6 关节 pos/vel/torque + 夹爪 + 动作 + 笔压
  • 安全盒软边界 + 关节软限位,接近边界按剩余空间减速

③ 平台层 · 质检与打包

不合格的进不了数据集

  • 硬门:丢帧 <2%、限位占用 <5%、时长 1–120s、成功标记
  • 评分卡:平滑度 / 完整性 / 同步 / 安全 / 隐私 → A·B·C·F
  • 产物:data/chunk-000/episode_*.parquet + 视频 + meta.jsonl

03 / 架构

滚动穿过四层

输入 → 采集 → 平台 → 商业。每一层都在仓库里有对应代码。

操作端你坐的地方

Mac / Windows / 浏览器

  • 桌面 GUI 或网页(同一套 REST + WS)
  • 数位板:绝对坐标 + 落笔离合
  • 不装 ROS、不碰 Ubuntu、不编译 workspace
采集盒设备侧

Ubuntu RT + Docker 镜像

  • 100Hz 控制环 · 录制 · 质检 · 打包 · 回放
  • 安全盒 / 软限位 / 力矩保护 / 归零
  • 驱动与依赖都收在盒子里,用户永远不用碰
机械臂被控对象

B601-RS · 6 关节 + 夹爪

  • RS06×3 / RS00×4,48V,754mm 臂展
  • 腕部相机 640×480 30fps 随 episode 入库
  • 不需要主臂(无需示教臂)
输入层input

数位板 / 手柄 / 手势

绝对坐标 + 落笔离合;手势(张开手/握拳)做夹爪行程兜底。

  • 数位板 · 笔压 + 右键
  • 6-DoF 手柄(规划)
  • 电脑摄像头手势
采集层capture

控制环 + 录制 + 质检

100Hz 控制环把笔动作变成 MIT 指令,同时落盘关节/力矩/笔压。

  • 最小 jerk + 安全盒
  • episode 自动落盘
  • 硬门 + 评分卡
平台层platform

数据集打包与回放

Parquet + 视频 + meta(LeRobot 风格),一条命令回放复现。

  • datasets/ 目录规范
  • MANIFEST sha256 溯源
  • 1×/2×/4× 回放
商业层market

可交付的数据包

带设备档案、质量分、授权字段的数据包 —— 卖工具,也卖标准。

  • 工具 + 服务 + 数据
  • 质量分可交易
  • 溯源待接签名

继续滚动 → 穿过下一层

04 / 质量门

把留档拖进数据集

只有过了硬门的 episode 才能进数据集 —— 拖起来试试,松手会有惯性。

原始留档7
已入库0
数据集—

提示:把方块拖进右侧的「datasets/」框 —— 等级 A/B 的会被吸进去,F 级弹回来。

05 / 实测

不是 PPT:真机跑出来的数字

下面每个数字都来自仓库里 data/ 下的真实文件。

采集指标(真机)

落盘帧率92.8 – 93.1 fps(控制环 100Hz)
丢帧率0.00%(上限 2%)
限位占用0.00%(上限 5%)
最大时间跳变14.5 – 17.7 ms(上限 50ms)
episode 时长32 – 59 s(单条)

数据集现状

数据集4 个(7 条 episode)
数据量7 集 / 28,245 帧
成功标记6 条成功 · 1 条失败留档
质量分78.7 – 85.6(A×1 / B×4 / F×2)
溯源MANIFEST.json + 每条 sha256

注:评分卡仍缺「运动覆盖」维度 —— 静止录制也可能拿高分, 已列入下方「边界」。上表是现状,不是结论。

一条真实 episode 的 7 自由度动作曲线
真实动作曲线6 关节 + 夹爪,来自 data/episodes/20260923_135010(5510 帧 / 59.4s);每个关节按自身范围缩放,否则小幅运动会被压成直线
控制面板:相机、关节、质量、历史数据
控制面板相机 / 关节条 / 质量灯 / 历史数据(磁盘上的数据集可点击回放)
腕部相机画面:夹爪接近毛绒玩具
腕部相机640×480 · 30fps · 随 episode 一起入库(动图为 24 帧采样)

一条 episode 里有什么

data/
├── chunk-000/
│   └── episode_000001.parquet   ← 关节/力矩/动作/笔压
├── videos/
│   └── observation.images.wrist/
│       └── episode_000001.mp4
└── meta/
    ├── info.json       fps / features / frames
    ├── episodes.jsonl  每条:等级 · 分数 · 成功 · 时长
    ├── tasks.jsonl     语言指令
    └── rebot_meta.json 设备档案 + 质检 + 授权字段

06 / 安全

真机事故换来的五条规矩

我们被打断后失能掉落、切模式空窗下坠各出过一次,都改进了。

启动零位门

距零位 >0.05 rad 拒绝使能(不动、不失能)—— 先归零再起服务。

全走最小 jerk

归零、走位、回放都用 10a³−15a⁴+6a⁵ 曲线,没有阶跃。

退出不失能

退出/Ctrl+C 先平滑归零再退出;失能只允许在 park 位附近。

力矩保护

任一路 >25 N·m 立即中止并原地保持;回放同样受保护。

软边界

安全盒接近边界按剩余空间成比例减速 —— 能贴边,不会越界。

抬笔即停

0.4s 无笔输入视为抬笔;肘部软限位 1.5°,QD ≤ 1.0 rad/s。

07 / 边界

还没做的,也写在这里

今天能演示的与还不能的,分清楚比吹得更响重要。

已跑通

真机遥操采集 → 质检 → 打包 → 回放;7 电机 / 4 数据集可查

评分缺陷

评分卡缺「运动覆盖」维度:静止录制也能拿高分(现有一条 A 级 episode 就是全静止的),需要补覆盖度/有效行程判据

未接入

训练链路(ACT 等):仓库里只有数据与回放,没有训练代码

未对齐

数据集是 LeRobot 风格,但未逐字段对齐 v3,需要转换器

待加

多路同录(wrist + scene):当前只录选中的那一路相机

待接

自动成功判定(夹爪力/位置)、设备序列号与标定哈希签名

规模

现有 6 条成功样本;单任务可用训练量需 ≥50 条