G1-23dof Blind-Teacher 盲教师任务配置规范 (V0~V2)
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 仓库源码