5分钟跑通 ManiSkill:GPU 并行仿真的从零到可用路径
【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill
ManiSkill 是基于 SAPIEN(其底层物理引擎)构建的机器人操作仿真框架,遵循标准的 Gymnasium(强化学习环境接口),核心能力是 GPU 并行仿真与并行渲染,一块显卡可以同时跑成百上千个环境。这篇是 ManiSkill 快速上手教程:装好环境、跑通最小示例,再把最常用配置项和常见坑过一遍。
📦 环境准备与安装
这一节列好前置依赖和安装命令,全程不超过 5 分钟。
前置依赖清单:
- Python >= 3.9
- GPU 并行仿真与渲染需要 Linux + NVIDIA GPU;Windows 和 macOS 只能跑 CPU 仿真
- 渲染需要 Vulkan 驱动,纯数值仿真可以跳过
安装命令:
pip install --upgrade mani_skill # 主包,当前版本 3.0.1 pip install torch # 装与系统匹配的 torch 版本 sudo apt-get install libvulkan1 # Ubuntu 上安装 Vulkan 驱动如果希望追新,还有一个每天更新的夜间构建:pip install mani_skill-nightly torch。
验证方式:运行python -m mani_skill.examples.demo_random_action,能看到随机策略在默认的 PickCube 任务里动起来,说明仿真和渲染链路都通了。
▶️ 最小可运行示例
最小闭环是:让一个随机策略在 PickCube 任务里跑起来,验证环境、观测、动作接口端到端可用。
import gymnasium as gym import mani_skill.envs # 三个参数建环境:任务 ID、观测模式、控制模式 env = gym.make("PickCube-v1", obs_mode="state", control_mode="pd_ee_delta_pose", render_mode="human") obs, _ = env.reset(seed=0) # 复位到初始状态,seed 保证可复现 for _ in range(100): action = env.action_space.sample() # 随机动作,只为验证接口 obs, reward, terminated, truncated, info = env.step(action) if terminated or truncated: break env.close()这段代码做的事可以概括为三步:用 gym.make 建一个 PickCube-v1 环境(状态观测、末端位姿控制),reset 后进入动作循环,每一步抽一个随机动作喂给 env.step。它不涉及任何训练,只负责确认整条链路能跑。返回的数据默认是带批维度的 torch 张量,想要普通 numpy 数据可以外层包一个 CPUGymWrapper。没有显示器的服务器上,把 render_mode 去掉即可无头验证。
🧩 核心能力拆解
单环境跑起来之后,这个项目区别于传统仿真器的三个能力,都收敛在几个参数上,逐个看。
一个参数 num_envs 开出 16 路并行仿真
把 num_envs 设为大于 1,环境会自动切到 GPU 并行仿真,观测和动作空间前面会多出一个批维度。
env = gym.make("PickCube-v1", obs_mode="state", num_envs=16) # obs 的 shape 变为 (16, ...),一次 step 同时推进 16 个环境这是大规模数据采集和强化学习训练的用法,官方基准里 state 仿真在 4090 上能到 20 万+ FPS。
改一行 obs_mode 从 state 切到 rgbd
obs_mode 决定观测形态,视觉类模式是 rgb / depth / segmentation 的组合,rgbd 是 rgb+depth 的缩写。
env = gym.make("PickCube-v1", obs_mode="rgbd") # 也可以写 "rgb+depth+segmentation" 或 "pointcloud"训练视觉策略或采集图像数据时切到 rgbd 即可。注意返回的图像没有做归一化,进网络前要先自己缩放。
换机器人一步到位:robot_uids 参数
部分任务支持用 robot_uids 换掉默认机器人,传元组还能让多台机器人同时进同一场景。
env = gym.make("PickCube-v1", robot_uids="fetch")用不同机器人对比同一任务上的算法时,这个参数省掉了新建任务的麻烦;不是所有任务都支持任意机器人,以任务说明为准。
⚙️ 配置速查
下面是前几日用得最多的 5 个参数,其余选项见 quickstart 文档。
| 配置项 | 可选值 | 典型用途 |
|---|---|---|
| env_id | PickCube-v1、PushCube-v1、PegInsertionSide-v1 | 指定任务,全量列表见 任务页 |
| num_envs | 1、16、1024… | 1 为 CPU 单环境,大于 1 启用 GPU 并行 |
| obs_mode | state、state_dict、rgbd、pointcloud | 数值强化学习用 state,视觉任务用 rgbd |
| control_mode | pd_joint_delta_pos、pd_ee_delta_pose | 关节级增量控制或末端位姿级控制 |
| render_mode | human、rgb_array、None | 开 GUI 展示、返回渲染图、不渲染 |
| robot_uids | "fetch"、"widowxai"、元组 | 换机器人形态或多机配置 |
🕳️ 新手最常踩的 3 个坑
这三个问题覆盖了大部分"装上了却跑不起来"的情况,都按现象、原因、一行解法来说。
1. 首次运行提示下载资产或报文件缺失现象:某些任务第一次运行时报错,或弹出一串下载确认。 原因:机器人模型与场景资产没有打包进 pip 包,需要预先下载到~/.maniskill/data。 一行解法:python -m mani_skill.utils.download_asset PickCube-v1提前下载,位置可用MS_ASSET_DIR环境变量指定。
2. 渲染黑屏或 Vulkan 相关报错现象:窗口一片黑,或出现ErrorInitializationFailed这类错误。 原因:GPU 的 Vulkan 驱动没装好或配置不对,Ubuntu 上常见 NVIDIA 的 ICD 配置文件缺失。 一行解法:sudo apt-get install libvulkan1,再用vulkaninfo验证是否列出设备。
3. GPU 并行开不起来现象:num_envs 设为大于 1 时报错,或提示找不到 CUDA 设备。 原因:GPU 仿真依赖 SAPIEN 的 CUDA 后端,目前只有 Linux + NVIDIA 支持。 一行解法:改回num_envs=1用 CPU 仿真过渡,或换一台 Linux + NVIDIA 的机器。
🧭 接下来可以探索什么
最小闭环跑通之后,下面三个方向都有现成代码,不需要从零写起。
- 跑一遍强化学习 baseline:PPO 与 SAC 的训练脚本在
examples/baselines/ppo/和examples/baselines/sac/,直接按脚本里的命令跑。 - 遥操作或运动规划采集数据:
mani_skill/examples/teleoperation/和mani_skill/examples/motionplanning/里的脚本开箱即用。 - 写自己的任务:从
mani_skill/envs/template.py的模板抄结构即可,完整流程见 custom_tasks 教程。
上面最小示例跑通后,后面的路就通了。
【免费下载链接】ManiSkillManipulation Skill Framework, an open source GPU parallelized robotics simulator and benchmark项目地址: https://gitcode.com/GitHub_Trending/ma/ManiSkill
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考