枢纽
机器人Allegro Hand
上真机
物理感知
实时
输入模态vision,tactile,proprioception

RotateIt:让机器手「绕任意轴」转物体的视觉-触觉配方

Haozhi Qi, Brent Yi 等(UC Berkeley + Meta AI + CMU + TU Dresden)。CoRL 2023。arXiv:2309.09979。 项目页 · dexterousvisuotactilesim-to-real

🧠 一句话心智模型:在前作 Hora 里,机器手只能绕 z 轴转物体(依赖本体感觉「盲转」)。RotateIt 让它能绕任意轴(x/y/z)持续旋转——秘密就一句话:「看不清就摸,摸不清就看,两个一起塞进 Transformer 时序编码器」去推断「物体到底是什么形状」。这个推断出来的「形状向量」就叫extrinsics $z_t$,是 oracle policy 的「眼睛」。

🎯 为什么重要:从「盲转」到「看见」的范式跳跃

前作 Hora (Qi '22) 已经证明:用纯本体感觉历史(joint pos + action),policy 能隐式推断物体特性,做 z 轴旋转。但绕 x/y 轴就崩——为什么?

核心矛盾:绕 z 轴(像拧螺丝)时,物体基本「贴着手心」,本体感觉够用。但绕 x/y 轴时,物体要在指尖「翻滚」,必须 finger-gaiting(手指像走路一样轮流接手)。而 finger-gaiting 的本质是「暂时失去接触」——一旦失去接触,本体感觉就没东西可感知了,policy 直接瞎。

论文给的方向很清晰:本体感觉不够,就加眼睛 + 加触觉,像人一样。但「怎么加」很有讲究——直接拼成一个大向量训,效果不好。RotateIt 的关键设计是:把多模态信息塞进 Transformer,让它时序推理出「物体形状 + 物理属性」,再把这个推断喂给一个原本只看 ground-truth 的 oracle policy。

OpenAI ('19) 单物体(cube) 视觉 + 本体感觉 像素级渲染 不泛化、贵 Hora (Qi '22) 多物体泛化 纯本体感觉 仅 z 轴旋转 x/y 轴崩 RotateIt ✅ 多物体泛化 本体 + 视觉 + 触觉 x/y/z 任意轴 + finger-gaiting 真机零样本迁移
图 1:in-hand rotation 的演进。RotateIt 是第一个用 vision+touch 实现「任意轴 + 多物体 + finger-gaiting」的工作。

💡 核心思想:两阶段训练——oracle 先「作弊」,student 后「推断」

这是经典的 privileged learning + 蒸馏 范式(继承自 RMA / Hora)。核心是两个 policy

Oracle policy:$a_t = \pi(p_t, z_t)$ —— 看着「作弊信息」$z_t$(GT 物体形状+物理)做动作
Student policy:$a_t = \pi(p_t, \hat{z}_t)$,其中 $\hat{z}_t = \phi(f_T)$ —— Transformer 从多模态时序推出来的

Stage 1:Oracle Policy 训练(仿真里,看 ground-truth) 物体点云 PointNet → z_shape 物理 + 位姿 mass/com/friction pose/ω → z_phys Oracle Policy π + 本体感觉 p_t PPO 训练 PD 目标 a_t ∈ R^16 Stage 2:Visuotactile Transformer 训练(推断 z_t 的近似 ẑ_t) 视觉 前景物体深度 3 层 ConvNet → f_depth 触觉 4 指尖接触位置 离散化 8 区 → f_touch 本体感觉 关节 q_t + 上一帧动作 → f_prop Transformer φ 时序 k 帧窗口 L2 回归 z_t → ẑ_t Oracle π 冻结 π(p_t, ẑ_t) → a_t
图 2:两阶段训练。Stage 1 用 PPO 训 oracle(看 GT $z_t$);Stage 2 冻结 oracle,训练 transformer 从多模态历史推 $\hat{z}_t$,让 $\hat{z}_t$ L2 逼近 $z_t$。

这套「oracle 看作弊 → student 学推断」的设计哲学很优雅:oracle 在仿真里跑得又稳又强(因为它真的「知道」物体长什么样),student 只需要学「怎么从 vision+touch+proprio 时序里把 $z_t$ 算回来」——这个监督信号是稠密的(L2),而不是稀疏的任务 reward。

🛠️ 工程化:4 个让真机跑通的关键设计

设计心智为什么必要
① 物体形状当 oracle 输入(PointNet 编码)把物体 mesh 采样成点云,PointNet 编码成 z_shape前作只用 pose+物理,对不规则物体崩盘。论文 §5.1 显示:加 shape 让 OOD 物体性能跌幅从 22% 降到 8%
② 视觉用「前景深度」而非 RGB仿真生成 object depth(前景深度),真机用 Segment-Anything 抠出物体再取深度① 深度比 RGB 仿真更真实(不需要逼真渲染);② SAM 抠图让 policy 对背景杂乱鲁棒——背景变了,物体深度不变
③ 触觉用「离散接触位置」而非 raw tactile image指尖 2D 平面离散成 8 个区域,每个接触点表示为 (8D 位置 + finger index)论文 §5.2 表 2 证明:binary 接触没意义(本体感觉已包含);discretized contact location 就够(再精细的 full contact 没额外收益)——这是关键的 sim-to-real 简化
④ Transformer 做时序融合多模态特征拼接成 $f_t$,喂 k 帧窗口到 Transformer,输出 $\hat{z}_t$vs 前作 RMA 的时域 Conv:Transformer 的注意力能更灵活捕捉「finger-gaiting 时失去/获得接触」的瞬态信号。论文附录 Table 4 验证 Transformer > TCN
🔮 直觉:为什么触觉「binary 没用,contact location 有用」?
论文 Table 2 是个反直觉发现。Binary 接触(碰/没碰)已经被本体感觉的关节力矩历史隐式包含——你的手指在不在使力,关节能感觉到。但「物体碰在指尖 8 个区域中的哪一个」是本体感觉完全无法推断的(同一个手指姿态,物体可能碰指尖顶部 vs 侧面)。所以「接触位置」才是触觉的不可替代信息——这一点后来被 Beyond Binary (CoP) 推到更精细的物理量。

📊 关键结果:形状信息 + 视觉触觉的双重红利

维度对比数字(源自 PDF)
Stage 1 oracle:加 shape vs 不加Table 1:x/y/z 三轴 Rotation Reward不加 shape:x=85 / y=99 / z=129 → 加 shape:x=125 / y=118 / z=141(z 轴 +9%,x 轴 +47%)
Stage 2:单模态 vs 多模态Fig.6:proprio / +vision / +touch / +bothproprio baseline → +vision/touch 单加任一项都显著提升;双加可逼近 oracle 上限
OOD 物体泛化Fig.8:15 个 held-out 物体oracle 不加 shape:跌 22.6%;加 shape:跌 8%。student 只 proprio:跌 41.6%;+visuotactile:跌 15.4%
触觉粒度Table 2:NoTouch / Binary / ContactLoc / FullBinary ≈ NoTouch(没用);ContactLoc ≈ Full(不需要更精细);二者和 NoTouch 比 x 轴 RotR 从 79 → 102
真机对比 HoraFig.10:6 个物体绕 x 轴旋转弧度(20s 内)Hora:0.5/0.5/0.3/0.5/0.5/0.5(基本做不了)→ RotateIt:12.7/8.3/6.7/6.1/5.0/5.0 rad(约 2π)
多轴单网络Table 3:6 个方向(±x/y/z)单网络 vs 单轴多轴 distilled policy 持平单轴 oracle(+x: 105 vs 110;−z: 125 vs 127)
关键洞察:Fig.9 的「3D 形状重建」是论文最漂亮的实验——用 $\hat{z}_t$ 解码物体 voxel。结果显示:① oracle 加 shape 能学出物体真实形状(即使只有 reward 信号);② 不加 shape 时所有物体都被识别成球或方块(说明它真的没在感知形状);③ student 的 visuotactile 编码也保留了形状信息,对 irregular 物体(如梨形)的还原能力远胜纯 proprio。这正面证明了 $z_t$ 不是「黑盒 latent」,是真的可解释的物理表征

🌐 在领域中的位置

OpenAI ('19):单物体 cube Hora (Qi '22):多物体纯 proprio,z 轴 RotateIt:vision+touch,任意轴 ⭐ AnyRotate (25):gravity-invariant + 触觉;RotateIt 后续线

谱系定位:RotateIt 是「sim-to-real 多物体 in-hand rotation」从「盲转」转向「visuotactile 推断」的转折点。后续工作如 AnyRotate('25)继承其 visuotactile 路线并加入重力不变性;Beyond Binary (CoP)('26)进一步把触觉表征从「离散位置」升级为物理量。学习范式上,它继承 RMA(Kumar '21)/ Hora 的 privileged-distill 双阶段框架。

❓ 常见误区

oracle policy 是「作弊」吗?真机又用不了,训它干啥?

oracle 在仿真里扮演「老师」。它的作用是:① 证明上限——告诉后续 student「物理上能转多好」;② 提供稠密监督——它吐出的 $z_t$ 是 student 要学的目标,比稀疏的任务 reward 容易学得多。真机部署的是 student(只看 vision+touch+proprio),oracle 退场。

它和 Hora 的「rapid motor adaptation」是什么关系?

Hora 是 RotateIt 的前作,第一作者同是 Haozhi Qi。RMA(Kumar '21)原创了「两阶段 privileged + adaptation module」范式,用于四足 locomotion;Hora 把它搬到 in-hand rotation(z 轴);RotateIt 在此基础上把「adaption module」换成了更强的 visuotactile Transformer,并扩展到任意轴。

真机用什么触觉传感器?数据怎么和仿真对齐?

用 4 个 omnidirectional vision-based touch sensor(基于图像的触觉,如 DIGIT 类)。sim-to-real 对齐的巧思:不仿真 raw 触觉图像,而是仿真「接触在指尖 2D 平面的离散位置」(8 个 bin)。真机端从触觉图像里检测「最高强度像素」位置 → 离散化到同一组 bin。表征层对齐绕过了「仿真硅胶形变不准」的死结。

为什么训练多轴单网络需要 distillation?

论文 §5.5 实测:纯 RL 训多轴不收敛(6 个方向的 reward 互相打架)。解决方案是先训 6 个单轴 oracle(每个稳定收敛),再用模仿学习目标蒸馏成一个多轴网络——通过 $k$(轴指示向量)做 condition。最终多轴策略性能与单轴 oracle 持平。