ManiSkill 演示指南:从特性视频画廊到开箱即用的 Demo 脚本实战
【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill
本篇技术指南以 ManiSkill 的 Demos 章节为核心,系统梳理官方提供的两类演示资源:一类是展示并行渲染、异构仿真、视觉 Sim2Real、遥操作等核心能力的视频画廊;另一类是可以不加一行代码直接运行的 Demo 脚本(随机动作演示、GPU 仿真基准、点云/分割/相机纹理可视化等)。读完本文,你将掌握每个演示命令的完整参数含义、底层调用链与源码实现细节,能够按需复现 ManiSkill 的绝大多数功能演示。
关联文档位于 demos/index.md,它作为导航入口指向两个子页面:演示视频画廊 gallery.md 与 可运行演示脚本 scripts.md。本文按"画廊 → 脚本"的主线展开,并结合 mani_skill/examples/ 目录下的源码做纵深解读。
一、演示视频画廊:一览 ManiSkill 的核心能力
ManiSkill 通过开源代码生成了大量演示视频,汇集在 gallery.md 中。这些视频覆盖了框架的几大标志性特性,是理解 ManiSkill 能力边界的最快途径。仓库内figures/environment_demos/目录也存放了各任务对应的.mp4原始视频文件(例如AnymalC-Reach-v1_rt.mp4、PickCube-v1_rt.mp4、StackCube-v1_rt.mp4等),画廊视频与之一一对应。
1.1 并行渲染(Parallel Rendering)
画廊首个视频展示的是由视觉 RL 策略控制的 AnymalC 四足机器人走向目标的画面,呈现了1024 个环境在 GPU 上并行渲染的子集效果。这是 ManiSkill GPU 并行化能力的直观体现——渲染与仿真都在 GPU 端批量进行,而不是逐环境串行。
1.2 异构仿真(Heterogeneous Simulation)
第二个视频展示了移动操作机器人 Fetch 并行开启多个自由度(DOF)不同的柜门:在同一个 GPU 仿真中同时模拟不同几何体与不同构型的关节机构。视频中的机器人由一个 state-based RL 策略控制,该策略在一张 4090 GPU 上仅训练约 15 分钟即可习得。这一特性正是"异构并行"(每个并行环境拥有不同物体/关节配置)的体现,详见 GPU 仿真概念。
1.3 快速视觉训练(Fast Visual Training Speed)
画廊用 PickCube 与 PushT 两个任务对比了状态输入与视觉输入的训练速度(单张 4090 GPU、PPO 算法):
| 任务 | 状态输入 | 视觉输入 | 并行环境数(状态/视觉) |
|---|---|---|---|
| PickCube | 约 1 分钟 | 约 10 分钟 | 4096 / 1024 |
| PushT | 约 5 分钟 | 约 50 分钟 | 4096 / 1024 |
这一数据直接支撑了 performance_benchmarking.md 中的性能基准结论,也说明 GPU 并行仿真对样本效率的显著提升。
1.4 基于视觉的零样本 Sim2Real 操作
画廊还演示了使用约 300 美元的低成本Koch v1.1机械臂配合 LeRobot 硬件接口完成的零样本 Sim2Real 结果:策略使用 PPO,在 RGB 相机输入与机器人本体感知数据上、于一张 4090 GPU 上训练约一小时(带域随机化的仿真环境),随后直接部署到真实世界。
- 真实世界未剪辑评测:PickCube 任务 1 倍速评测中 18/20 次成功(成功定义为拿起方块并移回静止位置),且 20/20 次均能抓住方块;同时还出现了一些未专门训练的行为(如抓起非方块形状物体),官方声明不保证此类泛化总是有效。
- 分布外(OOD)评测:同一策略在未见过的物体形状上仍能完成 PickCube。
- Reset 分布:并排对比了"仿真无叠加 / 仿真叠加 / 真实世界"三种 Reset 分布,展示域随机化(不同方块尺寸、颜色、位姿)在仿真与真实世界中的一致性。
1.5 Real2Sim 评测环境
从 SIMPLER 项目移植了部分 Real2Sim 评测环境,画廊展示了 4 种不同的视觉-语言-动作(VLA)模型在 4 个不同任务上的评测视频(原视频来自 SIMPLER)。这些视频只是128 个并行仿真与渲染环境的子集,用于大规模评测 VLA 策略。
1.6 遥操作(Teleoperation)
最灵活的遥操作工具是基于VR(虚拟现实)的方案:使用 Meta Quest 3 对双臂五指灵巧手进行遥操作,集成系统支持60 Hz 的 4K 立体视频流,延迟低、操作流畅。相关配套代码正在整理开源中。
二、Demo 脚本总览:快速测试与演示
在 scripts.md 中,官方整理了一批"不加代码即可运行"的快速演示脚本,全部位于mani_skill/examples/目录下,以python -m mani_skill.examples.<模块>形式调用。下面逐一展开每个脚本的用法、参数与源码细节。
三、随机动作演示(demo_random_action)
最快的演示是随机动作脚本,先运行-h查看完整参数列表:
python -m mani_skill.examples.demo_random_action -h对应的源码 demo_random_action.py 使用tyro解析参数,其Args数据类完整定义了以下参数:
| 参数 | 别名 | 默认值 | 说明 |
|---|---|---|---|
env_id | -e | PushCube-v1 | 要仿真的任务环境 ID |
obs_mode | -o | none | 观测模式 |
robot_uids | -r | None | 机器人 UID,逗号分隔可多机器人,空串表示无智能体;不传则用环境默认机器人 |
sim_backend | -b | auto | 仿真后端:auto/cpu/gpu |
render_backend | -rb | gpu | 渲染后端:gpu/cpu/none |
reward_mode | — | None | 奖励模式 |
num_envs | -n | 1 | 并行环境数量 |
control_mode | -c | None | 控制模式 |
render_mode | — | rgb_array | 渲染模式 |
shader | — | default | 相机着色器:minimal(最快)/rt(光线追踪)/rt-fast(更快但质量略低) |
record_dir | — | None | 视频录制保存目录 |
pause | -p | False | 打开 GUI 后自动暂停仿真 |
quiet | — | False | 关闭详细输出 |
seed | -s | None | 随机动作与仿真种子(可传整数或整数列表) |
从源码看,脚本的核心逻辑(demo_random_action.py)是:
- 根据
render_mode == "human"决定是否启用parallel_in_single_scene(并行环境共用同一场景的 GUI 渲染);若观测模式为视觉类(sensor_data/rgb/rgbd/depth/point_cloud)则自动关闭,因为 GUI 无法渲染并行视觉观测。 - 将
shader写入sensor_configs、human_render_camera_configs与viewer_camera_configs,实现渲染质量统一。 - 通过
gym.make(env_id, **env_kwargs)创建环境;若指定了record_dir,则用RecordEpisode包装以录制视频。 - 循环
env.action_space.sample()采样随机动作并env.step,在human模式下每步渲染,非human模式则在terminated | truncated时退出。
3.1 推荐演示一:ReplicaCAD 真实感场景
ReplicaCAD 数据集场景示例(先下载资产,再运行):
python -m mani_skill.utils.download_asset "ReplicaCAD" python -m mani_skill.examples.demo_random_action -e "ReplicaCAD_SceneManipulation-v1" \ --render-mode="rgb_array" --record-dir="videos" # 无头运行并保存视频 python -m mani_skill.examples.demo_random_action -e "ReplicaCAD_SceneManipulation-v1" \ --render-mode="human" # 带 GUI 运行如需开启光线追踪以获得更照片级真实的渲染,可追加--shader="rt"或--shader="rt-fast":
python -m mani_skill.examples.demo_random_action -e "ReplicaCAD_SceneManipulation-v1" \ --render-mode="human" --shader="rt-fast" # 更快的光线追踪选项,质量略低资产下载命令由 download_asset.py 实现,其底层通过 Hugging Face 数据集快照下载(snapshot_download),数据组注册信息位于 mani_skill/utils/assets/data.py,支持按环境 ID 自动关联所需数据组;可用环境变量MS_SKIP_ASSET_DOWNLOAD_PROMPT=1跳过交互式确认。对应的光线追踪演示视频见仓库 fetch_random_action_replica_cad_rt.mp4。
3.2 推荐演示二:多机器人任务
python -m mani_skill.examples.demo_random_action -e "TwoRobotStackCube-v1" \ --render-mode="human"TwoRobotStackCube-v1需要两个机器人协作叠方块。源码中robot_uids支持以逗号分隔传入多个 UID(见 demo_random_action.py),当只传一个时会自动退化为单元素元组。SAPIEN GUI 中的双机器人 StackCube 任务实况如下:
3.3 推荐演示三:灵巧手任务
python -m mani_skill.examples.demo_random_action -e "RotateValveLevel2-v1" \ --render-mode="human"RotateValveLevel2-v1属于灵巧操作(dexterity)任务,要求灵巧手旋转阀门,对应截图见 rotatevalvelevel2.png。
3.4 推荐演示四:触觉感知任务
python -m mani_skill.examples.demo_random_action -e "RotateSingleObjectInHandLevel3-v1" \ --render-mode="human"该任务模拟触觉(tactile)感知,对应截图见 rotatesingleobjectinhand.png。ManiSkill 的触觉传感能力来自 allegro 手等机器人上的触觉传感器配置,具体可参考 机器人文档。
3.5 快速体验异构并行仿真
官方提示:若要快速演示"每个并行环境拥有不同物体与不同自由度关节"的异构仿真能力,请直接使用下一节的 GPU 仿真脚本(见 scripts.md)。
四、GPU 仿真基准(gpu_sim)
ManiSkill 3 的核心卖点是 GPU 并行仿真。要基准测试 PickCube-v1 在4096 个并行环境下的仿真速度:
python -m mani_skill.examples.benchmarking.gpu_sim -e "PickCube-v1" -n 4096要保存"智能体实际获得的视觉观测"(本例为 rgb 与 depth)视频:
python -m mani_skill.examples.benchmarking.gpu_sim -e "PickCube-v1" -n 64 \ --save-video --render-mode="sensors"官方在脚本注释中给出实测参考:单张 4090 上可达3000+ FPS,增加环境数可进一步提升 FPS;将--render-mode="rgb_array"可切换到更高画质的相机渲染。对应仓库内视频见 mani_skill_gpu_sim-PickCube-v1-num_envs=16-obs_mode=state-render_mode=sensors.mp4。
4.1 异构并行仿真演示
下面的命令展示两个"每个并行环境物体/关节配置都不同"的任务:
python -m mani_skill.examples.benchmarking.gpu_sim -e "PickSingleYCB-v1" -n 64 \ --save-video --render-mode="sensors" python -m mani_skill.examples.benchmarking.gpu_sim -e "OpenCabinetDrawer-v1" -n 64 \ --save-video --render-mode="sensors"其中OpenCabinetDrawer-v1的每个并行环境都采样了不同几何构型的柜子抽屉,示例视频见 mani_skill_gpu_sim-OpenCabinetDrawer-v1-num_envs=16-obs_mode=state-render_mode=sensors.mp4。
4.2 gpu_sim 源码要点
gpu_sim.py 的参数说明(节选关键项):
| 参数 | 默认值 | 说明 |
|---|---|---|
-e / --env-id | PickCube-v1 | 环境 ID |
-n / --num-envs | 1024 | 并行环境数 |
--cpu-sim | False | 是否使用 CPU 仿真(使用AsyncVectorEnv多进程包装) |
--save-video | False | 是否保存视频 |
--save-results | None | 结果 CSV 保存路径 |
--render-mode | rgb_array | sensors保存全部传感器数据(rgb/depth),rgb_array为高质量渲染 |
--control-freq/--sim-freq | 60/120 | 控制频率与仿真频率 |
--num-cams/--cam-width/--cam-height | None | 基准环境的相机数量与分辨率 |
其核心流程(gpu_sim.py):
env.step预热一步后,以Profiler对 1000 步随机动作循环计步(env.step基准)。- 若环境存在
fixed_trajectory预定义动作序列,则额外执行固定轨迹基准,并支持 "shake" 抖动测试(用于检验抓取/接触稳定性,见 gpu_sim.py)。 - 再对 1000 步
env.step + env.reset混合循环计步,得到含重置开销的综合指标。 --save-video时用tile_images将sqrt(num_envs)个环境画面拼成网格,以 30 FPS 输出到./videos/ms3_benchmark/。--save-results会把环境 ID、观测模式、环境数、控制模式、GPU 型号等写入 CSV。
注意:源码注释明确警告--save-video会显著拖慢速度并污染基准结果(见 gpu_sim.py),因此做正式性能基准时不要同时开视频保存。
五、交互式控制:点击拖拽遥操作
Click+Drag 遥操作是最直观的人机交互工具:在 GUI 中点击并拖拽 Panda 机械臂的末端执行器,按n移动到拖拽位置,按g切换抓取开合,重复操作即可完成任务;按q退出并保存结果视频。
python -m mani_skill.examples.teleoperation.interactive_panda -e "StackCube-v1"从 interactive_panda.py 源码可以看到,该脚本基于PandaArmMotionPlanningSolver(运动规划求解器)生成拖拽轨迹,并:
- 以
control_mode="pd_joint_pos"创建环境,robot_uids支持panda与panda_stick; - 用
RecordEpisode包装环境,将遥操作轨迹以source_type="teleoperation"、source_desc="teleoperation via the click+drag system"元数据保存到demos/<env_id>/teleop/; - 默认使用
rt-fast着色器渲染视图与视频。
该工具同时也是一套演示数据采集工具,完整键盘操作说明见 遥操作章节:按c结束当前轨迹并保存,按h弹出帮助菜单,按q退出并生成演示视频。运行效果见 teleop-stackcube-demo.mp4。
六、运动规划求解演示
ManiSkill 为 Panda 机械臂预置了若干任务的运动规划求解器,可直接运行并录制演示轨迹:
python -m mani_skill.examples.motionplanning.panda.run -e "PickCube-v1" # 无头运行,仅保存视频 python -m mani_skill.examples.motionplanning.panda.run -e "StackCube-v1" --vis # 打开 GUI python -m mani_skill.examples.motionplanning.panda.run -h # 查看帮助与可用任务从 run.py 的MP_SOLUTIONS字典可以看到当前内置求解器的完整任务清单:
DrawTriangle-v1、PickCube-v1、StackCube-v1、PegInsertionSide-v1、PlugCharger-v1、PlaceSphere-v1、PushCube-v1、PullCubeTool-v1、LiftPegUpright-v1、PullCube-v1、DrawSVG-v1、StackPyramid-v1。
脚本关键参数(run.py):
| 参数 | 默认值 | 说明 |
|---|---|---|
-e / --env-id | PickCube-v1 | 运行求解器的任务,必须是上述清单之一 |
-n / --num-traj | 10 | 生成轨迹数量 |
--only-count-success | False | 只保存成功轨迹,直到攒够num_traj条 |
--vis | False | 打开 GUI 实时可视化求解过程 |
--save-video | False | 是否保存视频 |
--shader | default | 渲染着色器 |
--record-dir | demos | 轨迹保存目录 |
--num-procs | 1 | 轨迹回放并行进程数(仅 CPU 后端) |
生成的轨迹文件为.h5格式(时间戳命名),可与 轨迹回放 工具配合使用。GUI 运行效果见 motionplanning-stackcube.mp4。更完整的运动规划说明见 运动规划章节。
七、Real2Sim 评测
ManiSkill 3 支持通过 GPU 仿真 + 渲染对 RT-1、Octo 等 VLA 策略做超高速 Real2Sim 评测。支持的评测环境详见 数字孪生任务页;RT-1 与 Octo 的推理代码见 SimplerEnv 项目的maniskill3分支(外部项目,需另行获取)。仓库的 digital_twins 目录下可看到对应环境实现(如PutCarrotOnPlateInScene、PutEggplantInBasketScene、StackGreenCubeOnYellowCubeBakedTexInScene等),配套演示视频位于 figures/environment_demos/digital_twins/。
八、可视化点云数据(demo_vis_pcd)
点云可视化需要图形显示环境,且依赖pyglet:
pip install "pyglet<2" # 务必安装该依赖 python -m mani_skill.examples.demo_vis_pcd -e "StackCube-v1"从 demo_vis_pcd.py 源码看,脚本以obs_mode="pointcloud"创建环境,每步取出obs["pointcloud"]["xyzw"](坐标)与obs["pointcloud"]["rgb"](颜色)构造成trimesh.points.PointCloud,再取第一个相机的cam2world_gl位姿与 FOV 构建trimesh.scene.Camera,用trimesh.Scene(...).show()弹出交互式 3D 窗口;--cam-width/--cam-height可覆盖相机分辨率,-s可设随机种子。
九、可视化分割数据(demo_vis_segmentation)
运行以下命令查看分割数据,可指定--id只保留选中物体/部件的掩码:
python -m mani_skill.examples.demo_vis_segmentation -e "StackCube-v1" python -m mani_skill.examples.demo_vis_segmentation -e "StackCube-v1" \ --id id_of_part # 屏蔽除选中部件外的所有内容从 demo_vis_segmentation.py 源码可以看到其工作机制:
- 以
obs_mode="rgb+depth+segmentation"创建环境,先打印当前环境的segmentation_id_map(ID 到 Actor/Link 名称的映射,0为背景); --id既支持整数 ID,也支持直接传物体/部件名称,脚本会自动通过reverse_seg_id_map反查 ID(demo_vis_segmentation.py);- 使用内置的 48 色高对比度调色板(由 iwanthue 生成)对每个分割 ID 着色,并通过
visualization.tile_images把 RGB 与分割图并排平铺显示。
十、可视化相机纹理(demo_vis_textures)
可可视化任意相机纹理组合(RGB、Depth、Albedo、Normal 等)。默认default着色器几乎能输出所有可用纹理,详见 相机与着色器页:
python -m mani_skill.examples.demo_vis_textures -e "StackCube-v1" -o rgb+depth python -m mani_skill.examples.demo_vis_textures -e "OpenCabinetDrawer-v1" -o rgb+depth+albedo+normal[-o / --obs-mode] 参数直接决定观测模式,rgb、depth、albedo、normal等纹理可以任意叠加。从 demo_vis_textures.py 源码看,脚本遍历每帧obs["sensor_data"][cam]下的全部纹理:uint8类型直接显示,浮点类型(如深度)先做归一化(data - min) / (max - min)再映射为灰度/彩色图,最后平铺渲染。
十一、可视化 Reset 分布(demo_reset_distribution)
任务对 RL / IL 算法的难度很大程度上取决于 Reset 分布(即反复env.reset()得到的初始状态分布)。要查看任意任务的 Reset 分布并保存视频:
python -m mani_skill.examples.demo_reset_distribution -e "PegInsertionSide-v1" --record-dir="videos"从 demo_reset_distribution.py 源码看,脚本参数包括:-n / --num-resets(默认 20,连续重置次数)、--render-mode(rgb_array无头保存 /human打开 GUI)、--record-dir(默认videos/reset_distributions)、--shader。无头模式下,脚本连续执行num_resets次env.reset(),每帧capture_image()后以env.flush_video()输出为<env_id>_reset_distribution.mp4;GUI 模式下则按r手动重置、按q退出。示例视频见 PegInsertionSide-v1_reset_distribution.mp4。
十二、可视化任意机器人(demo_robot)
在一个只有地板的空场景中打开查看器显示任意机器人,还可指定预定义关键帧:
python -m mani_skill.examples.demo_robot -r "panda"从 demo_robot.py 源码看,脚本通过gym.make("Empty-v1", robot_uids=...)创建"空环境 + 地板"场景,参数包括:-r / --robot-uid(默认panda)、-k / --keyframe(指定关键帧名称)、--keyframe-actions(以关键帧作为动作)、--random-actions、--zero-actions、--sim-freq(默认 100)、--control-freq(默认 20)。脚本会打印机器人可用关键帧列表,默认展示第一个关键帧;若机器人定义了关键帧(如灵巧手的初始姿态),可直接-k切换查看。
十三、演示脚本的通用运行前提
- 资产下载:涉及具体数据集(如 ReplicaCAD)的任务需先运行
python -m mani_skill.utils.download_asset "名称"下载资产;资产下载与数据组注册的实现见 download_asset.py 与 mani_skill/utils/assets/data.py。 - 环境安装:请先按 安装指南 完成 ManiSkill 安装;GUI 相关演示(
--render-mode="human")需要图形显示环境。 - 渲染模式语义:
rgb_array(高质量相机渲染并录制)、sensors(录制智能体实际观测到的传感器数据,如 rgb/depth)、human(打开 SAPIEN GUI 查看器)。 - 着色器语义:
default(默认,速度快且纹理全)、minimal(最快)、rt(光线追踪、照片级真实)、rt-fast(光线追踪但更快、质量略低)。 - 异构并行能力:各脚本的
-n(num_envs)配合 GPU 仿真后端即可复现"不同环境不同物体/关节"的并行特性,相关概念与基准见 GPU 仿真概念 与 性能基准页。
总结
ManiSkill 的 Demos 章节提供了从"看"到"玩"再到"测"的完整演示链路:视频画廊(gallery.md)浓缩了并行渲染、异构仿真、零样本 Sim2Real、Real2Sim、VR 遥操作等核心能力;脚本集(scripts.md)则把随机动作、GPU 仿真基准、交互式遥操作、运动规划、点云/分割/纹理/Reset 分布可视化等能力封装成一行命令。结合mani_skill/examples/下的源码阅读,你可以深入理解每个演示背后的参数语义与调用链,并在此基础上快速搭建自己的实验与数据采集流程。
【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考