基础仿真概览
欢迎来到DISCOVERSE基础仿真教程!本教程将带您了解如何在DISCOVERSE中创建和运行机器人仿真。DISCOVERSE是一个基于MuJoCo物理引擎的高保真机器人仿真平台,支持高斯渲染(3D Gaussian Splatting)技术。
🎯 学习目标
完成本教程后,您将能够:
- 理解DISCOVERSE的配置系统和基本架构
- 创建和配置机器人仿真环境
- 使用真实的机器人模型(如AirbotPlay、MMK2)
- 配置传感器和渲染选项
- 运行基本的机器人操作任务
📋 前置要求
在开始之前,请确保您已经:
🏗️ DISCOVERSE架构
DISCOVERSE建立在以下核心技术之上:
MuJoCo物理引擎
- 高精度的刚体动力学仿真
- 支持接触和摩擦模拟
- 实时物理计算
3D高斯渲染(Gaussian Splatting)
- 高保真场景渲染
- 支持真实感视觉效果
- 可切换传统MuJoCo渲染器
机器人模型支持
- AirbotPlay: 7自由度机械臂
- MMK2: 双臂移动机器人
- LeapHand: 灵巧手
- 自定义机器人: 支持URDF/MJCF格式
🔧 配置系统
DISCOVERSE使用BaseConfig
类进行配置管理:
from discoverse.utils import BaseConfig
# 创建配置
config = BaseConfig()
# 基本设置
config.mjcf_file_path = "mjcf/airbot_play_floor.xml" # 场景文件
config.timestep = 0.005 # 物理仿真时间步长 (200Hz)
config.decimation = 2 # 控制频率下采样 (BaseConfig默认值)
config.sync = True # 实时同步
config.headless = False # 是否无头模式
# 渲染设置
config.render_set = {
"fps": 24, # 渲染帧率 (BaseConfig默认值)
"width": 1280, # 图像宽度 (BaseConfig默认值)
"height": 720, # 图像高度 (BaseConfig默认值)
}
# 传感器设置
config.obs_rgb_cam_id = None # RGB相机ID (默认为None,需要设置具体ID列表)
config.obs_depth_cam_id = None # 深度相机ID (默认为None,需要设置具体ID列表)
# 高斯渲染设置
config.use_gaussian_renderer = True
config.gs_model_dict = {
"background": "scene/lab3/point_cloud.ply",
"object": "object/apple.ply"
}
🚀 快速开始示例
让我们基于真实的AirbotPlay任务来创建一个简单的仿真:
import mujoco
import numpy as np
from discoverse.robots_env.airbot_play_base import AirbotPlayCfg
from discoverse.task_base import AirbotPlayTaskBase
# 继承任务基类
class MySimulation(AirbotPlayTaskBase):
def __init__(self, config: AirbotPlayCfg):
super().__init__(config)
def check_success(self):
# 定义成功条件
return False
def domain_randomization(self):
# 域随机化(可选)
pass
# 创建配置
cfg = AirbotPlayCfg()
cfg.mjcf_file_path = "mjcf/airbot_play_floor.xml"
cfg.timestep = 0.005 # 真实默认值
cfg.decimation = 4 # AirbotPlayCfg中的默认值
cfg.sync = True
cfg.headless = False
cfg.render_set = {
"fps": 30, # 真实默认值
"width": 1280, # 真实默认值
"height": 720 # 真实默认值
}
# 创建仿真实例
sim = MySimulation(cfg)
# 基本控制循环
action = np.zeros(7) # 7自由度控制
while sim.running:
# 执行动作 - step返回: obs, privileged_obs, reward, terminated, info
obs, privileged_obs, reward, terminated, info = sim.step(action)
# 获取关节位置
joint_positions = sim.mj_data.qpos[:7]
# 简单控制逻辑
action[:] = joint_positions + 0.01 * np.sin(sim.mj_data.time)
# 检查重置信号
if sim.reset_sig:
sim.reset_sig = False
sim.reset()
📊 观察空间
DISCOVERSE提供丰富的观察数据:
RGB图像观察
# 获取RGB图像
rgb_image = sim.getRgbImg(cam_id=0) # 返回 (H, W, 3) numpy数组
深度图像观察
# 获取深度图像
depth_image = sim.getDepthImg(cam_id=0) # 返回 (H, W) numpy数组
点云数据
# 获取点云 - 注意需要先调用getObservation()
points, colors = sim.getPointCloud(cam_id=0, N_gap=5) # 返回点云和颜色
print(f"点云形状: {points.shape}") # (N, 3)
print(f"颜色形状: {colors.shape}") # (N, 3) RGB值在[0,1]范围
物体位姿
# 获取物体位姿
object_pose = sim.object_pose("object_name") # 返回位置和四元数
🎮 交互控制
DISCOVERSE支持键盘和鼠标交互:
基本控制
H
: 显示帮助信息P
: 打印当前状态信息R
: 重置仿真状态ESC
: 切换到自由相机模式]
/[
: 切换相机视角
相机控制
- 鼠标左键拖拽: 旋转视角
- 鼠标右键拖拽: 平移视角
- 鼠标滚轮: 缩放
高斯渲染控制
Ctrl+G
: 切换高斯渲染显示Ctrl+D
: 切换深度图显示
🎯 真实任务示例
DISCOVERSE提供了多个预定义的任务示例:
AirbotPlay任务
pick_jujube.py
: 拾取枣子place_block.py
: 放置积木cover_cup.py
: 盖杯子close_laptop.py
: 关闭笔记本电脑
MMK2任务
box_pick.py
: 拾取盒子cabinet_door_open.py
: 打开柜门drawer_open.py
: 拉开抽屉
运行现有任务
cd discoverse/examples/tasks_airbot_play
python pick_jujube.py --use_gs # 使用高斯渲染
📁 项目结构
DISCOVERSE的主要组件:
discoverse/
├── envs/ # 仿真环境核心
├── robots/ # 机器人模型和运动学
├── robots_env/ # 机器人环境基类
├── task_base/ # 任务基类
├── utils/ # 工具函数
├── examples/ # 示例任务
└── gaussian_renderer/ # 高斯渲染器
🔧 性能优化
提升仿真速度
# 禁用可视化以提速
cfg.headless = True
cfg.sync = False
# 降低渲染分辨率
cfg.render_set = {
"fps": 15, # 降低渲染帧率
"width": 320, # 降低分辨率
"height": 240
}
# 调整物理参数
cfg.timestep = 0.01 # 降低物理频率 (100Hz)
📚 相关资源
🎯 下一步
准备好了吗?让我们开始第一个教程:
👉 环境设置
如果遇到问题,请查看故障排除指南或在GitHub Issues中寻求帮助。