Unitree GO1 平地行走#
Unitree GO1 是一个四足机器人平台,本示例展示了如何训练 GO1 在平坦地形上实现稳定的步态行走。
任务描述#
GO1 四足机器人具有 12 个自由度(每条腿 3 个关节),需要通过深度强化学习学习协调的步态控制。该环境使用 MotrixSim 物理引擎进行仿真,提供高保真的动力学模拟。智能体通过控制各关节的目标位置(通过 PD 控制器转换为力矩)来实现速度跟踪和姿态稳定。
动作空间(Action Space)#
项目 |
详细信息 |
|---|---|
类型 |
|
维度 |
12 |
动作对应 12 个关节的位置控制指令(相对于默认站立姿态的偏移量),包括:
序号 |
动作含义(关节位置变化) |
对应肢体 |
|---|---|---|
0-2 |
髋关节、大腿关节、小腿关节 |
前左腿 |
3-5 |
髋关节、大腿关节、小腿关节 |
后左腿 |
6-8 |
髋关节、大腿关节、小腿关节 |
前右腿 |
9-11 |
髋关节、大腿关节、小腿关节 |
后右腿 |
观察空间#
项目 |
详细信息 |
|---|---|
类型 |
|
维度 |
48 |
GO1 环境的观测空间由以下部分组成(按顺序):
部分 |
内容说明 |
维度 |
备注 |
|---|---|---|---|
noisy_linvel |
局部坐标系线速度 |
3 |
带噪声的线速度 |
noisy_gyro |
陀螺仪数据 |
3 |
带噪声的角速度 |
local_gravity |
局部重力方向 |
3 |
重力向量投影 |
noisy_joint_angle |
关节角度 |
12 |
相对于默认值的偏差 |
noisy_joint_vel |
关节速度 |
12 |
带噪声的关节速度 |
last_actions |
上一帧动作 |
12 |
历史动作信息 |
command |
速度命令 |
3 |
[vx, vy, vyaw] |
奖励函数设计#
GO1 的奖励函数是一个复杂的复合函数,包含多个组件:
@dataclass
class RewardConfig:
scales: dict[str, float] = field(
default_factory=lambda: {
"termination": -0.0,
"tracking_lin_vel": 1.0,
"tracking_ang_vel": 0.5,
"lin_vel_z": -2.0,
"ang_vel_xy": -0.05,
"orientation": -0.0,
"torques": -0.00001,
"dof_vel": -0.0,
"dof_acc": -2.5e-7,
"base_height": -0.0,
"feet_air_time": 1.0,
"collision": -1.0 * 0,
"action_rate": -0.001,
"stand_still": -0.0,
"hip_pos": -1,
"calf_pos": -0.3 * 0,
}
)
tracking_sigma: float = 0.25
max_foot_height: float = 0.1
总奖励 = 加权组合以上所有项
初始状态#
机器人位置:固定在初始位置
关节角度:设置为默认站立姿态
关节角度噪声:每个关节在 [-0.125, 0.125] 弧度范围内添加随机噪声
速度初始化:所有线速度和角速度初始化为零
Episode 终止条件#
身体接触地面:机器人躯干与地面发生非预期接触
速度异常:线速度平方和超过阈值(1e8)
使用指南#
1. 环境预览#
uv run scripts/view.py --env go1-flat-terrain-walk
2. 开始训练#
uv run scripts/train.py --env go1-flat-terrain-walk
3. 查看训练进度#
uv run tensorboard --logdir runs/go1-flat-terrain-walk
4. 测试训练结果#
uv run scripts/play.py --env go1-flat-terrain-walk
预期训练结果#
稳定的四足步态(trot 步态或其他协调步态)
良好的速度跟踪能力
能够跟踪不同的速度命令(前进、转向)
姿态稳定,无明显侧翻