近期使用isaac gym,所以对一些使用进行汇总。
1. ISAAC GYM
在isaac gym中,存在几个基础且常见的概念:gym, sim, env, actor, rigid
-
Gym: 在Isaac Gym中,“Gym”通常指的是整个仿真平台或框架本身。它提供了创建和管理多个仿真环境的接口。
-
Sim: “Sim”是指模拟器(simulator),是仿真的核心组件。它负责处理物理计算和仿真的所有细节,如动力学、碰撞检测和其他物理交互。Isaac Gym使用NVIDIA PhysX作为其后端物理引擎,可以高效地在GPU上运行。在代码中的体现是,调用sim可以完成对模拟器的step。
-
Env: “Env”是指环境(environment),是智能体(agent)进行学习和互动的场所。每个环境包含了特定的任务或场景设置,智能体需要在这些环境中执行操作以获取奖励并学习策略。
-
Actor: “Actor”是在仿真中表示具有物理属性的对象,如机器人、物体等。每个Actor包括了用于描述其形状、质量、动力学属性等的各种参数。Actors是智能体与环境互动的主体,例如一个机器人的手臂或车辆。
-
Rigid: “Rigid”,刚体,是一种物理对象,其形状在仿真过程中不会发生变化。在Isaac Gym中,刚体用来表示那些不需要弹性或变形特性的实体。刚体动力学是计算这些对象如何在力和碰撞作用下移动和反应的基础。
-
Index / indcies: 这是一个很容易混淆的概念,特别是在多env多actor,每个actor拥有1个以上rigid时。理解index的索引获取和它代表的对象非常重要。
由此,可以得到isaac gym仿真环境的基本框架,即基于gym,使用sim进行仿真,在sim中可以生成多个env,每个env中可以生成多个actor作为交互对象。对于每个actor,可以由rigid或其他非刚体关系组成。
2. 仿真环境
2.1. 基础环境搭建
基础环境包括gym和sim,viewer的初始化,以下是添加ground plane和设置sim参数的代码:
# initialize gym
gym = gymapi.acquire_gym()
# parse arguments
args = gymutil.parse_arguments(description="Joint control Methods Example")
# create a simulator
sim_params = gymapi.SimParams()
sim_params.substeps = 1
sim_params.dt = opt.dt
sim_params.physx.solver_type = 1
sim_params.physx.num_position_iterations = 4
sim_params.physx.num_velocity_iterations = 1
sim_params.physx.num_threads = args.num_threads
sim_params.physx.use_gpu = args.use_gpu
sim_params.use_gpu_pipeline = args.use_gpu_pipeline
if args.sim_device_type == 'cuda' and sim_params.use_gpu_pipeline:
device = args.sim_device
else:
device = 'cpu'
sim = gym.create_sim(args.compute_device_id, args.graphics_device_id, args.physics_engine, sim_params)
if sim is None:
print("*** Failed to create sim")
quit()
# create viewer using the default camera properties
viewer = gym.create_viewer(sim, gymapi.CameraProperties())
if viewer is None:
raise ValueError('*** Failed to create viewer')
# add ground plane
plane_params = gymapi.PlaneParams()
gym.add_ground(sim, gymapi.PlaneParams())
sim搭建好后就是声明env或envs。
使用gym.create_env声明env并获得env_handle,如果使