编写资产配置#

本指南详细介绍了创建 ArticulationCfg 的过程。 ArticulationCfg 是定义Isaac Lab中 Articulation 属性的配置对象。

备注

在本指南中,我们只涵盖了创建 ArticulationCfg 的过程,但创建任何其他资产配置对象的过程类似。

我们将使用Cartpole示例来演示如何创建 ArticulationCfg 。 Cartpole是一个简单的机器人,由一个连接到杆的小车组成。 小车可以沿着轨道自由移动,杆可以在小车周围自由旋转。

Cartpole配置代码
 1# Copyright (c) 2022-2024, The Isaac Lab Project Developers.
 2# All rights reserved.
 3#
 4# SPDX-License-Identifier: BSD-3-Clause
 5
 6"""Configuration for a simple Cartpole robot."""
 7
 8
 9import omni.isaac.lab.sim as sim_utils
10from omni.isaac.lab.actuators import ImplicitActuatorCfg
11from omni.isaac.lab.assets import ArticulationCfg
12from omni.isaac.lab.utils.assets import ISAACLAB_NUCLEUS_DIR
13
14##
15# Configuration
16##
17
18CARTPOLE_CFG = ArticulationCfg(
19    spawn=sim_utils.UsdFileCfg(
20        usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/Classic/Cartpole/cartpole.usd",
21        rigid_props=sim_utils.RigidBodyPropertiesCfg(
22            rigid_body_enabled=True,
23            max_linear_velocity=1000.0,
24            max_angular_velocity=1000.0,
25            max_depenetration_velocity=100.0,
26            enable_gyroscopic_forces=True,
27        ),
28        articulation_props=sim_utils.ArticulationRootPropertiesCfg(
29            enabled_self_collisions=False,
30            solver_position_iteration_count=4,
31            solver_velocity_iteration_count=0,
32            sleep_threshold=0.005,
33            stabilization_threshold=0.001,
34        ),
35    ),
36    init_state=ArticulationCfg.InitialStateCfg(
37        pos=(0.0, 0.0, 2.0), joint_pos={"slider_to_cart": 0.0, "cart_to_pole": 0.0}
38    ),
39    actuators={
40        "cart_actuator": ImplicitActuatorCfg(
41            joint_names_expr=["slider_to_cart"],
42            effort_limit=400.0,
43            velocity_limit=100.0,
44            stiffness=0.0,
45            damping=10.0,
46        ),
47        "pole_actuator": ImplicitActuatorCfg(
48            joint_names_expr=["cart_to_pole"], effort_limit=400.0, velocity_limit=100.0, stiffness=0.0, damping=0.0
49        ),
50    },
51)
52"""Configuration for a simple Cartpole robot."""

定义生成配置#

生成基本物体到场景中 教程中所述,生成配置定义要生成的资产的属性。此生成可能以程序方式进行,也可能通过现有的资产文件(例如USD或URDF)进行。在本例中,我们将从USD文件生成Cartpole。

从USD文件生成资产时,我们定义其 UsdFileCfg 。此配置对象接收以下参数:

最后两个参数是可选的。如果未指定,它们将保持在USD文件中的默认值。

spawn=sim_utils.UsdFileCfg(
    usd_path=f"{ISAACLAB_NUCLEUS_DIR}/Robots/Classic/Cartpole/cartpole.usd",
    rigid_props=sim_utils.RigidBodyPropertiesCfg(
        rigid_body_enabled=True,
        max_linear_velocity=1000.0,
        max_angular_velocity=1000.0,
        max_depenetration_velocity=100.0,
        enable_gyroscopic_forces=True,
    ),
    articulation_props=sim_utils.ArticulationRootPropertiesCfg(
        enabled_self_collisions=False,
        solver_position_iteration_count=4,
        solver_velocity_iteration_count=0,
        sleep_threshold=0.005,
        stabilization_threshold=0.001,
    ),
),

如要从URDF文件中导入关节而不是从USD文件中导入,你可以用 UrdfFileCfg 替换 UsdFileCfg 。更多详情,请查看API文档。

定义初始状态#

每个资产都需要通过其配置在模拟中定义其初始或 默认 状态。此配置存储在资产的默认状态缓冲区中,当需要重置资产状态时,可以访问这些缓冲区。

备注

资产的初始状态是根据其本地环境框架定义的。然后,当重置资产状态时,需要将其转换为全局模拟框架。更多详情,请查看 与关节交互 教程。

对于关节, InitialStateCfg 对象定义了关节根部的初始状态以及所有关节的初始状态。在本例中,我们将在XY平面的原点处生成Cartpole,在Z高度为2.0米处。同时,关节位置和速度设置为0.0。

init_state=ArticulationCfg.InitialStateCfg(
    pos=(0.0, 0.0, 2.0), joint_pos={"slider_to_cart": 0.0, "cart_to_pole": 0.0}
),

定义执行器配置#

执行器是关节中的关键组件。通过此配置,可以定义要使用的执行器模型类型。我们可以使用物理引擎提供的内部执行器模型(即隐式执行器模型),也可以使用用户定义的方程系统控制的自定义执行器模型(即显式执行器模型)。有关执行器的更多详情,请参见 执行器

cartpole的关节具有两个执行器,分别对应于它的每个关节:cart_to_poleslider_to_cart 。我们对这些执行器使用两种不同的执行器模型作为示例。但是,由于它们都使用相同的执行器模型,可以将它们组合成一个单独的执行器模型。

使用分开的执行器模型进行执行器模型配置
actuators={
    "cart_actuator": ImplicitActuatorCfg(
        joint_names_expr=["slider_to_cart"],
        effort_limit=400.0,
        velocity_limit=100.0,
        stiffness=0.0,
        damping=10.0,
    ),
    "pole_actuator": ImplicitActuatorCfg(
        joint_names_expr=["cart_to_pole"], effort_limit=400.0, velocity_limit=100.0, stiffness=0.0, damping=0.0
    ),
使用单个执行器模型进行执行器模型配置
actuators={
   "all_joints": ImplicitActuatorCfg(
      joint_names_expr=[".*"],
      effort_limit=400.0,
      velocity_limit=100.0,
      stiffness={"slider_to_cart": 0.0, "cart_to_pole": 0.0},
      damping={"slider_to_cart": 10.0, "cart_to_pole": 0.0},
   ),
},