ManiSkill 演示指南:从特性视频画廊到开箱即用的 Demo 脚本实战
2026/9/18 17:28:15 网站建设 项目流程

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.mp4PickCube-v1_rt.mp4StackCube-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-ePushCube-v1要仿真的任务环境 ID
obs_mode-onone观测模式
robot_uids-rNone机器人 UID,逗号分隔可多机器人,空串表示无智能体;不传则用环境默认机器人
sim_backend-bauto仿真后端:auto/cpu/gpu
render_backend-rbgpu渲染后端:gpu/cpu/none
reward_modeNone奖励模式
num_envs-n1并行环境数量
control_mode-cNone控制模式
render_modergb_array渲染模式
shaderdefault相机着色器:minimal(最快)/rt(光线追踪)/rt-fast(更快但质量略低)
record_dirNone视频录制保存目录
pause-pFalse打开 GUI 后自动暂停仿真
quietFalse关闭详细输出
seed-sNone随机动作与仿真种子(可传整数或整数列表)

从源码看,脚本的核心逻辑(demo_random_action.py)是:

  1. 根据render_mode == "human"决定是否启用parallel_in_single_scene(并行环境共用同一场景的 GUI 渲染);若观测模式为视觉类(sensor_data/rgb/rgbd/depth/point_cloud)则自动关闭,因为 GUI 无法渲染并行视觉观测。
  2. shader写入sensor_configshuman_render_camera_configsviewer_camera_configs,实现渲染质量统一。
  3. 通过gym.make(env_id, **env_kwargs)创建环境;若指定了record_dir,则用RecordEpisode包装以录制视频。
  4. 循环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-idPickCube-v1环境 ID
-n / --num-envs1024并行环境数
--cpu-simFalse是否使用 CPU 仿真(使用AsyncVectorEnv多进程包装)
--save-videoFalse是否保存视频
--save-resultsNone结果 CSV 保存路径
--render-modergb_arraysensors保存全部传感器数据(rgb/depth),rgb_array为高质量渲染
--control-freq/--sim-freq60/120控制频率与仿真频率
--num-cams/--cam-width/--cam-heightNone基准环境的相机数量与分辨率

其核心流程(gpu_sim.py):

  1. env.step预热一步后,以Profiler对 1000 步随机动作循环计步(env.step基准)。
  2. 若环境存在fixed_trajectory预定义动作序列,则额外执行固定轨迹基准,并支持 "shake" 抖动测试(用于检验抓取/接触稳定性,见 gpu_sim.py)。
  3. 再对 1000 步env.step + env.reset混合循环计步,得到含重置开销的综合指标。
  4. --save-video时用tile_imagessqrt(num_envs)个环境画面拼成网格,以 30 FPS 输出到./videos/ms3_benchmark/
  5. --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支持pandapanda_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-v1PickCube-v1StackCube-v1PegInsertionSide-v1PlugCharger-v1PlaceSphere-v1PushCube-v1PullCubeTool-v1LiftPegUpright-v1PullCube-v1DrawSVG-v1StackPyramid-v1

脚本关键参数(run.py):

参数默认值说明
-e / --env-idPickCube-v1运行求解器的任务,必须是上述清单之一
-n / --num-traj10生成轨迹数量
--only-count-successFalse只保存成功轨迹,直到攒够num_traj
--visFalse打开 GUI 实时可视化求解过程
--save-videoFalse是否保存视频
--shaderdefault渲染着色器
--record-dirdemos轨迹保存目录
--num-procs1轨迹回放并行进程数(仅 CPU 后端)

生成的轨迹文件为.h5格式(时间戳命名),可与 轨迹回放 工具配合使用。GUI 运行效果见 motionplanning-stackcube.mp4。更完整的运动规划说明见 运动规划章节。

七、Real2Sim 评测

ManiSkill 3 支持通过 GPU 仿真 + 渲染对 RT-1、Octo 等 VLA 策略做超高速 Real2Sim 评测。支持的评测环境详见 数字孪生任务页;RT-1 与 Octo 的推理代码见 SimplerEnv 项目的maniskill3分支(外部项目,需另行获取)。仓库的 digital_twins 目录下可看到对应环境实现(如PutCarrotOnPlateInScenePutEggplantInBasketSceneStackGreenCubeOnYellowCubeBakedTexInScene等),配套演示视频位于 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] 参数直接决定观测模式,rgbdepthalbedonormal等纹理可以任意叠加。从 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-modergb_array无头保存 /human打开 GUI)、--record-dir(默认videos/reset_distributions)、--shader。无头模式下,脚本连续执行num_resetsenv.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),仅供参考

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

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

立即咨询