赞
踩
python source/standalone/tutorials/00_sim/spawn_prims.py
绿色刚体与其Xform坐标
桌子是usd文件reference到场景中,The table above is added as a reference to the scene.,以及其坐标
- def design_scene():
- """Designs the scene by spawning ground plane, light, objects and meshes from usd files."""
- # Ground-plane 配置地面
- cfg_ground = sim_utils.GroundPlaneCfg()
- cfg_ground.func("/World/defaultGroundPlane", cfg_ground)
-
- # spawn distant light
- # 配置灯光
- cfg_light_distant = sim_utils.DistantLightCfg(
- intensity=3000.0,
- color=(0.75, 0.75, 0.75),
- )
- cfg_light_distant.func("/World/lightDistant", cfg_light_distant, translation=(1, 0, 10))
-
- # create a new xform prim for all objects to be spawned under
- # 创建一个 Objects Xform
- prim_utils.create_prim("/World/Objects", "Xform")
- # spawn a red cone 图中两个红色的立锥, translation 是他们的坐标
- cfg_cone = sim_utils.ConeCfg(
- radius=0.15,
- height=0.5,
- visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(1.0, 0.0, 0.0)),
- )
- cfg_cone.func("/World/Objects/Cone1", cfg_cone, translation=(-1.0, 1.0, 1.0))
- cfg_cone.func("/World/Objects/Cone2", cfg_cone, translation=(-1.0, -1.0, 1.0))
-
- # spawn a green cone with colliders and rigid body
- # 绿色的立锥是刚体,掉落下来到桌子上,这里展示了一个立锥刚体的创建方法
- cfg_cone_rigid = sim_utils.ConeCfg(
- radius=0.15,
- height=0.5,
- rigid_props=sim_utils.RigidBodyPropertiesCfg(),
- mass_props=sim_utils.MassPropertiesCfg(mass=1.0),
- collision_props=sim_utils.CollisionPropertiesCfg(),
- visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0, 1.0, 0.0)),
- )
- cfg_cone_rigid.func(
- "/World/Objects/ConeRigid", cfg_cone_rigid, translation=(0.0, 0.0, 2.0), orientation=(0.5, 0.0, 0.5, 0.0)
- )
-
- # spawn a usd file of a table into the scene
- # The table above is added as a reference to the scene
- # 桌子的创建是添加一个桌子实例usd文件,是作为reference加入进来的
- cfg = sim_utils.UsdFileCfg(usd_path=f"{ISAAC_NUCLEUS_DIR}/Props/Mounts/SeattleLabTable/table_instanceable.usd")
- cfg.func("/World/Objects/Table", cfg, translation=(0.0, 0.0, 1.05))
Making a physics prim fixed in the simulation — Isaac Lab documentation (isaac-sim.github.io)https://isaac-sim.github.io/IsaacLab/source/how-to/make_fixed_prim.html#static-colliders生成一些静态障碍物,但没有刚体属性,生成多个物体的做法跟下面刚体的类似
- import omni.isaac.lab.sim as sim_utils
-
- cone_spawn_cfg = sim_utils.ConeCfg(
- radius=0.15,
- height=0.5,
- collision_props=sim_utils.CollisionPropertiesCfg(),
- visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0, 1.0, 0.0)),
- )
- cone_spawn_cfg.func(
- "/World/Cone", cone_spawn_cfg, translation=(0.0, 0.0, 2.0), orientation=(0.5, 0.0, 0.5, 0.0)
- )
python source/standalone/tutorials/01_assets/run_rigid_object.py
作为多次生成刚性对象 prim 的示例,我们创建其父 Xform prims,
/World/Origin{i}
它们对应于不同的生成位置。当正则表达式/World/Origin*/Cone
传递给assets.RigidObject
类时,它会在每个/World/Origin{i}
位置生成刚性对象 prim。例如,如果/World/Origin1
场景中存在 和/World/Origin2
,则刚性对象素数分别在位置/World/Origin1/Cone
和/World/Origin2/Cone
处生成。
- # Create separate groups called "Origin1", "Origin2", "Origin3"
- # Each group will have a robot in it
- # 创建4个原点Xform
- origins = [[0.25, 0.25, 0.0], [-0.25, 0.25, 0.0], [0.25, -0.25, 0.0], [-0.25, -0.25, 0.0]]
- for i, origin in enumerate(origins):
- prim_utils.create_prim(f"/World/Origin{i}", "Xform", translation=origin)
-
- # Rigid Object
- # 立锥刚体配置
- cone_cfg = RigidObjectCfg(
- prim_path="/World/Origin.*/Cone",
- spawn=sim_utils.ConeCfg(
- radius=0.1,
- height=0.2,
- rigid_props=sim_utils.RigidBodyPropertiesCfg(),
- mass_props=sim_utils.MassPropertiesCfg(mass=1.0),
- collision_props=sim_utils.CollisionPropertiesCfg(),
- visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.0, 1.0, 0.0), metallic=0.2),
- ),
- init_state=RigidObjectCfg.InitialStateCfg(),
- )
- # 创建刚体实体对象
- cone_object = RigidObject(cfg=cone_cfg)
在本教程中,我们使用类似于 Spawn Objects 教程中的刚性圆锥体的 spawn 配置创建一个圆锥形刚性对象。唯一的区别是,现在我们将生成配置包装到类中
assets.RigidObjectCfg
。此类包含有关资产的生成策略、默认初始状态和其他元信息的信息。当将此类传递给assets.RigidObject
该类时,它会生成对象,并在播放模拟时初始化相应的物理句柄。
如果想屏蔽掉物体重力,修改这一句:
rigid_props=sim_utils.RigidBodyPropertiesCfg(disable_gravity=True),
这就做出了空间障碍物
四个原点的坐标位置
- # reset root state
- # 获取根状态
- root_state = cone_object.data.default_root_state.clone()
- # sample a random position on a cylinder around the origins
- # 给刚体根状态位置等信息赋值
- root_state[:, :3] += origins
- root_state[:, :3] += math_utils.sample_cylinder(
- radius=0.1, h_range=(0.25, 0.5), size=cone_object.num_instances, device=cone_object.device
- )
- # write root state to simulation
- # 将根状态写入到仿真中
- cone_object.write_root_state_to_sim(root_state)
- # reset buffers
- cone_object.reset()
要重置生成的刚体对象prims模拟状态,我们需要设置它们的姿态和速度。它们共同定义了生成的刚性对象的根状态。需要注意的是,此状态是在仿真世界框架中定义的,而不是在其父 Xform prim 中定义的。这是因为物理引擎只理解世界帧,而不理解父 Xform prim 的帧。因此,我们需要在设置刚体对象prims之前将刚体对象prims的期望状态转换为世界框架。
使用该
assets.RigidObject.data.default_root_state
属性来获取生成的刚体对象prims的默认根状态。然后,我们随机化根状态的平移,并使用该
assets.RigidObject.write_root_state_to_sim()
方法设置刚体对象prims的所需状态。顾名思义,此方法将刚体对象prims 的根状态写入仿真缓冲区。
所以这里创建的刚体位置是相对于根的,跟父Xform之类的无关,反正我点来点去是没查到立锥体的位置;
接下来还有两步跟刚体有关的工作要做:
在步进模拟之前,我们执行该
assets.RigidObject.write_data_to_sim()
方法。此方法将其他数据(如外力)写入仿真缓冲区。在本教程中,我们不会对刚性对象施加任何外力,因此不需要此方法。但是,为了完整起见,它包括在内。
- # apply sim data
- cone_object.write_data_to_sim()
在逐步仿真之后,我们更新刚性对象素数的内部缓冲区,以反映它们在属性中
assets.RigidObject.data
的新状态。这是使用该assets.RigidObject.update()
方法完成的。
- # update buffers
- cone_object.update(sim_dt)
欢迎加QQ群一起交流学习:723139415
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。