P-DexPilot-2019:DexPilot 拉开视觉 teleop 灵巧手序幕
作者 / 机构:Ankur Handa, Karl Van Wyk (co-first), Wei Yang, Jacky Liang, Yu-Wei Chao, Qian Wan, Stan Birchfield, Nathan Ratliff, Dieter Fox / NVIDIA Seattle Robotics Lab(Liang 在 CMU)
发表:ICRA 2020(arXiv 投稿 2019-10)
arxiv:1910.03135 · 代码:无官方开源 · 项目页:sites.google.com/view/dex-pilot
在线索中的位置:属于 T11(灵巧操作)/ T07(人形 teleop),是「视觉 teleop 灵巧手」的转折性先驱。
一句话定位:第一个用四相机 RGB-D 观察 bare 人手即可完整控制 23-DoA(KUKA iiwa7 7-DoF 臂 + Wonik Allegro 16-DoF 手)系统、无需任何穿戴设备的 teleop 框架,确立了「感知人手 → retargeting → 跟踪机械手」的三段式模板。
易混点澄清
- 机械手是 Allegro Hand(16 DoF),不是 Shadow Hand。Sec.III:KUKA LBR iiwa7 R800 + Wonik Robotics Allegro hand(4 指 16 DoF),指尖 4 个 Syntouch BioTac 触觉传感器,内表面 3M TB641 grip tape。总系统 23 DoA = 7 (arm) + 16 (hand),另有 92 路触觉信号 + 23 路关节位/速 + 23 路 torque 可记录。
- 无 grasp-type classification / 无离线 teacher / 无端到端 CNN student。实际机制:DART 模型跟踪 + 两阶段 PointNet++ 给 DART 提供 pose/joint priors + 单一 cost function 的 task-space-vector retargeting(实时 SLSQP,非按 grasp-type 分多套优化)+ RMP + torque-level impedance 控制臂。
动机
在 DexPilot 之前,灵巧手遥操作只能依赖昂贵的外骨骼或穿戴式 IMU 手套,导致两个后果:(1) 示教数据采集成本极高、规模极小,IL 几乎无法规模化;(2) 操作员门槛高,非专家无法用。NVIDIA 团队想解决的是「让灵巧手像鼠标一样随手可用」。核心难点不是「控制机械臂」本身,而是「人手到机器人手的映射」——人手有 20 revolute joints(4 指 × 4 + thumb 结构),Allegro Hand 只有 16 DoF,关节轴位置/方向都大不同;按关节角一对一映射必然失败:指尖够不到、接触点偏移、抓握完全变形。
方法核心:三线程架构(Sec.IV + Fig.4)
以下细节来自 papers_pdf/DexPilot_1910.03135.pdf Sec.III–VIII + Fig.4/6/8/9 + Tab.II。整系统在 3 台电脑跑 3 线程,端到端 latency 约 1 秒。
[Learning Thread] [Tracking Thread] [Control Thread]
4× RGB-D → fused hand pose prior + joint hand pose +
point cloud → priors → DART → human Allegro joint
PointNet++ (2 joint angles → angles →
stage) → hand Kinematic Retargeting → RMP → KUKA +
pose + joint Allegro joint angles Allegro joint
priors (JointNet) (SLSQP, 30 Hz) commands (impedance
200 Hz)
1. 硬件(Sec.III + Fig.3)
- 机器人:KUKA LBR iiwa7 R800(7-DoF 臂)+ Wonik Allegro Hand(16-DoF,4 指)。
- Allegro 改装:4 指尖 BioTac 触觉传感器(共 92 路触觉信号),内表面 3M TB641 grip tape 增摩擦。
- 4 台 Intel RealSense D415 RGB-D 相机,时间同步、向下指向桌面,理想深度 < 1m(否则深度质量退化)。
- teleop 工作体积:80cm × 55cm × 38cm。人手 arena(黑布桌面)紧挨机器人,保证 line-of-sight + 视觉邻近(teleop 全靠人视觉)。
2. DART:模型-based 手部跟踪(Sec.V)
DART [27] 把人手 articulated model(来自 [28],CAD 拆成 5 指的 proximal/medial/distal mesh + XML kinematic)配准到输入点云。人手模型 20 revolute joints(每指 1 abduction + 3 flexion)。DART 靠非线性优化 + 上一帧初始化;但若 init 不在 basin of convergence 会灾难性失败(每几分钟一次),local minima 让手模型配到错位。所以要靠下面的 NN 给 prior。
3. 两阶段 PointNet++ 给 DART 打 priors(Sec.VI + Fig.6,关键)
两阶段数据采集(用 colour glove 自标定):
- Phase 1(colour glove):黑底 + 彩色 blob 手套(指尖 + 掌背 3 个)。ResNet-50 + spatial-softmax("GloveNet")回归 2D blob 中心 → 多视三角化得 3D hand pose。HSV 阈值(OpenCV)自动生成 segmentation 标注。DART 在 segmented 手部点上跑(防止手模型滑到手臂点)→ 生成 raw 点云的标注。
- Phase 2(bare hand,目标态):直接吃 4 视 depth map 反投影的 fused point cloud。两阶段 PointNet++:
- Stage 1:去桌面(平面拟合)→ PointNet++ voting-based regression([11] 风格)预测 23 个 3D keypoints(5 指 × 4 joint + 掌背 3)+ 手部分割。输入下采样到 8192 点。
- Stage 2:用 Stage 1 的 pose + segmentation 重采样手部点(更密),refine 23 keypoints(Stage 1 在指节上点太稀,keypoint 质量差)。Stage 2 加手部 pose 随机化提升鲁棒性。
- JointNet:2 层 FC,把 23 个 keypoint 3D 位置映射到 20 维 finger joint angles,作 DART 的 joint priors。
训练数据:~100K point cloud,每批 30–45min × 7–8 小时(用 glove + DART 自标)。TitanXp 单卡训 15 小时。精度:验证集 7000 图,平均 keypoint 误差 9.7mm,per-joint 误差 1.33°。
4. Kinematic Retargeting:单一 cost function + precision-grasp 向量集(Sec.VII.A,论文最精细的工程)
不按 grasp-type 分多套优化——用单一 cost function,关键在 task-space vector 设计。设 $q_h, q_a$ 分别为人手/Allegro 关节角,$r_i \in \mathbb{R}^3$ 为从一个坐标系原点到另一个的向量(local frame 表达,Fig.8),$d_i = \|r_i(q_h)\|$:
$$C(q_h, q_a) = \tfrac{1}{2}\sum_{i=0}^{N} s(d_i)\,\|r_i(q_a) - f(d_i)\hat r_i(q_h)\|^2 + \gamma\|q_a\|^2$$
switching weight $s(d_i)$ 和 distancing function $f(d_i)$ 联合实现「precision grasp 时指尖贴合但不互撞」:
$$s(d_i) = \begin{cases} 1, & d_i > \epsilon \\ 200, & d_i \le \epsilon \land r_i(q_h) \in S_1 \\ 400, & d_i \le \epsilon \land r_i(q_h) \in S_2 \end{cases}$$
$$f(d_i) = \begin{cases} \beta d_i, & d_i > \epsilon \quad(\beta = 1.6) \\ \eta_1, & d_i \le \epsilon \land r_i(q_h) \in S_1 \quad(\eta_1 = 10^{-4}\,\text{m,贴紧拇指-主指}) \\ \eta_2, & d_i \le \epsilon \land r_i(q_h) \in S_2 \quad(\eta_2 = 3\times10^{-2}\,\text{m,主指间最小间距}) \end{cases}$$
向量集(Tab.I):
- $S_1$:从 primary finger(index/middle/ring)指向 thumb 的向量。
- $S_2$:两个 primary finger 间的向量(当两者都同时被投影到 thumb 时)。
直觉:$d_i > \epsilon$ 时正常跟踪;$d_i$ 小(pinch 接触)时,$S_1$ 向量被强拉近到 $\eta_1=0.1$mm(拇指-主指紧贴),$S_2$ 向量被推远到 $\eta_2=30$mm(主指互不撞)。这套向量在 local frame 表达,同时编码距离 + 方向 + 坐标系相对朝向,所以指尖 orientation 也隐含约束。
- $\gamma = 2.5\times10^{-3}$:regularize Allegro 角度到 0(fully open),减少冗余解、防「手指嵌入掌心」。
- 额外约束:Allegro primary finger 的 distal joint = medial joint(减少 search space + 模仿人手)。
- 求解:NLopt 的 SLSQP(Sequential Least-Squares QP),实时;每解 init 自上一解;forward kinematics 用 Orocos KDL;输出加一阶 low-pass filter 去高频噪。
5. Riemannian Motion Policies + torque-level impedance(Sec.VII.B)
- RMP([39][40]):实时生成多优先级 Cartesian 轨迹 + 避障(防 arm-palm 撞桌/操作员),输出 arm joint 轨迹。
- arm:torque-level impedance controller @ 200 Hz。
- hand:retargeted Allegro 角度 @ 30 Hz。
- 手眼标定:用初始人手视角 + 假设机器人初始姿态求 robot→camera 变换;要求 pilot 初始 pose(fully open hand,掌平行桌面、指向前),机器人 mimic 此 pose 保证「机器人方向 = pilot 方向」。
实验:15 任务 × 2 pilot × 5 trial(Sec.VIII + Tab.II + Fig.14/15)
任务覆盖 precision/power grasp、prehensile/non-prehensile、finger gaiting、compound manipulation(15 个):
- Pick&Place(foam brick / Pringles / Spam)、Block Stacking(L/M/S 三种 size,precision grasp/release)、Pouring Beads、Opening Jar、Brick Gaiting(in-hand rotate 180°)、Card Sliding、Wallet(取纸币)、Box Flip(90°)、Container(开塑料盒取纸盒)、Cup Insertion(套杯)、Tea Drawer(开抽屉取茶包关抽屉)。
- 协议:2 pilots,每 task warm-up 3–5 次后跑 5 consecutive trial(避免 cherry-pick),报 mean completion time + success rate(Fig.14/15)。
- 结果:系统能可靠完成绝大多数任务;long-horizon multi-stage 任务(Container、Wallet、Tea Drawer)completion time 显著长;小 cube 释放难(projection scheme 让 release 不可预测)。
- NIST peg-in-hole(Fig.17):16×10×49.5mm peg + 0.1mm 间隙,成功率 ~10%(仅在初始位置近 + 特定条件),是系统精度极限。
关键定性证据:Brick Gaiting 任务中(Fig.16),中指 40s 内接触 brick 7 次(BioTac 信号可见 7 个 peak)实现 180° in-hand rotation——证明 teleop 能产生复杂、long-horizon、含离散接触事件的 sensorimotor 数据,可作 play data 训 autonomous policy。
为什么重要
它是视觉灵巧 teleop 的「原型机」。后续所有视觉/VR 灵巧 teleop 系统(AnyTeleop、DexCap、Bunny-VisionPro、Open-TeleVision)都沿用了「感知 → retargeting → 跟踪」这个三段式。更重要的是,它让灵巧手 IL 第一次有了相对低成本的批量数据采集通道(92 路触觉 + 23 路 joint + camera 同步记录)——这正是 2023 年起灵巧 IL 复兴的前提之一。在 T11 线索里,它与 OpenAI Hand 互补:OpenAI 证明了灵巧手能学,DexPilot 提供了教灵巧手的「教师接口」。
局限与被超越(Sec.X)
- 专机专手:retargeting 的 task-space vector 是手写针对 Allegro Hand 的,换一只手就得重做整个向量表 + cost——被 AnyTeleop [Qin 2023, arxiv:2307.04577] 的通用 dex-retargeting 取代,后者把 retargeting 抽象成「人手关键点 + 机械手 URDF → 自动优化」的中间件。
- projection scheme 干扰小物体 release(Fig.18):精度抓握时把指尖强行贴合,导致 release 不可预测、小物体易丢;可手动关但治标不治本——根本要靠更准的 hand tracking。
- 无触觉反馈(单向):人手姿态映射到机器人,但机器人接触力不回传,精细/易碎物体操作受限。这是后来 DOGlove [2502.07730] 等 bilateral teleop 要补的洞。
- 裸手追踪鲁棒性:依赖 DART + 早期 RGB-D 手部追踪,遮挡、快速运动下易丢失(~分钟级失败),后续 Apple Vision Pro 内置手部追踪(Bunny-VisionPro 用)才把鲁棒性拉到可用。
- latency ~1 秒:三线程链路 + 优化求解导致端到端延迟大。
- NIST peg-in-hole ~10%:高精度任务超当前能力。
复现要点
DexPilot 本体未官方开源。复现建议直接从 AnyTeleop 的 dexsuite/dex-retargeting 入手——它是 DexPilot retargeting 思路的通用化开源实现,配合任意手部追踪(MediaPipe / SMPLer-X / Apple Vision Pro)即可搭出一套现代版 DexPilot。Allegro Hand 硬件门槛中等(比 Shadow 便宜),可先用 Inspire Hand 在仿真(IsaacGym / MuJoCo)里跑通 retargeting,再考虑真机。关键超参:$\beta=1.6$、$\eta_1=10^{-4}$m、$\eta_2=3\times10^{-2}$m、$\gamma=2.5\times10^{-3}$、SLSQP + warm-start、30Hz retarget / 200Hz arm impedance。
相关
- 建立在:DART [27]、PointNet++ [31]、voting-based keypoint regression [11]、RMP [39][40]、SLSQP/NLopt、Orocos KDL。
- 引出:AnyTeleop(通用化 retargeting)、DexCap(便携化数据采集)、Bunny-VisionPro / Open-TeleVision(VR 头显版)。
- 交叉引用:T11-dexterous-manipulation.md(灵巧操作线索)、T07-humanoid-teleop-stack.md(人形 teleop 线索,转折 1 即 DexPilot)。
papers.jsonl 残留待修
papers.jsonl 中本条记录的 builds_on: ["dex-net"] 与经典 grasp planning 工作 DexNet(Mahler 等)同名易混,且 DexPilot 与 DexNet 无方法继承;建议改写为 NVIDIA 内部 retargeting 库或直接删除该字段。其余字段(author、venue=ICRA 2020、code 空、errata 已记录 Franka/Shadow 误读修正)已与 PDF 对齐。