Nvidia Isaac Lab 8 - 在 Isaac Lab 中,训练第二个机器人 - 3. 管理器配置

现在开始实现任务代码。使用马尔可夫决策过程(Markov Decision Process,MDP)框架以及用于计算相应动作、观测和奖励的数学逻辑描述“希望机器人学习做什么”这一想法。


1. 使用管理器实现 MDP

1.1. 任务设计工作流

基于管理器的工作流是 Isaac Lab 中的两种任务设计工作流之一。管理器工作流和直接工作流各有不同优势。

与直接工作流相比,搭建基于管理器的工作流需要投入更多时间,但更易复用。任务可以被轻松拆分,并且在不同项目之间复用;组件分离也能降低组件交互出错的可能性。不同团队成员可以分别处理不同子任务,因此非常适合高度协作的项目。

直接工作流也有若干优点。其易于学习和实现。整个环境由单个类处理,适合难以拆分为组件的复杂逻辑。还支持通过 JIT Tracing 等技术进行代码优化。不过,将所有内容都放在单个脚本中,可能因复杂度较高而更容易出错。其复用性较低,因为任务通常是专门针对某个特定场景定义的。

最终选择直接工作流还是基于管理器的工作流,取决于项目需求、团队结构以及对系统的熟悉程度。两种方法都有其价值,随着对 Isaac Lab 更熟悉,可以随时探索另一种选择。

1.1.1. 工作流类型

直接工作流:

基于管理器的工作流:

1.2. 使用基于管理器的工作流

在 Isaac Lab 基于管理器的工作流中,有多个类用于表示马尔可夫决策过程(MDP)的核心组成部分。记住,这是设计强化学习任务的关键框架。

可以将这些管理器视为相互协作的实体,它们共同完成训练任务。在代码中,每个管理器都由一个 Python 类表示。

实现这些使用 @configclass 装饰器标记的类后,将它们组合到环境配置中,由 Isaac Lab 在内部处理各个管理器之间的交互。

我们负责定义管理器,Isaac Lab 负责协调它们。

这意味着,可以专注于定义各个模块和管理器,即基础组件,然后让 Isaac Lab 负责幕后的编排。Isaac Lab 的设计也鼓励复用基础组件,尤其是在基于管理器的工作流中。

注意

后文的代码基于 Isaac Lab 附带的 reach 任务示例。需要注意的是,Isaac Lab 中的其他示例只是简单地继承基类 ReachEnvCfg,替换参数,适配特定机器人

为什么该示例没继承 ReachEnvCfg 类?目的是提高可读性,能够在单个文件中看到完整的管理器定义。不过,从代码复用的角度看,更好的做法是继承原始的 reach 任务,根据需要覆盖相应的参数。

提示

@configclass 是在类中存储数据的便捷方式。点击此处了解更多信息。