G1 编程与工程 IsaacLab 训练配置

G1-23dof Blind-Teacher 盲教师任务配置规范 (V0~V2)

2026-04-12 · 5 min read

G1-23dof Blind-Teacher 盲教师任务配置规范 (V0~V2)

文档版本:V1.0
机器人平台:Unitree G1-23dof
仿真框架:IsaacLab 2.3.0 + IsaacSim 5.1.0
训练算法:RSL-RL PPO
编写日期:2026-04-12
任务标识Unitree-G1-23dof-BlindTeacher-V0 ~ Unitree-G1-23dof-BlindTeacher-V2
相关文档G1-23dof Velocity 任务训练配置规范G1-23dof Fusion 多传感器融合任务配置规范


1. 任务概述

1.1 任务目标

Blind-Teacher 是 G1-23dof 机器人的盲行走(Blind Locomotion)任务系列,核心约束为:

无视觉传感器(无 Depth Camera、无 LiDAR),仅依靠本体感知 + Height Scanner 实现复杂地形行走。

这是从特权学习(privileged learning)到纯感知学习(pure perception)的过渡阶段。

1.2 训练架构:Teacher-Student

Blind-Teacher 属于 Teacher-Student 蒸馏架构 的 Teacher 侧:

Blind-Teacher(本文)
  ├── 输入:proprio(78D) + height_scan(187D) = 795D(3帧历史)
  ├── 输出:actions(23D)
  └── 作用:为 Student(Depth-Student)提供动作标签

Depth-Student(后续)
  ├── 输入:proprio(78D) + depth_camera(3072D)
  ├── 教师动作:Blind-Teacher 的输出
  └── 目标:模仿教师动作,实现无特权信息的视觉行走

1.3 版本演进

版本 核心创新 地形 奖励项数
V0 首个盲行走环境 7 种混合 ~18 项
V1 固定抬脚高度 7 种混合 ~18 项
V2(本文) 地形自适应抬脚 + 命令自适应 Curriculum 7 种混合 20 项

2. V2 核心改进

2.1 V1 的问题

V1 使用固定抬脚高度(0.15m Gaussian),在楼梯地形上遇到瓶颈: - 平地上 0.15m 足够 - 楼梯台阶(最高 0.20m)时频繁磕碰 - terrain level 卡在 ~6 级无法提升

2.2 V2 的解决方案

地形自适应抬脚高度

# V1:固定 0.15m
feet_clearance: 0.15m (Gaussian)

# V2:地形自适应
feet_swing_adaptive:
    flat_target_height=0.12m   # 平地:12cm
    stair_target_height=0.20m  # 楼梯:20cm
    # Height Scanner 检测前方地形高度差
    # 当检测到 > 0.08m 落差时,自动调高抬脚目标

2.3 V2 其他改进

改进项 V1 V2 原因
forward_progress 权重 1.0 2.0 更陡的奖励梯度
forward_progress scale 4.0 2.0 与 StairV4 对齐
gait period 0.8s 1.0s 更大步幅
base_height 惩罚 -10 -10(不变) V2 不再放宽(V1 曾改为 -5)
knee action_scale 0.35 0.5 更高抬脚能力
新增约束 joint_deviation_knee, joint_deviation_hip_pitch 防止过度弯曲

3. 地形配置

3.1 7 种混合地形(V2 沿用 V1)

FULL_TERRAIN_CFG = TerrainGeneratorCfg(
    num_rows=10,              # 10 个难度等级
    num_cols=20,               # 20 列
    sub_terrains={
        "flat":         0.12,   # 平地 12%
        "stairs_up":    0.28,   # 上楼梯 28%(最大难度来源)
        "stairs_down":  0.17,   # 下楼梯 17%
        "rough":        0.13,   # 粗糙地面 13%
        "boxes":        0.10,   # 随机方块 10%
        "slope":        0.10,   # 坡道 10%
        "waves":        0.10,   # 波浪地面 10%
    },
)

3.2 Height Scanner(关键感知器)

height_scanner = RayCasterCfg(
    prim_path="{ENV_REGEX_NS}/Robot/torso_link",
    offset=RayCasterCfg.OffsetCfg(pos=(0.0, 0.0, 20.0)),
    ray_alignment="yaw",                        # 随偏航角对齐
    pattern_cfg=patterns.GridPatternCfg(
        resolution=0.1,     # 10cm 网格
        size=[1.6, 1.0],   # 1.6m × 1.0m
    ),
)
# 输出: 160D → 与 proprio concat 后 187D(单帧)

Height Scanner 的局限:仅能感知基座正下方及前方一定范围的地形,无法提前「看到」远处的障碍。


4. 观测空间

4.1 Policy 观测(795D)

观测项 单帧维度 历史帧数 总维度
base_ang_vel 3D 3 帧 9D
projected_gravity 3D 3 帧 9D
velocity_commands 3D 3 帧 9D
joint_pos_rel 23D 3 帧 69D
joint_vel_rel 23D 3 帧 69D
last_action 23D 3 帧 69D
height_scan 160D 3 帧 480D
无视觉传感器

总计:78D(proprio)× 3 + 480D(height_scan)× 3 = 795D

4.2 Critic 观测(268D,单帧)

观测项 维度
base_lin_vel 3D
base_ang_vel 3D
projected_gravity 3D
velocity_commands 3D
joint_pos_rel 23D
joint_vel_rel 23D
last_action 23D
height_scan 160D

总计:81D(proprio + base_lin_vel)+ 160D(height_scan)= 268D


5. 动作配置(V2 关节级别缩放)

5.1 关节级别 action_scale

V2 使用逐关节缩放,而非统一缩放:

JointPositionActionCfg(
    asset_name="robot",
    joint_names=[".*"],
    scale={
        # 腿部(楼梯攀爬需要更大范围)
        ".*_hip_pitch_joint":  0.5,   # 髋关节俯仰
        ".*_hip_yaw_joint":    0.5,   # 髋关节偏航
        ".*_hip_roll_joint":   0.35,  # 髋关节侧翻(较小)
        ".*_knee_joint":       0.5,   # 膝关节(V1: 0.35 → V2: 0.5)
        ".*_ankle_pitch_joint": 0.4,  # 踝关节俯仰
        ".*_ankle_roll_joint":  0.4,   # 踝关节侧翻
        # 腰部(保守)
        "waist_yaw_joint":     0.15,   # 腰部偏航(最小)
        # 手臂(保守,防止过度摆动)
        ".*_shoulder_pitch_joint": 0.2,
        ".*_shoulder_roll_joint":  0.2,
        ".*_shoulder_yaw_joint":   0.2,
        ".*_elbow_joint":           0.2,
        ".*_wrist_roll_joint":      0.2,
    },
    use_default_offset=True,
)

5.2 关节分组缩放的意义

关节组 scale 原因
髋/膝/踝 pitch 0.5 前后向运动需要大步幅
髋/踝 roll 0.35~0.4 侧向稳定性保持保守
膝关节 0.5(V2) V1 的 0.35 导致抬脚不足,磕碰楼梯
腰部 0.15 躯干稳定优先
手臂 0.2 行走时自然下垂,不干扰步态

6. 奖励函数设计(V2,20 项)

6.1 V2 奖励分组

分组 奖励项数 代表奖励
速度跟踪 2 项 track_lin_vel_xy(2.0), track_ang_vel_z(0.75)
存活 1 项 alive(0.25)
前进激励 1 项 forward_progress(2.0)
步态质量 3 项 gait(0.3), feet_slide(-0.5), feet_swing_adaptive(1.5)
姿态约束 2 项 flat_orientation_l2(-5.0), base_height(-10.0)
平滑性 4 项 action_rate, joint_vel, joint_acc, energy
关节约束 3 项 joint_deviation_arms/waists/legs
安全性 2 项 dof_pos_limits(-5.0), undesired_contacts(-2.0)

6.2 核心奖励项详解

feet_swing_adaptive(V2 核心创新)

def terrain_adaptive_swing_height_exp(
    asset_cfg, contact_cfg, height_cfg,
    flat_target_height=0.12,    # 平地目标 12cm
    stair_target_height=0.20,   # 楼梯目标 20cm
    height_scan_threshold=0.08,  # 触发阈值:前方 8cm 落差
    std=0.06,                   # 误差标准差
    tanh_mult=2.0,
):
    # 1. 从 height_scanner 读取前方地形高度
    # 2. 若高度差 > threshold:切换为 stair_target
    # 3. 若高度差 < threshold:使用 flat_target
    # 4. 计算当前抬脚高度与目标的误差
    # 5. exp(-error²/(2σ²)) × tanh_mult

物理意义:机器人行走时自动调节抬脚高度,平地小抬脚(节能),楼梯高抬脚(防磕碰)。

forward_progress(V2 增强)

forward_progress = RewTerm(
    func=mdp.forward_progress_reward,
    weight=2.0,                  # V1: 1.0 → V2: 2.0(双倍激励)
    params={"distance_scale": 2.0},  # V1: 4.0 → V2: 2.0
)
# 效果:同等行走距离获得双倍奖励,训练更高效

6.3 V1 → V2 奖励变更对照

奖励项 V1 V2 变化
track_lin_vel_xy 2.0 2.0 不变
track_ang_vel_z 0.75 0.75 不变
alive 0.25 0.25 不变
forward_progress 1.0 2.0 ↑加倍
gait 0.5 0.3 ↓降低(配合更长周期)
gait period 0.8s 1.0s ↑更长步态
feet_clearance(固定) 0.15 → 替换为 feet_swing_adaptive 核心创新
base_height -5(V1 放宽) -10 恢复严格约束

7. Curriculum 设计

7.1 V2 命令自适应地形 Curriculum

V2 采用 Command-Adaptive Terrain Curriculum,地形难度与命令速度挂钩:

terrain_levels = CurrTerm(
    func=mdp.terrain_levels_cmd_adaptive,
    params={
        "promotion_ratio": 0.5,       # 达成期望距离的 50% 即升级
        "demotion_ratio": 0.2,         # 低于期望距离的 20% 即降级
        "min_promotion_distance": 2.0, # 低速时最低升级门槛 2m
    },
)

7.2 自适应逻辑

升级条件:distance > max(cmd_vel × episode_time × 0.5, 2.0m)
  - 低速命令(0.1 m/s):threshold = max(1.0, 2.0) = 2.0m(保底)
  - 高速命令(0.8 m/s):threshold = max(8.0, 2.0) = 8.0m(按比例)

降级条件:distance < cmd_vel × episode_time × 0.2

优势:低速时不强制要求远程冲刺,高速时才要求更长距离。

7.3 与 V1 failure_adaptive 的区别

方面 V1 failure_adaptive V2 cmd_adaptive
升级依据 失败率 行走距离
速度考虑 有(速度越高要求越远)
低速场景 可能卡住 保底 2m 门槛

8. V0~V2 版本对照

特性 V0 V1 V2
地形 7 种混合 7 种混合 7 种混合
Height Scanner
抬脚策略 固定 0.15m 固定 0.15m 地形自适应 0.12~0.20m
forward_progress 权重 1.0 1.0 2.0
gait period 0.8s 0.8s 1.0s
knee action_scale 0.35 0.5
base_height -10 -5 -10
Curriculum failure_adaptive failure_adaptive cmd_adaptive
关节 Deviation 2 项 2 项 3 项(+knee/hip_pitch)

9. 训练与评估

9.1 训练命令

# Blind-Teacher V2 训练
./unitree_rl_lab.sh -t --task Unitree-G1-23dof-BlindTeacher-V2 --num_envs 4096 --max_iterations 50000 --headless

# 推理验证
./unitree_rl_lab.sh -p --task Unitree-G1-23dof-BlindTeacher-V2

9.2 关键评估指标

指标 健康范围
Terrain level > 7(V2 目标 > V1 的 ~6)
Episode length > 400(8 秒以上存活)
feet_swing_adaptive 持续 > 0.5
forward_progress 持续 > 1.0

版本记录

版本 日期 修改内容 作者
V1.0 2026-04-12 初始版本,Blind-Teacher V0~V2 完整配置规范 AI Assistant

本文档由 AI 辅助整理自 unitree_lab_locomotion 仓库源码

← 上一篇
G1-23dof CPG-Flat 任务训练配置规范
下一篇 →
G1-23dof 强化学习网络架构深度解析
← 返回博客列表