Isaac-gym(6):环境创建、模型载入、actor设置等
1.环境创建与相关参数
1.1 环境创建与物理参数
# get default set of parameters
sim_params = gymapi.SimParams()# set common parameters
sim_params.dt = 1 / 60
sim_params.substeps = 2
sim_params.up_axis = gymapi.UP_AXIS_Z
sim_params.gravity = gymapi.Vec3(0.0, 0.0, -9.8)# set PhysX-specific parameters
sim_params.physx.use_gpu = True
sim_params.physx.solver_type = 1
sim_params.physx.num_position_iterations = 6
sim_params.physx.num_velocity_iterations = 1
sim_params.physx.contact_offset = 0.01
sim_params.physx.rest_offset = 0.0# set Flex-specific parameters
sim_params.flex.solver_type = 5
sim_params.flex.num_outer_iterations = 4
sim_params.flex.num_inner_iterations = 20
sim_params.flex.relaxation = 0.8
sim_params.flex.warm_start = 0.5# create sim with these parameters
sim = gym.create_sim(compute_device_id, graphics_device_id, physics_engine, sim_params)
1.2 坐标轴
sim_params.up_axis = gymapi.UP_AXIS_Z
sim_params.gravity = gymapi.Vec3(0.0, 0.0, -9.8)
1.3 创建地面
# configure the ground plane
plane_params = gymapi.PlaneParams()
plane_params.normal = gymapi.Vec3(0, 0, 1) # z-up!
plane_params.distance = 0
plane_params.static_friction = 1
plane_params.dynamic_friction = 1
plane_params.restitution = 0# create the ground plane
gym.add_ground(sim, plane_params)
2. 载入模型
可以载入URDF,MJCF,USD
方式1:
asset_root = "../../assets"
asset_file = "urdf/franka_description/robots/franka_panda.urdf"
asset = gym.load_asset(sim, asset_root, asset_file)
方式2:
asset_options = gymapi.AssetOptions()
asset_options.fix_base_link = True
asset_options.armature = 0.01asset = gym.load_asset(sim, asset_root, asset_file, asset_options)
3. 环境与参与者(actors)
环境由一起模拟的 actors和传感器的集合组成。环境中的参与者在物理上相互作用。它们的状态由物理引擎保持,可以使用稍后讨论的控制API来控制。放置在环境中的传感器,如摄像机,将能够捕捉环境中的actors。
Isaac Gym的一个重要设计方面是能够将一个环境的多个实例打包到一个模拟中。这在强化学习等应用领域非常重要,因为在强化学习中,需要大量的运行来训练代理执行某些任务。使用Isaac Gym,您可以同步运行数十、数百甚至数千个环境实例。可以随机化每个环境中的初始条件,如布局、演员姿势,甚至 actors本身。可以随机化所有 actor的物理、视觉和控制属性。
3.1 创建环境
Isaac Gym提供了一个简单的过程API,用于创建环境并用参与者填充环境。这比从文件加载静态场景更有用,因为它允许您在将所有actor添加到场景中时控制其位置和属性。在添加参与者之前,必须创建一个环境:
spacing = 2.0
lower = gymapi.Vec3(-spacing, 0.0, -spacing)
upper = gymapi.Vec3(spacing, spacing, spacing)
env = gym.create_env(sim, lower, upper, 8)
每个env都有自己的坐标空间,该坐标空间嵌入到全局模拟空间中。创建环境时,我们指定环境的局部范围,这取决于环境实例之间所需的间距。随着新环境被添加到模拟中,它们将一次一行地排列在二维网格中。create_env
的最后一个参数表示。
3.2 添加actor
actor只是GymAsset
的一个实例。要将actor添加到环境中,必须指定源资源、所需姿势和其他一些细节:
pose = gymapi.Transform()
pose.p = gymapi.Vec3(0.0, 1.0, 0.0)
pose.r = gymapi.Quat(-0.707107, 0.0, 0.0, 0.707107)actor_handle = gym.create_actor(env, asset, pose, "MyActor", 0, 1)
# "MyActor":自定义的名称
#参数列表末尾的两个整数是collis_group和collis_filter
每个actor都必须被置于一个环境中。你不能有一个不属于环境的actor。使用位置向量p和方向四元数r在env局部坐标中定义演员姿势。在上面的片段中,方向由四元数(-0.707107,0.0,0.0,0.707107)指定。Quat构造函数以(x,y,z,w)顺序接受参数,因此此四元数表示围绕x轴的-90度旋转。当将使用z-up约定定义的资源加载到使用y-up约定的模拟中时,这种旋转是必要的。Isaac Gym提供了一个方便的数学助手集合,包括四元数实用程序,因此四元数可以这样定义为轴角形式:
pose.r = gymapi.Quat.from_axis_angle(gymapi.Vec3(1, 0, 0), -0.5 * math.pi)
- collision_group:
collisingroup是一个整数,用于标识参与者身体将被分配到的碰撞组。两个物体仅在属于同一碰撞组时才会相互碰撞。每个环境通常有一个冲突组,在这种情况下,组id对应于环境索引。这防止了不同环境中的actor之间的物理交互。在某些情况下,您可能希望为每个环境设置多个冲突组,以实现更细粒度的控制。值-1用于与所有其他组碰撞的特殊碰撞组。这可以用于创建“共享”对象,这些对象可以在所有环境中与actor进行物理交互。
collision_filter :
collisionfilter是一个位掩码,可以过滤出物体之间的碰撞。如果两个实体的碰撞过滤器具有公共位集,则它们不会碰撞。该值可用于过滤多体actor中的自碰撞,或防止场景中某些类型的对象发生物理交互
3.3 环境初始化
设置模拟时,可以在单个循环中初始化所有环境:
# set up the env grid
num_envs = 64
envs_per_row = 8
env_spacing = 2.0
env_lower = gymapi.Vec3(-env_spacing, 0.0, -env_spacing)
env_upper = gymapi.Vec3(env_spacing, env_spacing, env_spacing)# cache some common handles for later use
envs = []
actor_handles = []# create and populate the environments
for i in range(num_envs):env = gym.create_env(sim, env_lower, env_upper, envs_per_row)envs.append(env)height = random.uniform(1.0, 2.5)pose = gymapi.Transform()pose.p = gymapi.Vec3(0.0, height, 0.0)actor_handle = gym.create_actor(env, asset, pose, "MyActor", i, 1)actor_handles.append(actor_handle)
注意,分配给每个参与者的冲突组对应于环境索引,这意味着来自不同环境的参与者不会在物理上彼此交互。
目前,用于设置环境的过程API有一些限制。假设所有环境都是按顺序创建和填充的。您创建一个环境并将所有参与者添加到其中,然后创建另一个环境,并将其所有参与者添加到此环境中,依此类推。一旦完成填充一个环境并且开始填充下一个环境后,您就不能再将参与者添加到上一个环境中。
4.仿真运行
设置环境栅格和其他参数后,可以开始模拟。这通常在循环中完成,其中循环的每个迭代对应于一个时间步长:
while True:# step the physics(sim)gym.fetch_results(sim, True)
5. 添加观察者(viewer)
cam_props = gymapi.CameraProperties()
viewer = gym.(sim, cam_props)
详见官方解说)
6.自定义鼠标/键盘输入
参考examples/projectiles.py
gym.subscribe_viewer_keyboard_event(viewer, gymapi.KEY_SPACE, "space_shoot")
gym.subscribe_viewer_keyboard_event(viewer, gymapi.KEY_R, "reset")
gym.subscribe_viewer_mouse_event(viewer, gymapi.MOUSE_LEFT_BUTTON, "mouse_shoot")
...
while not gym.query_viewer_has_closed(viewer):...for evt in gym.query_viewer_action_events(viewer):...
7. 窗口退出
gym.destroy_viewer(viewer)
gym.destroy_sim(sim)
Isaac-gym(6):环境创建、模型载入、actor设置等相关推荐
- odoo10参考系列--ORM API 一(记录集、环境、通用方法和创建模型)
记录集 版本8.0中新东西: 这个在Odoo8.0中新加的API的页面文档应该是不断向前发展的主要开发API.同时它还提供了关于移植或桥接版本7和更早版本的"旧API"的信息,但没 ...
- Actor 分布式并行计算模型: The Actor Model for Concurrent Computation
分布式计算技术之Actor计算模式 The Actor Model for Concurrent Computation 背景介绍 计算机CPU的计算速度提高(频率的提高)是有限度的,我们能做的是放入 ...
- UE5和Blender中的完整场景环境创建学习教程
UE5和Blender中的完整环境创建–深入课程 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确)|时长:80 ...
- node:ORM、数据模型、脚本创建模型与服务层
文章目录 node:ORM.数据模型.脚本创建模型与服务层 控制层 服务层 MYSQL SQL ORM--sequelize 脚本 增加服务层(查询数据库放在服务层) node:ORM.数据模型.脚本 ...
- python建模库介绍:pandas与建模代码的结合,使用Patsy创建模型描述
13.1 pandas与建模代码的结合 使用pandas用于数据载入和数据清洗,之后切换到模型库去建立模型是一个常见的模型开发工作流.在机器学习中,特征工程时模型开发的重要部分之一,特征工程就是指从原 ...
- 构建自己的gym训练环境
一.构建自己的gym训练环境 环境中主要有六个模块,下面将主要以官方的MountainCarEnv为例对每个模块进行说明. 1. __init __ 主要作用是初始化一些参数 如在MountainCa ...
- pmd格式模型 html加载,Three.js 模型载入
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? obj格式 THREE.OBJLoader(manager)manager 加载器使用的loadingManager,默 ...
- pytorch创建模型并训练(初探文本分类问题)
本博客对pytorch在深度学习上的使用进行了介绍,本博客并不会对怎么训练一个好的模型进行介绍(其实我也不会),我觉得训练一个好的模型首先得选对一个模型(关键的问题在于模型如何设计),然后再经 ...
- Reactor模型,Actor模型
背景 最近准备接手公司的消息系统,消息是系统是vert.x写的.突然觉得好懵逼,vert.x以前只听过名字,根本不知道是干啥的.然后开始了疯狂学习.此文是在学习vert.x过程中学到的知识.vert. ...
最新文章
- 关于打开新链接,用当前页还是用新页面?
- Redis 中的集合类型是怎么实现的?
- PostgreSQL在何处处理 sql查询之六
- 14、ORACLE下的基本SQL操作
- C#如何无客户端连接Oracle数据库
- Oracle触发器5-Instead of触发器
- python爬取京东手机配置信息(正则)
- ceph分布式存储简介
- ASP.NET网站运行常见错误以及解决方法(持续更新)
- 计算机硕士-工资一览表
- 计算机与信息科学相关教材,AdobeIllustrator实例教程/计算机与信息科学系列规划教材...
- 计算机体系架构未来趋势(深度)
- 蓝牙篇之蓝牙核心规范学习笔记(V5.3)汇总
- Rushcrm:如何利用CRM系统的权限设置
- ping ip和端口
- ASP.NET MVC+Bootstrap 实现短信验证
- numpy.max() , sum()
- 关于求最大公倍数的不同算法比较
- 数组题目:全局倒置与局部倒置
- 工业通讯 | STM32F4xx应用控制器与SoM集成
热门文章
- 程序员的机器学习入门笔记(一):基本概念介绍
- 2009年千万亿次超级计算机,2009年10月29日 第一台国产千万亿次超级计算机亮相...
- 阿里云超级码力第二场记录
- poj 1830 高斯消元
- wifi模块微信小程序AP配网(UDP)
- sequence_loss_by_example()函数在Tensorflow2.x找不到
- 程序化广告(5):广告投放
- 使用在Photoshop上的30个纺织物纹理Ps笔刷
- beacon帧字段结构最全总结(一)——beacon基本结构
- Sublime Text 4.0 4084 汉化版 — 代码编辑器