Isaac-gym(7):物理模拟(actor生成、创建、控制等)

希望和正在或者想要学习使用ISAAC-GYM的朋友一起有一个讨论群,尝试互帮互助,交流学习内容~
目前刚开始尝试,不知道能不能建立起来,如果有意向请私戳!!
——2023.02

1. 创建actor

1.1 actor的创建与句柄

actor是GymAsset的实例。函数create_actor将一个参与者添加到环境中,并返回一个参与者句柄,该句柄可用于以后与该参与者交互。出于性能原因,最好在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)

参与者句柄特定于创建参与者的环境。对参与者进行操作的API函数需要环境引用和参与者句柄,因此通常将它们缓存在一起。

有相当多的功能对参与者起作用。它们被命名为get_actor_*、set_actor_或apply_cactor_。使用API参考获取完整列表。

1.2 Aggregates(聚合)

Aggregates仅用于PhysX;

聚合是actors的集合。聚合不提供额外的模拟功能,但允许您告诉PhysX一组actors将聚集在一起,从而允许PhysX优化其空间数据操作。不需要创建聚合,但这样做可以适度提高性能。要将多个actors放置到聚合中,应将对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)

聚合中只能包含来自同一env的actors。创建聚合时,需要指定刚体和形状的最大数量,这应该是将放置在聚合中的所有actors的刚体和形状总数。可以从用于创建参与者的资产(`` ,get_asset_rigid_shape_count)中获取此信息。
实例:python/rlgpu/tasks/franka.py

2. actor组件

每个角色都有一组刚体、关节和自由度。可以这样计算:

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)

此时,一旦创建了参与者,就不可能添加或删除参与者组件。

3.1 刚体

每个刚体由一个或多个刚性形状组成。可以为每个角色自定义刚体和形状属性,如body_physics_props.py中所示.

4. Controlling Actors

使用自由度来控制参与者。对于每个自由度,可以设置驱动模式、限制、刚度、阻尼和目标。您可以为每个参与者设置这些值,并覆盖从资源加载的默认设置。

5. Actor缩放

可以在运行时缩放其大小。缩放角色将更改其碰撞几何体、质量属性、关节位置和棱柱关节限制。参考:examples/actor_scaling.py

5.1 DOF特性和驱动模式

可以访问资产(get_asset_DOF_properties)和单个参与者(get_actor_DOF_properties/set_actor_DOF _properties)的DOF属性数组。返回具有以下字段的结构化Numpy数组:
在这里插入图片描述
(具体细节描述与参考详见官方文档:Programming-phsics simulation-Scaling actors)

5.2 张量控制API

新的张量API提供了应用控件的替代方法。设置DOF属性的API保持不变,但您可以使用CPU或GPU张量施加力或设置PD目标。这使得完全在GPU上运行模拟成为可能,而无需在主机和设备之间复制数据。

6. 物理状态

Gym提供了一个API,用于获取和设置结构化Numpy数组的物理状态。

6.1 刚体状态

刚体状态包括位置(Vec3)、方向(Quat)、线速度(Vec3)和角速度(Vec3)。这允许您在最大坐标中处理模拟状态。
可以获取actor、环境或整个模拟的刚体状态数组:

body_states = gym.get_actor_rigid_body_states(env, actor_handle, gymapi.STATE_ALL)
body_states = gym.get_env_rigid_body_states(env, gymapi.STATE_ALL)
body_states = gym.get_sim_rigid_body_states(sim, gymapi.STATE_ALL)

这些方法返回结构化numpy数组。最后一个参数是一个位字段,用于指定应返回的状态类型。STATE_POS表示应计算位置,STATE_VEL表示应计算速度,STATE_ALL表示应计算两者。返回的数组的结构始终相同,但只有设置了相应的标志时,才会计算位置和速度值。在内部,Gym维护存储这些值的状态缓存缓冲区。Numpy数组只是缓冲区切片的包装器。根据基础物理引擎的不同,获取和设置状态可能需要非平凡的计算,并且可以使用位标志来避免不必要的操作。
可以这样访问状态数组切片:

body_states["pose"]             # all poses (position and orientation)
body_states["pose"]["p"])           # all positions (Vec3: x, y, z)
body_states["pose"]["r"])           # all orientations (Quat: x, y, z, w)
body_states["vel"]              # all velocities (linear and angular)
body_states["vel"]["linear"]    # all linear velocities (Vec3: x, y, z)
body_states["vel"]["angular"]   # all angular velocities (Vec3: x, y, z)

可以使用相应的方法编辑并设置状态:

gym.set_actor_rigid_body_states(env, actor_handle, body_states, gymapi.STATE_ALL)
gym.set_env_rigid_body_states(env, body_states, gymapi.STATE_ALL)
gym.set_sim_rigid_body_states(sim, body_states, gymapi.STATE_ALL)

实例:projectiles.py
要确定状态阵列中特定刚体的偏移,请使用find_actor_rigid_body_index方法:

i1 = gym.find_actor_rigid_body_index(env, actor_handle, "body_name", gymapi.DOMAIN_ACTOR)
i2 = gym.find_actor_rigid_body_index(env, actor_handle, "body_name", gymapi.DOMAIN_ENV)
i3 = gym.find_actor_rigid_body_index(env, actor_handle, "body_name", gymapi.DOMAIN_SIM)

使用域domain_ACTOR获取get_ACTOR_rigid_body_states返回的状态缓冲区的索引;
使用域domain_ENV获取get_ENV_rigid_body_states返回的状态缓冲区的索引;
使用域domain_SIM获取get_SIM_rid_body_states返回的状态缓冲区的索引.

6.2 DOF状态

您还可以使用简化坐标与actors合作:

dof_states = gym.get_actor_dof_states(env, actor_handle, gymapi.STATE_ALL)
gym.set_actor_dof_states(env, actor_handle, dof_states, gymapi.STATE_ALL)

DOF状态数组包括作为单个浮点数的位置和速度。对于线性自由度,位置单位为米,速度单位为米/秒。对于角DOF,位置以弧度为单位,速度以弧度/秒为单位

您可以这样访问位置和速度切片:

dof_states["pos"]   # all positions
dof_states["vel"]   # all velocities

可以使用find_actor_DOF_index方法确定特定DOF的偏移。

注意,DOF状态不包括根刚体的姿势或速度,因此它们不能完全捕捉演员状态。因此,我们没有提供获取和设置整个环境或模拟的DOF状态的方法。
实例:joint_monkey.py

6.3 物理状态张量API

新的张量API允许使用CPU或GPU张量获取和设置状态。这使得完全在GPU上运行模拟成为可能,而无需在主机和设备之间复制数据。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以按照以下步骤来安装Isaac Gym: 1. 首先,您需要安装Nvidia驱动程序和Cuda模块。在安装之前,建议先安装Anaconda来管理包。您可以按照这篇博客中的指南来安装Anaconda和Nvidia驱动程序:\[1\] 2. 安装完成后,您可以下载Isaac Gym Benchmark Environments。您可以在这个国内镜像地址下载:\[2\] 3. 下载完成后,将文件解压并放在主目录下。然后进入解压后的文件夹中的isaacgym/docs目录,双击index.html文件,即可打开官方文档。 4. 按照文档中的步骤进行安装。您可以选择直接在新的虚拟环境中进行安装。可以通过以下命令来创建新的虚拟环境: ``` cd isaacgym/python/ sh ../create_conda_env_rlgpu.sh ``` 这样,您就可以按照官方文档中的指南来完成Isaac Gym的安装了。希望对您有所帮助! #### 引用[.reference_title] - *1* [issacgym+leggedgym安装](https://blog.csdn.net/svfsvadfv/article/details/129214461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Isaac-gym(1): 安装及官方demo内容](https://blog.csdn.net/hongliyu_lvliyu/article/details/124605383)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值