最近整理了一个工程,算是把 NVIDIA Isaac Lab 框架和 Unitree Go2 四足机器人之间的强化学习链路,从头到尾拆了个明明白白。Isaac Lab 基于 Isaac Sim,天然适合跑高并发的机器人强化学习环境。而 Unitree Go2 这个 12 自由度的四足机器人,用来研究 locomotion、复杂地形运动、导航避障乃至 Sim2Real 都非常合适。围绕着这台机器狗,项目里面搭建了四个递进式的学习任务。
项目真正的重点,不是直接丢给你一个固定的最终策略。而是把一个四足机器人强化学习工程,从配置、环境、世界模型、训练、测试、评估,到日志和 checkpoint 管理这些环节,全部拆开揉碎,形成一个你拿来就能用、能改、能继续扩展的基础框架。这才是核心价值所在。
工程结构
整个工程采用了很清晰的模块化组织方式。`configs/` 里面放着任务配置和平台示例配置。脚本部分分成了 `scripts/ubuntu/` 和 `scripts/windows/` 两个目录,各自保存着对应系统下的 check、test、smoke、train、eval、visualize 脚本。公共工具代码集中在 `src/go2_rl/common/`,包括 skrl 模型、frame stack wrapper、checkpoint 管理、normalizer、日志进度和路径解析等。四个任务的核心代码都在 `src/go2_rl/tasks/` 里面。测试相关的 `tests/` 目录则专注于 world 和 env 的测试。文档部分放在 `docs/`,涵盖了任务设计、训练说明、路径配置、验证记录和故障排查等内容。
值得注意的一点是,当前活跃的脚本命名非常统一。Ubuntu 下用 `.sh`,Windows 下用 `.ps1`。而且每个任务都保持着相同的控制入口,比如 smoke_task1 到 smoke_task4,train_task1 到 train_task4,eval_task1 到 eval_task4。这种设计让不同系统和不同任务之间的切换变得非常顺手,命令结构高度一致。
四个任务
先说 Task1,这是一个平地速度跟踪任务。动作维度是 12,actor observation 是 87 维。说白了,就是先让 Go2 学会基础站立、行走和速度跟踪能力。没有这些基本功,后面的复杂地形根本玩不转。
Task2 则是在 Task1 的基础上加入了多地形课程学习。什么 rough flat、slopes、stepping stones 和 stairs,都安排上了。虽然 actor observation 依然是 87 维,但 privileged observation 来到了 178 维,其中 terrain privileged tail 占了 91 维。这个维度上的扩张,本质上是为了让机器狗能理解地形的特殊性。
Task3 就更复杂了,它加入了一个解析导航世界。简单来说,就是给了一个有目标点、有静态和动态障碍物的环境,再加上 60 维的激光雷达数据和 risk features,训练机器狗的导航和避障能力。单帧的 actor observation 是 208 维,5 帧堆叠后,actor input 直接飙升到 1040 维。world privileged tail 是 68 维,critic input 则是 1108 维。这个维度规模说明,处理导航问题需要的信息量远比单纯 locomotion 要大得多。
最后是 Task4,面向 Sim2Real 和 RMA teacher 训练。这里的 teacher_obs 等于 actor_history 加上 privileged_obs,总维度是 265。而且加入了各种扰动——摩擦变化、负载变化、重心偏移、电机强度变化,还有外力扰动。这一切都是为了提升策略在现实环境中的鲁棒性。
测试与验证
为了保证项目的可靠性,Ubuntu 端提供了三种测试:world 测试、env 测试和 smoke training。
world 测试主要验证 Task2 的地形和课程逻辑是否正常,以及 Task3 的目标生成、障碍物、激光雷达、risk features 和终止逻辑。env 测试则聚焦在 IsaacLab 环境本身——环境构建、reset 和 step API、观测维度、动作维度、reward 和 info 输出,以及数值稳定性是否达标。smoke training 是用来确认训练入口能不能跑起来、日志能不能正常写入、checkpoint 能不能保存的。
准备好之后,就可以跑起来了:
bash scripts/ubuntu/test_task2_world.sh
bash scripts/ubuntu/test_task3_world.sh
bash scripts/ubuntu/test_task1_env.sh
bash scripts/ubuntu/test_task2_env.sh
bash scripts/ubuntu/test_task3_env.sh
bash scripts/ubuntu/test_task4_env.sh
以及快速 smoke 验证:
bash scripts/ubuntu/smoke_task1.sh
bash scripts/ubuntu/smoke_task2.sh
bash scripts/ubuntu/smoke_task3.sh
bash scripts/ubuntu/smoke_task4.sh
训练与评估
推荐的训练顺序也很明确。先训练 Task1,拿到一个基础 locomotion checkpoint。然后 Task2 从 Task1 warm-start,继续学习多地形运动。Task3 可以从 Task1 或 Task2 warm-start,专注于目标导航与避障。Task4 则是从 Task2 warm-start,专门训练 RMA teacher policy。
对应的训练指令如下:
bash scripts/ubuntu/train_task1.sh
bash scripts/ubuntu/train_task2.sh logs/task1/
bash scripts/ubuntu/train_task3.sh logs/task2/
bash scripts/ubuntu/train_task4.sh logs/task2/
训练日志默认会保存在 logs/task1/ 到 logs/task4/ 目录下。每个 run 里面通常包含中间 checkpoint、final checkpoint 和训练元数据。训练过程中,控制台会实时输出 env steps、FPS、reward、速度、高度、接触、摔倒率、成功率、碰撞率、terrain level 等信息,观察起来非常直观。
项目链接
GitHub:https://github.com/0324Lw/NVIDIA--Isaac-Lab-Unitree_Go2-control
这个项目很适合用来理解 Isaac Lab 下四足机器人强化学习工程的组织方式——从任务拆解、脚本入口、测试流程,到训练日志管理和 checkpoint 管理,每一环都清晰可见。而且它的扩展性很强,后续还可以继续加入 student policy、RMA adaptation module,以及更复杂的导航场景、地形和真机部署接口。

