深度⏱ ~3 min
里程碑
⭐ 为何重要

首个仅用四台 RGB-D 相机(Intel RealSense D415)从多视角观察裸手(无需穿戴手套/标记)即可完整驱动 23-DoF 臂-灵巧手系统的 vision-based teleop 工作。它开创了 vision-based 灵巧遥操范式,是 AnyTeleop/TeleVision/DexCap 一脉的直系方法祖师,把灵巧手遥操从依赖穿戴式动捕推向纯视觉。

机器人KUKA LBR iiwa7(7-DoF 臂)+ Wonik Allegro Hand(16-DoF 灵巧手)= 23-DoA 系统
数据集自采灵巧操作演示
上真机
实时
输入模态vision

论文:Handa, Van Wyk, Yang, Liang, Chao, Wan, Birchfield, Ratliff, Fox. DexPilot: Bare-Hand Teleoperation of an Articulated Robotic Arm and Dexterous Hand. ICRA 2020(arXiv 投稿 2019-10). arXiv:1910.03135. 🌐 · 真机平台:KUKA iiwa7 + Wonik Allegro Hand(23-DoA 系统)。

一句话直觉

不用戴手套也不用穿外骨骼。

让四台相机看你的裸手,机械手就跟着动。📎

DexPilot 之于灵巧手,就像同声传译之于外语讲演。

你的话原样不变,由翻译实时改写成对方能听懂的语言。

翻译不盯音节,只盯语义要点。

操作员终于可以「徒手教」一只灵巧手做事。

是什么·为什么

要解决的问题:让操作员用裸手就能远程控制一只灵巧手机械臂。📎

老办法的痛点:DexPilot 之前,灵巧手遥操作靠外骨骼或 IMU 手套。📎

这俩东西又贵又脆。

后果很严重:示教数据采集成本极高、规模极小。

模仿学习几乎无法规模化。

操作员门槛也高,非专家根本用不来。

DexPilot 的转身:扔掉手套和外骨骼。

在桌面周围架四台深度相机,盯操作员的裸手。📎

问题是:人手有 20 个关节,Allegro Hand 只有 16 个。

关节轴位置和方向也都大不一样。

所以不能逐关节一对一映射——那样指尖够不到、抓握完全变形。

方法核心(大白话):整套系统做三件事,像流水线一样串起来。

  • 第一件·看清你的手:四台深度相机把你的手拍成点云。

系统先用神经网络从点云里找出 5 根手指的 23 个关键点。

再用一个超薄小网络把关键点翻译成 20 个人手关节角。

这一步叫手部追踪

  • 第二件·翻译给机械手:这一步叫 retargeting(重定向)。

它不是按关节角硬塞,而是定一组「任务向量」。

比如「拇指尖到食指尖的距离」「两根主指之间的方向」。

算出一个让机械手这组向量尽量贴近你人手的关节角。

关键 trick:捏合时把拇指-食指强行贴近 0.1 毫米(保证贴合物体)。

同时把两根主指推开到至少 30 毫米(保证指头不打架)。📎

  • 第三件·让机械臂不撞不抖:腕部位置走 RMP,一种实时轨迹生成方法。

它自带避障。

机械臂不会撞桌、撞你、撞自己。

臂用 200 Hz 力矩阻抗控制,手用 30 Hz 关节角控制。📎

这套三段式是 DexPilot 真正的遗产

后续视觉 / VR 灵巧遥操都沿用这套模板。📎

模板就是「感知 → retargeting → 跟踪」。

后继者有 AnyTeleop、DexCap、Bunny-VisionPro 等。

为什么「retargeting 比控制机械臂更难」:控制机械臂是已经成熟的事。

真正卡脖子的是「人手 → 机械手」的映射。

人手和机械手骨架差太多,按关节角硬映射必然失败。

retargeting 用任务空间向量绕开关节级映射。

这是这篇论文最精细的工程。

一句话类比:DexPilot 之于灵巧手遥操,就像同声传译之于外语讲演。

你的话原样不变,由翻译实时改写成对方能听懂的语言。

这位翻译不看具体音节(关节角),只盯语义要点(任务向量)。

怎么做

三线程架构(Sec.IV + Fig.4):系统跑在三台电脑上,三个线程各管一摊,端到端延迟约 1 秒。📎

  • Learning Thread:4 视 RGB-D 融合点云 → 两阶段 PointNet++。

输出 23 个 3D 关键点 + 20 维人手关节角(JointNet)。

  • Tracking Thread:上一线程预测作先验喂给 DART。

DART 是模型-based 手部追踪器,做精细化配准。

DART 输出人手关节角进 kinematic retargeting,30 Hz SLSQP 解。

输出 Allegro 关节角。

  • Control Thread:腕部姿态走 RMP → KUKA 力矩级阻抗控制(200 Hz)。

Allegro 关节角直接下发。

关键设计·单一 cost function + 任务向量集(Sec.VII.A):不按抓握类型分多套优化。

只写一个 cost,关键在任务向量设计。📎

cost 由两项组成:距离项 + 正则项。

距离项让机械手的一组「任务向量」贴近重塑后的人手向量。

任务向量是「指尖到指尖」「指根到指尖」这类相对位置 / 方向。

正则项让 Allegro 偏向 fully open 姿态,避免冗余解。

(公式精确形式见下方深度部分。)

关键 trick·precision grasp 时的两套向量(Tab.I)

  • S_1 向量:从主指(食 / 中 / 无名)指向拇指。

捏合时权重 s 跳到 200、目标距离 f 压到 η_1 = 0.1 mm——把拇指-主指强行贴近,确保捏住物体。

  • S_2 向量:两根同时被投向拇指的主指之间的向量。

捏合时权重 s 跳到 400、目标距离 f 设为 η_2 = 30 mm——确保两根主指不互撞。

直觉:d_i 大时正常跟踪;d_i 小时 S_1 拉近拇指-主指、S_2 推开主指-主指。

这套向量在局部坐标系里表达,同时编码距离 + 方向 + 坐标系相对朝向,所以指尖朝向也隐含约束。

这才是 retargeting 真正的「秘诀」📎

手部追踪的两阶段自标定(Sec.VI + Fig.6):先用彩色手套做 phase 1 自标定。

HSV 阈值生成 mask,ResNet-50 回归 2D blob 中心,三角化得 3D 标注。

然后在裸手点云上跑两阶段 PointNet++。

Stage 1 在 8192 点上回归 23 关键点。

Stage 2 用 Stage 1 的 pose 重采样手部点(更密),refine 关键点。

最终验证集关键点误差 9.7 mm、每关节角误差 1.33°。📎

硬件配置(Sec.III + Fig.3):KUKA iiwa7(7-DoF 臂)+ Wonik Allegro Hand(16-DoF,4 指)。

Allegro 指尖装 4 颗 BioTac 触觉传感器,共 92 路触觉信号。

内表面贴 3M TB641 grip tape。

4 台 Intel RealSense D415 时间同步向下指。

teleop 工作体积 80 × 55 × 38 cm。📎

常见误区(先抛一个,完整版见末尾):「按人手关节角一对一映射就行」——错。

人手 20 自由度、Allegro 16 自由度、关节轴几何完全不同。

一对一映射指尖根本够不到。

正确做法是 retargeting 到任务空间向量,让指尖的相对位置 / 方向匹配,关节角让优化器自己解。📎

深度

DART 是什么,为什么要 NN 先验(Sec.V):DART [27] 是一个 model-based 手部追踪器。

它把人手铰接模型(来自 [28] 的 20 revolute joints CAD)配准到输入点云。

靠非线性优化 + 上一帧初始化。

问题:init 不在收敛盆里就灾难性失败(每几分钟一次),local minima 把手模型配到错位。

所以靠 PointNet++ 给 pose + joint 先验,把 init 拉回正确收敛盆。📎

两阶段 PointNet++ 的必要性(Sec.VI):Stage 1 在 8192 采样点上 voting-based regression 预测 23 关键点 + 手部分割。

但 Stage 1 在指节上点太稀,关键点质量差。

Stage 2 用 Stage 1 的 pose + segmentation 重采样手部点(更密),refine 关键点,并加手部 pose 随机化提升鲁棒性。

JointNet 是 2 层 FC,把 23 个关键点 3D 位置映射到 20 维人手关节角,作 DART 的 joint priors。📎

retargeting 求解细节:NLopt 的 SLSQP(Sequential Least-Squares QP),实时。

每解 init 自上一解(warm-start)。

forward kinematics 用 Orocos KDL。

输出加一阶 low-pass filter 去高频噪。

正则项系数 $\gamma = 2.5\times10^{-3}$。

额外约束:Allegro 主指的 distal joint = medial joint(减搜索空间 + 模仿人手)。📎

RMP + 阻抗控制(Sec.VII.B):Riemannian Motion Policies [39][40] 实时生成多优先级 Cartesian 轨迹 + 避障(防臂-掌撞桌 / 撞操作员)。

臂用 torque-level impedance controller @ 200 Hz;手用 retargeted Allegro 角度 @ 30 Hz。

手眼标定靠初始人手视角 + 假设机器人初始姿态求 robot→camera 变换;要求 pilot 起手 pose(fully open hand、掌平行桌面、指向前)。📎

实验:15 任务 × 2 pilot × 5 trial(Sec.VIII + Tab.II + Fig.14/15):任务覆盖 precision/power grasp、prehensile / non-prehensile、finger gaiting、compound manipulation。

包括 Pick&Place、Block Stacking(三 size)、Pouring Beads、Opening Jar、Brick Gaiting(in-hand 旋转 180°)、Card Sliding、Wallet、Box Flip、Container、Cup Insertion、Tea Drawer 等。📎

协议:2 pilots、每 task warm-up 3–5 次后跑 5 consecutive trial,报 mean completion time + success rate。

系统能可靠完成绝大多数任务。

long-horizon 多阶段任务(Container、Wallet、Tea Drawer)completion time 显著长。

小 cube 释放难(projection scheme 让 release 不可预测)。📎

NIST peg-in-hole(Fig.17):16×10×49.5 mm peg + 0.1 mm 间隙,成功率约 10%——是系统精度极限。📎

关键定性证据:Brick Gaiting 任务(Fig.16)中,中指 40 秒内接触 brick 7 次(BioTac 信号可见 7 个 peak)实现 180° in-hand rotation。

这证明 teleop 能产出复杂、long-horizon、含离散接触事件的感知运动数据,可作 play data 训自主策略📎

局限

  1. 专机专手:retargeting 的任务向量是手写针对 Allegro Hand 的。

换一只手就得重做整个向量表 + cost——被 AnyTeleop [Qin 2023, arXiv:2307.04577] 的通用 dex-retargeting 取代。🌐

  1. projection scheme 干扰小物体 release(Fig.18):精度抓握时把指尖强行贴合,导致 release 不可预测、小物体易丢;可手动关但治标不治本。📎
  2. 无触觉反馈(单向):人手姿态映射到机器人,但机器人接触力不回传——精细 / 易碎物体操作受限。

后来 DOGlove [2502.07730] 等 bilateral teleop 要补的洞。🌐

  1. 裸手追踪鲁棒性:依赖 DART + 早期 RGB-D 手部追踪,遮挡、快速运动下易丢失(分钟级失败)。

后续 Apple Vision Pro 内置手部追踪才把鲁棒性拉到可用。📎

  1. latency ~1 秒:三线程链路 + 优化求解导致端到端延迟大。📎
  2. NIST peg-in-hole ~10%:高精度任务超当前能力。📎

研究者视角

图谱定位:DexPilot 是 T11 灵巧操作与 T07 人形遥操栈的共同先驱节点📎

在它之前,灵巧手遥操被外骨骼 / 手套绑架——示教数据无法规模化、IL 没法起飞。

它把门槛从「整套动捕 + 手套」降到「四台相机 + 裸手」,是 2023 年起灵巧 IL 复兴的前提之一。

演化谱系

  • 建立在:DART [27]、PointNet++ [31]、voting-based keypoint regression [11]、RMP [39][40]、SLSQP/NLopt、Orocos KDL、Cutkosky/Feix grasp taxonomy。📎
  • 直接引出
  • AnyTeleop [Qin 2023, arXiv:2307.04577]:把 retargeting 抽象成「人手关键点 + 机械手 URDF → 自动优化」的通用中间件,取代 DexPilot 的专机专手 retargeting。🌐
  • DexCap [Wang 2023]:便携化数据采集,把「固定 4 相机 + 桌面」改成可穿戴的 cap。[未确认]
  • Bunny-VisionPro / Open-TeleVision [2024]:用 Apple Vision Pro 内置手部追踪替代 DART+PointNet++ 这套脆弱的感知前端,把鲁棒性拉到可用。🌐
  • 互补节点:在 T11 里与 OpenAI Hand [2018] 互补——OpenAI 证明了灵巧手能学,DexPilot 提供了教灵巧手的「教师接口」。📎

副产品·三段式模板:感知 → retargeting → 跟踪这套模板被后续整条视觉 / VR 灵巧 teleop 线作为默认接口层。

论文里写的 92 路触觉 + 23 路关节位 / 速 + 23 路 torque 同步记录,也是灵巧手 IL 数据的事实字段模板。📎

Open problems

  1. 触觉反馈接口:DexPilot 是单向——视觉进、控制出,机器人的接触力不回传。

一个能闭环力 / 触觉反馈的视觉 teleop 标准尚未出现。[未确认]

  1. 通用 retargeting 中间件:DexPilot 的专机专手 retargeting 已被 AnyTeleop 的 dex-retargeting 取代,但跨手型、跨物体尺寸的 zero-shot retargeting 仍未完全解决。[未确认]
  2. 延迟的下界:~1 秒延迟对精细任务(peg-in-hole)致命。

能否用端到端网络或神经加速把延迟压到 100 ms 级,仍开放。[未确认]

常见误区

「按人手关节角一对一映射就行」 —— 错。

人手 20 自由度、Allegro 16 自由度,关节轴位置 / 方向都大不同。

一对一映射指尖够不到、抓握变形。

retargeting 到任务空间向量(指尖相对位置 / 方向),让优化器解出对应的机械手关节角。📎

「DexPilot 用了 Shadow Hand」 —— 错。

PDF Sec.III 明确用的是 Wonik Allegro Hand(16 DoF,4 指),指尖加 4 颗 BioTac 触觉。

Shadow Hand 是另一只(更贵、24+ DoF),是 OpenAI Hand 用的那只。📎

「DexPilot 有 grasp-type classification + teacher-student 蒸馏 —— 错。

早期社区综述(包括部分笔记)这么讲,但 PDF 实际机制是单一 cost function + 任务向量集 + 实时 SLSQP,没有按抓握类型分多个优化,也没有 teacher-student 蒸馏。📎

「四相机只是冗余」 —— 不完全。

多视是为了克服单视遮挡——捏合时指头互相挡,单视根本看不到被挡的指尖。

多视三角化 + 融合点云是裸手追踪能稳的关键。📎

「DexPilot 解决了触觉问题」 —— 错。

Allegro 装了 BioTac 触觉,但这些信号只记录、不回传给操作员。

操作员完全靠视觉判断抓握状态——这是后续 bilateral teleop(DOGlove 等)要补的洞。📎

检查点

Q1

DexPilot 用四台相机看操作员的裸手。为什么不让人戴手套或穿外骨骼?老办法(手套 / 外骨骼)卡在什么地方,DexPilot 的转身换来的是什么?

💡 参考答案

  • 老办法(外骨骼 / IMU 手套)又贵又脆:示教数据采集成本极高、规模极小,模仿学习几乎无法规模化;操作员门槛高,非专家用不来。
  • DexPilot 的转身:扔掉手套和外骨骼,用四台深度相机盯裸手,把遥操门槛从「整套动捕 + 手套」降到「四台相机 + 裸手」。
  • 换来的核心:让灵巧手 IL 第一次有了相对低成本的批量数据采集通道(92 路触觉 + 23 路关节 + 相机同步记录)。
Q2

人手有 20 个关节,Allegro Hand 只有 16 个,关节轴几何也大不一样。DexPilot 为什么不能直接按人手关节角一对一映射给机械手?它用什么 trick 绕开了这个问题?

💡 参考答案

  • 为什么不能一对一:人手 20 自由度、Allegro 16 自由度,关节轴位置 / 方向都不同——按关节角硬塞指尖够不到、抓握完全变形。
  • 绕开的 trick:retargeting 到任务空间向量(指尖到指尖、指根到指尖这类相对位置 / 方向),不是关节角。
  • 优化器在「让机械手这组任务向量尽量贴近人手」的目标下,自己解出对应的机械手关节角。
Q3

用「同声传译」或你自己举的类比,向一个没学过机器人的朋友解释:DexPilot 是怎么让机械手「跟着你的手」动的?翻译改写的是什么、不改写什么?

💡 参考答案

  • 同声传译类比:操作员的手势是「原话」,retargeting 是「翻译」,机械手关节角是「译出的外语」。
  • 翻译改写的是表达层(关节角 / 关节级映射),不改写的是语义要点(任务向量:指尖相对位置 / 方向)。
  • 重要补充:翻译不是逐音节对译(不是按关节角一对一),而是抓语义要点(任务向量匹配)——所以人手 20 关节、机械手 16 关节也能映射。
Q4

retargeting 在捏合(precision grasp)时对「拇指-食指向量」和「食指-中指向量」做了相反方向的处理(一个拉近、一个推开)。为什么需要这种相反处理?

💡 参考答案

  • 拇指-食指拉近(到 0.1 mm):捏合时要把拇指和主指强行贴近,确保「夹住」物体——这是「贴合」目标。
  • 食指-中指推开(到至少 30 mm):同时两根主指之间要保持最小间距,避免指头互相穿越 / 撞在一起。
  • 为什么相反:捏合物体既需要「夹紧的两指」又需要「不互撞的多指」——两个目标方向相反,必须分两套向量处理。
Q5

Allegro Hand 明明装了 BioTac 触觉传感器,为什么操作员在抓东西时还是感受不到「机器人摸到了什么」?

💡 参考答案

  • BioTac 触觉信号只记录、不回传——DexPilot 是「视觉进、控制出」的单向 teleop。
  • 操作员完全靠相机视觉判断抓握状态,没有力 / 触觉的反馈通道。
  • 后果:精细 / 易碎物体操作受限;这是后续 bilateral teleop(如 DOGlove)要补的洞。

FAQ

Q1:DexPilot 开源了吗?

没官方开源。

论文 + 项目页(sites.google.com/view/dex-pilot)只给视频和介绍。📎

复现路径建议直接从 AnyTeleop 的 dexsuite/dex-retargeting 入手——它是 DexPilot retargeting 思路的通用化开源实现,配合任意手部追踪(MediaPipe / SMPLer-X / Apple Vision Pro)即可搭一套现代版 DexPilot。

Q2:为什么用四台相机,一台不行吗?

不行。

裸手捏合时指头互相遮挡,单视看不到被挡的指尖。

多视三角化 + 融合点云是裸手追踪能稳的前提。📎

后续 Apple Vision Pro 内置的多视 + 头显级硬件才把裸手追踪做到「四台外置相机」之外。

Q3:retargeting 是 DexPilot 独有的吗?

不独有。

retargeting 这个思路本身来自图形学的人-角色动画映射。

DexPilot 的贡献是把它做成实时、专机专手、并配 task-space vector 的精细工程——后来 AnyTeleop 把它通用化为「人手关键点 + 机械手 URDF → 自动优化」的中间件,让 retargeting 成为灵巧 teleop 的 de facto 接口层。🌐

Q4:DexPilot 能跟 OpenAI Hand 比吗?

不是同一类工作。

OpenAI Hand 是纯自主 RL 灵巧操作(让策略自己学转方块),DexPilot 是遥操作框架(让人实时控制机械手)。

两者在 T11 里互补:OpenAI 证明灵巧手能学,DexPilot 提供了教灵巧手的「教师接口」。📎

Q5:为什么我的 DexPilot 复现抓不稳东西?

先查三处:(1) retargeting 的 task-space vector 集是否覆盖了 S_1(拇指-主指)和 S_2(主指-主指);(2) precision grasp 时两套目标距离 η_1 = 0.1 mm / η_2 = 30 mm 是否设对;(3) Allegro 内表面是否贴了 grip tape——没贴的话指尖太滑。📎