Q1:触觉反馈就是力反馈吗?
不是。
ERM 振动马达只能告诉操作员「有没有接触」,不能传达力的方向与大小。
真正的力反馈需要更贵的硬件(MANUS / SenseGlove 等专业手套,单只 $1k+)。
Bunny-VisionPro 的 $1.2 ERM 是「接触事件反馈」,是低成本的妥协。📎
论文:Ding, Qin, Zhu, Jia, Yang, Yang, Qi, Wang. Bunny-VisionPro: Real-Time Bimanual Dexterous Teleoperation for Imitation Learning. ICRA 2025, HKU + UCSD. arXiv:2407.03162(2024). 🌐 · 真机平台:2× UFactory xArm-7 + 2× Ability Hand(每只 6 主动 DoF,含四连杆;30 指尖 FSR)。
戴上一副 Apple Vision Pro。
你的双手就能实时遥控两只机械臂加灵巧手。
还能感受到机器人摸到了什么——靠一枚 1.2 美元的振动马达。
Bunny-VisionPro 之于灵巧遥操,就像 USB-C 之于外设。
它是统一、即插即用的接口层。
前端输入和后端硬件各管各,中间这层把两边接起来。
要解决的问题:让操作员用 VR 头显实时遥控双臂 + 灵巧手。
还要补上「触觉反馈」这块被遗忘的拼图。📎
老办法的两条死胡同:📎
leader 和 follower 必须同构。
碰撞避免、奇异处理全压在操作员身上。
长时操作极易出错。
用相机 / VR 输入手势。
arm motion 计算依赖重型 GPU。
多数只设计单臂。
Glove-based(MANUS)又贵且要求特定手型。
转身:用 Apple Vision Pro 当输入前端。
它廉价、开箱即用,能追踪双手腕 + 手指。📎
但在后端做三件之前的系统没同时做好的事:
loop joint 是四连杆那种欠驱动结构。
方法核心(大白话):整套系统是三段解耦的流水线,每段独立进程。
关键 trick 处理「loop joint」。
loop joint 是四连杆那种结构——比如 Ability Hand。
4 个关节里只有 1 个主动,其余被动跟着动。
一般的优化器(SQP)对这种约束又慢又不稳。
Bunny-VisionPro 把优化变量降维。
从「全部 n 个关节」降到「只有 k 个主动关节」。
被动关节位置由主动关节算出。
梯度也通过链式法则 backprop 回去。
结果:四连杆 retargeting 提速 10 倍以上。
单 CPU 核跑到 300 Hz。📎
这个优化同时管三件事:到位(IK)、不撞自己、不卡奇异姿态。
trick:把每个机械臂 link 近似成一堆球。
球对之间算「1 / 距离」就拿到可微的碰撞代价。
CPU 上 > 60 Hz,不用 GPU。📎
先减 baseline 再 low-pass 滤波。
然后用 PWM 驱动一颗 1.2 美元的振动马达(ERM)告诉操作员「摸到了」。
整套触觉闭环成本不到 10 美元。📎
为什么这三段解耦:避免一环阻塞拖累全链路。
任何一段慢了,其它两段照常跑。
各段频率不同。
输入 30 Hz、retargeting 300 Hz。
arm motion 60 Hz、haptic 独立。
三段并行(加 Vision Pro 输入流),互不阻塞。📎
一句话类比:Bunny-VisionPro 之于灵巧遥操,类比 USB-C。
统一接口、即插即用、前后端解耦。
注意边界:它只覆盖双臂 + 手,不含下半身。
振动只告诉你「有没有接触」,不是力的大小 / 方向。
Hand Motion Retargeting(Sec.III):把「人手指 pose → 机器人手关节角」建模成在线优化。📎
loss 由两项组成:fingertip keypoint 距离项 + 时序平滑项。
距离项让 scaled 人手 keypoint 向量贴近机器人手的对应向量。
机器人手那一边的向量由 forward kinematics 算出。
α 是人手-机器人手尺寸缩放因子。
平滑项惩罚相邻帧关节变化,权重 β。
求解用 SQP(Sequential Quadratic Programming),迭代解二次近似。
关键贡献·loop joint 实时处理:四连杆结构(如 Ability Hand)的关节数 > 实际 DoF。
n 个关节里只有 k 个主动,其余 n-k 个被动。
被动关节位置是主动关节的函数。
直接在 SQP 里加 affine 约束,非线性 FK 会让求解不稳且慢。
Bunny-VisionPro reformulate 到降维空间:forward pass 用 c_j 显式算被动关节;backward pass 把被动关节的梯度 backprop 到主动关节。
优化变量从 n 降到 k,无需 SQP 处理 affine 近似。
结果:四连杆 retargeting 提速 10.2 倍,单 CPU 核跑到 300 Hz。📎
Arm Motion Control(Sec.IV):把传统 closed-form IK 重写成统一优化。📎
loss = IK 项 + 奇异项 + 碰撞项。
IK 项:位置用 L2、旋转用四元数内积转角度。
奇异项:用 manipulability index(可操作度)作可微目标。
只在最小奇异值 s_0 < s_low 时触发。
这样既保证可微性、又避免在非奇异区无谓扰动。
碰撞项:避免 GJK 在 convex mesh 上的高开销。
把每个 link 建模为 m 个球体的集合,自碰撞代价是所有球对的 1 / 距离之和。
仅对需要检查的球对(同 link 或父子 link 跳过)计算。
简化让距离函数可微、计算快。
整套 motion control 在 CPU 上 > 60 Hz,无需 GPU。
Human Haptic Feedback(Sec.V):用 Eccentric Rotating Mass(ERM)振动马达。
每个 1.2 美元,加廉价 ELEGOO UNO 板。📎
两步处理:
Step I — 触觉信号处理。
每只 Ability Hand 的 30 个指尖 FSR 有 zero-drift 问题,且被包裹材料加重。
开机时采 baseline、运行时插值减 baseline、再加 low-pass filter。
Step II — 振动马达驱动。
ERM 需恒定电压,用 PWM(pulse-width modulation)模拟连续触觉强度。
每个 ERM 串一颗 BJT,保证每路独立调、只在 pulse width 内激活、抗电路噪声。
Bimanual 协调(Appendix):机器人两手初始间距与操作员两手间距不一致。
直接 teleop 会导致机器人手飘移到与人手不同的相对位置。
设计多种 initialization mode。
机器人开始动时把 robot hands 与 operator hands 对齐。
不同任务选不同模式。📎
通信与流水线:Vision Pro 通过 Apple ARKit stream 把手 / 腕 pose 流到主控机。
三个模块各跑独立进程,避免一环阻塞拖累全链路。📎
常见误区(先抛一个,完整版见末尾):「触觉反馈就是力反馈」——错。
ERM 振动马达只能告诉操作员「有没有接触」,不能传达力的方向与大小。
精细力控任务(拧螺丝、捏鸡蛋)仍受限。
这是 Bunny-VisionPro 与 MANUS / SenseGlove 等专业力反馈手套的关键差距。
Hand Retargeting loss 精确形式(Eq.1):
$$\mathcal{L}_{hand} = \sum_{i=1}^{N}\|\alpha v_i - FK_i(q)\|^2_2 + \beta\|\Delta q\|^2_2 \quad \text{s.t.}\ q^l \le q \le q^u$$
逐项读:第一项让 scaled 人手 keypoint 向量 α v_i 与机器人手前向运动学 FK_i(q) 输出的 keypoint 向量距离最小;第二项是时序平滑;约束是关节限位。
求解用 SQP。📎
Loop joint backward pass 的精确梯度:被动关节位置 q_j = c_j(q_1, ..., q_k)。
被动关节的损失梯度通过链式法则 backprop 到主动关节:
$$grad_i = \frac{\partial \mathcal{L}}{\partial q_i} + \sum_{j=k+1}^{n}\frac{\partial c_j}{\partial q_i}\frac{\partial \mathcal{L}}{\partial q_j}$$
这样优化变量维数从 n 降到 k。📎
Arm Motion Control loss 精确形式(Eq.4–6):
$$\mathcal{L}_{arm} = \mathcal{L}_{ik} + \mathcal{L}_{sin} + \mathcal{L}_{col}$$
IK 项(Eq.5):$\mathcal{L}_{ik} = \beta_{pos}\|p_{ee} - p_{wrist}\|_2 + \beta_{rot}\cdot\arccos(2\langle q_{ee}, q_{wrist}\rangle^2 - 1)$。
位置用 L2、旋转用四元数内积转角度。
奇异项 $\mathcal{L}_{sin}$(Eq.6 左):用 manipulability index 作可微目标。
只在最小奇异值 $s_0 < s_{low}$ 时触发:
$$\mathcal{L}_{sin} = \begin{cases} \frac{1-\sqrt{\det[JJ^T]}}{\lambda}, & s_0 < s_{low} \\ 0, & \text{otherwise} \end{cases}$$
碰撞项 $\mathcal{L}_{col}$(Eq.6 右):把每个 link 建模为 m 个球体的集合,自碰撞代价是所有需要检查球对的 1/距离之和(同 link 或父子 link 跳过):
$$\mathcal{L}_{col} = \sum_{i=1}^{m}\sum_{j=1}^{m}\frac{\mathbb{1}(e_i, e_j)}{dist(e_i, e_j) + \epsilon}$$
简化让距离函数可微、计算快。📎
Profiling(Table 1):loop-joint retargeting 在 i7-12700KF 单核 300 Hz;motion control(含碰撞 + 奇异)> 60 Hz;haptic PWM 独立进程。📎
Telekinesis benchmark(Table 2,10 个单臂任务):与 Teleskinesis [Qin 2021] 与 AnyTeleop [Qin 2023] 对比,9/10 任务匹配或超越。
scissor pickup 略低——Ability Hand DoF 受限,难以插入剪刀环。📎
自定义双手任务(Fig.1):3 个短时(grasp toy / clean pan / uncover-and-pour)+ 3 个长时(wipe glass / sweep floor / prepare coffee)。
对比 AnyTeleop+(集成 Vision Pro 手部追踪、相同硬件):📎
注:teleop 对比实验未启用触觉反馈(demo 采集早于触觉模块完成);触觉在独立 user study(untrained 操作员)评估,显示提升操作精度与沉浸感。📎
局限:
图谱定位:Bunny-VisionPro 是 T07 人形遥操栈的VR 成熟期代表节点(转折 4)。📎
它与 Open-TeleVision [Cheng 2024, arXiv:2407.01512] 几乎同期、互补,2024.07 后大量 humanoid 双手工作(包括 1X、Figure、Unitree 生态)以两者为数据采集底座。🌐
演化谱系:
核心贡献的四条独立线:
副产品·dex-retargeting 中间件的事实推广:与 AnyTeleop 共享同一 retargeting 思路(minimize fingertip keypoint vector distance),让 dex-retargeting 成为灵巧 teleop 的 de facto 接口层,被 iDP3、Open-TeleVision 直接复用。📎
Open problems:
一个低成本(< $100)能传力方向 / 大小的振动或力反馈接口仍未成熟。[未确认]
「Bunny-VisionPro 的触觉就是力反馈」 —— 错。
ERM 振动马达只能告诉操作员「有没有接触」,不能传达力的方向与大小。
精细力控任务(拧螺丝、捏鸡蛋)仍受限。
这是「接触事件反馈」,不是「力反馈」——与 MANUS / SenseGlove 等专业力反馈手套的差距是数量级的。📎
「loop joint 直接在 SQP 里加约束就行」 —— 错。
非线性 FK 让 SQP 在 affine 近似下不稳且慢。
Bunny-VisionPro 的贡献是把优化变量从 n 降到 k(主动关节数),用 forward / backward pass 把被动关节的梯度 backprop 到主动关节。
降维 + backprop 才是提速 10× 的关键。📎
「碰撞避免要靠 GPU 才能实时」 —— 错。
Bunny-VisionPro 把每个 link 近似成一堆球,球对距离的 1/距离和是可微、低计算量的代价。
CPU 上 > 60 Hz。
用 sphere approximation 避开了 GJK 在 convex mesh 上的高开销,是工程化的关键 trade-off。📎
「Bunny-VisionPro 解决了全身 teleop」 —— 错。
它只覆盖双臂 + 手,不含下半身(locomotion)。
全身 teleop 由 HOVER / HumanPlus / OmniH2O 负责——实际部署里 Bunny-VisionPro 与全身 teleop 栈常常组合使用。
它是「双手灵巧遥操」的事实标准之一,不是全身方案。📎
「teleop 对比的 +11% / −45% 是触觉带来的」 —— 错。
teleop 对比实验未启用触觉反馈(demo 采集早于触觉模块完成)。
+11% / −45% 主要来自把碰撞 + 奇异内建进 motion control、以及 loop joint retargeting 提速。
触觉在独立 user study 评估,提升的是操作精度与沉浸感,不是 teleop benchmark 数字。📎
老办法里 Gripper 类(ALOHA / GELLO)和 Dexterous 类(AnyTeleop / DexPilot)分别卡在什么地方?Bunny-VisionPro 在后端做好的三件事是什么?
💡 参考答案
「loop joint」是什么?为什么四连杆结构的灵巧手 retargeting 用一般的 SQP 优化器又慢又不稳?Bunny-VisionPro 用什么 trick 把它提速 10 倍以上?
💡 参考答案
用「USB-C」或你自己举的类比,向一个没学过机器人的朋友解释:Bunny-VisionPro 是怎么让「操作员的手」和「机器人双臂」实时同步的?接口层把什么和什么解耦?
💡 参考答案
碰撞避免传统上要靠 GPU 才能实时,Bunny-VisionPro 是怎么做到 CPU > 60 Hz 的?用 sphere approximation 替代 GJK 的关键 trade-off 是什么?
💡 参考答案
Bunny-VisionPro 的触觉反馈用 1.2 美元的振动马达。操作员戴上手套后能感受到什么、不能感受到什么?为什么精细力控任务(拧螺丝、捏鸡蛋)仍受限?
💡 参考答案
不是。
ERM 振动马达只能告诉操作员「有没有接触」,不能传达力的方向与大小。
真正的力反馈需要更贵的硬件(MANUS / SenseGlove 等专业手套,单只 $1k+)。
Bunny-VisionPro 的 $1.2 ERM 是「接触事件反馈」,是低成本的妥协。📎
下半身(locomotion)控制目标完全不同——主要是平衡、步态,不是操作。
把它和双手灵巧操作塞进同一个 RL policy 会让训练不稳。
所以 Bunny-VisionPro 专注于双臂 + 手,下半身由 HOVER / HumanPlus / OmniH2O 等其它栈负责。
实际部署里常常组合使用——Bunny-VisionPro 管手,另一个系统管腿。📎
不是。
loop joint(四连杆、欠驱动结构)是机械设计本身就有的,比如 Ability Hand、Shadow Hand 的部分手指。
Bunny-VisionPro 的贡献是第一个把 loop joint 的 retargeting 做到实时(300 Hz 单核 CPU),让这类廉价欠驱动手能上生产。📎
两者几乎同期、都基于 Apple Vision Pro,但聚焦不同。
Bunny-VisionPro 重点在三段解耦的工程化(loop joint + 碰撞 + $1.2 触觉)。
Open-TeleVision 重点在沉浸式反馈(VR 内的机器人第一视角)与不同 retargeting 实现。
两者的 retargeting 都源自 AnyTeleop 的 dex-retargeting 范式。🌐
先查三处:(1) initialization mode 选对没——不同任务要不同模式;(2) α(人手-机器人手缩放)按操作员手长重新标定没;(3) 长时双手任务(如 prepare coffee)的初始化模式选错会导致两手初始位置错位、整个 episode 失败。📎