Nvidia Isaac Lab 8 - 在 Isaac Lab 中,训练第二个机器人 - 3. 管理器配置
现在开始实现任务代码。使用马尔可夫决策过程(Markov Decision Process,MDP)框架以及用于计算相应动作、观测和奖励的数学逻辑描述“希望机器人学习做什么”这一想法。
1. 使用管理器实现 MDP
1.1. 任务设计工作流
基于管理器的工作流是 Isaac Lab 中的两种任务设计工作流之一。管理器工作流和直接工作流各有不同优势。
与直接工作流相比,搭建基于管理器的工作流需要投入更多时间,但更易复用。任务可以被轻松拆分,并且在不同项目之间复用;组件分离也能降低组件交互出错的可能性。不同团队成员可以分别处理不同子任务,因此非常适合高度协作的项目。
直接工作流也有若干优点。其易于学习和实现。整个环境由单个类处理,适合难以拆分为组件的复杂逻辑。还支持通过 JIT Tracing 等技术进行代码优化。不过,将所有内容都放在单个脚本中,可能因复杂度较高而更容易出错。其复用性较低,因为任务通常是专门针对某个特定场景定义的。
最终选择直接工作流还是基于管理器的工作流,取决于项目需求、团队结构以及对系统的熟悉程度。两种方法都有其价值,随着对 Isaac Lab 更熟悉,可以随时探索另一种选择。
1.1.1. 工作流类型
直接工作流:
- 通过在单个脚本中编写全部环境逻辑,实现直接、细粒度的控制。
- 上手简单,配置快速。
- 适合难以拆分的复杂任务。
- 对使用过 Isaac Gym 的用户较为友好,Isaac Gym 也采用这种风格。
基于管理器的工作流:
- 高度模块化、可扩展,适合团队协作和灵活项目。
- 将环境逻辑(动作、奖励、重置等)拆分为独立、可复用的管理器类。
- 自动处理大量配置工作,减少手动编写编码。
- 更易调试,逻辑错误更少。
- 初始配置完成后,便于协作及加快原型开发。
- 适用于 Isaac Lab 新用户。
1.2. 使用基于管理器的工作流
在 Isaac Lab 基于管理器的工作流中,有多个类用于表示马尔可夫决策过程(MDP)的核心组成部分。记住,这是设计强化学习任务的关键框架。
- 奖励(Reward)
- 动作(Action)
- 观测(Observation)
- 课程(Curriculum)
- 事件(Event)
可以将这些管理器视为相互协作的实体,它们共同完成训练任务。在代码中,每个管理器都由一个 Python 类表示。
实现这些使用 @configclass 装饰器标记的类后,将它们组合到环境配置中,由 Isaac Lab 在内部处理各个管理器之间的交互。
我们负责定义管理器,Isaac Lab 负责协调它们。
这意味着,可以专注于定义各个模块和管理器,即基础组件,然后让 Isaac Lab 负责幕后的编排。Isaac Lab 的设计也鼓励复用基础组件,尤其是在基于管理器的工作流中。
注意
提示
@configclass 是在类中存储数据的便捷方式。点击此处了解更多信息。