3 most important points

  1. 仿真环境能够解决真机资源不足的问题、保证环境可控、验证算法,但通常与现实有差距
  2. 针对不同的应用场景,有不同的仿真器与基准,推荐 IsaacSim 和 MuJoCo
  3. 除了环境仿真,机器人的动力学模拟也有相应 API,推荐 Drake 和 Pinocchio

5 thoughts

Notes

简介

  • 优点
    • 解决真机资源不足的问题
    • 保证环境的一致和稳定
    • 控制灵活,可验证算法
  • 缺点
    • 仿真环境与真实环境差别过大

常见仿真平台

仿真器应用范围先进性普及度
IsaacGym大规模并行 RL 仿真(几千环境并行),适合训练智能体前沿,GPU 加速物理,速度极快在 RL/AI 学界热度高,但受限于 NVIDIA GPU
IsaacSim高保真机器人仿真,支持传感器、数字孪生、工业应用最前沿之一,渲染 + 物理 + 传感器综合强工业和学术都在用,但安装和硬件门槛高
MuJoCo学术研究,经典 RL benchmark(Hopper, HalfCheetah 等)高精度动力学建模,物理准确,渲染一般学术界极为常见,很多 RL baseline 都依赖它
Sapien机器人操作、物体交互(manipulation、抓取、装配)高性能物理,尤其在操作任务上很强在操作研究里逐渐流行,但比 MuJoCo / PyBullet 小众
CoppeliaSim (V-REP)综合机器人仿真,适合教学与多传感器集成功能全但技术稍旧,渲染和物理不算顶尖教育和实验室常用,入门友好
PyBullet轻量级仿真,常用于 RL 教学 / 快速实验中等,物理和渲染比 IsaacSim / MuJoCo 弱非常普及,社区活跃,使用门槛低
Genesis新一代具身 AI 仿真器,多物理类型 + GPU 加速前沿(软体、布料、刚体等都能模拟)新平台,潜力大,目前小众
SOFA医学仿真(软体组织、手术)、软体机器人在软体仿真方面最先进之一在医疗和软体机器人领域常见,但通用 AI 社区少见
GenieSim具身 AI 任务仿真(偏 RL/AI 研究)前沿,定制化面向 AI 研究新兴平台,普及度低
quadrantChart
    title 仿真器:技术先进性 vs 普及度
    x-axis "技术先进性(低)" --> "技术先进性(高)"
    y-axis "普及度(低)" --> "普及度(高)"
    quadrant-1 "先进 & 常见"
    quadrant-2 "次先进 & 常见"
    quadrant-3 "次先进 & 小众"
    quadrant-4 "先进 & 小众"

    IsaacSim: [0.9, 0.7]
    IsaacGym: [0.8, 0.6]
    MuJoCo : [0.8, 0.9]
    Sapien : [0.7, 0.6]
    CoppeliaSim: [0.5, 0.7]
    PyBullet: [0.5, 0.9]
    Genesis: [0.9, 0.4]
    SOFA: [0.7, 0.3]
    GenieSim: [0.8, 0.2]
  • 为什么有多种仿真器?
    • 物理能力不同 → 使用环境不同
      • 有的偏 刚体动力学(MuJoCo、PyBullet) → 适合跑控制/运动任务。
      • 有的支持 软体 / 布料 / 生物组织(SOFA、Genesis) → 适合医疗或复杂材料模拟。
      • 有的强调 GPU 并行(IsaacGym、Genesis) → 适合大规模 RL。
    • 传感器与感知接口不同 → 使用环境不同
      • IsaacSim / CoppeliaSim 集成了 相机、激光雷达、IMU 等传感器仿真
      • MuJoCo / PyBullet 则更轻量,传感器支持较少。
      • 这直接决定了是否能研究 视觉导航 / 感知任务
    • 环境和任务封装 → 仿真器和专属 benchmark 生态绑定
      • MuJoCo → 封装了一系列标准 RL 任务(HalfCheetah, Ant, Hopper…)。
      • Sapien → 提供 ManiSkill 任务集(抓取、堆叠、装配等)。
      • IsaacSim → 提供 IsaacLab/IsaacGymEnvs(导航、操作、群体任务)。
      • SOFA → 内置了 手术场景、器官组织模型
  • 建模与动力学计算库 针对机器人本身的物理性质进行模拟
    • Drake:最推荐,就业价值最高(尤其是自动驾驶和机器人学界)。
    • Pinocchio:科研导向,就业也有价值,但主要集中在机器人/研究机构。
      • 能处理机器人模型(URDF/SRDF)→ 自动生成运动学树和动力学方程。
      • 提供常用的算法:正/逆运动学、正/逆动力学、雅可比计算、质心轨迹、接触动力学等等。
    • iDynTree:小众,局部价值。
    • RBDL:教学/轻量库,工业价值低。

仿真参数

  • 仿真平台需要知道机器人各个部件和关节的物理属性
<!-- base link -->
<link name="base_link">
	<visual>
		<origin xyz="0 0 0.0" rpy="0 0 0"/>
		<geometry>
			<cylinder length="0.12" radius="0.10"/>
		</geometry>
		<material name="blue">
			<color rgba="0.1 0.1 1.0 0.5" /> 
		</material>
	</visual>
	<collision>
		<origin xyz="0 0 0.0" rpy="0 0 0"/>
		<geometry>
			<cylinder length="0.12" radius="0.10"/>
		</geometry>
		<material name="blue">
			<color rgba="0.1 0.1 1.0 0.5" /> 
		</material>
	</collision>
	<inertial>
		<mass value="0.2"/>
		<inertia ixx="0.0122666" ixy="0" ixz="0" iyy="0.0122666" iyz="0" izz="0.02"/>
	</inertial>
</link>
  
<!-- 支撑轮摩擦力设置为 0 -->
<gazebo reference="caster_link">
	<mu1 value="0.0"/>        <!-- 摩擦力 1 -->
	<mu2 value="0.0"/>        <!-- 摩擦力 2 -->
	<kp value="1000000.0" />  <!-- 刚性系数 1 -->
	<kd value="10.0" />       <!-- 刚性系数 2 -->
</gazebo>
  • 通过 Python 脚本动态生成 exec(line.strip()) 直接用 API 创建物体
    • 优点:
      • 灵活,可通过变量/循环/函数动态生成多种物体(指不同尺寸、质量、摩擦系数等,这些不能使用 API 设置)
      • 便于实验、教学和快速原型
    • 缺点:
      • 模型和代码高度耦合 → 不容易在别的仿真器里复用
      • 对团队协作和大规模模型管理不太友好
# 这里使用 PyBullet
 
# 碰撞体
collision_shape_id = client.createCollisionShape(
    shapeType=client.GEOM_BOX,
    halfExtents=[cube_size/2]*3
)
 
# 外观
visual_shape_id = client.createVisualShape(
    shapeType=client.GEOM_BOX,
    halfExtents=[cube_size/2]*3,
    rgbaColor=[0.5,0.5,0.5,1]
)
 
# 质量与惯性
mass = 1.0
# 惯性如果不提供,PyBullet 会自动计算
 
# 位置与姿态
position = [0.7, 0.0, cube_size/2]
orientation = client.getQuaternionFromEuler([0,0,0])
 
# 创建刚体物体
cube_id = client.createMultiBody(
    baseMass=mass,
    baseCollisionShapeIndex=collision_shape_id,
    baseVisualShapeIndex=visual_shape_id,
    basePosition=position,
    baseOrientation=orientation
)

Reference