ManiSkill 中的 WidowX AI 腕部相机机器人(widowxai_wristcam)指南:配置、传感器与控制器详解
2026/9/18 21:57:23 网站建设 项目流程

ManiSkill 中的 WidowX AI 腕部相机机器人(widowxai_wristcam)指南:配置、传感器与控制器详解

【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill

导读

本指南以 ManiSkill 官方机器人文档中的widowxai_wristcam(WidowX AI 腕部相机版)为核心,系统讲解该机器人在 GPU 并行化机器人仿真框架中的注册方式、URDF 模型、自由度构成、三种关节 PD 控制器以及安装在夹爪上的 Intel RealSense D405 腕部相机传感器配置。读完本文,你将掌握如何在 ManiSkill 中实例化这一 8 自由度机器人、理解其相机传感器与控制器参数的底层实现,并能在PickCubeWidowXAI-v1等既有任务中正确使用它。

1. 机器人概述:WidowX AI 腕部相机版

widowxai_wristcam是 ManiSkill 内置机器人widowxai(WidowX AI)的变体,区别在于其夹爪上额外挂载了一台 Intel RealSense D405 深度相机,用于第一人称视角的视觉观测。

属性
Robot UIDwidowxai_wristcam
Agent 类WidowXAIWristCam(widowxai_wristcam.py)
基类WidowXAI(widowxai.py)
质量评级B(Stable, but some values are unrealistic,即仿真稳定但部分数值不真实)
自由度(DoF)8
可用控制器pd_joint_delta_pospd_joint_pospd_joint_target_delta_pos
相机1 个腕部相机wrist_camera(Intel RealSense D405 模型)

质量评级参照 机器人文档生成脚本 中定义的等级表(QUALITY_KEY_TO_DESCRIPTION),与 MuJoCo Menagerie 的模型质量分级一致:B 级意味着机器人可以在仿真中稳定运行,但部分动力学数值并非通过系统辨识得到,存在不真实之处。官方建议在将其用于 sim2real 迁移前自行进行系统辨识(system identification)。

注意:机器人各页面文档(包括本页)均由 generate_robot_docs.py 自动生成,脚本从mani_skill.agents.robots模块中反射收集已注册的 Agent 类,读取 robot.json 中的质量元数据,并在EmptyEnv中渲染前后视角的视觉网格与碰撞网格图像。因此文档中的 UID、DoF、控制器列表均为代码自动推导的运行时事实。

2. 模型与自由度:8 个主动关节的来源

机器人的几何与运动学定义来自 URDF 文件{ASSET_DIR}/robots/widowxai/wxai_follower.urdfASSET_DIR为 ManiSkill 资产目录,参见 widowxai_wristcam.py)。

自由度(8)由源码中的关节划分直接决定:

  • 机械臂 7 个关节arm_joint_names):joint_0joint_5六个转动关节 + 一个left_carriage_joint
  • 夹爪 1 个主动关节gripper_joint_names):left_carriage_joint

关键细节:夹爪只控制left_carriage_joint这一个控制关节,另一个right_carriage_joint是镜像跟随关节(mimicked joint),通过 URDF 的传动关系跟随左侧运动,不需要单独驱动。源码注释明确写道 "only control the control joint, not the mimicked one"。这也是"8 自由度 = 7 臂 + 1 夹爪"的由来。

此外,末端执行器链为ee_gripper_linkee_link_name),_after_loading_articulation钩子中缓存了gripper_leftgripper_righttcp(TCP 点)等链接引用,供tcp_postcp_poseis_graspingis_static等辅助 API 使用(见 widowxai.py)。

3. 腕部相机传感器:wrist_camera配置解读

WidowXAIWristCam与基类WidowXAI的唯一差异在于重写了_sensor_configs属性,返回一个CameraConfig(见 widowxai_wristcam.py):

@property def _sensor_configs(self): return [ CameraConfig( uid="wrist_camera", pose=sapien.Pose(p=[0, 0, 0], q=[1, 0, 0, 0]), width=128, height=128, fov=np.pi / 2, near=0.01, far=100, mount=self.robot.links_map["camera_link"], ) ]

各参数含义(与 camera.py 中CameraConfig字段一一对应):

参数说明
uidwrist_camera相机唯一标识,观测字典中的键名
pose单位位姿p=[0,0,0], q=[1,0,0,0]相机在挂载点(camera_link)坐标系下的局部位姿,即零偏移
width/height128 / 128渲染分辨率(像素),相对较低以控制 GPU 显存与算力开销
fovnp.pi / 2(90°)垂直视场角;CameraConfig要求fovintrinsic二选一
near/far0.01 / 100近/远裁剪平面(米),相机与 D405 一样适合近距离观测
mountcamera_link挂载到的机器人连杆,相机全局位姿 =mount.pose * local_pose

相机通过mount参数挂载到camera_link上,因此会随夹爪一起运动,提供手眼(eye-in-hand)视角,是抓取类视觉任务最常用的观测形式。mount参数支持传ActorLink,运行时由 Camera 类 在场景中创建并自动跟随连杆运动。

4. 控制器配置:三种关节 PD 控制模式

机器人的_controller_configs在基类 widowxai.py 中定义,全部基于PDJointPosControllerConfig,机械臂与夹爪共享相同的刚度/阻尼/力限参数:

参数
arm_stiffness1e3
arm_damping1e2
arm_force_limit100 N
gripper_stiffness1e3
gripper_damping1e2
gripper_force_limit100 N

三种控制模式的差异集中在机械臂部分(夹爪始终使用gripper_pd_joint_pos,位置范围[0.0, 0.044]):

  1. pd_joint_pos:直接位置控制,lower=None, upper=Nonenormalize_action=False,动作即目标关节位置;
  2. pd_joint_delta_pos:增量位置控制,动作范围[-0.1, 0.1](弧度),use_delta=True, use_target=False,动作表示相对当前关节位置的偏移量;
  3. pd_joint_target_delta_pos:目标增量位置控制,是模式 2 的深拷贝,仅将use_target=True,动作表示相对于目标位置的增量,控制器内部维护目标状态。

这三种模式分别适合不同的使用场景:直接位置控制适合规划/脚本控制;增量控制更贴合强化学习输出小幅动作的习惯,其中pd_joint_target_delta_pos额外引入了目标平滑语义。set_control_mode的实现在 base_agent.py 中:模式创建后会对所有连杆禁用重力以"平衡被动力"(PhysX 下通过 disable_gravity 实现),因此三种模式均能保持机械臂稳定悬停。

5. 注册机制与资产下载

WidowXAIWristCam通过装饰器注册进 ManiSkill:

@register_agent(asset_download_ids=["widowxai"]) class WidowXAIWristCam(WidowXAI):

registration.py 中的register_agent会把类按uid写入全局REGISTERED_AGENTS字典,并同时将asset_download_ids登记到assets.DATA_GROUPS。这意味着:

  • 你可以直接用字符串"widowxai_wristcam"作为robot_uids创建环境,无需导入具体类;
  • 首次加载时若 URDF 资产不存在,base_agent.py 会提示是否下载widowxai资产组。

6. 在任务中的实际使用:PickCubeWidowXAI-v1

仓库中的PickCubeWidowXAI-v1任务即以widowxai机器人运行(pick_cube.py),其环境类继承自PickCubeEnv

@register_env("PickCubeWidowXAI-v1", max_episode_steps=50) class PickCubeWidowXAIEnv(PickCubeEnv): def __init__(self, *args, **kwargs): super().__init__(*args, robot_uids="widowxai", **kwargs)

widowxai_wristcam是该机器人的相机增强版本。使用方式与其他机器人一致,例如:

import mani_skill.envs import gymnasium as gym env = gym.make( "PickCube-v1", robot_uids="widowxai_wristcam", # 使用腕部相机版机器人 obs_mode="rgbd", # 或 "state"、"point_cloud" 等 control_mode="pd_joint_delta_pos",# 文档列出的三种模式之一 render_mode="sensors", ) obs, _ = env.reset()

要点说明:

  • robot_uidswidowxai_wristcam时,观测中将包含wrist_camera键对应的 128×128 相机图像(RGB/深度/分割等模态由obs_mode决定);
  • control_mode必须是文档列出的三种之一:pd_joint_delta_pos(默认)、pd_joint_pospd_joint_target_delta_pos,否则会在 set_control_mode 中断言报错;
  • PickCube 任务针对不同机器人有独立的调参配置(pick_cube_cfgs.py),WidowXAI 使用较小的立方体(cube_half_size=0.018),更贴合其小夹爪的尺寸。

另外,若希望在已有环境上直接启用腕部相机,可在环境初始化时通过sensor_configs覆盖相机参数(如把分辨率提升到 256×256),update_sensor_configs_from_dict(camera.py)支持按相机 uid 或全局批量修改CameraConfig字段。

7. 视觉与碰撞模型

文档页面中展示的四张渲染图(正面/侧面视角)展示了该机器人的视觉网格(Visual Meshes)与碰撞网格(Collision Meshes),对应图片存放于:

  • front_visual.png / side_visual.png
  • front_collision.png / side_collision.png

这些图像由 generate_robot_docs.py 在EmptyEnv中渲染生成。碰撞网格的着色规则为:绿色表示凸包网格(Convex Mesh),蓝色表示基本形状(球体、盒体、胶囊、圆柱、平面等 Primitive Shape Mesh)。渲染脚本使用 RT 光线追踪着色器(shader_pack="rt",1024×1024)进行捕捉,因此图片能真实反映机器人装载后的外观与碰撞几何。在 ManiSkill 的机器人总览页面(robots/index.md)中,点击对应缩略图即可进入本页。

8. 质量评级与使用建议

widowxai_wristcam的质量评级为B(Stable, but some values are unrealistic),这一评级来源于 robot.json 元数据。含义是:机器人在仿真中可以稳定运行、外观与运动正常,但诸如摩擦力、关节刚度等参数未经过严格的系统辨识。因此:

  • 用于 RL 训练与算法对比是安全的,B 级机器人完全可用于研究用途;
  • 若目标是将策略迁移到真实 WidowX AI 机器人(sim2real),官方在 robots/index.md 中建议自行执行系统辨识,并根据真实硬件校准摩擦与驱动参数;
  • 与所有 ManiSkill 机器人一样,无法稳定仿真的机器人根本不会包含在框架中,因此 B 级本身已代表"开箱即用"。

总结

widowxai_wristcam在 ManiSkill 中是一个轻量、实用的视觉抓取研究平台:8 自由度(7 轴臂 + 1 夹爪)、三种 PD 关节控制模式、夹爪挂载的 128×128 D405 风格腕部相机,配合PickCubeWidowXAI-v1等既有任务即可快速开展视觉策略实验。其完整实现可追溯至 widowxai_wristcam.py 与 widowxai.py 两个文件,本文所述所有参数均可直接在这些源码与 camera.py、base_agent.py 中验证。

【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill

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

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

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

立即咨询