Shadow Hand 立方体重定向#
概述#
本文档详细描述了基于 Shadow Hand 灵巧手的立方体重定向任务环境。该任务是机器人操作领域的经典基准测试,要求机器人在手中重新定向立方体以匹配随机目标姿态。
环境描述#
Shadow Hand 立方体重定向任务基于真实的 Shadow Hand 24 自由度灵巧手构建,旨在训练机器人通过精细的多指协调,将手中的立方体旋转到目标姿态。
机器人结构#
Shadow Hand 是一个高仿真的 24 自由度灵巧手,由以下主要部分组成:
手掌(Palm):手的基础结构,固定在基座上
5 个手指:
拇指(Thumb):5 自由度,包括 CMC 旋转、MCP、IP 关节
食指(Index):4 自由度,包括 MCP、PIP、DIP 关节
中指(Middle):4 自由度,包括 MCP、PIP、DIP 关节
无名指(Ring):4 自由度,包括 MCP、PIP、DIP 关节
小指(Little):4 自由度,包括 MCP、PIP、DIP 关节
执行器配置:20 个驱动关节(4 个耦合关节由其他关节驱动)
手指关节详情#
每个手指(除拇指外)包含:
MCP 关节:掌指关节,2 自由度(外展/内收 + 屈曲)
PIP 关节:近端指间关节,1 自由度(屈曲)
DIP 关节:远端指间关节,1 自由度(屈曲)
拇指包含:
CMC 关节:腕掌关节,2 自由度
MCP 关节:掌指关节,1 自由度
IP 关节:指间关节,1 自由度
环境物体#
立方体:50mm × 50mm × 50mm 的正方体
质量:约 0.028 kg
摩擦系数:1.2
初始位置:手掌中心上方
(0.33, 0.00, 0.295)米
目标可视化:半透明目标姿态指示器(mocap body)
任务目标#
机器人需要完成以下操作目标:
保持抓握:维持立方体在手中的稳定抓握
感知目标:观察目标姿态(可视化指示器)
精细操作:通过多指协调旋转立方体
姿态对齐:将立方体姿态旋转至目标姿态(容差 ±0.1 弧度)
动作空间#
动作空间为 Box(-1, 1, (20,), float32),表示施加到 20 个驱动关节的位置控制指令(归一化)。
动作处理流程#
# 1. 缩放到执行器限制
targets = scale(actions, lower_limits, upper_limits)
# 2. 动作平滑(可选)
if act_moving_average < 1.0:
targets = α * targets + (1-α) * prev_actions
# 3. 裁剪到限制
targets = clip(targets, lower_limits, upper_limits)
# 4. 应用控制
actuator_ctrls = targets
动作维度详细说明#
编号 |
手指 |
关节 |
自由度 |
说明 |
|---|---|---|---|---|
0-4 |
拇指 |
J0-J4 |
5 |
CMC, MCP, IP |
5-8 |
食指 |
J0-J3 |
4 |
MCP, PIP, DIP |
9-12 |
中指 |
J0-J3 |
4 |
MCP, PIP, DIP |
13-16 |
无名指 |
J0-J3 |
4 |
MCP, PIP, DIP |
17-20 |
小指 |
J0-J3 |
4 |
MCP, PIP, DIP |
观测空间#
观测空间为 Box(-inf, inf, (157,), float32),包含机器人的本体感知信息、立方体状态、目标状态和指尖状态。
观测组成部分#
观测向量由以下部分组成(按顺序):
1. 手部关节状态(48 维)#
关节位置(24 维):未缩放的原始关节角度
关节速度(24 维):缩放 0.2 倍的关节角速度
2. 立方体状态(17 维)#
位置(3 维):世界坐标系中的立方体位置
(x, y, z)姿态(4 维):四元数
(x, y, z, w)线速度(3 维):立方体线速度
角速度(3 维):缩放 0.2 倍的角速度
归一化因子:速度观测乘以
vel_obs_scale = 0.2
3. 目标状态(11 维)#
目标位置(3 维):固定在
(0.33, 0.00, 0.295)目标姿态(4 维):随机采样的目标四元数
相对旋转(4 维):立方体到目标的相对四元数
4. 指尖状态(65 维)#
5 个指尖的状态,每个指尖 13 维:
位置(3 维):指尖在笛卡尔空间的位置
姿态(4 维):指尖四元数
速度(6 维):线速度和角速度
指尖链接名称:
rh_ffdistal:食指指尖rh_mfdistal:中指指尖rh_rfdistal:无名指指尖rh_lfdistal:小指指尖rh_thdistal:拇指指尖
5. 动作历史(20 维)#
上一步的动作值,用于策略的时间上下文
观测详细说明#
编号 |
观测内容 |
维度 |
范围 |
单位 |
|---|---|---|---|---|
0-23 |
手部关节位置(未归一化) |
24 |
关节限制范围 |
rad |
24-47 |
手部关节速度(× 0.2) |
24 |
±π/2 |
rad/s |
48-50 |
立方体位置 |
3 |
实数 |
m |
51-54 |
立方体姿态(四元数 w,x,y,z) |
4 |
单位范数 |
无量纲 |
55-57 |
立方体线速度 |
3 |
实数 |
m/s |
58-60 |
立方体角速度(× 0.2) |
3 |
实数 |
rad/s |
61-63 |
目标位置 |
3 |
固定值 |
m |
64-67 |
目标姿态(四元数 w,x,y,z) |
4 |
单位范数 |
无量纲 |
68-71 |
相对旋转(四元数 w,x,y,z) |
4 |
单位范数 |
无量纲 |
72-136 |
指尖状态(5×13) |
65 |
- |
- |
137-156 |
上一步动作 |
20 |
[-1, 1] |
无量纲 |
奖励函数#
奖励函数采用复合设计,包含多个奖励和惩罚项。
主要奖励项#
旋转对齐奖励(核心目标)
rot_reward = rot_reward_scale / (|rot_dist| + rot_eps)
缩放系数:
1.0Epsilon:
0.1旋转距离计算:使用四元数旋转距离公式
激励:随着立方体姿态接近目标,奖励呈反比增长
位置距离惩罚
dist_reward = dist_reward_scale × goal_dist
缩放系数:
-10.0距离计算:立方体到目标位置的欧氏距离
激励:阻止立方体掉落,保持在目标位置附近
动作正则化惩罚
action_penalty = action_penalty_scale × ||actions||²
缩放系数:
-0.0002目的:鼓励平滑、节能的运动
条件奖励#
成功奖励
if |rot_dist| ≤ success_tolerance: reward += reach_goal_bonus奖励值:
2.0容差:
0.1弧度(约 5.7°)目的:达成目标对齐的稀疏奖励
掉落惩罚
if goal_dist ≥ fall_dist: reward += fall_penalty terminated = True惩罚值:
0.0(仅终止,无额外惩罚)距离阈值:
0.24目的:立方体掉落时终止回合
初始状态#
手部初始化#
位置初始化:
手掌固定在世界坐标系中,位置由模型文件确定。
关节角度初始化:
使用模型默认关节位置
添加均匀随机噪声:
[-0.2, 0.2]弧度作用范围:所有 24 个手部自由度
速度初始化:
所有关节速度初始化为零。
立方体初始化#
位置初始化:
固定位置:
(0.33, 0.00, 0.295)手掌中心上方)添加均匀随机噪声:
[-0.01, 0.01]±1cm)
姿态初始化:
使用 Shoemake 方法生成均匀分布的随机四元数
确保在 SO(3) 空间上的均匀采样
速度初始化:
所有线速度和角速度初始化为零。
目标初始化#
位置初始化:
固定位置:
(0.33, 0.00, 0.295)(与立方体初始位置相同)
姿态初始化:
使用 Shoemake 方法生成均匀分布的随机目标四元数
每次重置时重新采样
终止条件#
回合在以下情况下终止:
掉落终止:立方体距离目标位置 ≥
fall_dist(0.24m)超时终止:达到
max_episode_steps(默认 1000 步)NaN 保护:检测到旋转距离或位置距离为 NaN
成功保持机制#
环境使用连续成功计数器:
当满足旋转容差时,计数器递增
当达到
max_consecutive_successes(50)时,触发成功终止并重置目标旋转容差:
0.1弧度
使用方法#
训练#
uv run scripts/train.py --env shadow-hand-repose
策略评估#
uv run scripts/play.py --env shadow-hand-repose
环境可视化#
uv run scripts/view.py --env shadow-hand-repose
TensorBoard#
uv run tensorboard --logdir runs/shadow-hand-repose
配置参数#
环境参数#
参数名 |
默认值 |
说明 |
|---|---|---|
|
10.0 |
最大回合时长(秒) |
|
0.01 |
控制时间步(秒) |
|
1000 |
最大回合步数 |
|
24 |
手部总自由度 |
|
20 |
驱动关节数量 |
奖励参数#
参数名 |
默认值 |
说明 |
|---|---|---|
|
-10.0 |
位置距离奖励 |
|
1.0 |
旋转对齐奖励 |
|
0.1 |
旋转奖励 epsilon |
|
-0.0002 |
动作正则化 |
|
0.1 |
成功容差(弧度) |
|
2.0 |
成功奖励 |
|
0.24 |
掉落距离阈值 |
|
0.0 |
掉落惩罚 |
重置噪声参数#
参数名 |
默认值 |
说明 |
|---|---|---|
|
0.01 |
立方体位置噪声(米) |
|
0.2 |
关节位置噪声(弧度) |
|
0.0 |
关节速度噪声(弧度/秒) |
观测缩放参数#
参数名 |
默认值 |
说明 |
|---|---|---|
|
0.2 |
速度观测缩放因子 |
参考资料#
该环境基于以下经典工作实现:
OpenAI Dactyl (2018):首个成功的手内操作 sim-to-real 迁移
Isaac Gym (2021):高性能 GPU 加速的物理仿真
Isaac Lab (2023):模块化机器人学习框架