G1 编程与工程 IsaacLab 训练配置

G1-23dof Following 目标跟随任务配置规范

2026-04-12 · 4 min read

G1-23dof Following 目标跟随任务配置规范

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


1. 任务概述

1.1 任务目标

Following 任务是 G1-23dof 机器人的目标跟随任务,目标为:

跟踪视野中的红色球体目标,保持 0.5~1.0m 的安全距离并始终面向目标。

Phase 1 使用静态目标(目标固定不动),后续可扩展为动态目标。

1.2 与 Velocity 任务的本质差异

维度 Velocity Following
控制目标 跟踪指令速度 $(v_x, v_y, \omega_z)$ 跟踪空间目标位置
状态表示 速度向量 极坐标(距离 + 朝向角)
奖励来源 速度误差 距离误差 + 朝向误差
终止条件 高度/倾斜超时 高度/倾斜超时 + 目标过远/碰撞

1.3 任务特性

特性 说明
任务类型 目标跟踪(Target Following)
地形 平地(flat only,Phase 1)
目标物体 红色球体(半径 0.15m,静态)
目标距离 0.5~1.0m(期望 0.75m)
Episode 长度 20 秒

2. 场景配置

2.1 目标物体配置

target = RigidObjectCfg(
    prim_path="{ENV_REGEX_NS}/Target",
    spawn=sim_utils.SphereCfg(
        radius=0.15,                              # 球体半径 15cm
        visual_material=PreviewSurfaceCfg(
            diffuse_color=(1.0, 0.2, 0.2)         # 红色球体
        ),
        rigid_props=RigidBodyPropertiesCfg(
            kinematic_enabled=True,                # Kinematic 物体
            disable_gravity=True,
        ),
        collision_props=CollisionPropertiesCfg(
            collision_enabled=True,
        ),
    ),
    init_state=RigidObjectCfg.InitialStateCfg(
        pos=(2.0, 0.0, 0.5),                     # 初始位置:前方 2m,高度 0.5m
    ),
)

2.2 地形配置

Phase 1 使用纯平地(与 Velocity 的混合地形不同):

COBBLESTONE_ROAD_CFG = TerrainGeneratorCfg(
    sub_terrains={
        "flat": MeshPlaneTerrainCfg(proportion=1.0),  # 100% 平地
    },
)

3. 目标命令设计

3.1 TargetFollowingCommand

Following 使用专用的 TargetFollowingCommand 而非 Velocity 命令:

target_following = mdp.TargetFollowingCommandCfg(
    target_name="target",
    desired_distance=0.75,   # 期望距离 0.75m(在 0.5~1.0m 范围中间)
    max_lin_vel=1.0,         # 最大线速度 1.0 m/s
    max_ang_vel=0.5,         # 最大角速度 0.5 rad/s
    k_p=1.5,                 # 线速度 P 控制增益
    k_yaw=2.0,               # 偏航角速度 P 控制增益
)

3.2 命令生成逻辑

# 内部机制:将目标位置转换为速度命令
# 1. 计算当前机器人到目标的距离 d 和朝向角 θ
# 2. 若 d > desired_distance:生成朝目标的前进命令
# 3. 若 d < desired_distance:生成后退命令
# 4. 若机器人不面向目标:生成转向命令
# 效果:机器人自动调节速度,保持期望距离并面向目标

4. 观测空间

4.1 Policy 观测(84D)

Following 在 Velocity 78D 基础上新增 6D 目标感知观测:

观测项 维度 类型 说明
base_ang_vel 3D 本体 基座角速度
projected_gravity 3D 本体 重力投影
velocity_commands 3D 目标 生成的跟踪命令(距离+朝向控制)
joint_pos_rel 23D 本体 关节位置
joint_vel_rel 23D 本体 关节速度
last_action 23D 本体 上一步动作
target_relative_pos_normalized 3D 目标 归一化相对位置 $(x,y,z)/max_dist$
target_distance_normalized 1D 目标 归一化距离 $d / 5.0m$
target_heading_sin_cos 2D 目标 朝向角 $\sin(\theta), \cos(\theta)$

总计:78D + 6D = 84D

4.2 Critic 观测(93D)

额外项 维度 类型 说明
base_lin_vel 3D 特权 真值线速度
target_relative_pos 3D 目标 原始相对位置(无归一化)
target_distance 1D 目标 原始距离
target_heading 1D 目标 原始朝向角

Critic 总计:78D + 3D + 3D + 1D + 1D = 93D

4.3 观测归一化设计

目标相关观测使用归一化 + 三角编码,避免周期性边界问题:

原始值 编码方式 输出范围 优势
距离 $d \in [0, 5]$ $d / 5.0$ $[0, 1]$ 有界输入
朝向角 $\theta \in [-\pi, \pi]$ $[\sin(\theta), \cos(\theta)]$ $[-1, 1]^2$ 连续无突变

5. 奖励函数设计

5.1 Following 专项奖励

奖励项 权重 函数 物理意义
track_lin_vel_xy 1.0 track_lin_vel_xy_yaw_frame_exp 跟踪由目标位置生成的线速度命令
track_ang_vel_z 0.5 track_ang_vel_z_exp 跟踪偏航角速度命令
track_distance 2.0 track_target_distance 保持在 0.75m 期望距离
track_heading 1.0 track_target_heading 始终面向目标

5.2 Following 与 Velocity 奖励对比

奖励项 Velocity Following 差异
track_lin_vel_xy 1.0 1.0 相同
track_ang_vel_z 0.5 0.5 相同
track_distance 2.0 Following 独有,距离控制是核心
track_heading 1.0 Following 独有,面向目标是安全要求
alive 0.15 0.15 相同
gait 0.5 0.5 相同
feet_clearance 1.0 1.0 相同

5.3 核心奖励项详解

track_target_distance

def track_target_distance(env, target_name, desired_distance=0.75, std=0.25):
    # 当前距离
    current_distance = norm(robot.pos - target.pos)
    # 使用指数误差奖励
    error = current_distance - desired_distance
    reward = exp(-error² / (2 × std²))
    # 最佳情况:distance = 0.75m,reward = 1.0
    # 0.5m 或 1.0m:reward ≈ 0.45
    # 0.25m 或 1.25m:reward ≈ 0.04

track_target_heading

def track_target_heading(env, target_name, std=0.5):
    # 计算偏航角误差(机器人朝向 vs 目标方向)
    error = yaw_robot - atan2(target.y, target.x)
    reward = exp(-error² / (2 × std²))
    # 最佳情况:完全面向目标,reward = 1.0

6. 终止条件

6.1 标准终止(与 Velocity 相同)

终止项 触发条件
time_out Episode 达到 20 秒
base_height < 0.2m 机器人摔倒
bad_orientation > 0.8rad 机器人严重倾斜

6.2 Following 专项终止

终止项 触发条件 原因
target_too_far 目标距离 > 5.0m 目标丢失,需重置
target_collision 目标距离 < 0.3m 与目标碰撞,需后退

7. 事件随机化

7.1 目标重置

reset_target = EventTerm(
    func=mdp.reset_object_pose_uniform,
    mode="reset",
    params={
        "asset_cfg": SceneEntityCfg("target"),
        "pose_range": {
            "x": (1.0, 3.0),    # 前方 1~3m
            "y": (-1.5, 1.5),   # 左右 1.5m
            "z": (0.4, 0.6),    # 高度 0.4~0.6m
        },
    },
)

7.2 与 Velocity 的差异

事件 Following Velocity
目标重置 每 episode 随机目标位置
地形 仅平地 混合地形
推送干扰 每 5s 随机水平力 每 5s 随机水平力

8. 训练命令

# Following 训练
./unitree_rl_lab.sh -t --task Unitree-G1-23dof-Following --num_envs 4096 --max_iterations 50000 --headless

# Following 推理
./unitree_rl_lab.sh -p --task Unitree-G1-23dof-Following

9. 扩展方向

9.1 Phase 2:动态目标

# 目标运动模式
target.velocity_range = {
    "x": (-0.5, 0.5),   # 目标水平速度
    "y": (-0.3, 0.3),
}

9.2 Phase 3:多目标 / 移动障碍

# 场景中增加多个目标或障碍物
# 策略需学会选择和避障

版本记录

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

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

← 上一篇
Hello World — 我的第一篇博客
下一篇 →
G1-23dof 强化学习超参数系统调优指南
← 返回博客列表