跳到正文

自主采集自我进化

编程智能体在 xArm7 与 Wuji Hand 2 上生成任务 编写代码 读取执行记录 并提出修改 操作员批准每个动作与共享代码提议

查看尝试记录

从手势到抓取

在同一工位上 智能体从手势与触碰推进到推动和抓取 目标是一个 25 mm 方块 没有示教 遥操作或策略训练 任务只有在当前级别验证通过后才能升到下一级

真机尝试
16
失败诊断
10
获批提议
17
机器人时间 min
45.6

采集与改进循环

  1. 场景
    scene.json
  2. 任务卡
    task_card.json
  3. 任务代码
    tasks/*.py
  4. 门禁检查
    gate.json
  5. 真机尝试
    timeline / logs
  6. 验证器
    verdict.json
  7. 数据评估
    review.json
  8. 数据集
    dataset.jsonl
失败后诊断并返回任务代码
验证通过后开放高一级任务卡
系统架构

编程智能体

Claude Opus 5.5 / Claude Code
写入物体名称 任务卡 任务代码 评估 诊断与提议

Self-Data Rise

固定代码 仅通过获批提议修改
scene.py
基座坐标中的物体
task_card.py
过滤器与级别规则
attempt.py
门禁 起点检查 批准与重试
verify/
T0–T3 四种验证器
sdr_skills.py
touch push pinch_lift place

zed-harness

原样复用
skills.py
Session 与 timeline
arm_plan
IK URDF 运动学
rehearsal
MuJoCo 间隙检查
global_locate
检测器 SAM 与深度
hand_geometry
手形与电流上限
execute_path / hand.py
受监控的运动

驱动与传感器

xArm7 控制器 Wuji2 手部服务 50 Hz 桌面 D455 腕部 D405

操作员

  • 批准每个运动技能
  • 接受或拒绝提议
  • 复位物体与拍摄
  • 不编写代码
采集流程
  • 场景D455 拍一帧 智能体说出画面中的物体 开放词汇检测器 LocateAnything-3B 为每个名称返回一个框 SAM Segment Anything 在框内分割出物体 再结合深度图 得到每个物体在机械臂基座坐标系中的位置以及是否可达 scene.json
  • 任务卡智能体针对场景写任务卡 一个小的 JSON 文件 包含目标 难度级别 T0-T5 见下文 物体 验证器 手势 复位方式和尝试预算 固定的过滤器 task_card.py 智能体不能修改 逐张接受或拒绝 并记录原因 decisions.json
  • 代码智能体编写任务文件 tasks/<card>.py 一串取自 sdr_skills.py 的技能及其参数 外加一段恢复序列
  • 检查每次尝试之前运行离线测试 核对步骤列表中的技能都存在 并记录每个代码文件的哈希 gate.json
  • 尝试attempt.py 执行这些步骤 规划技能计算逆运动学 IK 并在 MuJoCo 仿真器中重放动作 规划失败时 尝试在动作之前停止 不消耗预算 每个会动的技能都要操作员批准 记录 timeline 机械臂关节 手的关节与电流 相机画面和视频
  • 验证器与任务卡级别对应的固定检查 verify/<kind>.py 智能体不能修改 给出通过或失败及其测量值 verdict.json 这次尝试写入 dataset.jsonl
  • 评估智能体读取记录 写 review.json 发生了什么 数据价值 高 中 低或无 哪些片段可用
  • 诊断与修改失败之后 智能体写 diagnosis.md 这次尝试最先在哪里出错 哪些记录说明了这一点 要改什么 这个文件不存在时 运行器拒绝开始该卡的下一次尝试 修改在第 3 步完成 然后开始下一次尝试
级别与过滤器

每个级别对应一种验证器 T0-T3 的验证器在 verify/ 中 T4 T5 的验证器尚未编写

T0
任务
手势 机械臂不动
验证器
joint_readback
检查内容
每个手势下 20 个关节都在目标 0.05 rad 以内
复位
不需要
T1
任务
触碰物体但不移动它
验证器
unmoved
检查内容
手指接触点明显高于桌面 D455 测得物体移动小于 8 mm
复位
不需要
T2
任务
把物体推进目标区域
验证器
in_region
检查内容
D455 测得物体中心离目标不超过 15 mm
复位
机器人或操作员
T3
任务
抓起并抬高
验证器
lifted
检查内容
P12 起 最高处两侧仍接触 接触早于空手合拢的位置 法兰升高 ≥ 20 mm D455 的点只有在物体起点 30 mm 以内才计入
复位
机器人或操作员
T4
任务
放进容器
验证器
in_container
检查内容
尚未编写
复位
机器人或操作员
T5
任务
以上任务的组合
验证器
all_of
检查内容
尚未编写
复位
机器人或操作员
  • 每个物体和每个目标区域都必须在场景中被定位到 并且离右臂基座 0.25-0.70 m
  • 每个手势都必须是 hand_geometry.POSTURES 中的一个 起初还要求无名指关节 12 不低于收拢值 1.20 rad 现在手的驱动会自行清除该关节的编码器警告
  • 任务卡最多比 dataset.jsonl 中已验证的最高级别高一级 会改变场景的任务卡必须写明复位方式
  • 每张任务卡有 1-10 次尝试的预算 在动作之前停止的尝试不消耗预算 P9 手的电机 75 °C 停机 所有机械臂运动经工位的 execute_path.py 所有手的运动经 hand.py
谁能改什么

这项分工在第一次尝试之前就已确定 这样之后的每一处改动都能归到智能体或某条已批准的规则

智能体

修改自己的任务卡和任务文件 每次只改一个变量 并附上依据的测量值 例如 下降底线设为 4 mm 换成更高的目标 推动终点后移 18 mm 抓取规划改变后另写一张新卡

操作员

批准或拒绝修改共享代码的提议 技能 验证器 安全规则 预算 每条提议都写明来源尝试 17 条全部获批 有一份早期诊断直接改了验证器 这一改动已撤回 并改为提议重新提交

运行器

attempt.py 拒绝运行过滤器不接受的卡 预算用完的卡 已有验证通过尝试的卡 以及上一次失败后还没有 diagnosis.md 的下一次尝试

无触觉的接触判断

这只手没有触觉传感器 接触由手部服务 手的驱动进程 以 50 Hz 回报的数据推断 每个关节落后于目标多少 以及电机是否达到电流上限 抓取过程中 收拢进度用收拢比例 t 表示 pinch_open 手势为 0 pinch_close 为 1 判断手是否夹住物体 是否丢了物体 也用这两个信号 下表最后三行是 T3a #2 之后所做的修改

接触
规则
某个手指关节比自由运动时多落后目标 0.04 rad 或达到电流上限 自由运动峰值 + 0.2 A 静止时关节本身有 0.01-0.03 rad 的波动 0.04 rad 高于这个噪声
真机上的情况
触碰方块顶面 中指 0.051 rad 推动 0.0004 rad 25 mm 的木块太轻 手感觉不到 所以推动只由 D455 判断
夹住
规则
手以每步 0.02 的 t 向 pinch_close 收拢 拇指一侧和食指/中指一侧都必须出现接触 然后收拢关节再多收 0.1 rad 电流上限仍然有效 夹持力因此有上限 随后先试抬 5 mm 并保持 1 s 检查夹牢之后再完整抬起
真机上的情况
T3a #2 拇指在 t = 0.82 接触 食指/中指在 0.84 手部模型预测 0.73 收紧后拇指和食指处于电流上限 中指几乎不受力
打滑 P11 之前
规则
试抬时 任一收拢关节变化 0.03 rad 即算打滑 这条规则来自 zed-harness 原有技能中的全手握 全手握时所有手指一起漂移 说明物体正在滑出
真机上的情况
T3a #2 食指 MCP 指根 关节变化 0.064 rad 尝试被中止 而拇指和食指 DIP 指尖 关节一直处于电流上限 视频显示方块已被抬起
为什么判错
规则
捏取只有两侧接触 物体可以绕两侧之间的连线转动而不离开手 这种转动会带动食指 MCP 原规则把这个变化当成了物体滑出
真机上的情况
智能体把关节日志与视频 第 34-45 秒 对齐后发现 操作员确认
打滑 P11 起
规则
只有某一侧失去接触才算打滑 这一侧的收拢关节既不再落后于目标 也不再处于电流上限 两侧都接触时的关节变化记为转动 抬起继续
真机上的情况
启用前先用 T3a #2 的日志测试 T3a #4 记录到 0.054 rad 的转动 抬起到 30 mm T3a #5 试抬时食指/中指一侧失去接触 手放下了方块 说明新规则仍会拦下真正的打滑
够得着的抓取

手接触物体之前 智能体先在手和机械臂的模型中检查哪些动作可行 多份诊断都回到了这些部分

选择抓取方式

在手的 CAD 运动学上 智能体比较了夹 25 mm 方块的三种方式 手指朝下时 在刚好碰到方块的手势下 拇指尖仍比食指 中指尖高约 3 cm 够不到 手倾斜 50° 时 张开的手指会伸进桌面 14-28 mm 手指离竖直 75-83° 的侧面捏取 能让整只手 包括手掌和 D405 离桌面至少 13 mm 四个捏合方向中 有三个在夹住处超出控制器的工具位置限位

收拢过程中的捏合中心

在手部模型中 拇指与指尖之间的中点在手收拢时移动 44 mm 其中 6-12 mm 发生在预测接触 t = 0.73 与实测接触 t = 0.80-0.88 之间 手臂不动时 手指偏离中心碰到方块 把它推开 P14 让手臂跟随这个中点移动 P15 让捏合方向对准方块的面 P17 在收拢前用 D405 测量指尖高度

MuJoCo 重放

每段规划好的运动都带着机械臂 手和 D405 的网格 对照桌面 墙和禁入平面重放 间距要求 关节运动 30 mm 靠近物体的运动 10 mm 手指与桌面 4 mm 目标物体的碰撞盒不包括手指 因为手指本来就要接触它 模型中没有的物体 用 D455 彩色画面把它们排除在手的占地范围之外

逆运动学不稳定时的规划

同一个位姿 机械臂控制器在不同调用中可能给出不同的 IK 解 因此规划从多个起点收集解 依次尝试进入和返回路线 直到整个规划通过 MuJoCo 重放 改进之后 只规划不动作的测试中 推动 8 次全部成功 捏取 5 次全部成功

用相机测量

在桌面上 D455 对积木位置的重复精度为水平 2.5 mm 高度 6 mm 它的深度图会把 25 mm 的方块模糊成几厘米宽的凸起 所以推动路线和手的占地范围改在彩色画面中检查 积木被手夹住后 D455 就看不到它 所以从 P12 起 抬起由手和机械臂的信号判断 D455 只作交叉核对

实验结果

任务卡级别目标运行动作前停止验证通过时间 分钟
T0 t0-pinch-open-pregraspT0到达并保持 pinch_open 和 pinch_pregrasp3120.9
T1a t1-touch-yellow-barT1触碰黄色长条 高 12 mm 而不移动它2002.3
T1b t1-touch-blue-cubeT1触碰蓝色方块 25 mm 而不移动它1011.2
T2 t2-push-blue-cubeT2把蓝色方块向机械臂基座推 5 cm2313.5
T3a t3-lift-blue-cubeT3捏起蓝色方块 抬高 30 mm 放回42116.4
T3b t3-lift-blue-cube-centredT3目标相同 手臂跟随捏合中心 P1442121.3
合计——168645.6

运行时间从每次尝试的第一个技能算到结束 T0 的两次通过包含一次录像重跑 T3a 的通过来自操作员视频复核 两次在规划阶段停止的 T2 记录计入时间 不消耗尝试预算

任务卡过滤记录
t0-pinch-postures
级别
T0
场景
桌面
过滤器
接受
原因
—
t0-power-postures
级别
T0
场景
桌面
过滤器
拒绝
原因
open pregrasp close 三个手势把无名指关节 12 放到 0.00 0.30 1.00 rad 低于收拢值 1.20
t1-touch-lid
级别
T1
场景
桌面
过滤器
拒绝
原因
还没有验证通过的 T0
t2-push-bowl
级别
T2
场景
桌面
过滤器
拒绝
原因
还没有验证通过的 T1
t3-lift-lid
级别
T3
场景
桌面
过滤器
拒绝
原因
还没有验证通过的 T2
t2-push-cup
级别
T2
场景
积木 已录
过滤器
拒绝
原因
还没有 T1 场景中没有杯子 目标区域离基座 0.91 m 超出 0.25-0.70 m
t4-green-block-into-tray
级别
T4
场景
积木 已录
过滤器
拒绝
原因
还没有验证通过的 T3

尝试记录

T0 #1 手势 通过

验证器原标签
通过
操作员复核
无复核
智能体数据价值
高

从静止出发到达两个手势 20 个关节误差在 0.043 和 0.042 rad 以内 最大处在收拢的无名指

可用片段
hold_posture
数据用途
第一次验证通过 允许 T1
动作记录与关节曲线

机械臂静止

手指屈曲 rad 共 792 条无时间戳记录

2.00-0.01
0记录顺序
  1. hold_posture0.00–7.19 s 完成
  2. hold_posture10.91–15.96 s 完成

T0 #3 从上一任务的姿态出发 失败

验证器原标签
失败
操作员复核
无复核
智能体数据价值
中

同样的手势 从 T1a 结束时的姿态出发 无名指侧摆偏差 0.054 rad

可用片段
hold_posture
数据用途
起点不同但有效的手势数据 说明起始姿态影响结果 P5
动作记录与关节曲线

机械臂静止

手指屈曲 rad 共 780 条无时间戳记录

2.000.00
0记录顺序
  1. hold_posture0.00–5.68 s 完成
  2. hold_posture10.54–15.58 s 完成

T0 #4 从放松姿态出发 通过

验证器原标签
通过
操作员复核
无复核
智能体数据价值
高

从放松姿态出发 读数与 #1 相同 无名指侧摆 0.034 rad

可用片段
relax hold_posture
数据用途
验证了 P5
动作记录与关节曲线

机械臂静止

手指屈曲 rad 共 1247 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.53 s 完成
  2. hold_posture5.03–10.33 s 完成
  3. hold_posture19.89–24.93 s 完成

T1a #1 没有接触 失败

验证器原标签
失败
操作员复核
无复核
智能体数据价值
低

下降停在长条顶面 指尖离桌面约 11 mm 没有接触

可用片段
touch 接近 下降
数据用途
不是触碰 说明对扁平物体而言下降底线太高 P1
动作记录与关节曲线

机械臂关节变化 rad

2.75-2.75
065.8 s

手指屈曲 rad 共 3269 条无时间戳记录

2.000.00
0记录顺序
  1. plan_touch0.00–1.75 s 完成
  2. touch4.99–65.76 s 失败

T1a #2 擦边接触 标签改为失败

验证器原标签
通过
操作员复核
失败
智能体数据价值
中

最后一步接触 落在长条远侧边缘 视频

可用片段
touch 接近 下降
数据用途
触碰验证器一次带标签的误判通过 P6
动作记录与关节曲线

机械臂关节变化 rad

2.64-2.64
070.8 s

手指屈曲 rad 共 3536 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.53 s 完成
  2. plan_touch4.53–6.08 s 完成
  3. touch8.20–70.79 s 完成

T1b #1 触碰方块 通过

验证器原标签
通过
操作员复核
通过
智能体数据价值
高

中指指尖落在 25 mm 高的方块顶面 方块移动 3.1 mm

接触时的腕部 D405 画面
可用片段
relax touch
数据用途
第一次验证通过的 T1 腕部画面 P6 拍到方块 但看不到接触点
动作记录与关节曲线

机械臂关节变化 rad

2.87-2.87
073.7 s

手指屈曲 rad 共 3680 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.53 s 完成
  2. plan_touch4.53–6.52 s 完成
  3. touch8.57–73.72 s 完成

T2 #2 推动差 18 mm 失败

验证器原标签
失败
操作员复核
无复核
智能体数据价值
高

一次完整的推动 方块移动 32 mm 差 18 mm 手指偏转 0.0004 rad

可用片段
relax push
数据用途
一次有实测结果的推动 给出了 #5 所用的 18 mm 修正量
动作记录与关节曲线

机械臂关节变化 rad

2.73-2.73
088.8 s

手指屈曲 rad 共 4432 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.54 s 完成
  2. plan_push4.54–14.16 s 完成
  3. push16.38–88.84 s 失败

T2 #5 离目标 2.5 mm 通过

验证器原标签
通过
操作员复核
无复核
智能体数据价值
高

推动 45 mm 中心离目标 2.5 mm

可用片段
relax push
数据用途
第一次验证通过的 T2
动作记录与关节曲线

机械臂关节变化 rad

2.81-2.81
096.7 s

手指屈曲 rad 共 4820 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.56 s 完成
  2. plan_push4.56–18.06 s 完成
  3. push20.08–96.70 s 完成

T3a #2 夹住了 被打滑检查中止

验证器原标签
失败
操作员复核
确认抓取
智能体数据价值
高

两侧接触 收紧 方块被抬起 5 mm 方块转动 打滑检查中止了尝试

可用片段
relax pinch_lift 接近 收拢 收紧 抬起 5 mm
数据用途
这只手的第一次抓取 错在检查规则 P11
动作记录与关节曲线

机械臂关节变化 rad

3.31-3.31
0131.0 s

手指屈曲 rad 共 6517 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.53 s 完成
  2. plan_pinch4.53–36.27 s 完成
  3. pinch_lift40.48–131.00 s 失败

T3a #4 抬高 30 mm 并放回 标签改为通过

验证器原标签
失败
操作员复核
通过
智能体数据价值
高

转动被记录 P11 抬高 30.0 mm 两侧接触保持 2 s 放回离起点 6.5 mm 处 方块被手挡住 验证器定位到了黄色长条

可用片段
relax pinch_lift place_back 最高处的 D455 与 D405 画面
数据用途
第一次完整的抓起 抬高 放回 也是第一次自复位 第一组方块被手挡住的画面 P12
动作记录与关节曲线

机械臂关节变化 rad

3.45-3.45
0198.0 s

手指屈曲 rad 共 9848 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.53 s 完成
  2. plan_pinch4.53–38.90 s 完成
  3. pinch_lift41.15–119.11 s 完成
  4. place_back162.23–197.97 s 完成

T3a #5 试抬时打滑 失败

验证器原标签
失败
操作员复核
失败
智能体数据价值
中

t = 0.84/0.88 接触 收紧 试抬时食指/中指一侧失去接触 方块最终横向移动 36 mm 转了 28°

可用片段
relax pinch_lift 的接近与收拢 作为反例
数据用途
P11 下第一次拦下的打滑 指向 4-5 mm 的偏差 P13
动作记录与关节曲线

机械臂关节变化 rad

3.05-3.05
0126.4 s

手指屈曲 rad 共 6294 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.53 s 完成
  2. plan_pinch4.53–21.74 s 完成
  3. pinch_lift36.61–126.44 s 失败

T3a #6 第二抓夹住 被手部服务停止

验证器原标签
失败
操作员复核
失败
智能体数据价值
高

第一抓 拇指在 t = 0.92 接触 食指/中指没有接触 方块被沿 −y 推开 34 mm 重新定位 重新规划 P13 第二抓夹住 通过试抬 抬到 18 mm 时手部服务因关节 7 堵转而停止

可用片段
relax 第一抓作为反例 重新定位 第二抓到 18 mm 收拢前的腕部画面
数据用途
第一次重新定位后再抓 同一方向的第三次失败 引出了捏合中心的分析 P14
动作记录与关节曲线

机械臂关节变化 rad

3.72-3.72
0525.5 s

手指屈曲 rad 共 25764 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.54 s 完成
  2. plan_pinch4.54–42.05 s 完成
  3. pinch_lift48.36–151.52 s 失败
  4. relocate151.52–160.33 s 完成
  5. plan_pinch160.33–196.51 s 完成
  6. pinch_lift454.47–516.79 s 失败
  7. relocate516.79–525.53 s 完成
  8. plan_pinch525.53–525.54 s 失败

T3b #2 沿对角线捏取 失败

验证器原标签
失败
操作员复核
失败
智能体数据价值
中

手臂跟随捏合中心的收拢按计划执行 但方向沿方块对角线 225° 拇指在 t = 0.92 碰到棱角 食指/中指没有接触 方块转了 25° 重新定位后没有规划出可行方向

可用片段
relax P14 的收拢与张开作为运动数据 重新定位
数据用途
捏取必须跨在两个相对的面上 P15
动作记录与关节曲线

机械臂关节变化 rad

1.95-1.95
0196.4 s

手指屈曲 rad 共 9778 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.54 s 完成
  2. plan_pinch4.54–27.01 s 完成
  3. pinch_lift31.01–142.15 s 失败
  4. relocate142.15–151.06 s 完成
  5. plan_pinch151.06–196.45 s 失败

T3b #3 第二抓夹住 被手部服务停止

验证器原标签
失败
操作员复核
无复核
智能体数据价值
高

第一抓合拢在空处 食指/中指滞后最多 0.026 rad 方块移动 19 mm 第二抓 t = 0.84 两侧接触 与预测一致 收紧 通过试抬 随后手部服务因关节 7 堵转 略低于其接触阈值而停止

可用片段
relax 第二抓到试抬 第一抓作为反例
数据用途
第二次在预测接触点夹住 推翻了智能体对 T3b #2 的诊断
动作记录与关节曲线

机械臂关节变化 rad

4.76-4.76
0697.4 s

手指屈曲 rad 共 34659 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.54 s 完成
  2. plan_pinch4.54–38.64 s 完成
  3. pinch_lift70.14–214.32 s 失败
  4. relocate214.32–223.19 s 完成
  5. plan_pinch223.19–267.47 s 完成
  6. pinch_lift630.10–697.43 s 失败
  7. relocate697.43–697.43 s 失败

T3b #4 夹着上沿抬起后滑出 失败

验证器原标签
失败
操作员复核
失败
智能体数据价值
高

t = 0.82 两侧接触 收紧 P16 试抬时转动 抬高 30 mm 只夹住上沿 方块在最高处滑出 收拢前 D405 指尖比规划高 8 mm

可用片段
pinch_lift 到最高处 滑出过程 第一次指尖高度测量
数据用途
P13 以来第一次没有被手部服务中止的完整抬起 P12 抬起判断的一次正确失败
动作记录与关节曲线

机械臂关节变化 rad

3.02-3.02
0203.6 s

手指屈曲 rad 共 10136 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.54 s 完成
  2. plan_pinch4.54–50.47 s 完成
  3. pinch_lift66.02–146.05 s 完成
  4. place_back156.80–203.58 s 完成

T3b #6 抓起并抬高 通过

验证器原标签
通过
操作员复核
通过
智能体数据价值
高

捏合高度 14 mm P17 指尖比规划高 1.8 mm t = 0.80/0.82 接触 收紧 试抬时转动 抬高 30 mm 后仍夹住 操作员跳过了放回

可用片段
relax pinch_lift 接近 高度检查 收拢 收紧 试抬 抬起并保持
数据用途
第一次由验证器判通过的 T3 允许 T4
动作记录与关节曲线

机械臂关节变化 rad

6.94-6.94
0168.2 s

手指屈曲 rad 共 8373 条无时间戳记录

2.000.00
0记录顺序
  1. relax0.00–4.53 s 完成
  2. plan_pinch4.53–53.93 s 完成
  3. pinch_lift60.54–168.23 s 完成

失败中的可用数据

16 次尝试中有 11 次被智能体评为高价值 其中 6 次的验证器标签是失败 每次记录分别保存验证器判定 智能体评估与操作员复核 评估给出可用片段 原标签仍然保留

验证器标签智能体 高中低合计
通过5106
失败63110
判断依据与存储
验证器
依据
相机与手的测量值 对照该级别的规则
存放位置
verdict.json 数据集中的一行
智能体评估
依据
timeline 机械臂与手的日志 画面和视频 说明发生了什么 数据价值和可用片段
存放位置
每次尝试的 review.json 失败后的 diagnosis.md
操作员复核
依据
在智能体或验证器提出时看视频 视频与标签不符时修改标签
存放位置
verdict.json 中的 operator_review 数据集中的一行同时保留两个标签

诊断与改进

T3a #2 试抬后中止T3a #4 抬高并放回

转动与打滑

T3a #2 P11
  • 观测打滑检查中止了试抬 食指 MCP +0.064 rad
  • 矛盾拇指和食指 DIP 仍在电流上限 两侧都处于接触
  • 核对视频第 34-45 秒 方块离开桌面 在拇指和食指之间转动
  • 结论两侧捏取就是一根轴 沿用自全手握的规则把转动读成了打滑
  • 修改P11 只有一侧失去接触才算打滑
  • 结果T3a #4 把方块抬高 30 mm T3a #5 的真实打滑仍被拦下 复验 5 次全对

捏合中心偏移

T3a #5 T3a #6 P14
  • 观测T3a #5 一侧丢了方块 捏合点与方块中心的第二种估计相差 4-5 mm
  • 假设定位误差 P13 重新定位再抓
  • 核对T3a #6 第一抓仍把方块沿 −y 推开 34 mm 同一方向的第三次
  • 分析手部模型中的指尖路径 收拢时捏合中心移动 44 mm 其中 6-12 mm 发生在预测接触 t = 0.73 与实际接触之间
  • 修改P14 手臂跟随捏合中心 新任务卡 T3b
  • 结果T3b #3 第二抓在 t = 0.84 两侧接触 与预测的 0.835 一致

指尖高度修正

T3b #4 P17
  • 观测方块被夹着上沿抬高 30 mm 在最高处滑出
  • 操作员手看起来高了约 3 mm 为什么不用腕部相机
  • 测量收拢前 D405 深度图 桌面平面 方块顶面 24-28 mm 实际 25 指尖比规划高 8 mm
  • 核对14 mm 捏合高度的只规划测试 3 次全部成功
  • 修改P17 捏合高度 14 mm 每次收拢前检查指尖高度
  • 结果T3b #6 指尖比规划高 1.8 mm 抬高 30 mm 并夹住 验证通过

撤回原诊断

T3b #2 T3b #3
  • 观测T3b #2 沿方块对角线 225° 捏取 碰到棱角
  • 假设方向导致落空 P15 按方块朝向确定方向
  • 核对T3b #3 与面只差 5° 的第一抓同样落空
  • 比较P13 之后的五次抓取 落空 2° 44° 5° 夹住 24° 10° 第一抓全部落空 两次第二抓都夹住
  • 结论区分成败的是先后而不是角度 修正了关于方向的解释 并列出三种候选原因
  • 后续D405 高度检查 P17 现在会在每次收拢前记录区分两者所需的数据
完整执行记录
15:56
步骤
场景
判定
未动
最先出错之处 读取的记录
请求定位六个物体 LocateAnything 把红色方块和橙色拱形框成一个框 找小黄方块时返回的是黄色长条
修改
智能体 只为框对了的三块积木写任务卡
16:05
步骤
任务卡
判定
未动
最先出错之处 读取的记录
三张任务卡 T0 到 T2 尚无已验证的级别 过滤器只接受 T0
修改
智能体 T0 任务卡不列 pinch_close 戴手套的手指在到达它之前就会相碰
17:05
步骤
T0 #1
判定
通过
最先出错之处 读取的记录
两个手势误差均在 0.043 rad 以内
修改
允许 T1
17:16
步骤
T1a #1
判定
失败
最先出错之处 读取的记录
没有接触 下降停在离桌面 11 mm 处 正是 12 mm 长条的顶面 读取 下降过程中的手指关节 规划 D455 深度图中的长条 最后一步的手指网格
修改
智能体 下降底线在共享的触碰技能中 提出 P1-P4 操作员 批准 智能体 底线设为 4 mm 这份诊断的初稿曾直接修改验证器 已撤回并改为提议重新提交
17:57
步骤
T0 #3
判定
失败
最先出错之处 读取的记录
无名指侧摆偏差 0.054 rad 容差 0.05 手从 T1a 结束时的姿态出发 从静止出发时同一关节偏差 0.034 rad
修改
智能体 不改任务 失败后放宽容差等于降低标准 提出 P5 操作员 批准
22:47
步骤
T0 #4
判定
通过
最先出错之处 读取的记录
从放松姿态出发 误差在 0.046 rad 以内 无名指侧摆 0.034 rad
修改
P5 得到验证
22:52
步骤
T1a #2
判定
通过 → 失败
最先出错之处 读取的记录
在 20 步中的最后一步接触 长条移动 0.2 mm 验证器判通过 视频 指尖落在长条远侧边缘 偏离目标约 1 cm
修改
操作员 把标签改为失败 两个标签都保留 智能体 不再使用长条 为蓝色方块写 T1b 提出 P6
23:16
步骤
T1b #1
判定
通过
最先出错之处 读取的记录
在 19 步中的第 12 步接触 指尖离桌面 25.3 mm 方块顶面 方块移动 3.1 mm 腕部画面中方块在手指前方 收拢的手指挡住了接触点
修改
操作员 看视频确认 智能体 把 T2 任务卡改为以方块为目标 过滤器接受
10:52
步骤
场景 T2 任务卡
判定
未动
最先出错之处 读取的记录
按智能体的建议重新摆放积木 使每块都能单独定位 方块移动了 3.7 cm 之前的 T2 任务卡不再适用 MuJoCo 重放拒绝了第一条关节路径 进入禁入区 120 mm
修改
操作员 批准 P7 推动技能 智能体 按新场景重写 T2 任务卡
11:29
步骤
T2 #1
判定
停止
最先出错之处 读取的记录
停在规划阶段 控制器给出的每条进入路线都会进入禁入区 机器人未动
修改
智能体 规划同时从其他候选出发求 IK 并记录每个候选 属于 P7 按 P9 退回预算
11:36
步骤
T2 #2
判定
失败
最先出错之处 读取的记录
方块移动 32 mm 差 18 mm 手指比模型预测的更晚碰到方块 手指偏转 0.0004 rad 技能因此把一次真实的推动报告为 未接触
修改
智能体 推动终点后移 18 mm 提出 P8 操作员 批准
12:28
步骤
T2 #3
判定
停止
最先出错之处 读取的记录
起始检查 方块离任务卡上的位置 12.5 mm 机器人未动
修改
操作员 把方块放回
12:30
步骤
T2 #4
判定
停止
最先出错之处 读取的记录
停在规划阶段 找到了进入路线 但没有返回路线 离禁入区 24.9 mm 要求 30 mm 机器人未动
修改
智能体 规划搜索返回路线 找不到时换下一条进入路线 属于 P7 之后只规划不动作的 8 次测试全部通过 提出 P9 操作员 批准 并退回 #1 和 #4 的预算
12:37
步骤
T2 #5
判定
通过
最先出错之处 读取的记录
推动 45 mm 中心离目标 2.5 mm 手指没有检测到接触 P8 之后不再要求
修改
允许 T3 智能体 在手部模型中发现手指朝下的捏取够不到方块 提出 P10 操作员 批准
13:14
步骤
T3a #1
判定
停止
最先出错之处 读取的记录
起始检查 方块离任务卡上的位置 25 mm 是推动后留下的位置 机器人未动
修改
操作员 把方块放回
13:16
步骤
T3a #2
判定
失败
最先出错之处 读取的记录
t = 0.82/0.84 两侧接触 模型 0.73 收紧 0.1 rad 方块被抬起 5 mm 方块转动 食指 MCP +0.064 rad 两侧仍在电流上限 打滑检查放下方块 读取 手的关节与电流 视频第 34-45 秒
修改
智能体 评估 抓取成功 价值高 检查把转动算成了打滑 提出 P11 操作员 看视频确认 批准
13:34
步骤
T3a #3
判定
停止
最先出错之处 读取的记录
起始检查 方块偏 19 mm 是 #2 放下的位置 机器人未动
修改
操作员 把方块放回
13:37
步骤
T3a #4
判定
失败 → 通过
最先出错之处 读取的记录
t = 0.82/0.84 接触 记录到 0.054 rad 的转动 P11 抬高 30 mm 保持 2 s 放回离起点 6.5 mm 处 验证器测得只升高 6 mm 因为手挡住了方块 LocateAnything 框中了 9.6 cm 外的黄色长条 读取 最高处的 D455 与 D405 画面 机械臂日志 法兰 +30.0 mm 水平 0.1 mm 手两侧的接触
修改
智能体 评估 抬起成功 价值高 第一次自复位 D455 看不到手中的物体 提出 P12 操作员 看视频后把标签改为通过 批准 P12
14:42
步骤
T3a #5
判定
失败
最先出错之处 读取的记录
接触比上次晚 拇指 t = 0.84 食指/中指 0.88 收紧后试抬时食指/中指一侧失去接触 按 P11 属于打滑 方块最终横向移动 36 mm 转了 28° 读取 开始前后的 D455 画面 规划中的捏合轴 T3a 两次抓取的接触时刻 按方块半高处颜色区域求得的第二种中心估计 两次捏合点都偏 +y 4-5 mm D405 的标定记录
修改
操作员 要求没抓到时重新定位 再抓一次 智能体 P13 用 D455 重新定位 D405 标定差约 1 cm 未通过验收 每次尝试最多抓两次 捏合点用半高估计 收拢前拍一帧腕部画面 操作员 批准 把方块放回并摆正
15:06
步骤
T3a #6
判定
失败
最先出错之处 读取的记录
第一抓 拇指在 t = 0.92 接触 食指/中指没有接触 方块被沿 −y 推开 34 mm 同一方向的第三次失败 重新定位 重新规划 第二抓夹住 抬到 18 mm 时手部服务因关节 7 食指 DIP 堵转 略低于其接触阈值而停止 读取 手部模型中每次规划的指尖路径 t = 0.73 到 0.92 之间两侧指尖都向 −y 移动 5-10 mm 整个收拢中捏合中心移动 44 mm 四次抓取的接触时刻 收拢前的腕部画面
修改
操作员 手碰到了方块 但不是在两个相对的面上 方块滑开了 起点几毫米的偏差应该能够容忍 智能体 P14 手收拢时手臂在水平方向跟随捏合中心 手部服务未运行或手臂不在起点时拒绝重新定位 操作员 批准 并要求另写一张任务卡 T3b
15:31
步骤
T3b #2
判定
失败
最先出错之处 读取的记录
#1 在起始检查停止 偏 41 mm 起点偏 4.9 mm 规划方向 225° 沿方块对角线 35 步收拢中手臂跟随 拇指在 t = 0.92 碰到棱角 食指/中指没有接触 方块转了 25° 重新定位后没有找到可行方向 读取 规划的候选记录 正对面的方向未通过控制器限位或重放 一次夹住和一次没夹住的腕部画面 D455 颜色区域给出的方块朝向
修改
智能体 P15 按方块朝向确定方向 面法向 ±10° 以内 从 t = 0.6 开始跟随中心 四个已录场景都能规划 操作员 批准 把方块摆正
16:08
步骤
T3b #3
判定
失败
最先出错之处 读取的记录
第一抓与面法向相差 5° 合拢在空处 第二抓相差 10° t = 0.84 两侧接触 通过试抬 被手部服务停止 关节 7 堵转 离目标差 0.032 rad 低于服务的 0.05 rad 阈值 读取 每一步收拢的手指滞后 按正运动学算出的实际捏合中心 从 t = 0.6 起离方块 0.5 mm 以内 P13 之后五次抓取与面的夹角 落空 2° 44° 5° 夹住 24° 10°
修改
智能体 撤回对 T3b #2 的诊断 第一抓落空 第二抓夹住 原因未查明 编写 recover.py 请操作员提供视频 并就手部服务的规则做决定 操作员 选择在本 demo 内加大指尖收紧量 P16 不改共享规则
16:35
步骤
T3b #4
判定
失败
最先出错之处 读取的记录
t = 0.82 两侧接触 试抬时转动 抬高 30 mm 最高处没有夹住 方块最终在 61 mm 外 验证器没有采用 D455 的点 又是黄色长条 依据手的信号判失败 读取 操作员的估计 高了约 3 mm 收拢前 D405 的深度图 桌面平面 方块顶面 24-28 mm 指尖比规划高 8 mm 14 mm 捏合高度的只规划测试 3 次全部规划成功
修改
智能体 P17 捏合高度 14 mm 收拢前用 D405 测量指尖高度 并把手臂竖直移回规划高度 操作员 批准 把方块放回并摆正
16:59
步骤
T3b #6
判定
通过
最先出错之处 读取的记录
#5 在起始检查停止 偏 17 mm 捏合高度 14 mm 方向偏面法向 8° 收拢前 D405 指尖比规划高 1.8 mm 方块顶面 28 mm t = 0.80/0.82 接触 收紧 试抬时转动 两侧仍夹住 抬高 30 mm 2 秒后仍夹住 验证器依据手和机械臂的信号判通过 D455 的点 17 cm 外的另一个物体 未被采用
修改
允许 T4 操作员 跳过放回 以便拍摄手中的方块
智能体直接修改
  • 没有为定位错误的两块积木写任务卡
  • 依据已录的电流基线 T0 任务卡不列 pinch_close
  • P1 批准后 把 T1a 的下降底线设为 4 mm
  • 约 1 cm 的落点误差使长条成为过小的目标后 改用 25 mm 的方块 T1b
  • 把 T2 任务卡改为以方块为目标 在建议了新的摆放方式 四种颜色 相距 12-16 cm 留出推动路线 之后 又按新场景重写
  • 把推动终点后移 18 mm 即 T2 #2 实测的差距
  • 在手部模型中确认手指朝下的捏取够不到方块后 写了 T3a 任务卡
  • 没有接受 6 mm 的读数 而是用机械臂日志 手和腕部画面测出 T3a #4 的实际抬起高度
  • P14 改变抓取的规划方式后 写了 T3b 任务卡
  • T3b #3 之后撤回了自己对 T3b #2 的诊断
  • 在写 P17 之前 用 D405 深度图测量了操作员说的 高了约 3 mm 实测 8 mm
共享代码提议 P1-P17
P1
修改
触碰技能的下降底线改为参数 默认 10 mm
来源
T1a #1
P2
修改
接触高度按手指表面计算 至少高出桌面 5 mm
来源
T1a #1
P3
修改
在限位查询前后清除控制器的误报警告
来源
T1a #1
P4
修改
记录每次尝试运行的全部代码文件的哈希
来源
T1a #1
P5
修改
每次尝试都从同一个放松姿态开始
来源
T0 #3
P6
修改
接触瞬间拍一帧腕部画面 作为验证证据
来源
T1a #2
P7
修改
推动技能 指尖并排 掌心朝推动方向 偏转 0.12 rad 即停 推动前先在 D455 彩色画面中检查路线
来源
T2
P8
修改
推动走完全程且未触发停止即算完成 手指接触照常记录 但不再要求
来源
T2 #2
P9
修改
在任何动作之前停在规划阶段的尝试不消耗预算
来源
T2 #4
P10
修改
第一次抓取 侧面捏取 接触后再收紧 0.1 rad 抬高 30 mm 放回 新增 lifted 验证器
来源
T2 #5
P11
修改
只有一侧失去接触才算打滑 两侧都接触时的关节变化记为转动
来源
T3a #2
P12
修改
lifted 改由手和机械臂判断 两侧仍夹住 接触早于空手合拢的位置 法兰升高 ≥ 20 mm D455 的点只有在物体起点 30 mm 以内才计入
来源
T3a #4
P13
修改
没抓到时用 D455 重新定位再抓 最多两次 只算一次预算 捏合点用半高估计 收拢前拍一帧腕部画面
来源
T3a #5
P14
修改
手收拢时手臂在水平方向跟随捏合中心 按实测的 t = 0.835 规划接触 接触区间内每一步收拢都预先规划抬起路径
来源
T3a #6
P15
修改
捏合方向由方块朝向确定 面法向 ±10° 以内 从 t = 0.6 开始跟随中心
来源
T3b #2
P16
修改
食指 中指 DIP 关节接触后收紧 0.15 rad 其余收拢关节 0.1 rad 使夹持中的指尖始终满足手部服务的接触规则
来源
T3b #3
P17
修改
捏合高度从 19 mm 降到 14 mm 收拢前 D405 在深度图中测量指尖离桌面的高度 手臂竖直移回规划位置
来源
T3b #4

规则复验

P11 与 P12 各自根据一次尝试提出 经操作员批准后 在全部已录 T3 抓取上离线回放 并与视频和相机画面对照

打滑判断

旧规则
0 / 5
P11
5 / 5

抬起判断

旧规则
6 / 8
P12
8 / 8
P11 打滑判断逐次结果
试抬关节变化接触 拇指 / 手指旧规则P11方块是否夹住
T3a #20.064是 / 是打滑夹住是 视频
T3a #40.054是 / 是打滑夹住是 视频
T3a #50.001是 / 否夹住打滑否 视频
T3b #40.063是 / 是打滑夹住是 操作员
T3b #60.043是 / 是打滑夹住是 视频
正确——0 / 55 / 5—
P12 抬起判断逐次结果
到达最高处D455 点 偏移 / 升高法兰升高P12 之前P12方块是否抬起
T3a #496 / 6 mm30.0 mm失败通过是
T3b #494 / −4 mm30.0 mm失败失败否 滑出
T3b #6171 / 4 mm30.1 mm失败通过是
另 5 次未到最高处失败 ×5失败 ×5否
全部 8 次 T3 中判对6 / 88 / 8—

机器人运行时间

动作 min
24.3
规划 min
7.9
拍照 批准与恢复 min
13.4

操作员动作批准的中位时间为 4.9 s 共计 21 次 不包含复位物体和观看视频 智能体在尝试之间阅读记录 编写评估 诊断与提议的时间不占用机器人 因此未计入

各项耗时
训练数据
说明
无 没有示范 没有遥操作 没有微调 LocateAnything-3B 和 SAM 直接使用发布版本 机械臂和手使用各自的运动学模型和 MuJoCo
时间
—
定位一个物体
说明
D455 画面 → LocateAnything 框 中位 3.55 s n = 55 → SAM 掩码 中位 0.40 s n = 55 → 深度点 含拍照在内的一次完整重新定位 中位 8.8 s n = 5
时间
4.0 s
尝试前的检查
说明
38 个离线测试 当前测试集 1.1 s 及步骤检查
时间
1.1 s
规划
说明
IK 限位查询和 MuJoCo 重放 不动作 中位数 触碰 1.8 s n = 3 推动 10.4 s n = 4 捏取 35 s n = 12 P14-P15 之后最长 62 s 需规划 35 个收拢位形 10 条抬起路径 最多 20 个方向
时间
1.8-62 s
动作技能
说明
中位数 放松 4.5 s n = 15 保持手势 5.2 s n = 6 触碰 63 s n = 3 推动 75 s n = 2 捏取并抬起 90 s n = 10 放回 41 s n = 2 每个动作都由一连串受监控的小步组成
时间
4.5-90 s
操作员批准
说明
从一个技能结束到下一个动作技能开始的时间 包括阅读并回答提示 中位 4.9 s n = 21 未计入 没抓到后把方块放回 看视频
时间
4.9 s
全部尝试
说明
从第一个技能开始到尝试结束 对实际运行的 16 次和停在规划阶段的 2 次求和 动作 24.3 分钟 规划 7.9 分钟 拍照 提示与恢复 13.4 分钟
时间
45.6 min

后续研究

多步任务

过滤器已经定义了放进容器 T4 和任务序列 T5 抓取 中心跟随收拢和抬起判断都可以直接沿用

更长的自主运行

手已经自己放回过方块 每次尝试都自复位后 循环就能一次接一次地运行 操作员只需批准提议

从数据到策略

每次尝试都连同记录 标签和可用片段一起保存 下一步 用它们训练模仿学习和强化学习策略

更多物体与场景

智能体已经为带盖的碗和其他积木写好任务卡 低级别验证通过后即可开放

更丰富的接触感知

加入关节刚度控制或触觉传感 智能体的诊断能读到更多信息 尤其是轻物体

其他手臂与灵巧手

循环只通过 zed-harness 技能和驱动与机器人交互 同一个智能体 过滤器和验证器可以迁移到左侧工位或其他灵巧手

引用

@misc{selfdatarise2026,
 title = {Agentic Robot Learning with Self-Evolving Data},
 author = {Zhang, Zaide},
 year = {2026}
}