四足机器人强化学习系列 01:四足 RL 到底在学什么

上一篇整理:00:为什么从 ETH/ANYmal 讲起,以及我准备怎么学

写在前面:这一篇先把“学什么”说清楚

看四足机器人强化学习资料时,我最容易混淆的一点是:

四足 RL 到底是在学什么?

它是在学路径规划吗?是在学识别环境吗?是在学像动物一样思考吗?还是在学电机控制?

如果这个问题没搞清楚,后面看 PPO、reward、observation、Sim2Real 都会有点飘。因为很多资料默认读者已经知道 locomotion policy 是什么,但对刚开始系统整理的人来说,这一步不能跳。

所以这篇笔记先不急着讲 MDP 公式,也不讲 PPO 推导,只先整理一个核心问题:

在四足机器人 locomotion 里,强化学习通常是在学习一个“从机器人当前观测到低层动作”的运动控制策略。

这个策略不一定负责全部智能,它通常只是整套机器人系统中的一个控制模块。

一句话结论

四足 RL 最常见的学习目标,是在仿真里训练一个 policy:输入机器人当前观测和运动命令,输出关节动作或关节目标,让机器人能稳定、鲁棒、省力地完成站立、行走、转向、越障等运动任务。

可以写成一个很短的式子:

observation + command  →  policy  →  action

如果展开到四足机器人里,大概是:

IMU 姿态/角速度 + 关节角/关节速度 + 速度命令 + 上一帧动作

神经网络策略 policy

12 个关节的位置目标偏移 / 力矩 / 控制指令

底层控制器执行

机器人在仿真或真实世界里走一步

这就是最小闭环。

它首先不是在学“大脑”

很多人第一次听到“机器人强化学习”,容易以为机器人是在学一个完整大脑:看环境、理解任务、自己决定去哪、规划路径、控制腿、避障、完成目标。

但在四足 locomotion 这个方向里,很多 RL policy 其实没有那么“高层”。

它更像是一个低层运动控制器:

上层给它一个速度命令:向前 0.5 m/s,向左转 0.2 rad/s
它负责让四条腿协调起来,把这个命令执行出来

也就是说,它通常不负责:

  • 决定今天要去哪。
  • 识别房间语义。
  • 规划全局路径。
  • 理解文字任务。
  • 判断“这是椅子还是桌子”。

这些更像是导航、感知、规划、任务决策或大模型系统要做的事情。

四足 RL locomotion policy 更关心的是:

  • 身体别倒。
  • 速度尽量跟上命令。
  • 动作不要太抖。
  • 能耗不要太大。
  • 脚不要乱滑。
  • 遇到一点扰动还能恢复。
  • 地面有变化时还能走。

这就像人走路时,大脑不用每一步都精确计算每个肌肉怎么发力。高层只想“往前走”,低层运动系统自动协调身体完成动作。四足 RL 训练的 policy,在工程系统里经常扮演类似“低层运动技能”的角色。

它也不等于传统路径规划

四足机器人完整系统里常见分层大概是:

任务层:我要去哪里,做什么任务
导航层:从当前位置到目标点怎么走
局部规划:短时间内避障、选落脚区域或速度命令
运动控制:把速度命令变成身体和腿的动作
电机控制:让关节按目标执行

四足 RL locomotion 通常主要落在“运动控制”这一层。

例如上层导航模块可能输出:

vx = 0.4 m/s
vy = 0.0 m/s
yaw_rate = 0.2 rad/s

RL policy 接到命令后,需要每个控制周期输出动作,让机器人真的按这个速度走。

所以如果问“四足 RL 在学什么”,比较准确的回答不是:

它在学怎么从 A 点走到 B 点

而是:

它在学当上层告诉我一个运动命令时,身体和关节应该怎么协调动作

路径规划当然可以和 RL 结合,但基础 locomotion policy 不是完整导航系统。

最小例子:速度命令跟踪

最常见的四足 RL 入门任务之一,就是速度命令跟踪。

任务可以写成:

给机器人一个目标线速度和角速度,让它尽量跟踪这个命令,同时保持稳定。

比如命令是:

向前速度 vx = 0.5 m/s
侧向速度 vy = 0.0 m/s
转向角速度 yaw_rate = 0.0 rad/s

那机器人应该学会向前走。

如果命令变成:

vx = 0.0 m/s
vy = 0.0 m/s
yaw_rate = 0.4 rad/s

那机器人应该原地转向。

如果命令是:

vx = 0.4 m/s
vy = 0.2 m/s
yaw_rate = -0.2 rad/s

那机器人应该斜着走,同时轻微转向。

这个任务听起来简单,但对四足机器人来说并不简单。因为它必须同时处理:

  • 身体平衡。
  • 四条腿协调。
  • 足端接触切换。
  • 地面摩擦。
  • 电机限制。
  • 动作平滑。
  • 能耗。

强化学习的做法是:在仿真里给机器人各种速度命令,让它不断尝试,表现好的行为得到奖励,表现差的行为被惩罚,最后得到一个能跟踪命令的 policy。

Policy 到底是什么

Policy 可以理解成一个函数。

数学上常写成:

π(a | o)

意思是:给定观测 o,输出动作 a。

在工程里,它通常就是一个神经网络。

比如:

输入:48 维 observation
网络:MLP,几层全连接
输出:12 维 action

为什么 action 常常是 12 维?

因为很多四足机器人有 12 个主动关节:

4 条腿 × 每条腿 3 个关节 = 12 个关节

当然,不同机器人关节数不同,action 维度也会变。

一个简化的 policy 可以想象成:

action = policy(observation)

然后 action 再被转换成关节目标:

target_joint_position = default_joint_position + action_scale * action

底层 PD 控制器再根据目标角度输出力矩。

Observation 里可能有什么

policy 不可能凭空输出动作,它需要知道机器人当前是什么状态。

常见 observation 包括:

1. 机身角速度

例如 roll、pitch、yaw 方向上的角速度。

这能帮助策略知道身体是不是正在快速倾斜或转动。

2. 重力方向投影

很多工程会用 projected gravity,而不是直接给 roll/pitch。

它可以告诉策略:当前机身相对重力方向是正的还是歪的。

3. 速度命令

例如:

vx command
vy command
yaw rate command

没有 command,policy 就不知道上层希望它往哪走。

4. 关节角

机器人每个关节当前角度是多少。

如果关节已经偏得很厉害,policy 应该知道。

5. 关节速度

关节正在以多快速度运动。

这对减少抖动、保持稳定很重要。

6. 上一帧 action

把上一帧 action 放进 observation,可以帮助策略学到更平滑的动作。

7. 地形信息

在复杂地形任务中,可能会加入周围高度采样,或者视觉/深度信息。

但这会让问题复杂很多,基础篇先不展开。

Action 到底是什么

四足 RL 的 action 不一定是“直接给电机多少电流”。

常见几种形式:

1. 关节位置目标偏移

这是很多 locomotion 工程喜欢的方式。

policy 输出一个归一化 action,然后变成目标关节角:

target_q = default_q + action_scale * action

优点是比较稳定,真机部署风险相对小一些。

2. 关节力矩

policy 直接输出 torque。

这种方式自由度更高,但更难训,也更危险。真机上如果没有严格限幅,很容易出问题。

3. 残差控制

传统控制器先给一个基础动作,RL policy 输出修正量。

这种方式常见于“传统控制 + 学习增强”的思路。

对刚开始学习的人来说,先理解“位置目标偏移 + PD”就够用了。

Reward 在这里起什么作用

强化学习不是直接告诉机器人“左前腿先抬,右后腿再抬”。

它更像是给机器人一个评价标准:

你这样走,得分高
你那样走,得分低

例如速度跟踪任务里,reward 可能包括:

  • 实际速度接近命令速度,加分。
  • 身体姿态稳定,加分或少扣分。
  • 力矩太大,扣分。
  • action 变化太快,扣分。
  • 脚打滑,扣分。
  • 机身撞地,扣分或终止。

机器人在仿真中不断试错,最后学到一种能拿高分的运动方式。

这里要注意一个很重要的点:

机器人学到的是 reward 允许的行为,不一定是人脑子里想象的行为。

如果 reward 写得不好,机器人可能会钻空子。

比如只奖励向前速度,不惩罚姿态和碰撞,它可能学会趴着滑、乱扭、用很奇怪的方式刷速度。

所以四足 RL 里 reward 设计非常关键。

为什么强化学习适合四足 locomotion

四足机器人运动控制难,是因为它有几个特点。

1. 接触很复杂

脚一会儿接触地面,一会儿离地。

接触力、摩擦、打滑、冲击都很难精确建模。

2. 动作空间高维

12 个关节同时控制,不是一个简单单输入单输出系统。

一个关节动作会影响整个身体。

3. 稳定性和任务目标耦合

机器人要走得快,但不能摔。

要省力,但不能不动。

要脚抬高,但不能动作夸张。

这些目标互相拉扯。

4. 环境变化很多

不同地面、坡度、台阶、摩擦、扰动都会影响运动。

手写规则很难覆盖所有情况。

强化学习的优势是,可以在仿真里生成大量情况,让策略通过试错学出相对鲁棒的行为。

强化学习和传统控制是什么关系

我不应该把它理解成“RL 取代传统控制”。

更合理的理解是:

传统控制提供结构、约束、安全边界
强化学习提供复杂行为的自动优化能力

实际系统里,经常是混合的。

比如:

  • RL policy 输出关节目标。
  • 底层还是 PD 控制。
  • 状态估计还是传统算法。
  • 安全保护还是工程规则。
  • 上层导航还是规划模块。
  • 真机部署还要限幅、急停和保护逻辑。

所以学习四足 RL,不是把传统控制扔掉,而是理解它在系统里接哪一层。

和模仿学习有什么区别

另一个容易混淆的是 imitation learning。

模仿学习通常是:

给机器人示范数据,让它模仿专家动作

强化学习通常是:

给机器人 reward,让它自己试错优化

两者可以结合。

比如先用动物运动数据、MPC 轨迹、人类设计步态做预训练,再用 RL 微调。

但基础 locomotion 里,很多经典工程是直接通过 reward 训练,而不是给每一步专家关节轨迹。

和大模型有什么区别

现在很容易把所有 AI 都往大模型上联想,但四足 locomotion policy 和语言大模型不是一回事。

语言大模型处理的是 token 序列,擅长语言、推理、知识组织。

四足 locomotion policy 处理的是连续控制信号,输出的是机器人动作。

当然,未来完整机器人系统里可能是:

大模型理解任务
导航模块规划路线
RL locomotion policy 负责身体运动
底层控制器执行关节动作

但在这套笔记里,重点先放在 locomotion policy 上。

一个具体闭环:从命令到走一步

假设机器人当前收到命令:向前走 0.4 m/s。

一次控制周期可能是:

  1. IMU 读取身体角速度和姿态相关信息。
  2. 编码器读取 12 个关节角和关节速度。
  3. 系统拼接 observation。
  4. 把 observation 输入 policy 网络。
  5. policy 输出 12 维 action。
  6. action 乘以 action_scale,加到默认关节角上。
  7. 得到 12 个目标关节角。
  8. PD 控制器计算力矩。
  9. 仿真器或真实电机执行。
  10. 机器人身体移动一点。
  11. 根据速度、姿态、能耗等计算 reward。
  12. 训练时用这些数据更新 policy;部署时则不更新,只继续执行。

训练和部署的区别也很重要:

  • 训练时:会计算 reward,会更新 policy。
  • 部署时:只执行 policy,不再根据 reward 更新。

训练时学到的东西长什么样

policy 学到的不是一条固定步态轨迹。

它更像一个反馈控制规律:

如果身体往左歪,就调整腿部动作把它拉回来
如果命令速度变大,就改变步频和步幅
如果某个关节位置偏了,就输出相应修正
如果上一帧 action 太大,就尽量平滑过渡

这也是为什么 observation 重要。没有反馈,机器人就只能执行固定动作;有了 observation,policy 才能根据当前状态调整动作。

我读代码时应该盯什么

有了这篇的概念后,后面读 legged_gym / Isaac Lab 这类代码,我应该优先找这些东西。

1. obs_buf 在哪里构造

看看 observation 里到底拼了哪些量。

2. actions 怎么处理

看看 action 是否被 clip、scale,最后如何变成 target joint position 或 torque。

3. commands 怎么采样

看看训练时给机器人什么速度命令,范围多大。

4. reward 函数有哪些项

看看它到底在奖励什么、惩罚什么。

5. reset 条件是什么

看看机器人什么情况下算失败。

这五个位置,比一开始看 PPO loss 更重要。

这一篇先记住的重点

我给自己总结成 8 条:

  1. 四足 RL locomotion 通常学的是低层运动策略,不是完整机器人“大脑”。
  2. 最小闭环是 observation → policy → action。
  3. policy 常常是一个神经网络,输入 obs,输出 action。
  4. action 很多时候不是直接力矩,而是关节位置目标偏移。
  5. reward 决定机器人会努力学成什么样。
  6. 强化学习适合四足,是因为接触复杂、动作高维、环境变化多。
  7. RL 不等于取代传统控制,实际系统往往是混合架构。
  8. 读代码时先看 obs、action、command、reward、reset。

最后

如果用一句话描述这篇笔记:

四足 RL 最常见的目标,是训练一个能根据机器人当前状态和运动命令,实时输出关节动作的低层运动策略。

下一篇我准备整理 MDP,也就是强化学习最基础的抽象:状态、动作、奖励、转移、终止到底在四足机器人里分别对应什么。


下一篇整理:02:用四足机器人理解 MDP

algorithms axis-angle bode calibration chrome cmake cmakelists colcon conan control cpp d435i data_struct db dots eigen fcpx figure forge fov gazebo gdb git gnu ibus interest isaac gym isaaclab kdl latex launch legged locomotion life linux mac math matlab matrix memory mlp motor moveit ode operator optimal algorithm ppo python qos realsense robot robotics ros ros2 rtb shell simulation stl thread tools twist ubuntu uml unitree urdf valgrind vcxsrv velocity vim web work wsl 中文输入 交叉编译 依赖管理 分支管理 四足机器人 强化学习 机器人视觉 构建系统 深度相机 点云 版本控制 输入法 配置类
知识共享许可协议