跳到主要内容
Robot Lab 基于 Isaac Lab 的机器人强化学习使用指南 | 极客日志
Python AI 算法
Robot Lab 基于 Isaac Lab 的机器人强化学习使用指南 基于 NVIDIA Isaac Lab 的 Robot Lab 扩展库在机器人强化学习中的应用。内容涵盖 Isaac Sim 核心架构概念、常用操作快捷键、支持的四足及人形机器人列表、环境安装配置流程、典型训练案例(含速度控制与模仿学习)、高级功能如多 GPU 训练与策略蒸馏,以及自定义机器人资产与任务配置的完整步骤。旨在为开发者提供从仿真到训练的标准化实践指南。
心动瞬间 发布于 2026/4/6 更新于 2026/5/20 21 浏览1. 项目简介
Robot Lab 是一个基于 NVIDIA Isaac Lab 构建的机器人强化学习扩展库,专注于为各类机器人提供标准化的强化学习训练环境。该项目允许开发者在独立的环境中进行开发,而无需修改核心 Isaac Lab 仓库。
NVIDIA 的机器人平台主要由两大核心组件构成,它们之间是层级关系:基础仿真平台 Isaac Sim,以及构建于其上的机器人学习应用框架 Isaac Lab。要精通 Isaac Sim,必须理解其分层架构中的五个核心概念。
Isaac Sim 是什么?它是一个通用的机器人模拟器,提供了高保真的物理引擎(PhysX)和照片级的渲染技术(RTX)。其核心任务是构建和模拟一个精确、逼真的虚拟环境,包括机器人模型、传感器数据和物理交互。
Application (App) :这是最高层级的管理者,负责所有资源的生命周期,包括启动和销毁仿真进程。即使用户在无头模式(headless)下运行,App 依然是整个程序的总控制器。
Simulation (Sim) :Sim 负责定义虚拟世界的'规则',例如物理定律(如重力方向)、时间步长(dt)以及渲染频率。它将时间的每一步划分为不同的子步骤(如 physics_step 和 render_step),并掌管着 World 对象。
World :World 为仿真提供了空间背景,定义了笛卡尔坐标系的原点和单位。所有关于尺寸和距离的问题都在 World 的参考系内得以解答。
USD 图元(Prim) :Prim 是 USD 场景的基本构建块,可以理解为一个容器。每个 Prim 都有一个唯一的路径(例如/World/MyRobot/Gripper),并包含定义其特性的属性(Attributes)(如颜色、大小)和与其他 Prim 的关系(Relationships)(如材质指定)。例如,一个'树'的 Prim 可以有'高度'和'颜色'等属性,同时与一个'地面'Prim 建立关系,以表明其种植位置。父级 Prim 的属性可以被其子级继承,从而实现复杂的场景组合。
Scene :Scene 是 Isaac Lab 中一个至关重要的概念,它管理着 Stage 上所有与向量化(vectorization)相关的图元。这些被管理的图元(如机器人、桌子、待抓取物体)被称为仿真实体(simulation entities)。当用户指定需要创建多个环境副本时,Scene 会自动在 Stage 上克隆这些实体,并将它们放置在不同的坐标位置,从而实现在单一世界和舞台上进行大规模并行训练。
Stage :Stage 是世界的'组成结构'。它以通用场景描述(Universal Scene Description,USD)为基础,将仿真中的所有元素(如机器人、灯光、摄像机)表示为一个层级化的树状结构。这个结构中的每一个节点都是一个图元(Prim)。
[图片]
Isaac Lab 是什么?它是一个专为机器人学习(特别是强化学习)设计的开源框架。它本身不是一个模拟器,而是利用 Isaac Sim 提供的环境来进行大规模的 AI 模型训练。
[图片]
1.1 Isaac Sim 操作快捷键参考
以下是 Isaac Sim 中常用的操作快捷键,帮助您更高效地使用仿真环境:
基本操作
类型 键位 效果 基本操作 鼠标左键 选中物体 基本操作 ESC 取消选中 基本操作 Ctrl + Z 撤销上一步操作 基本操作 Ctrl + Y / Ctrl + Shift + Z 重做操作 基本操作 Ctrl + S 保存当前场景 基本操作 Ctrl + O 打开场景 基本操作 Ctrl + N 新建场景 基本操作 Delete 删除选中的物体
视野操作 类型 键位 效果 视野操作 鼠标左键点击目标 + F 聚焦于选中的物体(Frame Selected) 视野操作 不选中目标 + F 聚焦于整个场景(Frame All) 视野操作 鼠标左键 + Alt(或鼠标中键) 旋转视野(绕选中物体或场景中心) 视野操作 鼠标右键 + Alt 缩放视野(Zoom) 视野操作 鼠标中键(滚轮按下) 平移视野(Pan) 视野操作 鼠标滚轮 放大/缩小视野 视野操作 鼠标右键 + W 镜头向前移动(第一人称模式) 视野操作 鼠标右键 + S 镜头向后移动(第一人称模式) 视野操作 鼠标右键 + A 镜头向左移动(第一人称模式) 视野操作 鼠标右键 + D 镜头向右移动(第一人称模式) 视野操作 鼠标右键 + Q 镜头向下移动(第一人称模式) 视野操作 鼠标右键 + E 镜头向上移动(第一人称模式) 视野操作 Numpad 0-9 切换预设视角
物体操作与变换 类型 键位 效果 变换操作 W(或 T) 切换到平移模式(Translate) 变换操作 E(或 R) 切换到旋转模式(Rotate) 变换操作 R(或 Y) 切换到缩放模式(Scale) 变换操作 Q 切换到选择模式(取消变换工具) 变换操作 Shift + 拖拽 在特定轴上进行精确移动 变换操作 Ctrl + 拖拽 启用吸附功能(Snap) 变换操作 Ctrl + Shift + 鼠标左键拖拽 对物体施加力(Apply Force,用于物理交互测试) 变换操作 Alt + 拖拽 复制并移动物体
选择操作 类型 键位 效果 选择操作 Ctrl + 鼠标左键 多选/取消选择单个物体(Add/Remove from Selection) 选择操作 Shift + 鼠标左键 范围选择(连续选择) 选择操作 Ctrl + A 全选当前层级的所有物体 选择操作 Ctrl + Shift + A 取消全选 选择操作 双击物体 选择物体及其所有子物体
场景层级操作 类型 键位 效果 层级操作 Ctrl + G 将选中物体组合成组(Group) 层级操作 Ctrl + Shift + G 取消组合(Ungroup) 层级操作 Ctrl + P 设置父级(Parent) 层级操作 Alt + P 清除父级(Unparent) 层级操作 H 隐藏选中的物体 层级操作 Alt + H 显示所有隐藏的物体 层级操作 Ctrl + H 隐藏未选中的物体
仿真控制 类型 键位 效果 仿真控制 空格键 播放/暂停仿真 仿真控制 Ctrl + 空格 单步执行仿真(Step) 仿真控制 Ctrl + Shift + 空格 停止仿真并重置 仿真控制 . (句号) 前进一帧 仿真控制 , (逗号) 后退一帧
窗口与界面 类型 键位 效果 界面操作 Ctrl + Shift + Space 最大化/还原当前视口 界面操作 Ctrl + Tab 在打开的标签页之间切换 界面操作 F1 打开帮助文档 界面操作 F11 全屏模式 界面操作 ` (反引号/波浪线键) 打开/关闭控制台(Console)
调试与可视化 类型 键位 效果 调试操作 Ctrl + Shift + D 切换调试绘制(Debug Draw) 调试操作 Ctrl + Shift + C 显示/隐藏碰撞体(Collision Meshes) 调试操作 Ctrl + Shift + B 显示/隐藏边界框(Bounding Boxes) 调试操作 Ctrl + Shift + W 显示/隐藏线框模式(Wireframe) 调试操作 Ctrl + Shift + L 切换照明模式
相机操作 类型 键位 效果 相机操作 Ctrl + Shift + C 从当前视角创建相机 相机操作 Ctrl + [ 切换到上一个相机 相机操作 Ctrl + ] 切换到下一个相机 相机操作 Shift + F 进入飞行模式(Fly Mode)
脚本与编辑器 类型 键位 效果 脚本编辑 Ctrl + Shift + P 打开命令面板(Command Palette) 脚本编辑 Ctrl + Shift + E 打开脚本编辑器(Script Editor) 脚本编辑 Ctrl + Enter 执行选中的脚本代码 脚本编辑 Ctrl + / 注释/取消注释代码行
搜索与导航 类型 键位 效果 搜索操作 Ctrl + F 在场景中搜索物体 搜索操作 Ctrl + Shift + F 在整个项目中搜索 搜索操作 Ctrl + L 跳转到指定行
视口与显示模式 类型 键位 效果 视口模式 Numpad 1 前视图(Front View) 视口模式 Numpad 3 右视图(Right View) 视口模式 Numpad 7 顶视图(Top View) 视口模式 Numpad 0 切换到相机视图 视口模式 Numpad . 聚焦到选中物体 视口模式 Numpad / 隔离选中物体(只显示选中对象) 视口模式 Numpad 5 切换正交/透视投影模式 显示模式 Z 切换渲染模式(线框/实体/材质预览) 显示模式 Alt + Z 切换透明显示模式 显示模式 Shift + Z 切换材质预览/渲染视图
网格与对齐 类型 键位 效果 网格操作 G 显示/隐藏网格(Grid) 网格操作 Ctrl + G(长按) 显示网格设置 对齐操作 Alt + X 对齐到 X 轴 对齐操作 Alt + Y 对齐到 Y 轴 对齐操作 Alt + Z 对齐到 Z 轴(与透明显示不同,需查看上下文) 吸附操作 Shift + Tab 切换吸附模式(顶点/边/面)
时间轴与动画 类型 键位 效果 时间轴 Home 跳转到时间轴起始帧 时间轴 End 跳转到时间轴结束帧 时间轴 左箭头 上一帧 时间轴 右箭头 下一帧 时间轴 Shift + 左箭头 快退(10 帧) 时间轴 Shift + 右箭头 快进(10 帧) 动画 I 插入关键帧(Insert Keyframe) 动画 K 删除关键帧
属性与面板 类型 键位 效果 面板操作 N 显示/隐藏属性面板(Properties Panel) 面板操作 T 显示/隐藏工具栏 面板操作 Ctrl + Shift + T 打开/关闭所有面板 属性编辑 Tab 在属性字段间切换焦点 属性编辑 Enter 确认属性值修改 属性编辑 Esc 取消属性值修改
截图与录制 类型 键位 效果 截图 F12 截取当前视口(保存到默认路径) 截图 Ctrl + F12 截图并选择保存位置 截图 Alt + F12 截取整个窗口
性能与统计 类型 键位 效果 性能监控 Shift + ~ 显示/隐藏帧率(FPS)和性能统计 性能监控 Ctrl + Shift + I 显示/隐藏统计信息面板 性能监控 Ctrl + Alt + P 性能分析器(Profiler)
物理与仿真调试 类型 键位 效果 物理调试 Ctrl + Shift + P(长按) 显示物理调试信息 物理调试 P 暂停/恢复物理模拟(不影响渲染) 物理调试 Ctrl + R 重置物理场景 碰撞检测 Ctrl + Shift + V 显示/隐藏速度矢量
Layer(层)操作 类型 键位 效果 层操作 M 移动到图层(Move to Layer) 层操作 Shift + M 添加到图层(Add to Layer) 层操作 Ctrl + M 管理图层
测量与工具 类型 键位 效果 测量工具 Ctrl + Shift + M 激活测量工具(Measure Tool) 标注工具 Ctrl + Shift + N 添加注释/标注
其他实用快捷键 类型 键位 效果 刷新 F5 刷新视口/重新加载资源 刷新 Ctrl + F5 强制刷新并清除缓存 聚焦 . (句号,在 3D 视口中) 聚焦到鼠标位置 重复操作 Shift + R 重复上一次操作 快速保存 Ctrl + Shift + S 另存为(Save As) 导出 Ctrl + E 快速导出选中内容 导入 Ctrl + I 快速导入文件
不同操作系统和配置可能略有差异(Mac 上 Ctrl 通常对应 Cmd 键)
在 Isaac Sim 的 Edit > Preferences > Keyboard Shortcuts 中可以查看和自定义所有快捷键
建议在训练前熟悉这些快捷键,可以显著提升工作效率
使用 F1 键可以随时访问官方帮助文档
**Numpad(数字小键盘)**在视角切换中非常重要,如果笔记本没有数字小键盘,可以在设置中重新映射这些快捷键
某些快捷键可能需要在特定上下文(如 3D 视口激活状态)下才能使用
2. 支持的机器人
2.1 四足机器人 (Quadruped) 机器人 环境 ID 制造商 ANYmal D RobotLab-Isaac-Velocity-Rough-Anymal-D-v0ANYbotics Unitree Go2 RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0Unitree Unitree B2 RobotLab-Isaac-Velocity-Rough-Unitree-B2-v0Unitree Unitree A1 RobotLab-Isaac-Velocity-Rough-Unitree-A1-v0Unitree Deeprobotics Lite3 RobotLab-Isaac-Velocity-Rough-Deeprobotics-Lite3-v0Deeprobotics Zsibot ZSL1 RobotLab-Isaac-Velocity-Rough-Zsibot-ZSL1-v0Zsibot MagicLab Dog RobotLab-Isaac-Velocity-Rough-MagicLab-Dog-v0MagicLab
2.2 轮式机器人 (Wheeled) 机器人 环境 ID 制造商 Unitree Go2W RobotLab-Isaac-Velocity-Rough-Unitree-Go2W-v0Unitree Unitree B2W RobotLab-Isaac-Velocity-Rough-Unitree-B2W-v0Unitree Deeprobotics M20 RobotLab-Isaac-Velocity-Rough-Deeprobotics-M20-v0Deeprobotics DDTRobot Tita RobotLab-Isaac-Velocity-Rough-DDTRobot-Tita-v0DDTRobot Zsibot ZSL1W RobotLab-Isaac-Velocity-Rough-Zsibot-ZSL1W-v0Zsibot MagicLab Dog-W RobotLab-Isaac-Velocity-Rough-MagicLab-Dog-W-v0MagicLab
2.3 人形机器人 (Humanoid) 机器人 环境 ID 制造商 Unitree G1 RobotLab-Isaac-Velocity-Rough-Unitree-G1-v0Unitree Unitree H1 RobotLab-Isaac-Velocity-Rough-Unitree-H1-v0Unitree FFTAI GR1T1 RobotLab-Isaac-Velocity-Rough-FFTAI-GR1T1-v0FFTAI FFTAI GR1T2 RobotLab-Isaac-Velocity-Rough-FFTAI-GR1T2-v0FFTAI Booster T1 RobotLab-Isaac-Velocity-Rough-Booster-T1-v0Booster RobotEra Xbot RobotLab-Isaac-Velocity-Rough-RobotEra-Xbot-v0RobotEra Openloong Loong RobotLab-Isaac-Velocity-Rough-Openloong-Loong-v0Openloong RoboParty ATOM01 RobotLab-Isaac-Velocity-Rough-RoboParty-ATOM01-v0RoboParty MagicLab Bot-Gen1 RobotLab-Isaac-Velocity-Rough-MagicLab-Bot-Gen1-v0MagicLab MagicLab Bot-Z1 RobotLab-Isaac-Velocity-Rough-MagicLab-Bot-Z1-v0MagicLab
提示 : 所有环境都支持 Rough(崎岖地形)和 Flat(平地)两种地形配置
3. 环境准备
3.1 步骤 1: 安装 Isaac Lab
3.2 步骤 2: 安装 Robot Lab
cd ~
git clone https://github.com/fan-ziqi/robot_lab.git
cd robot_lab
conda activate isaaclab
python -m pip install -e source /robot_lab
python scripts/tools/list_envs.py
深入理解:安装配置详解 当你运行 python -m pip install -e source/robot_lab 时,实际上是在执行一个可编辑模式安装 (editable install)。让我们深入分析安装过程中涉及的关键配置文件。
setup.py - 安装脚本 source/robot_lab/setup.py 是 Python 包的安装脚本,负责定义包的元数据和依赖关系:
"""Installation script for the 'robot_lab' python package."""
import os
import toml
from setuptools import setup
EXTENSION_PATH = os.path.dirname(os.path.realpath(__file__))
EXTENSION_TOML_DATA = toml.load(os.path.join(
EXTENSION_PATH,
"config" ,
"extension.toml"
))
INSTALL_REQUIRES=[
"psutil" ,
"colorama" ,
"xacrodoc" ,
"numpy" ,
"pandas" ,
"pinocchio" ,
"cusrl[all]" ,
]
setup(
name="robot_lab" ,
packages=["robot_lab" ],
author=EXTENSION_TOML_DATA["package" ]["author" ],
maintainer=EXTENSION_TOML_DATA["package" ]["maintainer" ],
url=EXTENSION_TOML_DATA["package" ]["repository" ],
version=EXTENSION_TOML_DATA["package" ]["version" ],
description=EXTENSION_TOML_DATA["package" ]["description" ],
keywords=EXTENSION_TOML_DATA["package" ]["keywords" ],
install_requires=INSTALL_REQUIRES,
license="Apache License 2.0" ,
include_package_data=True ,
python_requires=">=3.10" ,
classifiers=[
"Natural Language :: English" ,
"Programming Language :: Python :: 3.10" ,
"Programming Language :: Python :: 3.11" ,
"Isaac Sim :: 4.5.0" ,
"Isaac Sim :: 5.0.0" ,
"Isaac Sim :: 5.1.0" ,
],
zip_safe=False ,
)
配置项 说明 name="robot_lab"包名,安装后可通过 import robot_lab 导入 install_requires自动安装的依赖列表 python_requires=">=3.10"要求 Python 3.10+ include_package_data=True包含非 .py 文件(如配置文件、模型文件) zip_safe=False不打包为 zip,保持文件结构(重要!)
基础依赖 包名 版本要求 用途 安装大小 psutil 最新 监控系统资源(CPU、内存、GPU) 在训练时显示资源使用情况 ~500 KB colorama 最新 跨平台终端彩色输出 美化日志和错误信息 ~30 KB xacrodoc 最新 解析和处理 URDF/Xacro 机器人描述文件 用于机器人模型加载 ~100 KB
运动模仿依赖(BeyondMimic) 包名 版本要求 用途 安装大小 numpy 最新 数值计算基础库 处理运动数据、张量操作 ~20 MB pandas 最新 数据处理和分析 读取/处理 CSV 格式的运动数据 ~40 MB pinocchio 最新 高性能机器人动力学库 用于运动重定向、正/逆运动学计算 ~50 MB
基于 C++ 实现,性能极高
支持 URDF、USD 等多种格式
提供正向/逆向运动学、动力学计算
在 BeyondMimic 中用于将人类动作映射到机器人
强化学习框架 包名 版本要求 用途 安装大小 cusrl[all] 最新 自定义强化学习框架 提供 PPO、SAC 等算法实现 ~10 MB
# [all] 会安装以下所有可选依赖:
# - torch # PyTorch 深度学习框架(通常已由 Isaac Lab 安装)
# - tensorboard # 训练可视化
# - wandb # 实验跟踪(可选)
# - gym # 环境接口(已被 gymnasium 替代)
3. 快速开始
3.1 示例 1: 训练四足机器人(Unitree Go2)
3.1.1 训练
conda activate isaaclab
cd ~/robot_lab
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--headless \
--num_envs 4096
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--num_envs 512
--task: 环境 ID
--headless: 无头模式(不显示 GUI)
--num_envs: 并行环境数量(根据 GPU 显存调整)
训练日志保存在 logs/rsl_rl/<task_name>/<timestamp> 目录。
3.1.2 监控训练 cd ~/robot_lab
tensorboard --logdir=logs
在浏览器中打开 http://localhost:6006 查看训练曲线。
3.1.3 测试策略
python scripts/reinforcement_learning/rsl_rl/play.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--checkpoint /media/bigdisk/robot_lab/logs/rsl_rl/unitree_go2_rough/2025-12-10_16-33-55/model_2400.pt \
--num_envs 64
python scripts/reinforcement_learning/rsl_rl/play.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--checkpoint /media/bigdisk/robot_lab/logs/rsl_rl/unitree_go2_rough/2025-12-10_16-33-55/model_2400.pt \
--num_envs 1 \
--keyboard
====================== ========================= ========================
命令 正向按键 反向按键
===================== ========================= ========================
X 轴移动 Numpad 8 / Arrow Up Numpad 2 / Arrow Down
Y 轴移动 Numpad 4 / Arrow Right Numpad 6 / Arrow Left
Z 轴旋转 Numpad 7 / Z Numpad 9 / X
===================== ========================= ========================
3.1.4 录制视频
python scripts/reinforcement_learning/rsl_rl/play.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--num_envs 4 \
--video \
--video_length 200
视频保存在 logs/rsl_rl/<task_name>/videos/ 目录。
3.2 示例 2: 训练人形机器人(Unitree G1)
3.2.1 基础速度控制
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-G1-v0 \
--headless
python scripts/reinforcement_learning/rsl_rl/play.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-G1-v0
强化学习实现运动控制的基本流程为:
Train → Play → Sim2Sim → Sim2Real
Train:在 Isaac Lab 任务上并行仿真训练策略(默认无界面更快)
Play:加载训练好的 checkpoint 在仿真中回放/可视化
Sim2Sim:把导出的策略放到其它仿真器(例如 Mujoco)验证迁移
Sim2Real:把策略部署到实物机器人(需调试模式/安全防护)
3.2.2 模仿策略学习
python scripts/tools/beyondmimic/csv_to_npz.py \
-f path/to/motion.csv \
--input_fps 60 \
--headless
python scripts/tools/beyondmimic/replay_npz.py \
-f path/to/motion.npz
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-BeyondMimic-Flat-Unitree-G1-v0 \
--headless
python scripts/reinforcement_learning/rsl_rl/play.py \
--task=RobotLab-Isaac-BeyondMimic-Flat-Unitree-G1-v0 \
--num_envs 2
3.3 示例 3: AMP 舞蹈动作学习 对抗性运动先验(AMP)可以学习更自然的运动模式。
python scripts/reinforcement_learning/skrl/train.py \
--task=RobotLab-Isaac-G1-AMP-Dance-Direct-v0 \
--algorithm AMP \
--headless
python scripts/reinforcement_learning/skrl/play.py \
--task=RobotLab-Isaac-G1-AMP-Dance-Direct-v0 \
--algorithm AMP \
--num_envs 32
4. 高级功能
4.1 多 GPU 训练
4.1.1 单机多卡
python -m torch.distributed.run \
--nnodes=1 \
--nproc_per_node=2 \
scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--headless \
--distributed
4.1.2 多机多卡 python -m torch.distributed.run \
--nproc_per_node=2 \
--nnodes=2 \
--node_rank=0 \
--rdzv_id=123 \
--rdzv_backend=c10d \
--rdzv_endpoint=localhost:5555 \
scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--headless \
--distributed
python -m torch.distributed.run \
--nproc_per_node=2 \
--nnodes=2 \
--node_rank=1 \
--rdzv_id=123 \
--rdzv_backend=c10d \
--rdzv_endpoint=192.168.1.100:5555 \
scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--headless \
--distributed
4.2 对称性数据增强
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Anymal-D-v0 \
--headless \
--agent=rsl_rl_with_symmetry_cfg_entry_point \
--run_name=ppo_with_symmetry \
agent.algorithm.symmetry_cfg.use_data_augmentation=true
python scripts/reinforcement_learning/rsl_rl/play.py \
--task=RobotLab-Isaac-Velocity-Rough-Anymal-D-v0 \
--agent=rsl_rl_with_symmetry_cfg_entry_point \
--run_name=ppo_with_symmetry
4.3 教师 - 学生蒸馏
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Flat-Anymal-D-v0 \
--headless \
--run_name=teacher
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Flat-Anymal-D-v0 \
--headless \
--agent=rsl_rl_distillation_cfg_entry_point \
--load_run teacher \
--run_name=student
python scripts/reinforcement_learning/rsl_rl/play.py \
--task=RobotLab-Isaac-Velocity-Flat-Anymal-D-v0 \
--agent=rsl_rl_distillation_cfg_entry_point \
--load_run student
4.4 恢复训练
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--headless \
--resume \
--load_run <run_folder_name>
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--headless \
--resume \
--load_run <run_folder_name> \
--checkpoint /path/to/model_5000.pt
4.5 特技动作训练
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Flat-HandStand-Unitree-A1-v0 \
--headless
python scripts/reinforcement_learning/rsl_rl/play.py \
--task=RobotLab-Isaac-Velocity-Flat-HandStand-Unitree-A1-v0
5. 自定义机器人
5.1 项目结构 robot_lab/
├── source /
│ └── robot_lab/
│ ├── assets/
│ │ ├── __init__.py
│ │ └── unitree.py
│ ├── tasks/
│ │ └── manager_based/
│ │ └── locomotion/
│ │ └── velocity/
│ │ ├── velocity_env_cfg.py
│ │ └── config/
│ │ └── unitree_a1/
│ │ ├── __init__.py
│ │ ├── flat_env_cfg.py
│ │ ├── rough_env_cfg.py
│ │ └── agent/
│ │ ├── rsl_rl_ppo_cfg.py
│ │ └── cusrl_ppo_cfg.py
│ └── ui_extension_example.py
└── scripts/
├── reinforcement_learning/
│ ├── rsl_rl/
│ │ ├── train.py
│ │ └── play.py
│ ├── cusrl/
│ └── skrl/
└── tools/
5.2 添加新机器人的步骤
5.2.1 步骤 1: 定义机器人资产 在 source/robot_lab/assets/ 创建机器人定义文件(例如 my_robot.py):
from omni.isaac.lab.actuators import ActuatorNetMLPCfg, DCMotorCfg
from omni.isaac.lab.assets.articulation import ArticulationCfg
import omni.isaac.lab.sim as sim_utils
MY_ROBOT_CFG = ArticulationCfg(
spawn=sim_utils.UsdFileCfg(
usd_path="/path/to/my_robot.usd" ,
activate_contact_sensors=True ,
rigid_props=sim_utils.RigidBodyPropertiesCfg(
disable_gravity=False ,
retain_accelerations=False ,
linear_damping=0.0 ,
angular_damping=0.0 ,
max_linear_velocity=1000.0 ,
max_angular_velocity=1000.0 ,
max_depenetration_velocity=1.0 ,),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
enabled_self_collisions=False ,
solver_position_iteration_count=4 ,
solver_velocity_iteration_count=0 ,),),
init_state=ArticulationCfg.InitialStateCfg(
pos=(0.0 ,0.0 ,0.6 ),
joint_pos={
".*_hip_joint" :0.0 ,
".*_thigh_joint" :0.7 ,
".*_calf_joint" :-1.4 ,
},
joint_vel={".*" :0.0 },),
actuators={
"legs" : DCMotorCfg(
joint_names_expr=[".*_hip_joint" ,".*_thigh_joint" ,".*_calf_joint" ],
effort_limit=33.5 ,
saturation_effort=33.5 ,
velocity_limit=21.0 ,
stiffness=25.0 ,
damping=0.5 ,
friction=0.0 ,),},)
5.2.2 步骤 2: 创建任务配置 在 source/robot_lab/tasks/manager_based/locomotion/velocity/config/ 创建机器人配置目录:
mkdir -p source /robot_lab/tasks/manager_based/locomotion/velocity/config/my_robot/agent
理解并行环境与 Interactive Scene 在开始编写配置之前,我们需要理解一个核心概念:强化学习训练需要大量的并行环境来加速学习 。
想象一下,如果只有一个机器人在学习走路,它每走一步、摔倒、爬起来,都需要时间。但如果有 4096 个机器人同时在 4096 个独立的环境中练习,AI 就能同时从 4096 个机器人的经验中学习,训练速度提升 4096 倍!这就是 Isaac Lab 中 Interactive Scene (交互式场景)的作用。
Interactive Scene 是 Isaac Lab 提供的场景管理器,它的核心功能是:
定义一次,自动克隆 :你只需定义一次场景配置(包括机器人、地面、传感器等),Scene 会自动将这些资产复制到成千上万个环境中
智能命名 :每个环境都有独立的命名空间(namespace),确保不同环境的物体互不干扰
并行仿真 :所有环境同时运行,充分利用 GPU 的并行计算能力
{ENV_REGEX_NS} 魔法变量:实现自动克隆的关键在配置文件中,你会频繁看到 {ENV_REGEX_NS} 这个特殊的占位符。这是 Isaac Lab 中最重要的概念之一。
当你写下 prim_path="{ENV_REGEX_NS}/Robot" 时,Isaac Lab 会在创建环境时自动将它替换为每个环境的唯一路径:
# 你写的配置
prim_path="{ENV_REGEX_NS}/Robot"
# Isaac Lab 自动替换(假设创建 4 个环境)
# 环境 0: prim_path="/World/envs/env_0/Robot"
# 环境 1: prim_path="/World/envs/env_1/Robot"
# 环境 2: prim_path="/World/envs/env_2/Robot"
# 环境 3: prim_path="/World/envs/env_3/Robot"
资产类型 是否需要 {ENV_REGEX_NS} 原因 机器人 ✅ 必须使用 每个环境的机器人需要独立控制、独立状态(位置、速度、关节角度) 传感器 (如高度扫描器)✅ 必须使用 每个环境的传感器需要独立读取数据 地面 ❌ 不需要 所有环境共享同一个无限大的平面 灯光 ❌ 不需要 所有环境共享同一个光源
/World/ ← USD Stage 根节点
│ ├── defaultGroundPlane ← 共享:所有环境使用同一个地面
│ ├── Light ← 共享:所有环境使用同一个灯光
│ └── envs/ ← 环境容器
│ ├── env_0/ ← 环境 0 的命名空间
│ │ └── Robot ← 环境 0 的机器人(独立)
│ │ ├── base
│ │ ├── FR_hip_joint
│ │ └── ...
│ ├── env_1/ ← 环境 1 的命名空间
│ │ └── Robot ← 环境 1 的机器人(独立)
│ ├── env_2/ ← 环境 2 的命名空间
│ │ └── Robot ← 环境 2 的机器人(独立)
│ └── env_3/ ← 环境 3 的命名空间
└── Robot ← 环境 3 的机器人(独立)
self.scene.robot = MY_ROBOT_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot") - 为每个环境创建独立的机器人
self.scene.height_scanner.prim_path = "{ENV_REGEX_NS}/Robot/" + self.base_link_name - 为每个环境的机器人安装独立的高度扫描器
这种设计使得我们可以用一份配置 轻松创建成千上万个并行环境 ,大幅加速强化学习训练!这个具体的申明,包含 ContactSensorCfg 都在 source/robot_lab/robot_lab/tasks/manager_based/locomotion/velocity/velocity_env_cfg.py
首先创建 rough_env_cfg.py (包含完整配置):
from isaaclab.utils import configclass
from robot_lab.assets import MY_ROBOT_CFG
from robot_lab.tasks.manager_based.locomotion.velocity.velocity_env_cfg import (
LocomotionVelocityRoughEnvCfg,
)
@configclass
class MyRobotRoughEnvCfg (LocomotionVelocityRoughEnvCfg ):
""" 自定义机器人的崎岖地形速度跟踪环境配置
继承自 LocomotionVelocityRoughEnvCfg 基类
注意:在 Robot Lab 中,Rough 配置是基础配置,包含所有功能
Flat 配置继承自 Rough,然后禁用一些不需要的功能
"""
base_link_name = "base"
foot_link_name = ".*_foot"
joint_names =[
"FR_hip_joint" ,"FR_thigh_joint" ,"FR_calf_joint" ,
"FL_hip_joint" ,"FL_thigh_joint" ,"FL_calf_joint" ,
"RR_hip_joint" ,"RR_thigh_joint" ,"RR_calf_joint" ,
"RL_hip_joint" ,"RL_thigh_joint" ,"RL_calf_joint" ,
]
def __post_init__ (self ):
""" 后初始化方法,在配置对象创建后自动调用
用于设置机器人特定的配置
"""
super ().__post_init__()
self .scene.robot = MY_ROBOT_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot" )
self .scene.height_scanner.prim_path = "{ENV_REGEX_NS}/Robot/" + self .base_link_name
self .observations.policy.base_lin_vel.scale = 2.0
self .observations.policy.base_ang_vel.scale = 0.25
self .observations.policy.joint_pos.scale = 1.0
self .observations.policy.joint_vel.scale = 0.05
self .observations.policy.joint_pos.params["asset_cfg" ].joint_names = self .joint_names
self .observations.policy.joint_vel.params["asset_cfg" ].joint_names = self .joint_names
self .actions.joint_pos.scale = {
".*_hip_joint" :0.125 ,
"^(?!.*_hip_joint).*" :0.25
}
self .actions.joint_pos.clip = {".*" :(-100.0 ,100.0 )}
self .actions.joint_pos.joint_names = self .joint_names
self .rewards.lin_vel_z_l2.weight = -2.0
self .rewards.ang_vel_xy_l2.weight = -0.05
self .rewards.flat_orientation_l2.weight = 0
self .rewards.base_height_l2.weight = 0
self .rewards.joint_torques_l2.weight = -2.5e-5
self .rewards.joint_acc_l2.weight = -2.5e-7
self .commands.base_velocity.ranges.lin_vel_x = (-1.0 ,1.5 )
self .commands.base_velocity.ranges.lin_vel_y = (-0.5 ,0.5 )
self .commands.base_velocity.ranges.ang_vel_z = (-1.0 ,1.0 )
然后创建 flat_env_cfg.py (继承 rough 并禁用某些功能):
from isaaclab.utils import configclass
from .rough_env_cfg import MyRobotRoughEnvCfg
@configclass
class MyRobotFlatEnvCfg (MyRobotRoughEnvCfg ):
""" 自定义机器人的平地速度跟踪环境配置
继承自 MyRobotRoughEnvCfg,禁用崎岖地形相关功能
在 Robot Lab 中,Flat 配置通过继承 Rough 配置,
然后禁用不需要的功能(如地形生成器、高度扫描器等)
"""
def __post_init__ (self ):
""" 后初始化方法,在配置对象创建后自动调用
禁用 Rough 环境中的地形相关功能
"""
super ().__post_init__()
self .scene.terrain.terrain_type = "plane"
self .scene.terrain.terrain_generator = None
self .scene.height_scanner = None
self .observations.policy.height_scan = None
self .observations.critic.height_scan = None
self .curriculum.terrain_levels = None
self .rewards.base_height_l2.params["sensor_cfg" ] = None
if self .__class__.__name__ == "MyRobotFlatEnvCfg" :
self .disable_zero_weight_rewards()
LocomotionVelocityRoughEnvCfg (Isaac Lab 基类)
↑
│ 继承
│
MyRobotRoughEnvCfg (完整配置:地形生成、高度扫描、所有传感器)
↑
│ 继承并禁用部分功能
│
MyRobotFlatEnvCfg (简化配置:平地、无高度扫描)
5.2.3 步骤 3: 配置训练参数 在 agent/ 目录创建 rsl_rl_ppo_cfg.py:
from isaaclab.utils import configclass
from isaaclab_rl.rsl_rl import (
RslRlOnPolicyRunnerCfg,
RslRlPpoActorCriticCfg,
RslRlPpoAlgorithmCfg,
)
@configclass
class MyRobotRoughPPORunnerCfg (RslRlOnPolicyRunnerCfg ):
""" 自定义机器人崎岖地形环境的 PPO 训练器配置
注意:与环境配置一致,Rough 配置是基础配置
Flat 配置继承自 Rough 配置
"""
num_steps_per_env = 24
max_iterations = 20000
save_interval = 100
experiment_name = "my_robot_rough"
policy = RslRlPpoActorCriticCfg(
init_noise_std=1.0 ,
actor_obs_normalization=False ,
critic_obs_normalization=False ,
actor_hidden_dims=[512 ,256 ,128 ],
critic_hidden_dims=[512 ,256 ,128 ],
activation="elu" ,)
algorithm = RslRlPpoAlgorithmCfg(
value_loss_coef=1.0 ,
use_clipped_value_loss=True ,
clip_param=0.2 ,
entropy_coef=0.01 ,
num_learning_epochs=5 ,
num_mini_batches=4 ,
learning_rate=1.0e-3 ,
schedule="adaptive" ,
gamma=0.99 ,
lam=0.95 ,
desired_kl=0.01 ,
max_grad_norm=1.0 ,)
@configclass
class MyRobotFlatPPORunnerCfg (MyRobotRoughPPORunnerCfg ):
""" 平地环境的训练配置
继承自 MyRobotRoughPPORunnerCfg,只修改迭代次数和实验名称
与环境配置的继承关系保持一致:
- Rough 是基础配置(包含所有参数)
- Flat 继承并修改部分参数
"""
def __post_init__ (self ):
""" 后初始化方法,在配置对象创建后自动调用
修改平地环境特定的参数
"""
super ().__post_init__()
self .max_iterations = 5000
self .experiment_name = "my_robot_flat"
RslRlOnPolicyRunnerCfg (RSL-RL 基类)
↑
│ 继承
│
MyRobotRoughPPORunnerCfg (完整配置:所有超参数)
↑
│ 继承并修改部分参数
│
MyRobotFlatPPORunnerCfg (简化配置:更少迭代次数)
与环境配置一致 :Rough 是基础,Flat 是简化
代码复用 :避免重复定义相同的超参数
易于维护 :修改共同参数只需改 Rough 配置
符合项目规范 :与 robot_lab 中所有机器人的配置方式一致
5.2.4 步骤 4: 注册环境 在 config/my_robot/__init__.py 注册环境:
import gymnasium as gym
from . import agents
gym.register(
id ="RobotLab-Isaac-Velocity-Flat-My-Robot-v0" ,
entry_point="isaaclab.envs:ManagerBasedRLEnv" ,
disable_env_checker=True ,
kwargs={
"env_cfg_entry_point" :f"{__name__} .flat_env_cfg:MyRobotFlatEnvCfg" ,
"rsl_rl_cfg_entry_point" :f"{agents.__name__} .rsl_rl_ppo_cfg:MyRobotFlatPPORunnerCfg" ,
},
)
gym.register(
id ="RobotLab-Isaac-Velocity-Rough-My-Robot-v0" ,
entry_point="isaaclab.envs:ManagerBasedRLEnv" ,
disable_env_checker=True ,
kwargs={
"env_cfg_entry_point" :f"{__name__} .rough_env_cfg:MyRobotRoughEnvCfg" ,
"rsl_rl_cfg_entry_point" :f"{agents.__name__} .rsl_rl_ppo_cfg:MyRobotRoughPPORunnerCfg" ,
},
)
在 Robot Lab 中,通常先注册 Flat 环境,再注册 Rough 环境。这是因为:
Flat 环境更简单,适合初期测试
用户通常先在平地训练,再迁移到崎岖地形
保持与项目其他机器人配置的一致性
RSL-RL (推荐):ETH Zurich 的 PPO 实现,性能稳定
CusRL (实验性):自定义强化学习框架
skrl (高级):支持 AMP 等高级算法
每个框架都需要相应的配置入口点。如果你只使用 RSL-RL,可以省略其他框架的入口点。
5.2.5 步骤 5: 验证和训练
python scripts/tools/list_envs.py |grep "My-Robot"
python scripts/reinforcement_learning/rsl_rl/train.py \
--task=RobotLab-Isaac-Velocity-Flat-My-Robot-v0 \
--headless
调优技巧
观察空间调整
增加关键传感器信息(IMU、关节状态)
使用历史缓冲提供时序信息
适当的归一化和缩放
奖励函数设计
平衡任务目标(速度跟踪)和约束(能耗、稳定性)
使用指数奖励处理非线性目标
避免奖励稀疏或过于密集
超参数调整
根据任务复杂度调整网络大小
增加环境数量加速训练(受 GPU 限制)
调整学习率和 PPO clip 范围
域随机化
添加质量、摩擦力、电机参数的随机化
模拟传感器噪声
提升 Sim2Real 迁移性能
6. 常见问题
6.1 安装问题 A: 确保已正确安装 Isaac Sim,并设置环境变量:
export ISAAC_SIM_PATH="/path/to/isaac-sim"
A: 尝试升级 pip 和 setuptools:
python -m pip install --upgrade pip setuptools wheel
python -m pip install -e source /robot_lab
6.2 训练问题 python scripts/reinforcement_learning/rsl_rl/train.py \
--task=<ENV_NAME> \
--num_envs 1024
使用无头模式(--headless)
增加并行环境数
使用更强的 GPU
检查 CPU 瓶颈(增加 worker 数量)
奖励函数设计不合理
超参数需要调整
观察空间不足
任务过于复杂(尝试简化任务)
6.3 仿真问题 rigid_props=sim_utils.RigidBodyPropertiesCfg(
max_depenetration_velocity=1.0 ,
),
articulation_props=sim_utils.ArticulationRootPropertiesCfg(
solver_position_iteration_count=8 ,
solver_velocity_iteration_count=2 ,),
6.4 部署问题
Gazebo 仿真验证
真实机器人部署接口
ROS/ROS2 集成
6.5 Pylance 找不到模块 A: 在 .vscode/settings.json 添加路径:
{ "python.analysis.extraPaths" : [ "${workspaceFolder}/source/robot_lab" , "/path/to/IsaacLab/source/isaaclab" , "/path/to/IsaacLab/source/isaaclab_assets" , "/path/to/IsaacLab/source/isaaclab_tasks" ] }
6.6 清理 USD 缓存
rm -rf /tmp/IsaacLab/usd_*
rm -rf /tmp/IsaacLab/usd_2024*
7. 参考链接 目录
1. 项目简介 1.1 Isaac Sim 操作快捷键参考 基本操作 视野操作 物体操作与变换 选择操作 场景层级操作 仿真控制 窗口与界面 调试与可视化 相机操作 脚本与编辑器 搜索与导航 视口与显示模式 网格与对齐 时间轴与动画 属性与面板 截图与录制 性能与统计 物理与仿真调试 Layer(层)操作 测量与工具 其他实用快捷键 2. 支持的机器人 2.1 四足机器人 (Quadruped) 2.2 轮式机器人 (Wheeled) 2.3 人形机器人 (Humanoid) 3. 环境准备 3.1 步骤 1: 安装 Isaac Lab 3.2 步骤 2: 安装 Robot Lab 1. 克隆 Robot Lab(在 IsaacLab 目录外) 2. 激活 Isaac Lab 环境 3. 安装 Robot Lab 扩展 4. 验证安装 深入理解:安装配置详解 setup.py - 安装脚本 Copyright (c) 2024-2025 Your Name SPDX-License-Identifier: Apache-2.0 ============================================================ 导入必要的模块 ============================================================ ============================================================ 获取当前脚本(setup.py)所在的目录路径 ============================================================ file 是当前脚本的文件路径 os.path.realpath() 解析符号链接,获取真实路径 os.path.dirname() 获取文件所在的目录 ============================================================ 读取 extension.toml 文件中的元数据 ============================================================ extension.toml 包含包的版本、作者、描述等信息 使用 toml.load() 解析 TOML 文件并返回字典 ============================================================ 定义安装时需要自动安装的依赖包列表 ============================================================ -------------------- 基础依赖 -------------------- 用途:监控 CPU、内存、GPU 使用情况,训练时显示资源占用 用途:美化命令行输出,为日志添加颜色(错误红色、警告黄色等) 用途:解析和处理机器人模型的 URDF/Xacro 文件 -------------------- AMP 运动模仿相关 -------------------- 用途:数组运算、矩阵计算、处理运动数据 用途:读取和处理 CSV 格式的运动捕捉数据 用途:正向/逆向运动学计算、动力学仿真、运动重定向 在 BeyondMimic 中用于将人类动作映射到机器人 -------------------- 强化学习框架 -------------------- [all] 表示安装所有可选依赖(torch, tensorboard, wandb 等) 用途:提供 PPO、SAC 等强化学习算法实现 ============================================================ 执行包安装配置 ============================================================ -------------------- 基本信息 -------------------- -------------------- 作者和维护者信息 -------------------- 从 extension.toml 中读取 -------------------- 版本和描述 -------------------- -------------------- 依赖和许可 -------------------- -------------------- 包配置选项 -------------------- 如配置文件 (.yaml, .toml)、模型文件 (.usd, .urdf) 等 Isaac Lab 需要 Python 3.10 或更高版本 -------------------- 分类标签 -------------------- 用于在 PyPI 上分类和搜索 -------------------- 打包选项 -------------------- False 表示以目录形式安装,保持文件结构 这对于包含非 Python 文件(如 USD 模型)的包很重要 基础依赖 运动模仿依赖(BeyondMimic) 强化学习框架 [all] 会安装以下所有可选依赖: - torch # PyTorch 深度学习框架(通常已由 Isaac Lab 安装) - tensorboard # 训练可视化 - wandb # 实验跟踪(可选) - gym # 环境接口(已被 gymnasium 替代) 3. 快速开始 3.1 示例 1: 训练四足机器人(Unitree Go2) 3.1.1 训练 激活环境 进入 robot_lab 目录 开始训练(无头模式,适合服务器) 或者使用 GUI 模式(适合本地开发) 3.1.2 监控训练 3.1.3 测试策略 测试训练好的策略 使用键盘控制单个机器人 3.1.4 录制视频 录制 200 帧的视频(需要安装 ffmpeg) 3.2 示例 2: 训练人形机器人(Unitree G1) 3.2.1 基础速度控制 训练 测试 3.2.2 模仿策略学习 下载 LAFAN1 数据集(已重定向到 Unitree G1) 或使用自己的 .csv 运动数据 将 CSV 转换为 NPZ 格式 预览运动 训练 测试(同时播放 2 个不同的动作) 3.3 示例 3: AMP 舞蹈动作学习 训练(使用 skrl 框架) 测试(32 个机器人同时跳舞) 4. 高级功能 4.1 多 GPU 训练 4.1.1 单机多卡 使用 2 个 GPU 训练 4.1.2 多机多卡 4.2 对称性数据增强 训练 ANYmal D(使用对称性增强) 测试 4.3 教师 - 学生蒸馏 步骤 1: 训练教师网络 步骤 2: 蒸馏到学生网络 步骤 3: 测试学生网络 4.4 恢复训练 从最新的检查点恢复训练 从指定检查点恢复 4.5 特技动作训练 训练 测试 5. 自定义机器人 5.1 项目结构 5.2 添加新机器人的步骤 5.2.1 步骤 1: 定义机器人资产 ============================================================ 导入必要的模块 ============================================================ ============================================================ 定义机器人配置 ============================================================ ========== 生成/加载配置 ========== USD 文件路径(Universal Scene Description) USD 是 NVIDIA Omniverse 的场景描述格式 包含机器人的几何形状、质量、惯性等信息 是否激活接触传感器 True = 机器人可以检测与环境的接触(如脚接触地面) 用于计算奖励(如脚接触地面奖励)和终止条件 ========== 刚体物理属性 ========== 是否禁用重力 False = 启用重力(机器人会受到重力影响) 是否保留加速度信息 False = 不保留(节省内存和计算) True = 保留加速度信息(某些高级功能需要) 线性阻尼系数(空气阻力等) 0.0 = 无阻尼 角阻尼系数(旋转阻力) 0.0 = 无阻尼 最大线速度限制 (m/s) 1000.0 = 实际上不限制(非常大的值) 可以设置为合理值(如 10.0)以防止物理爆炸 最大角速度限制 (rad/s) 1000.0 = 实际上不限制 最大穿透恢复速度 (m/s) 当物体穿透时,物理引擎用此速度将其推出 较小的值 (1.0) = 更稳定但可能有轻微穿透 较大的值 (10.0) = 快速恢复但可能不稳定 ========== 关节机器人根属性 ========== 是否启用自碰撞检测 False = 机器人的不同部分可以穿透(更快但不真实) True = 检测并阻止自碰撞(更真实但更慢) 位置求解器迭代次数 更多迭代 = 更精确的物理模拟,但更慢 4 = 默认值,适合大多数情况 增加到 8-16 可以提高精度(但降低性能) 速度求解器迭代次数 0 = 只求解位置,不单独求解速度 1-4 = 更精确的速度计算 ========== 初始状态配置 ========== 机器人初始位置 (x, y, z) 单位:米 (0.0, 0.0, 0.6) = 原点上方 0.6 米 z 值通常设置为机器人站立时的高度 关节初始位置(弧度) 使用正则表达式匹配关节名称 髋关节(hip)= 0.0 rad(伸直) 大腿关节(thigh)= 0.7 rad(约 40 度) 正值 = 向前弯曲 小腿关节(calf)= -1.4 rad(约 -80 度) 负值 = 向后弯曲 0.7 + (-1.4) = -0.7,形成站立姿态 关节初始速度(rad/s) ".*" = 匹配所有关节 0.0 = 静止状态 ========== 执行器配置 ========== 定义一个名为 "legs" 的执行器组 可以有多个组,如 {"legs": ..., "arms": ...} 使用正则表达式指定该执行器控制的关节 列表中的所有关节将使用相同的执行器参数 力矩限制 (N·m) 33.5 = 最大输出力矩 应根据真实电机规格设置 力矩饱和值 (N·m) 通常与 effort_limit 相同 超过此值将被截断 速度限制 (rad/s) 21.0 rad/s ≈ 201 RPM 应根据真实电机规格设置 PD 控制器刚度(比例增益) 25.0 = 中等刚度 更大的值 = 更硬(快速响应但可能震荡) 更小的值 = 更软(缓慢响应但更稳定) PD 控制器阻尼(微分增益) 0.5 = 轻度阻尼 用于减少震荡,提供平滑运动 摩擦力系数 0.0 = 无摩擦(理想情况) 可以设置为 0.1-0.5 来模拟真实摩擦 5.2.2 步骤 2: 创建任务配置 理解并行环境与 Interactive Scene {ENVREGEXNS} 魔法变量:实现自动克隆的关键 你写的配置 Isaac Lab 自动替换(假设创建 4 个环境) 环境 0: primpath="/World/envs/env0/Robot" 环境 1: primpath="/World/envs/env1/Robot" 环境 2: primpath="/World/envs/env2/Robot" 环境 3: primpath="/World/envs/env3/Robot" Copyright (c) 2024-2025 Your Name SPDX-License-Identifier: Apache-2.0 ============================================================ 导入必要的模块 ============================================================ 定义崎岖地形环境配置类 ============================================================ 使用 @configclass 装饰器标记这是一个配置类 ========== 定义关键链接名称 ========== 这些名称必须与 USD 文件中的链接名称匹配 ========== 定义关节名称列表 ========== 四足机器人的 12 个关节(4 条腿 × 3 个关节/腿) FR = 右前腿,FL = 左前腿,RR = 右后腿,RL = 左后腿 ========== 调用父类的初始化 ========== 必须先调用父类初始化,加载默认配置 ========== 场景配置 ========== 设置机器人资产 replace() 创建配置的副本并修改 prim_path {ENVREGEXNS} 会被替换为 env0, env1, ... env_N 配置高度扫描器的位置(用于检测地形高度) 安装在机器人基座上 ========== 观察空间配置 ========== 调整观察值的缩放,使其在合适的范围内 基座线速度缩放 2.0 = 放大 2 倍,使网络更容易学习速度信息 基座角速度缩放 0.25 = 缩小到 1/4,因为角速度通常比线速度大 关节位置和速度缩放 指定观察的关节 ========== 动作空间配置 ========== 减小动作缩放,使控制更精细 hip 关节使用更小的缩放(0.125) 其他关节使用 0.25 动作裁剪范围 指定控制的关节 ========== 奖励权重配置 ========== 调整各项奖励的权重,平衡不同目标 根部惩罚 关节惩罚 ========== 命令范围配置 ========== 定义训练时随机生成的目标速度范围 根据机器人的能力调整这些范围 Copyright (c) 2024-2025 Your Name SPDX-License-Identifier: Apache-2.0 ============================================================ 导入必要的模块 ============================================================ ============================================================ 定义平地环境配置类 ============================================================ 使用 @configclass 装饰器标记这是一个配置类 ========== 调用父类的初始化 ========== 先执行 Rough 配置的所有设置 ========== 修改地形为平地 ========== "plane" = 平坦的无限平面 禁用地形生成器(不需要生成崎岖地形) ========== 禁用高度扫描器 ========== 平地不需要扫描地形高度 从观察空间中移除高度扫描数据 ========== 禁用地形课程学习 ========== 平地不需要课程学习 ========== 调整奖励配置 ========== 在平地上,可以启用基座高度奖励 将传感器配置设为 None(使用真实高度而非扫描高度) ========== 自动禁用权重为 0 的奖励 ========== 如果是 MyRobotFlatEnvCfg 类(而非子类), 自动禁用所有权重为 0 的奖励项以提高性能 5.2.3 步骤 3: 配置训练参数 Copyright (c) 2024-2025 Your Name SPDX-License-Identifier: Apache-2.0 ============================================================ 导入必要的模块 ============================================================ 定义崎岖地形环境的 PPO 训练配置(基础配置) ============================================================ 使用 @configclass 装饰器标记这是一个配置类 ========== 训练器基本参数 ========== 每个环境的采样步数 24 = 每次收集 24 步数据后进行一次策略更新 总样本数 = numstepsper_env × 环境数量 例如:24 × 4096 = 98,304 个样本/次更新 最大训练迭代次数 20000 = 训练 20000 次策略更新(崎岖地形需要更多训练) 总训练步数 = maxiterations × numstepsperenv × 环境数量 例如:20000 × 24 × 4096 ≈ 1.97B 步 模型保存间隔 100 = 每 100 次迭代保存一次模型检查点 实验名称 用于组织日志和保存的模型 格式:logs/rslrl/{experimentname}/{timestamp}/ ========== Actor-Critic 神经网络配置 ========== 初始化噪声标准差 1.0 = 在训练初期为动作添加较大噪声,促进探索 随着训练进行,噪声会逐渐减小 Actor 观察归一化 False = 不对 actor 的输入观察进行归一化 如果观察已经在环境中缩放过,通常设为 False Critic 观察归一化 False = 不对 critic 的输入观察进行归一化 Actor(策略网络)隐藏层维度 [512, 256, 128] = 三层隐藏层,从 512 逐渐降到 128 输入:观察空间 → 512 → 256 → 128 → 输出:动作空间 更大的网络 = 更强的表达能力,但训练更慢 Critic(价值网络)隐藏层维度 通常与 Actor 保持相同或相似的结构 输入:观察空间 → 512 → 256 → 128 → 输出:状态价值 激活函数 "elu" = Exponential Linear Unit,比 ReLU 更平滑 其他选项:"relu", "tanh", "leaky_relu" ========== PPO 算法超参数配置 ========== 价值损失系数 1.0 = 价值损失和策略损失同等重要 totalloss = policyloss + valuelosscoef × valueloss - entropycoef × entropy 是否使用截断的价值损失 True = 使用 PPO 的 clipped value loss,更稳定 False = 使用普通的 MSE loss PPO 截断参数(epsilon) 0.2 = 限制策略更新幅度在 [1-0.2, 1+0.2] = [0.8, 1.2] 防止策略更新过大导致性能崩溃 较小的值 (0.1) = 更保守的更新 较大的值 (0.3) = 更激进的更新 熵正则化系数 0.01 = 鼓励策略保持一定随机性,促进探索 较大的值 (0.1) = 更多探索 较小的值 (0.001) = 更少探索,更确定的策略 每次更新的学习轮数 5 = 每次收集数据后,用这批数据训练 5 个 epoch 更多轮次 = 更充分利用数据,但可能过拟合 Mini-batch 数量 4 = 将收集的数据分成 4 个 mini-batch 进行训练 batchsize = (numenvs × numstepsperenv) / nummini_batches 例如:(4096 × 24) / 4 = 24,576 学习率 1.0e-3 = 0.001,Adam 优化器的学习率 较大的值 (1e-2) = 更快学习,但可能不稳定 较小的值 (1e-4) = 更稳定,但学习较慢 学习率调度策略 "adaptive" = 根据 KL 散度自动调整学习率 "linear" = 线性衰减 "constant" = 保持不变 折扣因子(gamma) 0.99 = 非常重视未来奖励 决定了算法的"远见"程度 较大 (0.999) = 更长远的规划 较小 (0.9) = 更注重短期奖励 GAE lambda 参数 0.95 = 在偏差和方差之间取得平衡 用于计算优势函数(Advantage function) 较大 (0.99) = 更低偏差,更高方差 较小 (0.9) = 更高偏差,更低方差 期望的 KL 散度 0.01 = 当 KL 散度超过此值时,降低学习率 KL 散度衡量新旧策略的差异 用于自适应学习率调度 梯度裁剪阈值 1.0 = 当梯度范数超过 1.0 时进行裁剪 防止梯度爆炸,提高训练稳定性 ============================================================ 定义平地环境的 PPO 训练配置(继承自 Rough) ============================================================ 使用 @configclass 装饰器标记这是一个配置类 ========== 调用父类的初始化 ========== 先执行 Rough 配置的所有设置 ========== 修改训练迭代次数 ========== 减少迭代次数 5000 = 平地环境更简单,不需要太多训练 相比 Rough 的 20000 次,减少了 75% ========== 修改实验名称 ========== 5.2.4 步骤 4: 注册环境 Copyright (c) 2024-2025 Your Name SPDX-License-Identifier: Apache-2.0 ============================================================ 导入必要的模块 ============================================================ ============================================================ 注册 Gym 环境 ============================================================ ========== 注册平地环境 ========== 环境 ID(唯一标识符) 命名规则:项目名 - 仿真器 - 任务 - 地形 - 机器人 - 版本 例如:RobotLab-Isaac-Velocity-Flat-My-Robot-v0 入口点:指定环境类的位置 "isaaclab.envs:ManagerBasedRLEnv" 表示: - 模块:isaaclab.envs - 类:ManagerBasedRLEnv(基于管理器的强化学习环境) 禁用环境检查器 True = 跳过 Gymnasium 的环境合规性检查 Isaac Lab 环境已经过充分测试,跳过检查可以加快启动速度 关键字参数:传递给环境构造函数的参数 ========== 环境配置入口点 ========== name = 当前模块名(如:robotlab.tasks....config.myrobot) f"{name}.flatenvcfg" = robotlab....myrobot.flatenvcfg :MyRobotFlatEnvCfg = 导入该模块中的 MyRobotFlatEnvCfg 类 格式:模块路径:类名 这样可以延迟导入(lazy import),提高启动速度 ========== RSL-RL 训练配置入口点 ========== agents.name = agents 子模块的名称 指向我们定义的 PPO 训练配置类 训练脚本会使用这个配置来初始化 RSL-RL 训练器 ========== CusRL 训练配置入口点(可选)========== 如果你实现了 CusRL 配置,可以添加这个入口点 CusRL 是一个实验性的强化学习框架 "cusrlcfgentrypoint": f"{agents.name}.cusrlppo_cfg:MyRobotFlatTrainerCfg", 环境 ID(包含 "Rough" 表示崎岖地形) 使用相同的环境类 禁用环境检查器 指向崎岖地形的配置 崎岖地形的环境配置 使用 MyRobotRoughEnvCfg(启用程序化地形生成) 崎岖地形的 RSL-RL 训练配置 使用 MyRobotRoughPPORunnerCfg(更多迭代次数) 崎岖地形的 CusRL 训练配置(可选) "cusrlcfgentrypoint": f"{agents.name}.cusrlppo_cfg:MyRobotRoughTrainerCfg", 使用方法 ============================================================ 注册后,可以通过以下方式创建环境: 1. 在 Python 代码中: import gymnasium as gym env = gym.make("RobotLab-Isaac-Velocity-Flat-My-Robot-v0") 2. 使用命令行训练(RSL-RL): python scripts/reinforcementlearning/rslrl/train.py \ --task=RobotLab-Isaac-Velocity-Flat-My-Robot-v0 3. 使用命令行训练(CusRL,如果实现了): python scripts/reinforcement_learning/cusrl/train.py \ --task=RobotLab-Isaac-Velocity-Flat-My-Robot-v0 5.2.5 步骤 5: 验证和训练 验证环境已注册 开始训练 调优技巧 6. 常见问题 6.1 安装问题 6.2 训练问题 6.3 仿真问题 6.4 部署问题 6.5 Pylance 找不到模块 6.6 清理 USD 缓存 清理所有 USD 缓存 清理特定日期的缓存 7. 参考链接 相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online