G1-23dof Fusion 多传感器融合任务配置规范 (V0~V11)
G1-23dof Fusion 多传感器融合任务配置规范 (V0~V11)
文档版本:V1.0
机器人平台:Unitree G1-23dof
仿真框架:IsaacLab 2.3.0 + IsaacSim 5.1.0
训练算法:FusionOnPolicyRunner + MultiCriticPPO
编写日期:2026-04-12
任务标识:Unitree-G1-23dof-Fusion-V0 ~ Unitree-G1-23dof-Fusion-V11
相关文档:G1-23dof Velocity 任务训练配置规范
1. 任务概述
1.1 任务目标
Fusion 是 G1-23dof 机器人的多传感器融合感知运动任务,融合 LiDAR + Depth Camera + Height Scanner 三种传感器输入,实现复杂地形(楼梯、坡道、不规则地面)下的稳定行走。
核心挑战:在无特权信息(privileged info)的情况下,仅凭视觉传感器实现复杂地形导航。
1.2 三传感器配置
| 传感器 | 类型 | 分辨率 | 用途 |
|---|---|---|---|
| Depth Camera | MultiMeshRayCasterCamera | 48×64(1 channel) | 前方地形深度感知 |
| LiDAR | RayCaster + LidarPattern | 8×360 channels | 360° 水平扫描 |
| Height Scanner | RayCaster + GridPattern | 17×11 = 160D | 基座下方高度图 |
1.3 V0~V11 版本演进总览
| 版本 | 核心创新 | 观测维度 | 奖励项数 |
|---|---|---|---|
| V0 | 首个集成环境 | 6030D | 9项 |
| V1 | 密集步态奖励 + 正则化 | 6030D | ~21项 |
| V2 | Curriculum 改进 | — | — |
| V3 | Curriculum 改进 | — | — |
| V4 | 感知时序升级 | — | — |
| V5 | Depth 时序 + per-foot height scanner | — | — |
| V6 | VolumePoints 物理穿透检测 | — | — |
| V7-V9 | 地形/奖励调整 | — | — |
| V10 | 混合地形 + 命令范围扩展 | — | 27项 |
| V11 | 手臂约束拆分 + quality_gated curriculum | — | 27项 |
2. Fusion V0 环境配置详解
2.1 地形配置
V0 复用 stair_climbing 混合地形,包含 6 种子地形:
FUSION_TERRAIN_CFG = TerrainGeneratorCfg(
size=(8.0, 8.0),
num_rows=10, # 10 个难度等级
num_cols=20, # 20 列
horizontal_scale=0.1, # 10cm 分辨率
vertical_scale=0.005, # 5mm 高度分辨率
sub_terrains={
"flat": 0.10, # 平地 10%
"pyramid_stairs": 0.30, # 金字塔楼梯 30%
"pyramid_stairs_inv": 0.20, # 倒金字塔楼梯 20%
"boxes": 0.15, # 随机方块 15%
"random_rough": 0.15, # 随机粗糙 15%
"hf_pyramid_slope": 0.10, # 高频坡道 10%
},
)
2.2 传感器配置详解
Depth Camera (D435i 模拟)
depth_camera = MultiMeshRayCasterCameraCfg(
prim_path="{ENV_REGEX_NS}/Robot/torso_link",
offset=OffsetCfg(
pos=(0.0385, 0.0, 0.432), # 头部位置
rot=(0.9914, 0.0, -0.1305, 0.0), # 15° 向下倾斜
convention="world",
),
data_types=["distance_to_image_plane"],
pattern_cfg=PinholeCameraPatternCfg(
focal_length=1.93,
horizontal_aperture=3.5,
width=64, height=48, # 64×48 分辨率
),
max_distance=5.0, # 最大深度 5m
depth_clipping_behavior="max", # 截断到 max_distance
)
LiDAR (Livox MID-360 模拟)
lidar = LIDAR_MID360_8CH_CFG
# 8 channels, -15°~+20° 垂直, 360° 水平 azimuth
# 2872 rays, padded → 2880 (8×360)
Height Scanner
height_scanner = RayCasterCfg(
prim_path="{ENV_REGEX_NS}/Robot/torso_link",
offset=OffsetCfg(pos=(0.0, 0.0, 20.0)), # 基座上方 20m
ray_alignment="yaw", # 随偏航角对齐
pattern_cfg=patterns.GridPatternCfg(
resolution=0.1, # 10cm 网格
size=[1.6, 1.0], # 1.6m × 1.0m 范围
),
)
# 输出: 160D heightmap (17×11 grid)
2.3 观测空间
Policy 观测(Actor)- 6030D
| 观测项 | 维度 | 类型 | 说明 |
|---|---|---|---|
base_ang_vel |
3D | 本体 | 基座角速度 |
projected_gravity |
3D | 本体 | 重力投影 |
velocity_commands |
3D | 本体 | 指令速度 |
joint_pos_rel |
23D | 本体 | 关节位置 |
joint_vel_rel |
23D | 本体 | 关节速度 |
last_action |
23D | 本体 | 上一步动作 |
depth_image |
3072D (1,48,64) | 视觉 | 深度图 |
lidar_scan |
2880D (1,8,360) | 视觉 | LiDAR 扫描 |
拼接方式:concatenate_terms=False(保持 2D 形状),由 FusionVecEnvWrapper 展平拼接。
Critic 观测(Privileged)- 241D
| 观测项 | 维度 | 类型 | 说明 |
|---|---|---|---|
base_lin_vel |
3D | 特权 | 真值线速度 |
height_scan |
160D | 特权 | 高度图 |
| (本体感知 78D) | 同 Policy |
3. 网络架构:FusionActorCritic
3.1 整体结构
Actor Path:
proprio(78D) ────────────────────────────────┐
depth(1,48,64) ──→ DepthEncoder(64D) ──┐ │
lidar(1,8,360) ──→ LiDAREncoder(64D) ──┼───→ CrossAttentionFusion(64D)
│ concat(proprio, fused) = 142D
└──→ Actor MLP → actions(23D)
Critic Path (×3 独立):
critic_obs(241D) ───────────────────────────────→ 3× Critic MLP → 3 values
Aux Heads (训练辅助监督):
depth_embed(64D) ─→ TerrainHead → terrain(160D)
lidar_embed(64D) ─→ DistanceHead → distances(360D)
concat(fused,proprio)(142D) ─→ VelocityHead → base_lin_vel(3D)
3.2 关键模块
Depth Encoder
Conv2dHeadModel(
image_shape=(1, 48, 64),
channels=[32, 64],
kernel_sizes=[5, 3],
strides=[2, 2],
paddings=[2, 1],
hidden_sizes=[256],
output_size=64, # 输出 64D 特征
)
CrossAttentionFusion(跨注意力融合)
CrossAttentionFusion(
proprio_dim=78, # 本体感觉维度
visual_dim=64, # 视觉特征维度
d_model=64, # 注意力维度
n_heads=4, # 4 头注意力
)
融合机制: - 以本体感觉为 Query,交叉注意力融合 depth 和 lidar 特征 - 物理意义:根据当前运动状态动态加权视觉传感器贡献 - 当只有 2 个 KV token 时,注意力退化为 sigmoid 门控
3.3 MultiCritic PPO
3 个独立 Critic 分组评估不同维度:
| Critic | 权重 | 评估内容 |
|---|---|---|
| Task Critic | 0.7 | 任务奖励(速度跟踪) |
| Reg Critic | 0.1 | 正则化(步态、能耗) |
| Safety Critic | 0.2 | 安全性(碰撞、倾斜) |
Auxiliary Losses: - Terrain Head:预测 heightmap (160D) - Distance Head:预测 LiDAR 距离 (360D) - Velocity Head:预测基座线速度 (3D)
4. 奖励函数设计
4.1 Fusion V0 奖励分组
| 分组 | 奖励项 | 说明 |
|---|---|---|
| Task | track_lin_vel_xy(2.5), track_ang_vel_z(0.75), alive(0.15) |
速度跟踪 + 存活 |
| Reg | joint_vel(-0.001), action_rate(-0.02), energy(-2e-5) |
平滑性 + 能耗 |
| Safety | base_height(-10), flat_orientation_l2(-3), undesired_contacts(-2) |
姿态 + 碰撞 |
总计:9 项奖励,3 组
4.2 Fusion V11 最终奖励(27 项)
V11 是融合训练的成熟版本,奖励项数增加到 27 项:
4.2.1 Locomotion 组(22 项)
| 奖励项 | 有效权重 | 函数 | 物理意义 |
|---|---|---|---|
track_lin_vel_xy |
4.17(原始2.5×1.67) | track_lin_vel_xy_yaw_frame_exp |
XY 平面速度跟踪 |
track_ang_vel_z |
1.25(原始0.75×1.67) | track_ang_vel_z_exp |
偏航角速度跟踪 |
alive |
0.25(原始0.15×1.67) | is_alive |
存活奖励 |
forward_progress |
3.33(原始2.0×1.67) | forward_progress_reward |
前进距离激励 |
gait |
0.50(原始0.3×1.67) | feet_gait(period=1.0, offset=[0,0.5]) |
周期性对角步态 |
feet_clearance |
3.33(原始2.0×1.67) | foot_clearance_reward_terrain_relative(target=0.15m) |
抬脚高度奖励 |
feet_slide |
-1.33(原始-0.8×1.67) | feet_slide |
足部滑动惩罚 |
air_time_variance |
-0.83(原始-0.5×1.67) | air_time_variance_penalty |
腾空时间方差惩罚 |
joint_deviation_legs |
-0.83(原始-0.5×1.67) | joint_deviation_l1(hip_roll/yaw) |
髋关节侧向约束 |
joint_deviation_knees |
-0.25(原始-0.15×1.67) | joint_deviation_l1(knee) |
膝关节约束 |
joint_deviation_hip_pitch |
-0.25(原始-0.15×1.67) | joint_deviation_l1(hip_pitch) |
髋关节前后约束 |
joint_deviation_shoulder_pitch |
V11 强约束 | joint_deviation_l1(shoulder_pitch) |
阻止手臂前伸 |
undesired_contacts |
V11 维持 | undesired_contacts |
非期望接触惩罚 |
4.2.2 Safety 组(5 项)
| 奖励项 | 权重 | 函数 | 物理意义 |
|---|---|---|---|
base_height |
-10.0 | base_height_l2_safe(target=0.78m) |
基座高度约束 |
flat_orientation_l2 |
-3.0 | flat_orientation_l2 |
基座水平约束 |
volume_points_penetration |
-V6+ | volume_points_penetration |
脚部物理穿透检测 |
feet_orientation_contact |
-V6+ | feet_orientation_contact |
触地时脚部水平度 |
torso_orientation |
-V11新增 | torso_orientation |
躯干姿态约束 |
4.2.3 V11 权重放大机制
V11 的一个关键变化:所有 locomotion 奖励乘以 1.67 系数(原始值 × 1.67 = 有效权重),使总奖励量级与 Safety 惩罚更平衡。
4.2.4 V11 核心修复:手臂约束拆分
# V10 问题:joint_deviation_arms 权重 -0.1 对 6030D 网络太弱
joint_deviation_arms = RewTerm(weight=-0.1) # V10
# V11 拆分为两个独立约束
joint_deviation_shoulder_pitch = RewTerm(weight=-1.0) # 强约束,阻止手臂前伸
joint_deviation_arms_other = RewTerm(weight=-0.25) # 弱约束,roll/yaw/elbow/wrist
效果:V11 机器人在平地行走时手臂自然下垂,不再前伸。
5. 版本迭代关键变更
5.1 V1 核心改进(V0 → V1)
| 问题 | 解决方案 |
|---|---|
| episode_length ~890(目标 950+) | 增加 forward_progress 奖励 |
| 缺步态约束 | 增加 feet_gait, feet_slide, feet_clearance |
| 动作质量差(手臂乱甩、不抬脚) | 增加 joint_deviation 约束 |
| Curriculum 效果差 | 改为 failure_adaptive_terrain_curriculum |
5.2 V5 核心改进(V4 → V5)
| 改进项 | V4 | V5 |
|---|---|---|
| 本体感知历史 | 1 帧 | 8 帧 (582D) |
| Depth 时序 | 单帧 | 4 帧堆叠 (4,24,32) |
| 足部感知 | 无 | Per-foot height scanner |
| 奖励项 | — | 新增 feet_at_plane, feet_air_time_positive_biped |
5.3 V6 核心改进(V5 → V6)
| 改进项 | 说明 |
|---|---|
| VolumePoints 传感器 | 100 采样点/脚,GPU Warp 穿透检测 |
volume_points_penetration |
核心硬约束,惩罚物理穿透 |
feet_orientation_contact |
接触时脚部水平度惩罚 |
| Curriculum 门控 | min_episode_fraction 0.6 → 0.75 |
5.4 V11 核心改进(V10 → V11)
V10 的已知问题:
- 手臂前伸 + 弯曲(joint_deviation_arms -0.10 对 6534D 网络太弱)
- 转圈也能升级 curriculum(纯距离门控的漏洞)
V11 解决方案:
# 手臂约束拆分
joint_deviation_shoulder_pitch = -0.60 # 阻止前伸
joint_deviation_arms_other = -0.15 # roll/yaw/elbow/wrist
# Curriculum 改为 quality_gated
terrain_levels = quality_gated(
min_distance=2.0, # 至少走 2m
min_survival_rate=0.6 # 存活率 > 60%
)
# 抬脚增强
feet_clearance: 有效 +1.50 → +2.00
6. 超参数配置
6.1 MultiCriticPPO 超参数
MultiCriticPPOCfg(
# 标准 PPO
num_learning_epochs=5,
num_mini_batches=16, # 4096 × 24 / 16 = 6144 samples/batch
clip_param=0.2,
gamma=0.99,
lam=0.95,
entropy_coef=0.008,
learning_rate=3e-4,
# Multi-Critic
encoder_learning_rate=1e-4, # 编码器单独学习率
num_critic_groups=3, # 3 个独立 Critic
advantage_weights=[0.7, 0.1, 0.2], # Task/Reg/Safety
# Auxiliary Losses
lambda_terrain=0.5,
lambda_distance=0.3,
lambda_velocity=0.2,
lambda_terrain_schedule={milestones: [30000, 60000], values: [0.5, 0.25, 0.1]},
)
6.2 关键超参数影响
| 超参数 | 默认值 | 影响分析 |
|---|---|---|
num_mini_batches |
16 | 影响梯度估计稳定性,GPU 显存限制 |
encoder_lr |
1e-4 | 过低:视觉特征学习慢;过高:遮盖 MLP 学习 |
advantage_weights[0] |
0.7 | Task 权重过高会压制 Reg/Safety 学习 |
lambda_terrain_schedule |
衰减 | terrain aux loss 随训练递减,最终仅依赖视觉 |
7. 训练与推理
7.1 训练命令
# Fusion V0 训练
./unitree_rl_lab.sh -t --task Unitree-G1-23dof-Fusion-V0 --num_envs 4096 --max_iterations 50000 --headless
# Fusion V11 训练
./unitree_rl_lab.sh -t --task Unitree-G1-23dof-Fusion-V11 --num_envs 4096 --max_iterations 50000 --headless
7.2 推理命令
./unitree_rl_lab.sh -p --task Unitree-G1-23dof-Fusion-V11
8. 版本对比总表
| 特性 | V0 | V1 | V5 | V6 | V11 |
|---|---|---|---|---|---|
| 地形 | 混合 | 混合 | 混合 | 混合 | 混合(57% stairs max 0.25m) |
| 本体历史 | 无 | 无 | 8帧 | 8帧 | 8帧 |
| Depth 时序 | 无 | 无 | 4帧 | 4帧 | 4帧 |
| VolumePoints | 无 | 无 | 无 | 有 | 有 |
| 奖励项数 | 9 | ~21 | — | — | 27 |
| Curriculum | terrain_levels | failure_adaptive | — | — | quality_gated |
| 手臂约束 | 无专项 | -0.1 | — | — | -0.75(拆分) |
版本记录
| 版本 | 日期 | 修改内容 | 作者 |
|---|---|---|---|
| V1.0 | 2026-04-12 | 初始版本,Fusion V0~V11 完整配置规范 | AI Assistant |
本文档由 AI 辅助整理自 unitree_lab_locomotion 仓库源码