项目结构#
在直接工作流程中,Isaac Lab 模板项目有四个嵌套结构,您需要了解的是: Project 、 Extension 、 Modules 和 Task 。
Project 是生成模板的根目录。它包含源代码和脚本目录,以及一个 README.md
文件。当我们创建模板时,我们将项目命名为 IsaacLabTutorial ,这将定义 git 存储库的根目录。如果您检查包含隐藏文件的项目根目录,您将看到定义项目行为的许多文件与 git 有关。 scripts
目录包含您在生成模板时选择的各个 RL 库的 train.py
和 play.py
脚本,而源代码目录包含项目的 python 包。
Extension 是我们通过 pip 安装的 python 包的名称。默认情况下,模板生成一个具有相同名称的单个扩展项目。一个项目可以有多个扩展,因此它们保存在一个常见的 source
目录中。传统的 python 包是通过存在描述包元数据的 pyproject.toml
文件定义的,但是使用 Isaac Lab 的包还必须是 Isaac Sim 扩展,因此需要一个包含在 config
目录中的 extension.toml
文件,以及一个附带的 extension.toml
文件,它描述了 Isaac Sim 扩展管理器需要的元数据。最后,因为模板旨在通过 pip 安装,所以它需要一个 setup.py
文件来使用 extension.toml
配置完成设置过程。一个项目可以有多个扩展,正如 Isaac Lab 存储库本身所示!
Modules 是 Isaac Lab 加载以运行训练(代码的核心)。默认情况下,模板生成一个具有与项目相同名称的单个模块的扩展。扩展中各个子模块的结构决定了在 Isaac Lab 中运行环境的 entry_point
。这就是为什么我们需要在调用 train.py
之前安装模板项目的原因: 运行任务所需的组件的路径需要对 python 公开才能让 Isaac Lab 找到它们。
最后,Task 是直接工作流的核心。默认情况下,模板生成一个与项目同名的单个任务。环境和配置文件存储在这里,以及占位符、依赖于 RL 库的 agents
。请注意 __init__.py
的内容!具体来说, gym.register
函数至少需要在用 Isaac Lab 的 train.py
和 play.py
脚本使用环境和任务之前调用一次。这个函数应该包含在一个模块的 __init__.py
文件中,以便在安装时调用。这个 init 文件的路径定义了任务的入口点!
对于模板, gym.register
在 isaac_lab_tutorial/source/isaac_lab_tutorial/isaac_lab_tutorial/tasks/direct/isaac_lab_tutorial/__init__.py
中调用。重复的名称是需要模板的默认名称,但现在我们可以看到项目的结构。 Project/source/Extension/Module/tasks/direct/Task/__init__.py