Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/MIUAV/vibe-coding-ros2 --skill maniskill3명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | maniskill3 |
| description | ManiSkill3 机器人操作技能开发 - 高保真操作任务、GPU 加速学习、丰富数据集 |
| argument-hint | maniskill3仿真 OR 机器人操作 OR 操作技能训练 OR 抓取任务 |
| user-invocable | true |
用于 ManiSkill3 机器人操作仿真环境的配置和训练
当需要以下帮助时使用此技能:
# 1. 创建 conda 环境
conda create -n maniskill3 python=3.10
conda activate maniskill3
# 2. 安装 PyTorch
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu121
# 3. 克隆仓库
git clone https://github.com/haosulab/ManiSkill3.git
cd ManiSkill3
# 4. 安装依赖
pip install -e .
# 5. 安装演示环境
pip install -e ".[demo]"
# 运行抓取任务
python -m mani_skill3.examples.demo_basic_env \
--env "PickCube-v1" \
--robot "panda" \
--sim-backend "gpu" # 或 "cpu"
ManiSkill3/
├── mani_skill3/ # 核心库
│ ├── envs/ # 环境实现
│ ├── agents/ # 机器人代理
│ ├── solvers/ # 求解器
│ ├── sensors/ # 传感器
│ └── utils/ # 工具函数
├── examples/ # 示例代码
├── tools/ # 开发工具
├── docs/ # 文档
└── data/ # 数据集
# 支持的机器人
ROBOTS = {
"panda": "Franka Emika Panda",
"allegro": "Allegro Hand",
"shadow_hand": "Shadow Hand",
"xarm": "xArm 7",
"dobot": "Dobot MG400",
"ur5": "Universal Robots UR5",
}
# 配置机器人
from mani_skill3.agents import PandaAgent
agent = PandaAgent(
control_freq=20,
obs_frames=2,
enable_planner=False,
)
# 相机配置
camera_cfg = {
"width": 512,
"height": 512,
"fov": 2.0, # 弧度
"near": 0.01,
"far": 100.0,
"intrinsics": {
"fx": 256,
"fy": 256,
"cx": 256,
"cy": 256,
}
}
# 添加相机
env.add_camera(
name="hand_camera",
config=camera_cfg,
transform=[[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0.1],
[0, 0, 0, 1]]
)
# 物理配置
physics_cfg = {
"sim_backend": "gpu", # gpu 或 cpu
"dt": 0.002, # 时间步长
"gravity": [0, 0, -9.81],
"num_substeps": 2,
# 接触参数
"contact_offset": 0.02,
"rest_offset": 0.001,
"bounce_threshold_velocity": 0.2,
# GPU 求解器
"solver_type": 1, # TGS
"num_position_iterations": 8,
"num_velocity_iterations": 0,
}
# PickCube-v1
env = gym.make("PickCube-v1", robot="panda", render_mode="rgb_array")
# 观察空间
obs = env.reset()
print(f"State: {obs['agent']['state'].shape}") # (19,)
print(f"Image: {obs['main_camera']['rgb'].shape}") # (512, 512, 3)
# 执行动作
action = {
"target_pos": [0.3, 0, 0.1], # 目标位置
"target_quat": [1, 0, 0, 0], # 目标姿态
"gripper": 0.5, # 夹爪开合
}
obs, reward, done, info = env.step(action)
# StackCube-v1
env = gym.make("StackCube-v1", num_envs=16)
# 批量观察
obs = env.reset()
for key in obs:
if isinstance(obs[key], torch.Tensor):
print(f"{key}: {obs[key].shape}")
# PushCube-v1
env = gym.make("PushCube-v1")
# 使用策略
policy = load_policy("push_policy.pt")
action = policy(obs)
obs, reward, done, info = env.step(action)
# 双手机器人配置
env = gym.make(
"TwoPandaStackCube-v1",
num_envs=8,
sim_backend="gpu"
)
# 安装 SB3
pip install stable-baselines3
# 安装 RL Games
pip install rl-games
import torch
import numpy as np
from mani_skill3.envs import ManiSkillEnv
from stable_baselines3 import PPO
from stable_baselines3.common.callbacks import CheckpointCallback
# 创建环境包装器
class ManiSkillWrapper(gym.Wrapper):
def __init__(self, env_id):
super().__init__(gym.make(env_id))
def reset(self, seed=None):
obs = self.env.reset(seed=seed)
return obs
def step(self, action):
return self.env.step(action)
# 训练
model = PPO(
"MlpPolicy",
ManiSkillWrapper("PickCube-v1"),
learning_rate=3e-4,
n_steps=2048,
batch_size=64,
n_epochs=10,
gamma=0.99,
verbose=1,
)
model.learn(total_timesteps=1_000_000)
model.save("policy_pick_cube")
# 行为克隆
from mani_skill3.utils import collect_demos
from torch.utils.data import DataLoader
# 收集演示数据
demos = collect_demos(
env_id="PickCube-v1",
solver="motion_planning",
num_demos=1000,
)
# 创建数据集
dataset = DemonstrationDataset(demos)
# 训练
loader = DataLoader(dataset, batch_size=32, shuffle=True)
for epoch in range(100):
for obs, action in loader:
loss = policy.loss(obs, action)
loss.backward()
optimizer.step()
from mani_skill3.utils import collect_demos
# 使用运动规划器收集演示
demos = collect_demos(
env_id="PickCube-v1",
solver="motion_planning",
num_demos=100,
obs_mode="state", # state, rgb, depth, point_cloud
record_trajectory=True,
)
# 保存演示
from mani_skill3.utils.io import save_demo
save_demo(demos, "demos/pick_cube.pkl")
# 演示数据结构
demo = {
"episode_id": "xxx",
"env_id": "PickCube-v1",
"trajectory": [
{
"observation": {
"agent": {"state": np.array},
"camera": {"rgb": np.array, "depth": np.array}
},
"action": np.array,
"reward": float,
"done": bool,
},
...
],
"info": {
"success": True,
"total_reward": 1.0,
}
}
from mani_skill3.utils.io import load_demo
# 加载演示
demos = load_demo("demos/pick_cube.pkl")
# 遍历演示
for demo in demos:
for step in demo["trajectory"]:
obs = step["observation"]
action = step["action"]
from mani_skill3.utils import evaluate_policy
# 评估策略
results = evaluate_policy(
policy=model,
env_id="PickCube-v1",
num_episodes=100,
render=False,
)
print(f"Success Rate: {results['success_rate']:.2%}")
print(f"Mean Reward: {results['mean_reward']:.2f}")
print(f"Mean Episode Length: {results['mean_episode_length']:.1f}")
# 评估指标
eval_metrics = {
"success_rate": True,
"partial_success_rate": True,
"mean_reward": True,
"std_reward": True,
"mean_episode_length": True,
"max_episode_length": True,
}
results = evaluate_policy(
policy=model,
env_id="PickCube-v1",
num_episodes=100,
metrics=eval_metrics,
save_video="eval.mp4",
)
# 使用 GPU 仿真
env = gym.make(
"PickCube-v1",
sim_backend="gpu",
num_envs=256, # 并行环境
device="cuda:0",
)
# GPU 批量执行
actions = torch.randn(256, 9, device="cuda:0")
obs, reward, done, info = env.step(actions)
# GPU 图像处理
rgb_images = obs["main_camera"]["rgb"].cuda() # (B, H, W, 3)
depth_images = obs["main_camera"]["depth"].cuda()
# 批量处理
processed = model.process_images(rgb_images)
解决方案:
解决方案:
解决方案: