
ManiSkill 中的 Google Robot 机器人智能体15 自由度双臂操作平台的使用与源码解析【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill本篇文章面向需要在 ManiSkill 仿真框架中快速上手 Google RobotUID 为googlerobot的开发者围绕其官方文档页面docs/source/robots/googlerobot/index.md展开并结合仓库内的智能体注册、控制器与传感器源码系统讲解该机器人的建模质量评级、15 个自由度构成、两种 PD 关节控制模式、自带顶部相机配置以及资源下载与加载方式。读完本文你将能够在 ManiSkill 中以字符串 UID 直接实例化该机器人并在自定义任务或现有环境中使用它完成基于关节位置的控制实验。Google Robot 概览UID、质量评级与自由度Google Robot 是 ManiSkill 机器人库中提供的一款双臂操作平台其官方文档页由 docs/generate_robot_docs.py 从机器人类自动生成关键元数据如下属性值机器人 UIDgooglerobot智能体类GoogleRobot继承自BaseAgent质量评级BStable, but some values are unrealistic即“稳定但部分数值不真实”自由度DOF15支持的控制器pd_joint_pos、pd_joint_delta_posURDF 资产google_robot_meta_sim_fix_fingertip.urdf质量评级体系与 docs/source/robots/index.md 中描述的一致共分四档评级含义A数值来自正规的系统辨识system identificationA数值真实但未经严格辨识B稳定但部分数值不真实C条件性稳定可显著改进googlerobot的 B 级意味着它能在仿真中稳定运行、形态外观正常但部分动力学参数并非来自真实机器人的标定数据。该元数据登记在 docs/metadata/robot.json 中googlerobot: { quality: B, name: Google Robot }。智能体源码解析注册、URDF 与相机配置Google Robot 的智能体类定义在 mani_skill/agents/robots/googlerobot/googlerobot.py代码非常精简核心结构如下import numpy as np import sapien from mani_skill import ASSET_DIR from mani_skill.agents.base_agent import BaseAgent from mani_skill.agents.controllers import * from mani_skill.agents.registration import register_agent from mani_skill.sensors.camera import CameraConfig # TODO (stao) (xuanlin): Add mobile base, model it properly based on real2sim register_agent(asset_download_ids[googlerobot]) class GoogleRobot(BaseAgent): uid googlerobot urdf_path ( f{ASSET_DIR}/robots/googlerobot/google_robot_meta_sim_fix_fingertip.urdf ) urdf_config dict() property def _sensor_configs(self): return [ CameraConfig( uidoverhead_camera, posesapien.Pose([0, 0, 0], [0.5, 0.5, -0.5, 0.5]), width640, height512, entity_uidlink_camera, intrinsicnp.array([[425.0, 0, 305.0], [0, 413.1, 233.0], [0, 0, 1]]), ) ]注册机制与 UID 寻址register_agent(asset_download_ids[googlerobot])装饰器定义在 mani_skill/agents/registration.py 中。注册过程会将agent_cls及其asset_download_ids一并存入REGISTERED_AGENTS字典同时把googlerobot写入assets.DATA_GROUPS供资产下载系统识别。这就是为什么在 ManiSkill 中可以仅凭字符串googlerobot直接指定机器人import mani_skill.envs from mani_skill.utils.registration import register_env # 任务注册 env gymnasium.make(EmptyEnv-v1, robot_uidsgooglerobot)在 examples/tutorials/1_quickstart.ipynb 中可以看到googlerobot与allegro_hand_right、panda、unitree_g1等一起出现在可用机器人 UID 列表中说明它已随mani_skill.agents.robots包自动导入并完成注册见 mani_skill/agents/robots/init.py 中的from .googlerobot import *。URDF 与真实到仿真建模的取舍类中通过urdf_path指向google_robot_meta_sim_fix_fingertip.urdf文件名中的meta_sim_fix_fingertip表明这是经过仿真侧修改尤其是指尖修正的版本。源码中还保留了显眼的 TODO 注释# TODO (stao) (xuanlin): Add mobile base, model it properly based on real2sim从源码结构看当前版本尚未加入移动底盘也未基于真实到仿真real2sim流程对动力学参数做严格标定——这与 B 级质量评级“部分数值不真实”相互印证。因此在做 sim2real 迁移实验前建议按 docs/source/user_guide/tutorials/sim2real 中的方法论自行开展系统辨识。自带传感器顶部相机与多数 ManiSkill 机器人不同Google Robot 通过_sensor_configs声明了一个随附相机传感器overhead_camera安装实体entity_uidlink_camera相机绑定在机器人连杆link_camera上位姿sapien.Pose([0, 0, 0], [0.5, 0.5, -0.5, 0.5])即以四元数(0.5, 0.5, -0.5, 0.5)表示的下视朝向分辨率640×512内参矩阵焦距约(425.0, 413.1)主点约(305.0, 233.0)。intrinsic np.array([[425.0, 0, 305.0], [0, 413.1, 233.0], [0, 0, 1]])当以obs_modesensors运行任务时该相机的 RGB / 深度观测会自动出现在env.unwrapped.agent.sensors中相机配置类CameraConfig定义于 mani_skill/sensors/camera.py。如需在 docs/source/user_guide/concepts/sensors.md 所述的观测体系中获取该视角图像直接使用obs[sensor_data][overhead_camera][rgb]即可。资产下载如何获取 URDF 与网格文件由于 Google Robot 的 URDF 和网格模型不属于 ManiSkill 核心包首次使用前必须下载资产。该机器人的下载源登记在 mani_skill/utils/assets/data.pyDATA_SOURCES[googlerobot] DataSource( source_typerobot, urlhttps://github.com/haosulab/ManiSkill-GoogleRobot/archive/refs/tags/v0.1.0.zip, target_pathrobots/googlerobot, )在终端执行以下命令即可完成下载命令行工具实现在 mani_skill/utils/download_asset.py支持-y免交互、-o指定输出目录等参数python -m mani_skill.utils.download_asset googlerobot下载完成后URDF 会解压到MANISKILL_ASSET_DIR/robots/googlerobot/目录与googlerobot.py中的urdf_path拼接路径一一对应。若下载时遇到网络问题也可以先通过下述命令确认可用的机器人资产 UID 列表python -m mani_skill.utils.download_asset -l robot控制器两种 PD 关节位置控制模式文档页标注 Google Robot 支持pd_joint_pos与pd_joint_delta_pos两种控制模式。这一组合并非该机器人独有而是 mani_skill/agents/base_agent.py 中BaseAgent._controller_configs为所有未覆写该方法的机器人提供的默认配置pd_joint_posPDJointPosControllerConfig( [x.name for x in self.robot.active_joints], lowerNone, upperNone, stiffness100, damping10, normalize_actionFalse, ), pd_joint_delta_posPDJointPosControllerConfig( [x.name for x in self.robot.active_joints], lower-0.1, upper0.1, stiffness100, damping10, normalize_actionTrue, use_deltaTrue, ),两种模式对动作空间的影响pd_joint_pos绝对关节位置动作直接指定目标绝对关节角弧度。lower/upperNone表示沿用 URDF 中的关节限位动作不做归一化动作空间即为各关节限位张成的区间。控制器核心类PDJointPosController位于 mani_skill/agents/controllers/pd_joint_pos.py其_get_joint_limits方法优先读取 URDF 限位再以配置中的lower/upper覆盖。pd_joint_delta_pos相对关节位置动作表示相对当前关节角的目标增量每步增量被限制在[-0.1, 0.1]弧度且动作会经过normalize_actionTrue的归一化处理映射到[-1, 1]更利于神经网络策略的训练收敛。两者均使用stiffness100、damping10的 PD 增益且sets_target_qpos True即控制器直接写入目标关节位置并由 PhysX 驱动器跟踪。在创建环境时通过control_mode参数即可切换例如env gymnasium.make( EmptyEnv-v1, robot_uidsgooglerobot, control_modepd_joint_delta_pos, obs_modestate, )可视化与碰撞模型以下四张渲染图分别展示了 Google Robot 的视觉网格Visual Meshes与碰撞网格Collision Meshes的正视、侧视效果。碰撞图中绿色表示凸包网格Convex Mesh蓝色表示基础图元形状Primitive Shape Mesh可用于检查机器人与物体、机器人自身连杆之间的碰撞外形是否合理这些图片由 docs/generate_robot_docs.py 中的capture_images函数自动拍摄脚本会用EmptyEnv加载该机器人从机器人包围盒的对角线方向架设相机确保机器人大致占满画面并分别渲染front正视与side侧视两个视角碰撞图则是通过遍历每个连杆的PhysxRigidBaseComponent碰撞形状、用绿/蓝/红材质重建碰撞几何后再次渲染得到的。机器人总览图集含缩略图位于 docs/source/robots/index.md。在任务环境中使用 Google Robot虽然googlerobot目前在 ManiSkill 预置任务中尚未被直接选用mani_skill/envs/tasks 下搜索不到googlerobot的任务引用但它已作为通用机器人资产向所有任务开放。最直接的验证方式是在空环境中加载它import gymnasium as gym import mani_skill.envs from mani_skill.utils.visualization.misc import observations_to_images env gym.make(EmptyEnv-v1, robot_uidsgooglerobot, obs_modergb) obs, _ env.reset() print(自由度数量:, env.agent.robot.dof) # 应为 15 print(支持的控制模式:, env.agent.supported_control_modes)env.agent.robot.dof返回 15与文档页标注的自由度数一致supported_control_modes则来自BaseAgent.__init__中list(self._controller_configs.keys())输出为[pd_joint_pos, pd_joint_delta_pos]。在此基础上你可以参照 docs/source/user_guide/tutorials/custom_tasks 的教程将其接入自定义抓取、操作任务或直接使用 mani_skill/envs/tasks/empty_env.py 验证控制器行为。局限性与使用建议综合文档与源码使用googlerobot时有几点需要留意质量评级为 B动力学参数“稳定但部分不真实”若用于 sim2real 或需要高保真动力学的研究应结合 docs/source/user_guide/tutorials/sim2real 文档重新做系统辨识暂无移动底盘源码 TODO 明确标注未来要“Add mobile base, model it properly based on real2sim”当前模型更适合桌面级双臂操作实验而非移动操作mobile manipulation任务资产需单独下载URDF 与网格不随主包分发首次使用必须执行python -m mani_skill.utils.download_asset googlerobot否则加载时会因找不到 mani_skill/utils/assets/data.py 中登记的资产而失败。总体而言Google Robot 是 ManiSkill 机器人库中一款开箱即用、自带顶部相机、支持两种 PD 关节控制模式的 15 自由度双臂平台适合作为双臂桌面操作任务的快速仿真载体也是学习如何用BaseAgent子类 register_agent注册自定义机器人的简洁参考实现。【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考