拓冰建站拓冰建站
首页 / 资讯中心 / 正文

ManiSkill 灵巧手任务深度解析:RotateValve、RotateSingleObjectInHand 与 TriFingerRotateCube 的难度分级、随机化与奖励设计

ManiSkill 灵巧手任务深度解析RotateValve、RotateSingleObjectInHand 与 TriFingerRotateCube 的难度分级、随机化与奖励设计【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkillManiSkill 内置了多类 GPU 并行化的刚体操作任务其中Dextrous Hand Tasks灵巧手任务专门用于评估多指灵巧手在旋转、抓持、重定位等精细操作上的能力。本文以任务目录文档 docs/source/tasks/dextrous/index.md 为主体结合仓库内对应环境源码系统讲解 RotateValve、RotateSingleObjectInHand、TriFingerRotateCube 三大任务系列的难度分级Level 0~4、随机化设计、成功条件与稠密奖励机制帮助读者理解任务卡片信息背后的实现逻辑并掌握运行、测试与二次开发的方法。一、Dextrous Hand 任务在 ManiSkill 中的定位在 ManiSkill 的任务体系中所有内置刚体任务被划分为多个类别见 docs/source/tasks/index.md 中的目录树control基础控制、table_top_gripper桌面夹爪、quadruped四足、humanoid人形、mobile_manipulation移动操作、dextrous灵巧手、digital_twins数字孪生、drawing绘图与external外部任务。本文涉及的三个任务系列均属于dextrous类别。为了统一描述任务ManiSkill 为每个任务提供了一张Task Card任务卡片集中给出Task Description任务描述任务要达成的操作目标Supported Robots支持的机器人任务配套的机器人型号Randomizations随机化重置/重建阶段会对哪些环境要素做随机化Success Conditions成功条件判定 episode 成功的定量标准Goal Specification目标规格目标信息在观察非视觉模式中如何呈现。同时任务卡片以徽章标注关键属性例如dense-reward-yes表示该任务提供稠密奖励dense reward。本文三个任务系列均提供稠密奖励。任务文档还给出了两条通用命令同样适用于灵巧手任务# 下载任务运行所需的资产如果任务卡片标注需要下载资产 python -m mani_skill.utils.download_asset env_id # 下载任务的演示轨迹数据 python -m mani_skill.utils.download_demo env_id需要特别说明观察模式的约定当观察模式为state或state_dict时环境会提供解决任务所需的全部真值数据当使用任意视觉观察模式时源码会移除真实世界中无法获取的真值数据如物体位姿见 docs/source/tasks/index.md。二、RotateValveLevel0-v1 ~ RotateValveLevel4-v1DClaw 旋转 ROBEL 阀门2.1 任务卡片要点任务描述使用 DClaw 机器人旋转 ROBEL 阀门ROBEL 基准平台中的阀门机构支持的机器人DClaw三指爪式灵巧手难度等级Level 0 至 Level 4共 5 级随机化均在重配置阶段生效旋转方向 $r$Level 0 固定 $r1$Level 4 时 $r \in {1, -1}$阀门头数量 $v$Level 0-1 固定 $v3$Level 2-4 时 $v \in [3, 6]$阀门角度 $\phi$Level 0 等间距分布 $\phi (0, 2\pi/3, 4\pi/3)$Level 1-4 每个角度独立随机化Level 4 额外对阀门半径做小幅随机化初始阀门旋转角度随机化。成功条件阀门相对初始位置旋转超过 $\theta$ 弧度。Level 0 为 $\theta\pi/2$Level 1-3 为 $\theta\pi$Level 4 为 $\theta2\pi$目标规格观察中提供旋转方向 $r$取值为 1 或 -1旋转量隐含在难度等级中。2.2 源码级实现解析该任务的实现位于 mani_skill/envs/tasks/dexterity/rotate_valve.py核心类是RotateValveEnv。它通过difficulty_level参数区分 5 个难度并通过register_env注册 5 个环境见文件末尾 rotate_valve.py环境 IDdifficulty_levelmax_episode_steps成功阈值RotateValveLevel0-v1080$\pi/2$四分之一圈RotateValveLevel1-v11150$\pi$半圈RotateValveLevel2-v12150$\pi$RotateValveLevel3-v13150$\pi$RotateValveLevel4-v14300$2\pi$一整圈构造函数中对难度做了严格校验difficulty_level必须为 0~4 的整数否则抛出ValueError见 rotate_valve.py。成功阈值在 rotate_valve.py 中按等级设置。随机化的实现细节阀门角度Level 0 直接构造等间距三头角度(0, 2π/3, 4π/3)Level 1 从 3/4/5 头三种等间距排布中循环分配Level 2 及以上用_batched_episode_rng.randint(3, 6)采样阀门头数再调用sample_valve_anglesrotate_valve.py随机采样各头角度并保证相邻角度差至少 $\pi/6$最多尝试 500 次失败则回退等间距排布旋转方向Level 0-3 固定为 1Level 4 在_initialize_actors中以1 - torch.randint(0, 2, (b,)) * 2采样 ±1rotate_valve.py半径随机化Level 3 及以上通过radius_scale与capsule_radius_scale对阀门半径做randn * 0.1 1的小幅扰动rotate_valve.py初始阀门角度在 $[-\pi, \pi]$ 内均匀随机采样rotate_valve.py。ROBEL 阀门的构建阀门机构由 mani_skill/utils/building/articulations/robel.py 中的build_robel_valve生成几何尺寸参考 ROBEL 基准原始设定胶囊体长度0.061706 * radius_scale、半径0.0195 * capsule_radius_scale、底部与轴承等部件按固定尺寸构建阀体与底座之间通过一个无限转角范围的旋转关节revolute jointlimits[[-inf, inf]]摩擦 0.02、阻尼 2连接从而支持多圈旋转的连续度量。评价与奖励evaluate判定valve_rotation * rotate_direction success_threshold即沿目标方向的净旋转量超过阈值即成功rotate_valve.py稠密奖励由三部分组成rotate_valve.py指尖贴合奖励1 - tanh(error * 10)其中 error 是三个指尖到阀门各头圆心距离与期望距离由胶囊长度减去偏移量得到的误差引导手爪抓稳阀门定向角速度奖励tanh(5 * directed_velocity) * 4鼓励沿目标方向快速转动运动进展奖励clip(rotation / 2π, -1, 1)按已转角度给予线性进展奖励。归一化奖励为原始奖励除以 6.0compute_normalized_dense_reward。观察扩展除机器人本体观察外_get_obs_extra提供rotate_dir目标旋转方向、valve_qpos、valve_qvel、valve_x/valve_y阀门角度的三角函数编码并在 state 模式下额外提供valve_pose真值位姿。三、RotateSingleObjectInHandLevel0-v1 ~ Level4-v1触觉 Allegro 手旋转随机物体3.1 任务卡片要点任务描述使用带触觉传感器的 Allegro 灵巧手旋转一个随机物体支持的机器人Allegro Hand源码中具体为AllegroHandRightTouch即带触觉传感的右手型号难度等级Level 0 至 Level 4随机化 / 成功条件 / 目标规格任务卡片中原标注为 WIP实际实现细节可从源码 mani_skill/envs/tasks/dexterity/rotate_single_object_in_hand.py 中确认。3.2 源码级实现解析核心类RotateSingleObjectInHand支持 Level 0-3 四个注册环境RotateSingleObjectInHandLevel0-v1~Level3-v1每个环境的max_episode_steps300。不同等级的核心差异在于被旋转的物体等级物体说明Level 0固定尺寸立方体build_cube(half_size0.04)白色动态刚体Level 1随机尺寸立方体半边长按(randn * 0.1 1) * 0.04随机Level 2YCB 物体从 YCB 物体集合mani_skill2_ycb/info_pick_v0.json随机选取需下载ycb资产Level 3YCB 物体同 Level 2且旋转轴随机环境注册时Level 2/3 标注了asset_download_ids[ycb]rotate_single_object_in_hand.py因此运行这两个环境前需执行python -m mani_skill.utils.download_asset RotateSingleObjectInHandLevel2-v1或 Level3 版本下载资产。旋转轴与成功判定Level 0-2 固定绕物体 z 轴旋转axis2Level 3 随机选择 x/y/z 轴torch.randint(0, 3, ...)并以 one-hot 形式记录在rot_dir中作为观察rotate_single_object_in_hand.py成功条件为累计旋转角超过 $4\pi$success_threshold torch.pi * 4。累计角度通过对单位向量在旋转轴切平面上的投影逐帧计算 arccos 累加得到rotate_single_object_in_hand.py失败条件为物体坠落当物体高度低于hand_init_height - 0.05时置fail/obj_fall标志rotate_single_object_in_hand.py。稠密奖励rotate_single_object_in_hand.py由 6 项组成旋转角度奖励20 * angle、物体速度惩罚-0.1 * obj_vel、掉落惩罚-50.0 * obj_fall、控制器能耗惩罚-0.0003 * power、力矩惩罚-0.0003 * ||qf||以及指尖-物体距离奖励0.1 / (0.02 4 * obj_tip_dist)取均值并裁剪到 [0,1]。归一化奖励为原始值除以 4.0。仿真资源配置该环境通过_default_sim_config自定义 GPU 内存配置max_rigid_contact_count、max_rigid_patch_count、found_lost_pairs_capacity2**26以保证灵巧手高密度接触场景下 GPU 物理仿真的稳定性Level 2 及以上还通过reconfiguration_freq机制支持在单 env 场景下逐 episode 重新采样 YCB 物体。四、TriFingerRotateCubeLevel0-v1 ~ Level4-v1TriFingerPro 旋转立方体4.1 任务卡片要点任务描述使用 TriFingerPro 机器人旋转一个立方体同时涉及位置移动与姿态旋转支持的机器人TriFingerPro三指遥操作平台难度分级目标位姿逐级增强Level 0桌面上随机目标位置无姿态要求Level 1桌面上随机目标位置含偏航yaw姿态要求Level 2空中固定目标位置x,y0无姿态要求Level 3空中随机目标位置无姿态要求Level 4空中随机目标位姿含完整姿态要求。成功条件被旋转的立方体需在距目标位置0.02 m内且相对目标姿态偏差在0.1 rad内。4.2 源码级实现解析实现位于 mani_skill/envs/tasks/rotate_cube.py核心类RotateCubeEnv注册了TriFingerRotateCubeLevel0-v1~Level4-v1五个环境max_episode_steps250。类注释标明该任务改编自 IsaacGymEnvs 的trifinger任务isaacgymenvs/tasks/trifinger.py场景包含地面、固定桌面URDF与桌面围栏high_table_boundary.stl。目标位姿采样_sample_object_goal_posesrotate_cube.py与任务卡片一一对应Level 0在圆形竞技场半径 0.195 m内均匀采样 x,yz 固定为立方体半高姿态为单位四元数Level 1同样随机 x,y姿态仅锁定 yawrandom_quaternions(lock_xTrue, lock_yTrue)Level 2x,y 固定为 0z 为min_height 0.05无姿态Level 3随机 x,y 与随机高度0.0325~0.1 m无姿态Level 4随机 x,y、随机高度下限取radius_3d保证任意姿态不与地面相交与完全随机姿态。场景中创建了两个立方体红色动态物体obj边长size0.065m与绿色运动学目标obj_goal无碰撞加入_hidden_objects不参与渲染可见性干扰。成功判定rotate_cube.py同时满足位置距离 goal_radius(0.02)与姿态差quat_diff_rad 0.1。稠密奖励rotate_cube.py由三部分构成手指接近奖励三个指尖到物体距离的 tanh 衰减之和权重 5物体位置奖励1 - tanh(5 * object_dist)减去初始距离基准配合 z 方向的提升奖励5 * (1 - tanh(5 * object_z_dist))引导将物体搬离桌面姿态奖励-1 * |angles|直接惩罚与目标姿态的四元数角度差。总奖励裁剪到 [-15, 15]成功时置为 15归一化奖励dense / 30 0.5使成功时取 1.0。五、运行、验证与扩展实践5.1 直接运行与观测仓库提供了一系列示例脚本可用来快速体验这些灵巧手环境见 mani_skill/examples# 随机动作演示观察机器人如何在环境内运动 python mani_skill/examples/demo_random_action.py -e RotateValveLevel0-v1 python mani_skill/examples/demo_random_action.py -e RotateSingleObjectInHandLevel0-v1 python mani_skill/examples/demo_random_action.py -e TriFingerRotateCubeLevel0-v1 # 手动控制交互式探索任务空间 python mani_skill/examples/demo_manual_control.py -e RotateValveLevel1-v1部分环境需要先下载资产python -m mani_skill.utils.download_asset RotateSingleObjectInHandLevel2-v15.2 观察模式与状态真值三类任务在state/state_dict观察模式下都会通过_get_obs_extra注入任务相关真值RotateValverotate_dir、阀门角度/角速度/三角编码与阀门位姿RotateSingleObjectInHandrotate_dir旋转轴 one-hot、物体位姿obj_pose与指尖-物体向量obj_tip_vecTriFingerRotateCube目标位姿goal_pos/goal_q以及物体真值位姿obj_p/obj_q。这为基于状态的强化学习与模仿学习基线提供了直接可用的监督信号。5.3 测试覆盖与二次开发入口仓库的测试套件tests/test_envs.py会对注册环境做批量构造与步进验证灵巧手任务的注册关系集中维护在 mani_skill/envs/tasks/dexterity/init.pyRotateValveEnv、RotateSingleObjectInHand、InsertFlowerEnv。其中InsertFlowerEnv插花任务见 mani_skill/envs/tasks/dexterity/insert_flower.py虽与本次文档列出的三个系列同属 dexterity 目录但未出现在该文档中——这提示我们文档的任务卡片可能滞后于源码实际可用环境以注册表与测试为准。从源码结构看自定义灵巧手任务的标准做法是继承BaseEnvmani_skill/envs/sapien_env.py实现_load_scene、_initialize_episode、_get_obs_extra、evaluate与compute_dense_reward五个核心方法再通过register_env注册即可复用 ManiSkill 的 GPU 并行化、传感器、随机化与数据采集全链路能力。六、小结Dextrous Hand 任务系列展示了 ManiSkill 在灵巧操作基准上的三个典型设计范式RotateValve以连续关节转角作为任务度量通过阀门头数、角度、方向、半径的多维随机化构建从单方向四分之一圈到双向一整圈的渐进课程RotateSingleObjectInHand从固定立方体过渡到随机尺寸立方体再到 YCB 真实物体集并引入触觉型 Allegro 手与掉落失败判定逼近真实世界中的在手操作TriFingerRotateCube从桌面 2D 平移逐步升级到空中 3D 全姿态重定位其位置 姿态双判据0.02 m / 0.1 rad与多分量稠密奖励是经典 6-DoF 操作任务的参考模板。三者共享同一套 Task Card 文档约定、稠密奖励体系与 GPU 并行化环境框架为灵巧操作算法的训练、评测与复现提供了统一且可扩展的载体。读者可依据本文的难度分级表与源码路径快速定位任一等级的实现细节并借助download_asset、示例脚本与测试套件完成从理解到运行的闭环。【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门