上一篇整理:00:为什么从 ETH/ANYmal 讲起,以及我准备怎么学
写在前面:这一篇先把“学什么”说清楚
看四足机器人强化学习资料时,我最容易混淆的一点是:
四足 RL 到底是在学什么?
它是在学路径规划吗?是在学识别环境吗?是在学像动物一样思考吗?还是在学电机控制?
如果这个问题没搞清楚,后面看 PPO、reward、observation、Sim2Real 都会有点飘。因为很多资料默认读者已经知道 locomotion policy 是什么,但对刚开始系统整理的人来说,这一步不能跳。
所以这篇笔记先不急着讲 MDP 公式,也不讲 PPO 推导,只先整理一个核心问题:
在四足机器人 locomotion 里,强化学习通常是在学习一个“从机器人当前观测到低层动作”的运动控制策略。
这个策略不一定负责全部智能,它通常只是整套机器人系统中的一个控制模块。
一句话结论
四足 RL 最常见的学习目标,是在仿真里训练一个 policy:输入机器人当前观测和运动命令,输出关节动作或关节目标,让机器人能稳定、鲁棒、省力地完成站立、行走、转向、越障等运动任务。
可以写成一个很短的式子:
observation + command → policy → action |
如果展开到四足机器人里,大概是:
IMU 姿态/角速度 + 关节角/关节速度 + 速度命令 + 上一帧动作 |
这就是最小闭环。
它首先不是在学“大脑”
很多人第一次听到“机器人强化学习”,容易以为机器人是在学一个完整大脑:看环境、理解任务、自己决定去哪、规划路径、控制腿、避障、完成目标。
但在四足 locomotion 这个方向里,很多 RL policy 其实没有那么“高层”。
它更像是一个低层运动控制器:
上层给它一个速度命令:向前 0.5 m/s,向左转 0.2 rad/s |
也就是说,它通常不负责:
- 决定今天要去哪。
- 识别房间语义。
- 规划全局路径。
- 理解文字任务。
- 判断“这是椅子还是桌子”。
这些更像是导航、感知、规划、任务决策或大模型系统要做的事情。
四足 RL locomotion policy 更关心的是:
- 身体别倒。
- 速度尽量跟上命令。
- 动作不要太抖。
- 能耗不要太大。
- 脚不要乱滑。
- 遇到一点扰动还能恢复。
- 地面有变化时还能走。
这就像人走路时,大脑不用每一步都精确计算每个肌肉怎么发力。高层只想“往前走”,低层运动系统自动协调身体完成动作。四足 RL 训练的 policy,在工程系统里经常扮演类似“低层运动技能”的角色。
它也不等于传统路径规划
四足机器人完整系统里常见分层大概是:
任务层:我要去哪里,做什么任务 |
四足 RL locomotion 通常主要落在“运动控制”这一层。
例如上层导航模块可能输出:
vx = 0.4 m/s |
RL policy 接到命令后,需要每个控制周期输出动作,让机器人真的按这个速度走。
所以如果问“四足 RL 在学什么”,比较准确的回答不是:
它在学怎么从 A 点走到 B 点 |
而是:
它在学当上层告诉我一个运动命令时,身体和关节应该怎么协调动作 |
路径规划当然可以和 RL 结合,但基础 locomotion policy 不是完整导航系统。
最小例子:速度命令跟踪
最常见的四足 RL 入门任务之一,就是速度命令跟踪。
任务可以写成:
给机器人一个目标线速度和角速度,让它尽量跟踪这个命令,同时保持稳定。 |
比如命令是:
向前速度 vx = 0.5 m/s |
那机器人应该学会向前走。
如果命令变成:
vx = 0.0 m/s |
那机器人应该原地转向。
如果命令是:
vx = 0.4 m/s |
那机器人应该斜着走,同时轻微转向。
这个任务听起来简单,但对四足机器人来说并不简单。因为它必须同时处理:
- 身体平衡。
- 四条腿协调。
- 足端接触切换。
- 地面摩擦。
- 电机限制。
- 动作平滑。
- 能耗。
强化学习的做法是:在仿真里给机器人各种速度命令,让它不断尝试,表现好的行为得到奖励,表现差的行为被惩罚,最后得到一个能跟踪命令的 policy。
Policy 到底是什么
Policy 可以理解成一个函数。
数学上常写成:
π(a | o) |
意思是:给定观测 o,输出动作 a。
在工程里,它通常就是一个神经网络。
比如:
输入:48 维 observation |
为什么 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 |
没有 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 处理的是连续控制信号,输出的是机器人动作。
当然,未来完整机器人系统里可能是:
大模型理解任务 |
但在这套笔记里,重点先放在 locomotion policy 上。
一个具体闭环:从命令到走一步
假设机器人当前收到命令:向前走 0.4 m/s。
一次控制周期可能是:
- IMU 读取身体角速度和姿态相关信息。
- 编码器读取 12 个关节角和关节速度。
- 系统拼接 observation。
- 把 observation 输入 policy 网络。
- policy 输出 12 维 action。
- action 乘以 action_scale,加到默认关节角上。
- 得到 12 个目标关节角。
- PD 控制器计算力矩。
- 仿真器或真实电机执行。
- 机器人身体移动一点。
- 根据速度、姿态、能耗等计算 reward。
- 训练时用这些数据更新 policy;部署时则不更新,只继续执行。
训练和部署的区别也很重要:
- 训练时:会计算 reward,会更新 policy。
- 部署时:只执行 policy,不再根据 reward 更新。
训练时学到的东西长什么样
policy 学到的不是一条固定步态轨迹。
它更像一个反馈控制规律:
如果身体往左歪,就调整腿部动作把它拉回来 |
这也是为什么 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 条:
- 四足 RL locomotion 通常学的是低层运动策略,不是完整机器人“大脑”。
- 最小闭环是 observation → policy → action。
- policy 常常是一个神经网络,输入 obs,输出 action。
- action 很多时候不是直接力矩,而是关节位置目标偏移。
- reward 决定机器人会努力学成什么样。
- 强化学习适合四足,是因为接触复杂、动作高维、环境变化多。
- RL 不等于取代传统控制,实际系统往往是混合架构。
- 读代码时先看 obs、action、command、reward、reset。
最后
如果用一句话描述这篇笔记:
四足 RL 最常见的目标,是训练一个能根据机器人当前状态和运动命令,实时输出关节动作的低层运动策略。
下一篇我准备整理 MDP,也就是强化学习最基础的抽象:状态、动作、奖励、转移、终止到底在四足机器人里分别对应什么。
下一篇整理:02:用四足机器人理解 MDP