☰
Adroit 直驱手 vs MyoHand 腱驱动手:joint-space-empowerment 两类灵巧手策略对比完全指南
2026/11/3 2:33:25 网站建设 项目流程

Adroit 直驱手 vs MyoHand 腱驱动手:joint-space-empowerment 两类灵巧手策略对比完全指南

joint-space-empowerment 是 ICML 2026 Spotlight 论文Joint-Space Empowerment for Dexterous Coordination in Tendon-Driven Hands的官方预训练策略仓库。本文对比 Adroit 直驱手与 MyoHand 腱驱动手两类灵巧手,详解 6 大灵巧操作任务、训练参数、模型文件结构与策略可视化步骤,帮助新手快速上手。


joint-space-empowerment 是什么?

这个仓库本身不含训练代码,它存放的是论文训练好的50 个强化学习(RL)策略模型,覆盖两种灵巧手、6 类任务、每个任务 5 个随机种子(seed)。你可以把它理解为"灵巧手策略的模型库":

  • 🤖两种手:Adroit(直驱手)和MyoHand(腱驱动手)
  • 🎯6 类任务:转球、翻转骰子、拧钥匙、转笔等灵巧协调任务
  • 📦模型格式:基于stable-baselines3训练(SAC 算法),每个模型配套观察归一化统计文件
  • 📄 仓库说明见 README.md

什么是 "empowerment(赋能)"?用大白话说,它衡量的是"这只手能做出多少种不同动作"——可以想象成手的"动作自由度评分"。论文提出在**关节空间(joint space)**上用 empowerment 度量来指导训练,从而让腱驱动手这类控制链条更复杂的手,也能学会高难度的灵巧协调动作。

目录按手 / 任务 / 种子三级组织:

joint-space-empowerment ├── Adroit/ # 直驱手:BaodingBalls / DieReorient / KeyTurn / PenTwirl └── MyoHand/ # 腱驱动手:以上 4 个任务 + Reorient100 + Reorient8-sparse

Adroit vs MyoHand:两种灵巧手的核心区别

Adroit 直驱手:电机直连关节

Adroit 是机器人领域最常用的仿真灵巧手之一。它的每个关节都由手内部的电机直接驱动,控制链路短、响应直接,是灵巧操作研究的"标准考场"。

从环境配置 CustomAdroitBaodingP1-v1.yaml 可以看出两个特征:

  • add_wrist_pronation_supination: true:额外开启了前臂旋前/旋后自由度,手腕更灵活
  • 相机跟踪对象为forearm(前臂),视角距离 0.8

MyoHand 腱驱动手:靠"筋"拉动手指

MyoHand 模拟的是腱驱动(tendon-driven)结构:手指由穿过导管的肌腱/绳索牵拉,更接近人手和仿生手的机械原理。它由MyoSuite物理引擎仿真,控制链条更长(电机 → 肌腱张力 → 关节),因此同样的任务更难训练——这正是论文要解决的问题。

对比 CustomMyoChallengeBaodingP1-v1.yaml:

  • 没有add_wrist_pronation_supination配置
  • 相机跟踪r_humerus(上臂),视角距离 0.6(更贴近手臂)

关键差异一览表

对比项Adroit 直驱手MyoHand 腱驱动手
驱动方式关节内电机直接驱动肌腱牵拉,控制链更长
仿真平台MuJoCo 系环境MyoSuite
手腕配置可开启前臂旋前/旋后无此配置
相机跟踪点forearmr_humerus
任务数量4 个6 个(多 2 个专属任务)
训练难度中等更高(可用 Reorient100 预训练)

六大灵巧协调任务与训练参数速查

所有任务配置均为 YAML 文件,核心参数如下表(total_timesteps为训练总步数,max_episode_steps为单局步数):

手任务训练步数单局步数奖励类型可用种子
Adroit / MyoHandBaodingBalls10M200dense均为 5 个
Adroit / MyoHandDieReorient10M150denseMyoHand 缺 seed 3
Adroit / MyoHandKeyTurn7.5M200dense均为 0–4
Adroit / MyoHandPenTwirl5M50dense均为 0–4
仅 MyoHandReorient1001M 预训练 + 2M 微调50dense0–4
仅 MyoHandReorient8-sparse5M50sparse0,1,2,4,5

💡 MyoHand 的BaodingBalls、DieReorient、Reorient8-sparse三个任务提供的种子是0、1、2、4、5(无 seed 3),选择种子前请先确认目录存在。

🎳 BaodingBalls:双手转球

目标是用手连续操控两颗转球,奖励项包含pos_dist_1/pos_dist_2(两个球到目标的距离)和solved: 5(成功大奖)。这是最"炫技"的任务,训练量也最大(10M 步)。配置文件:CustomAdroitBaodingP1-v1.yaml、CustomMyoChallengeBaodingP1-v1.yaml。

🎲 DieReorient:骰子翻转对齐

目标是把骰子翻转到指定姿态。配置 CustomAdroitDieReorientP2-v0.yaml 中可见:

  • 位置对齐权重pos_dist: 1.0,旋转对齐权重rot_dist: 0.2
  • 目标旋转范围goal_rot: [-0.785, 0.785](约 ±45°)
  • 支持随机化项:obj_size_change(物体大小扰动)、obj_friction_change(摩擦扰动)、enable_rsi(随机初始状态)

🔑 KeyTurn:拧钥匙

目标是在随机初始状态下拧动钥匙,单局长达 200 步。两种手的配置(CustomAdroitKeyTurnRandom-v0.yaml、myoHandKeyTurnRandom-v0.yaml)task_variables_keys均为空,说明该任务以随机化目标为主,不依赖显式目标变量。

🖊️ PenTwirl:转笔

经典的转笔技巧,单局仅 50 步、训练 5M 步,是上手最快的任务。配置文件:CustomAdroitPenTwirlRandom-v0.yaml、myoHandPenTwirlRandom-v0.yaml。

🔄 Reorient100:大规模重定向 + 预训练(MyoHand 专属)

这是体现"joint-space empowerment"方法价值的任务,目录分为两段:

  • Pretraining_Play/:play 预训练——先用随机/探索策略跑 1M 步,收集rl_model_replay_buffer_1000000_steps.pkl(经验回放缓冲区),为 SAC 的离线训练打底
  • Training/:在此基础上微调 2M 步,产出正式策略

配置 myoHandReorient100-v0.yaml 的奖励更"重":act_reg: 5.0(抑制过大力矩)、drop: 5.0(惩罚掉落)、bonus: 10.0(成功奖励)。

📉 Reorient8-sparse:稀疏奖励版

配置 myoHandReorient8-v0.yaml 中reward_type: sparse——只在成功时给奖励,学习信号比 dense 版本难得多,是研究稀疏奖励场景的好样本。


三类模型文件各有什么作用?

每个任务/种子目录下都有三类文件,以 Adroit/BaodingBalls/seed_0/ 为例:

文件作用
rl_model_10000000_steps.zip训练好的策略模型(SAC,stable-baselines3 格式)
rl_model_vecnormalize_10000000_steps.pkl观察值归一化统计量,加载模型时必须配对使用
rl_model_replay_buffer_*.pkl经验回放缓冲区(仅 Reorient100 的 Pretraining_Play 有)

⚠️ 注意:.zip模型文件必须与同目录、同训练步数的.pkl归一化文件搭配,加载脚本会自动处理,手动使用时不要错配。


如何快速运行灵巧手策略(可视化步骤)

仓库只存模型,可视化需要配套的JoSE 训练代码仓库(提供play.py脚本,它会自动下载预训练模型并在仿真中运行)。

第 1 步:克隆本仓库

git clone https://gitcode.com/hf_mirrors/jamesheald/joint-space-empowerment.git

第 2 步:安装 JoSE 训练代码仓库及其依赖(README 中要求先完成 clone 和 install),并在该仓库根目录执行:

uv run python play.py --hand Adroit --task BaodingBalls --seed 0

第 3 步:切换参数查看其他策略

参数可选值
--handAdroit、MyoHand
--taskBaodingBalls、DieReorient、KeyTurn、PenTwirl、Reorient8-sparse、Reorient100/Training
--seed0–5(实际可用种子因手/任务而异,见上文表格)

想看腱驱动手转球,一条命令即可:

uv run python play.py --hand MyoHand --task BaodingBalls --seed 2

新手如何选择任务和种子?

  • 🥇第一次体验:选PenTwirl(50 步一局,画面最快出效果),seed 0即可
  • 🥈对比直驱 vs 腱驱动:同一任务、同一种子分别跑两次,例如都用--task KeyTurn --seed 2,直观感受两种机械结构的行为差异
  • 🥉研究训练方法:看Reorient100的"预训练 + 微调"两段式目录结构;研究稀疏奖励则看Reorient8-sparse
  • 🏆看"大场面":BaodingBalls是视觉最震撼的任务,也是训练量最大的(10M 步)

常见问题 FAQ

为什么 MyoHand 有些任务没有 seed_3?不同任务-手组合的种子数量不完全一致,以各任务目录实际内容为准,play.py的--seed只支持存在的种子。

Reorient100 的 Pretraining_Play 目录为什么没有 .zip 模型?那一段是 play 预训练阶段,只保存了回放缓冲区与归一化统计(.pkl),正式策略在Training/子目录中。

模型加载报错怎么办?优先检查:① 是否在 JoSE 训练代码仓库根目录执行play.py;② Python 环境是否按该仓库要求用uv安装;③ 种子是否存在于目标任务目录。

完整任务与种子清单以仓库目录为准,详见 README.md 的 "Repository Structure" 一节。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询