Isaac Lab 任务
Isaac Lab 是 NVIDIA 基于 Isaac Sim 构建的统一机器人学习框架。在本仓库中,它是 manager-based 任务定义的主要 GPU 加速 RL 后端。
Isaac Lab 并不包含在 LAV2 默认的 Python 依赖中,因此在导入 lav2.tasks.isaaclab 或在 Isaac Sim 中运行 LAV2 任务之前,你需要先单独安装并配置 Isaac Lab。
LAV2 如何接入 Isaac Lab
LAV2 通过 lav2.tasks.isaaclab 暴露 Isaac Lab 任务。典型的接入步骤,是确保目标训练或回放脚本除了标准 Isaac Lab task registry 之外,还会导入这个包。
实际流程通常是:
- 进入 Isaac Lab 的强化学习脚本目录,例如
scripts/reinforcement_learning/ - 确保脚本除了导入
isaaclab_tasks之外,也导入 lav2.tasks.isaaclab - 以 LAV2 任务名运行脚本,例如
--task Isaac-LAV2-Base-Direct-v0
在 Linux 或 macOS 上,可以在每个 import isaaclab_tasks 之后插入下面这行导入:
sed -i '/import isaaclab_tasks/a\
import lav2.tasks.isaaclab' $(find scripts/reinforcement_learning/ -name '*.py')
在 Windows 上,可以使用 PowerShell:
Get-ChildItem -Path scripts/reinforcement_learning/ -Filter *.py -Recurse | ForEach-Object {
(Get-Content $_.FullName) -replace 'import isaaclab_tasks', "import isaaclab_tasks`nimport lav2.tasks.isaaclab" | Set-Content $_.FullName
}
如果你希望 Isaac Lab 不修改单个脚本也能看到 LAV2 任务包,可以直接在 Isaac Lab 的任务包树里创建一个符号链接。
在 Linux 或 macOS 上:
ln -s /path/to/lav2/tasks/isaaclab source/isaaclab_tasks/isaaclab_tasks/lav2_tasks
在 Windows 上:
New-Item -ItemType SymbolicLink -Path source\isaaclab_tasks\isaaclab_tasks\lav2_tasks -Target C:\path\to\lav2\tasks\isaaclab
说明
- 当你希望接入方式在脚本中保持显式时,使用导入方式。
- 当你不想修改多个 RL 入口文件时,使用符号链接方式。
LAV2 Base 任务
主要入口是 lav2.tasks.isaaclab.LAV2_base.LAV2_env_cfg。它是仓库中 LAV2 基础任务对应的 manager-based RL environment 配置。
和 Isaac Lab 自身的 manager-based environment 一样,这个任务由 scene、actions、observations、events、commands、rewards 与 terminations 等多个配置块拼装而成。只要理解了这个基础 manager-based environment 的组织方式,整个任务包的其余部分也会遵循相同的设计语言。
训练工作流
训练 LAV2 Isaac Lab 任务主要有两种方式。
当你希望尽量贴近 Isaac Lab 原生 RL 入口与 CLI 习惯时,这是标准路径。
以 skrl 为例:
./isaaclab.sh -p scripts/reinforcement_learning/skrl/train.py --task Isaac-LAV2-Base-v0 --num_envs 4096 --max_iterations 500 --headless
如果想查看可用 CLI 参数及其含义:
./isaaclab.sh -p scripts/reinforcement_learning/skrl/train.py --help
这条路径是 LAV2 特有的,目前只面向 skrl。当你需要本仓库在 lav2.runner.skrl.cfg 下提供的自定义网络结构与训练编排时,使用这条路径。
示例入口:
uv run python -m lav2.runner.skrl.cfg.LAV2_base
这个示例背后的具体模块是 lav2.runner.skrl.cfg.LAV2_base。
当你希望与 Isaac Lab 原生工作流保持兼容时,使用内置脚本;当你明确需要本仓库提供的自定义网络结构与配置组织时,使用 LAV2 的 skrl 入口。
推荐修改顺序
当你要修改任务语义时,先从 environment config 入手;当你要修改优化器行为、网络结构或实验编排时,再去改 agent config 或 runner config;CLI override 适合用于短期实验。
修改训练参数
如果要对任务进行有意义的调节,主要方式应当是直接修改配置文件,而不是只依赖命令行覆盖。
在 LAV2 的 Isaac Lab 任务中,主要入口是环境配置文件,这里对应:
这沿用了 Isaac Lab manager-based environment 的设计模式:任务由 scene、actions、observations、events、commands、rewards 与 terminations 等配置块拼装而成。
在环境配置里应该改什么
如果你希望改变任务行为,通常应先从 environment cfg 入手,而不是训练脚本。
常见的修改位置包括:
scene:环境数量、地形或资产布局、间距以及场景组成actions:动作缩放、动作类型、命令映射与裁剪observations:策略可见的信号、分组、噪声与拼接方式commands:命令范围、重采样周期与目标生成逻辑events:reset 随机化、扰动、启动随机化与 domain randomization hookrewards:奖励项、权重、阈值与 shaping 结构terminations:超时、坠毁、漂移或非法状态终止逻辑
这与 Isaac Lab 自身的 manager-based RL environment 教程是同一结构:任务的各部分被拆成独立配置类,再拼装成一个统一环境配置。
常见修改示例
常见改动包括:
- 增减并行环境数量
- 调整奖励权重,以强调跟踪、平滑性或能耗
- 扩大或缩小命令范围
- 调整 reset 随机化与扰动强度
- 在修改网络结构之前,先调整观测组成
如果某个参数影响的是任务语义,就放在环境配置里;如果影响的是优化器或策略训练行为,就放在 agent config 里。
修改 Agent 与 Runner 配置
训练相关参数通常应放在 agent config,而不是 environment config。
对于 Isaac Lab 内置工作流,这些值通常位于任务包对应的 agent config 文件中,例如 lav2.tasks.isaaclab.LAV2_base.agents 及其相关子包下的 YAML 或 Python 文件。
对于 LAV2 自定义的 skrl 路径,主要入口位于 lav2.runner.skrl.cfg。当你需要修改以下内容时,应从这些模块入手:
- policy 或 value network 结构
- hidden dimensions 与激活函数选择
- PPO 或其它 learner 超参数
- 实验命名与日志默认行为
- 自定义 runner 连接的 checkpoint 或 resume 逻辑
一个实用的修改策略
调参时建议按这个顺序:
- 确认真正被使用的任务定义与环境配置是哪一个
- 先在 environment config 中修改任务级参数
- 再在 agent config 或 runner config 中修改优化器或策略参数
- 最后再使用命令行覆盖进行快速实验
这样可以让仓库中的事实来源保持可读,也避免把重要任务行为藏进一次性的 shell 命令中。
Hydra CLI 覆盖
Hydra CLI 覆盖仍然适合做临时实验,但应把它看作快速迭代工具,而不是长期维护任务的主位置。
示例:
./isaaclab.sh -p scripts/reinforcement_learning/skrl/train.py --task Isaac-LAV2-Base-v0 --headless env.scene.num_envs=4096 agent.seed=2024
Isaac Lab 同时也保留了 --num_envs、--seed 与 --max_iterations 这类便捷 CLI 参数。这些显式参数会优先于 Hydra override 生效。
实际建议
num_envs是对吞吐与显存影响最大的参数之一- 较大规模训练时总是使用
--headless,以减少渲染开销 - 如果遇到显存不足,优先先减小并行环境数量
- 如果训练不稳定或出现 NaN,先检查奖励尺度、动作尺度、reset 随机化、控制器增益与求解器相关设置
参考资料
- Isaac Lab Hydra guide: https://isaac-sim.github.io/IsaacLab/main/source/features/hydra.html
- Isaac Lab training guide: https://isaac-sim.github.io/IsaacLab/main/source/overview/reinforcement-learning/training_guide.html
- Isaac Lab manager-based RL env tutorial: https://isaac-sim.github.io/IsaacLab/main/source/tutorials/03_envs/create_manager_rl_env.html
API 交叉引用
- Isaac Lab 任务包:lav2.tasks.isaaclab
- 基础 manager env 配置:lav2.tasks.isaaclab.LAV2_base.LAV2_env_cfg
- 基础任务包:lav2.tasks.isaaclab.LAV2_base
- 基础 agent 配置包:lav2.tasks.isaaclab.LAV2_base.agents
- LAV2
skrl配置包:lav2.runner.skrl.cfg - 基础
skrl配置入口:lav2.runner.skrl.cfg.LAV2_base