ManiSkill 中的 Trifinger Pro 三指灵巧手:模型、控制器与任务配置全解析
ManiSkill 中的 Trifinger Pro 三指灵巧手模型、控制器与任务配置全解析【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkillTrifinger Pro 是 ManiSkill 内置的一台 9 自由度三指灵巧手Robot UIDtrifingerpro专为桌面灵巧操作in-hand manipulation研究设计。本文以 ManiSkill 官方机器人文档 为核心结合 Agent 实现、URDF 模型 与配套的 RotateCube 任务 源码系统讲解这台机器人的运动学结构、6 种可用控制器、本体感受观测接口以及其在仿真任务中的实际用法帮助你快速判断它是否适合你的操作研究场景并直接上手调用。机器人概览与质量等级Trifinger Pro 由TriFingerPro类实现通过register_agent()注册进 ManiSkill其关键元信息如下属性值Robot UIDtrifingerproAgent 类TriFingerPro位于 mani_skill/agents/robots/trifingerpro/trifingerpro.py质量等级BStable, but some values are unrealistic即稳定但部分参数不够真实自由度DOF93 根手指 × 每指 3 个转动关节可用控制器pd_joint_delta_pos、pd_joint_pos、pd_joint_target_delta_pos、pd_joint_vel、pd_joint_pos_vel、pd_joint_delta_pos_vel关于质量等级的含义可以参考 Robots 总览页 中的说明ManiSkill 采用与 Mujoco Menagerie 相同的评级体系B 级表示仿真中表现稳定但部分数值如摩擦、刚度未经过严格系统辨识。在源码中TriFingerPro明确标注其改造自 NVIDIA IsaacGymEnvs 的trifinger.py任务实现见 trifingerpro.py因此与 Isaac Gym 生态中的 Trifinger 任务保持结构一致性。同时该机器人目前是 ManiSkill 中 RotateCube 任务 唯一支持的机械臂SUPPORTED_ROBOTS [trifingerpro]。提示B 级机器人用于 RL 训练和算法对比没有问题但如果你的目标是 sim2real 迁移建议先自行做系统辨识system ID校准动力学参数。视觉模型与碰撞模型官方文档为 Trifinger Pro 提供了正面/侧面的视觉网格Visual Meshes与碰撞网格Collision Meshes渲染图。视觉模型使用精细的 STL 网格并附有外壳材质颜色而碰撞模型则经过简化处理——绿色表示凸包网格Convex Mesh蓝色表示基础几何体Primitive Shape Mesh用于保证仿真碰撞检测的性能与稳定性。从 URDF 模型 可以看到材质定义fingerpro_shell浅灰外壳、fingerpro_tip深灰指尖、fingerpro_motor黑色电机而碰撞网格则直接复用prox-sim.stl、int_sim.stl、tip_link_sim.stl、tip_sim.stl等网格文件与真实硬件保持了较高的一致性。运动学结构三指 120° 对称布局Trifinger Pro 的机械结构由 trifingerpro.urdf 描述核心特征是三根手指以基座为中心呈 120° 均匀对称分布。URDF 中通过三个固定关节把手指基座固定到中央 holder 上joint nameholder_to_finger_0 typefixed parent linkupper_holder_link/ child linkfinger_base_link_0/ origin rpy0 0 0.0 xyz0 0 0/ /joint joint nameholder_to_finger_120 typefixed origin rpy0 0 -2.0943951023931953 xyz0 0 0/ /joint joint nameholder_to_finger_240 typefixed origin rpy0 0 -4.1887902047863905 xyz0 0 0/ /joint其中-2.0944 -120°与-4.1888 -240°即三指绕 Z 轴的旋转角。每根手指包含 3 个旋转关节共 9 个自由度关节名以手指 0 为例类型转动轴关节限位弧度finger_base_to_upper_joint_0revoluteY 轴[-0.33, 1.0]finger_upper_to_middle_joint_0revoluteX 轴[0.0, 1.57]finger_middle_to_lower_joint_0revoluteX 轴[-2.7, 0.0]URDF 中特别注明关节限位按真实机器人的软限位soft limits设置而非物理极限这也是质量评级为 B 的部分原因。此外URDF 还包含了质量与惯性张量如近端连杆finger_upper_link_0质量 0.26689 kg这些惯性参数直接影响 PD 控制的动力学行为。在 Agent 实现 中joint_names只保留了 9 个活动关节其余如finger_upper_visuals_joint_*、finger_lower_to_tip_joint_*等固定/视觉关节均被注释掉仅作为 URDF 中的静态结构存在不参与控制。默认物理参数与指尖摩擦配置TriFingerPro通过urdf_config对指尖链接的摩擦系数做了专门配置源码urdf_config dict( _materialsdict( tipdict(static_friction2.0, dynamic_friction1.0, restitution0.0) ), linkdict( finger_tip_link_0dict(materialtip), finger_tip_link_120dict(materialtip), finger_tip_link_240dict(materialtip), ), )三个指尖链接finger_tip_link_0/120/240被赋予静摩擦系数 2.0、动摩擦系数 1.0、恢复系数 0.0 的特殊材质。高摩擦 零弹性的配置是为了保证灵巧手捏取物体时指尖不打滑、不弹跳。与此同时Agent 层还定义了统一的关节刚度、阻尼与力限源码self.joint_stiffness 1e2 # 关节刚度PD 增益 self.joint_damping 1e1 # 关节阻尼 self.joint_force_limit 2e1 # 关节最大输出力矩六种控制器配置详解Trifinger Pro 在_controller_configs属性中一次性声明了 6 种控制器源码创建环境时通过control_mode参数即可切换。这些控制器均作用于全部 9 个关节1.pd_joint_delta_pos默认增量关节位置控制基于PDJointPosControllerConfiguse_deltaTrue动作上下限为[-0.1, 0.1]弧度joint_delta_pos PDJointPosControllerConfig( self.joint_names, -0.1, 0.1, self.joint_stiffness, self.joint_damping, self.joint_force_limit, use_deltaTrue, )其控制语义为q̄(t) q(t) a即动作a表示对当前关节位置的增量。由于三指抓取对绝对位置漂移较敏感增量式控制是 RL 训练中最常用的默认模式。2.pd_joint_pos绝对关节位置控制joint_pos PDJointPosControllerConfig( self.joint_names, None, None, self.joint_stiffness, self.joint_damping, self.joint_force_limit, normalize_actionFalse, )lower/upper传None表示动作空间直接采用 URDF 中的关节限位见 PDJointPosController._get_joint_limits 中若为 None 则默认使用关节限位的逻辑normalize_actionFalse意味着动作不归一化到 [-1, 1]而是直接以弧度为目标值。3.pd_joint_target_delta_pos记忆型增量控制joint_target_delta_pos deepcopy(joint_delta_pos) joint_target_delta_pos.use_target True与pd_joint_delta_pos的区别在于use_targetTrue动作不再叠加到当前实际位置而是叠加到上一个目标位置self._target_qpos self._target_qpos action见 pd_joint_pos.py相当于带内部记忆的增量控制轨迹更平滑。4.pd_joint_vel关节速度控制pd_joint_vel PDJointVelControllerConfig( self.joint_names, -1.0, 1.0, self.joint_damping, # 速度模式刚度无效阻尼充当等效增益 self.joint_force_limit, )速度模式下输出目标关节速度动作限为 ±1.0 rad/s。源码注释提醒该控制器参数可能需要单独调参this might need to be tuned separately。5.pd_joint_pos_vel位置 速度联合控制joint_pos_vel PDJointPosVelControllerConfig( self.joint_names, None, None, self.joint_stiffness, self.joint_damping, self.joint_force_limit, normalize_actionFalse, )动作维度翻倍为 189 位置 9 速度同时给出目标位置与目标速度适合对轨迹有精确要求的场景。6.pd_joint_delta_pos_vel增量位置 速度联合控制joint_delta_pos_vel PDJointPosVelControllerConfig( self.joint_names, -0.1, 0.1, self.joint_stiffness, self.joint_damping, self.joint_force_limit, use_deltaTrue, )pd_joint_pos_vel的增量版本位置增量限 ±0.1 rad是官方文档标注的需谨慎使用Caution to use类控制器之一。关于各控制器命名规则与数学表达式的更完整说明可参考 controllers 概念文档。本体感受观测指尖位姿与速度为了支持灵巧操作任务例如判断指尖是否触碰到物体TriFingerPro在标准关节观测之外额外暴露了三个指尖的位姿与线速度源码def get_proprioception(self): obs super().get_proprioception() obs.update({tip_poses: self.tip_poses.view(-1, 21)}) # 3 × (3位置 4四元数) obs.update({tip_velocities: self.tip_velocities().view(-1, 9)}) # 3 × 3 return obs property def tip_poses(self): tip_poses [vectorize_pose(link.pose, deviceself.device) for link in self.tip_links] return torch.stack(tip_poses, dim-1)tip_poses形状为(num_envs, 21)即 3 根手指 × 7位置 3 维 四元数 4 维tip_velocities形状为(num_envs, 9)即 3 根手指 × 3 维线速度。其中tip_links在_after_init中通过get_objs_by_names按名字finger_tip_link_0/120/240从场景中解析源码。这套接口被 RotateCube 任务的稠密奖励函数直接使用见下文。配套任务TriFingerRotateCube 系列Trifinger Pro 在 ManiSkill 中的主场是 rotate_cube.py 定义的旋转立方体任务环境 UID 为TriFingerRotateCubeLevel0-v1~TriFingerRotateCubeLevel4-v1共 5 个难度等级每回合 250 步。难度分级源码 docstring与目标采样策略难度目标位姿采样方式Level 0桌面上随机目标位置无姿态要求Level 1桌面上随机目标位置 yaw 姿态Level 2空中固定目标x, y 0无姿态要求Level 3空中随机目标位置无姿态要求Level 4空中随机目标位姿含完整姿态成功率判定evaluate要求位置误差 0.02 mgoal_radius且姿态差 0.1 rad。稠密奖励则由三部分构成compute_dense_reward指尖接近奖励利用self.agent.tip_poses计算 3 个指尖到物体的距离1 - tanh(5 * dist)形式权重 5物体到位奖励物体位置与目标位置的接近度 抬升高度奖励姿态对齐奖励-|quat_diff_rad(obj_q, goal_q)|直接惩罚姿态差。奖励被clamp(-15, 15)成功后置为 15。环境初始化时还对机器人加入robot_init_qpos_noise0.02的高斯扰动以增强 RL 训练的鲁棒性。上手使用加载 Trifinger Pro加载该机器人最直接的方式是通过其环境 ID 创建标准 RL 环境或使用robot_uids参数指定import gymnasium as gym import mani_skill.envs # 方式一使用配套的旋转立方体任务默认使用 trifingerpro env gym.make(TriFingerRotateCubeLevel0-v1, num_envs64) # 方式二切换控制模式例如绝对关节位置控制 env gym.make( TriFingerRotateCubeLevel0-v1, num_envs64, control_modepd_joint_pos, ) # 方式三在其他自定义环境中显式指定机器人 # env gym.make(YourEnv-v1, robot_uidstrifingerpro, control_modepd_joint_delta_pos)num_envs可设置并行环境数量ManiSkill 的 GPU 并行模拟会向量化执行全部 9 自由度关节计算control_mode取值为上文 6 种控制器名称之一。若要在自定义任务中使用它可以参考 custom_robots 教程 了解加载自定义机器人含 URDF的完整流程。小结Trifinger Pro 是 ManiSkill 内置的三指灵巧操作研究载体120° 对称的 9 自由度运动学、高摩擦指尖材质、6 种现成控制器、以及tip_poses/tip_velocities指尖观测接口使它特别适合 in-hand manipulation如旋立方体、旋转阀门类任务。需要留意的是其 B 级质量评级——动力学参数刚度 1e2、阻尼 1e1、力限 2e1 及摩擦系数面向稳定仿真而非精确复现真实硬件若涉及 sim2real建议基于 URDF 模型 自行完成参数辨识后使用。【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考