项目结构

项目结构#

在直接工作流程中,Isaac Lab 模板项目有四个嵌套结构,您需要了解的是: ProjectExtensionModulesTask

isaac Lab 模板项目的结构。

Project 是生成模板的根目录。它包含源代码和脚本目录,以及一个 README.md 文件。当我们创建模板时,我们将项目命名为 IsaacLabTutorial ,这将定义 git 存储库的根目录。如果您检查包含隐藏文件的项目根目录,您将看到定义项目行为的许多文件与 git 有关。 scripts 目录包含您在生成模板时选择的各个 RL 库的 train.pyplay.py 脚本,而源代码目录包含项目的 python 包。

Extension 是我们通过 pip 安装的 python 包的名称。默认情况下,模板生成一个具有同名单个扩展的项目。一个项目可以有多个扩展,因此它们保存在一个公共的 source 目录中。传统的 python 包由描述包元数据的 pyproject.toml 文件定义;但使用 Isaac Lab 的包还必须是 Isaac Sim 扩展,因此需要一个 config 目录及其中描述 Isaac Sim 扩展管理器所需元数据的 extension.toml 文件。最后,由于模板需要通过 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.pyplay.py 脚本使用环境和任务之前调用一次。这个函数应该包含在一个模块的 __init__.py 文件中,以便在安装时调用。这个 init 文件的路径定义了任务的入口点!

对于模板, gym.registerisaac_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