Isaac-gym(4): 物理模拟

1. 建立执行器(actor)

  • 函数create_actor将一个执行器添加到环境中,并返回一个执行器句柄,该句柄可用于以后与该执行器交互。最好在创建参与者期间保存句柄,而不是在模拟运行时每次都查找句柄。许多附带的示例都是这样做的:
# cache useful handles
envs = []
actor_handles = []

print("Creating %d environments" % num_envs)
for i in range(num_envs):
    # create env
    env = gym.create_env(sim, env_lower, env_upper, num_per_row)
    envs.append(env)

    # add actor
    actor_handle = gym.create_actor(env, asset, pose, "actor", i, 1)
    actor_handles.append(actor_handle)
  • 执行器句柄特定于创建执行器的环境。在actor上操作的API函数需要环境引用和执行器句柄,因此通常将它们缓存在一起

聚合:执行器的集合

  • 仅用于PhysX;
  • 要将多个参与者放入一个聚合中,您应该将调用create_actor包含在begin_aggregateend_aggregate,例如:
gym.begin_aggregate(env, max_bodies, max_shapes, True)
gym.create_actor(env, ...)
gym.create_actor(env, ...)
gym.create_actor(env, ...)
...
gym.end_aggregate(env)
  • 聚合中只能包含来自同一环境的参与者。
  • -创建聚合时,有必要指定刚体和形状的最大数量,该数量应为将放置在聚合中的所有角色中的实体和形状的总数。对应get_asset_rigid_body_countget_asset_rigid_shape_count
  • 实例:python/rlgpu/tasks/franka.py

2. 执行器组成部分

  • 每个执行器都有一组刚体、关节和自由度:
num_bodies = gym.get_actor_rigid_body_count(env, actor_handle)
num_joints = gym.get_actor_joint_count(env, actor_handle)
num_dofs = gym.get_actor_dof_count(env, actor_handle)

2.1 刚体

  • 每个刚体由一个或多个刚体形状组成;
  • 可以自定义每个参与者的刚体和形状属性;
  • 示例:body_physics_props.py

2.2 关节

  • 保留URDF和MJCF模型中定义的关节

2.3 DOF

  • 每个自由度都可以独立驱动;
  • 可以将控件应用于各个自由度,或使用数组同时处理所有参与者自由度。

3. 控制执行器

  • 使用自由度来控制Actor
  • 对于每个DOF,可以设置驱动模式、限制、刚度、阻尼和目标。

4. 执行器缩放

5. 物理状态

你可能感兴趣的:(RL)