Isaac 实验室项目设置

目录

Isaac 实验室项目设置#

使用 Template Generator 来创建新项目是最好的方式。通过从存储库的根目录调用 isaaclab 脚本来为本教程系列生成模板。

./isaaclab.sh --new

确保选择 ExternalDirect | single agent 。对于框架,选择以下菜单上的 skrlPPOAMP 。您可以选择其他框架,但本教程将详细介绍 skrl 。其他框架的配置过程类似。您可以直接通过查看 教程存储库的初始分支 来获取此代码的副本!

这将创建具有指定名称的扩展项目在所选路径。对于本教程,我们选择了名称 isaac_lab_tutorial

备注

模板生成器期望项目名称遵循 “蛇形命名法”: 全部小写,单词之间用下划线分隔。但是,我们已将示例项目重命名为 “IsaacLabTutorial” ,以更符合 GitHub 和我们其他项目的命名约定。如果您正在参考示例存储库,请注意这个细微差别,因为某些表面路径名称可能会更改。如果您通过构建项目自己来跟进,那么您可以忽略这个说明。

接下来,我们必须将项目安装为 python 模块。导航到刚创建的目录(它将包含项目的 sourcescripts 目录),然后运行以下命令以安装模块。

python -m pip install -e source/isaac_lab_tutorial

要验证设置是否正确,

python scripts/list_envs.py

请从新项目的根目录运行。这将生成一个类似以下表格的表格

+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                                          Available Environments in Isaac Lab                                                                                                          |
+--------+---------------------------------------+-----------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+
| S. No. | Task Name                             | Entry Point                                                                                   | Config                                                                                               |
+--------+---------------------------------------+-----------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+
|   1    | Template-Isaac-Lab-Tutorial-Direct-v0 | isaac_lab_tutorial.tasks.direct.isaac_lab_tutorial.isaac_lab_tutorial_env:IsaacLabTutorialEnv | isaac_lab_tutorial.tasks.direct.isaac_lab_tutorial.isaac_lab_tutorial_env_cfg:IsaacLabTutorialEnvCfg |
+--------+---------------------------------------+-----------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------+

现在,我们可以使用任务名称来运行环境。

python scripts/skrl/train.py --task=Template-Isaac-Lab-Tutorial-Direct-v0

默认情况下,这应该启动一个cartpole训练环境。

训练完成后,运行以下命令以查看训练过程中得到的策略!

python scripts/skrl/play.py --task=Template-Isaac-Lab-Tutorial-Direct-v0

请注意,您无需指定检查点文件的路径!这是因为 Isaac Lab 处理诸如检查点保存、加载和记录等许多细节。在这种情况下, train.py 脚本将创建两个目录: logsoutput ,它们用作此项目运行的任务的默认输出目录。

项目结构#

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

isaac 实验室模板项目的结构。

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