unitree_rl_gym_新手教程_第3章_动手实践
·
第 3 章:动手实践 — 训练、查看、调试
开始真正跑模型!每个命令都会解释清楚。
3.1 每次工作前:激活环境
conda activate unitree_rl
cd /workspace_project/g1_robot/unitree_rl_gym_study/unitree_rl_gym
⚠️ 必须看到终端提示符显示
(unitree_rl)。如果显示(base),说明没切过来。
3.2 开始训练
基础命令
python legged_gym/scripts/train.py --task=g1 --headless --num_envs=512
| 参数 | 含义 | 建议 |
|---|---|---|
--task=g1 |
训练 G1 机器人 | 必填,可选 go2/h1/h1_2 |
--headless |
不弹窗口(训练快 30%) | 训练时推荐加 |
--num_envs=512 |
同时 512 个环境 | 无头模式 512,有头模式 64 |
--seed=1 |
随机种子 | 不指定则用 1 |
--max_iterations=10000 |
训练轮数上限 | 先设 200 测试,确认无误再跑正式 |
RTX 4060 8GB 显存规则
| 模式 | num_envs |
说明 |
|---|---|---|
| 有头(看过程) | 64 | GUI 渲染吃显存,高了会卡 |
无头(--headless) |
512 | 释放渲染后 GPU 能跑满 |
训练时你会看到的输出
Learning iteration 100/10000
Computation: 15000 steps/s (collection: 0.3s, learning: 0.07s)
Value function loss: 0.0011 ← 价值函数损失(越小越好)
Surrogate loss: -0.0221 ← 策略损失(不要管正负,看它变化)
Mean action noise std: 0.80 ← 探索噪声(慢慢减小=网络变自信)
Mean reward: 0.04 ← ★ 最重要的是这个 —— 平均奖励
Mean episode length: 300 ← ★ 机器人能活几步(越久越好)
看懂两个关键指标就够了:
- Mean reward 持续上升 → 训练正常 ✅
- Mean episode length 持续增长 → 机器人站得越来越久 ✅
什么时候停止训练?
- reward 不再上升(收敛)→ 可以停了
- 达到
max_iterations→ 自动停 - 显存爆了(OOM Error)→ 减少
--num_envs - episode_length 接近上限值(~1000 步 = 20 秒)→ 快要练好了
3.3 查看训练效果
方法 1:Isaac Gym 可视化
python legged_gym/scripts/play.py --task=g1 --load_run=<文件夹名>
会弹出一个窗口,显示 G1 在走路。不加 --load_run 则加载最近一次训练的模型。
键盘控制:ESC 退出,V 切换同步模式。
方法 2:TensorBoard(更推荐)
# 新开一个终端
tensorboard --logdir=logs/
然后在浏览器打开 http://localhost:6006,能看到:
| 图表 | 简要含义 |
|---|---|
mean_total_reward |
总奖励;持续上升并趋于稳定,通常表示训练收敛 |
rew_tracking_lin_vel |
线速度跟踪;越高表示越能按照指令行走 |
mean_episode_length |
平均存活步数;越高通常表示步态越稳定 |
rew_lin_vel_z / rew_orientation |
机身稳定性惩罚;负值绝对值越小越好 |
policy_loss / value_loss |
PPO 策略与价值网络损失;重点观察是否剧烈发散 |
entropy |
策略探索程度;过快降到 0 可能表示探索不足 |
具体使用方法看:TensorBoard 使用教程
3.4 从上次中断继续训练
# 从上一次中断的位置继续
python legged_gym/scripts/train.py --task=g1 --headless --resume
# 从指定的 run 继续
python legged_gym/scripts/train.py --task=g1 --headless --resume --load_run=<文件夹名>
# 从第 500 轮的检查点继续
python legged_gym/scripts/train.py --task=g1 --headless --resume --checkpoint=500
模型检查点位置:logs/g1/<日期>_<run_name>/model_<迭代次数>.pt
3.5 常见调试场景
场景 1:训练半天 reward 不涨
可能原因和排查:
- 学习率太高/太低 →
g1_config.py里algorithm.learning_rate(默认 1e-3 一般OK) - 探索不够 → 调大
policy.init_noise_std(默认 0.8) - 奖励设计有问题 → 检查
rewards.scales各项权重是否合理 - 域随机化太强 → 关掉试试,
domain_rand.randomize_friction = False
场景 2:机器人学会了但走路抽搐
关节抖动 → 调大 rewards.scales.action_rate(变更负),惩罚动作变化。
场景 3:机器人总是前倾摔倒
- 检查
default_joint_angles是否合理(当前默认姿态应该微坐) - 增大
rewards.scales.orientation(更负的绝对值) - 增大
rewards.scales.base_height(更负的绝对值)
场景 4:显存不够-CUDA out of memory
# 无头:降低到 256
python legged_gym/scripts/train.py --task=g1 --headless --num_envs=256
# 有头:降低到 32
python legged_gym/scripts/train.py --task=g1 --num_envs=32
3.6 导出模型给 MuJoCo 验证(目标 2)
# 1. 用 play.py 导出 JIT 模型
python legged_gym/scripts/play.py --task=g1 --load_run=<文件夹名>
# play.py 默认导出到 logs/g1/exported/policies/
# 2. 用 MuJoCo 跑导出的模型
cd deploy/deploy_mujoco
python deploy_mujoco.py g1.yaml
这是学习目标 2(deploy_mujoco)的核心内容。详见 部署计划 - 目标 2。
3.7 训练建议和技巧
新手推荐的实验顺序
- 先用默认配置跑 200 轮,看 reward 有没有增长趋势
- 看 TensorBoard,了解各项奖励的变化
- 调一个参数(比如
tracking_lin_vel的权重),重新跑 200 轮对比 - 记录每次实验:改了哪个参数、效果怎样
- 积累经验:反复 3-4 次就能培养直觉
一次典型训练的时间线
0-100 轮: 机器人基本在乱动,频繁摔倒,reward 很低
100-500 轮: 开始能站几秒了,reward 上升
500-1000 轮: 开始迈步了但不太稳,episode length 达到几百步
1000-3000 轮:走得越来越稳,reward 接近收敛
3000-5000 轮:基本收敛,可以停了
5000-10000 轮:微调优化(如果还有上升空间就继续)
以上是经验估计,实际取决于你的奖励设计和硬件速度。256 环境 ~15k steps/s,1 轮 = 24×256=6144 steps,约 0.4 秒/轮,1000 轮约 7 分钟。
训练过程中不要做的事
- ❌ 训练中不要开 GUI(会拖慢 30-50%),用
--headless+ TensorBoard 看曲线就够了 - ❌ 不要每跑几轮就改参数,让同一配置至少跑 500 轮再看效果
- ❌ 不要同时训练和 Play(显存不够)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)