126、强化学习:在机器人运动控制中的实战
从一次“摔跤”说起
去年做四足机器人步态优化时,我遇到了一个让人抓狂的问题——传统MPC(模型预测控制)在粗糙地形上总是跑着跑着就侧翻。调了三个月的权重矩阵,换了四版动力学模型,结果还不如实验室新来的实习生用PPO算法训了一周的模型稳当。那天晚上我盯着示波器上失控的关节电流波形,突然意识到:当系统非线性强到一定程度,手写规则就是给自己挖坑。
强化学习不是万能药,但它在处理“说不清道不明”的耦合关系时,确实比人类直觉靠谱。今天这篇笔记,咱们就聊聊怎么把RL塞进嵌入式运动控制器里,以及那些踩过的坑。
状态空间设计:别把传感器数据全扔进去
很多新手一上来就把IMU、编码器、电流传感器全塞进状态向量,结果训练出来的策略要么过拟合,要么在真实硬件上抖得像筛糠。
我的做法是“最小必要状态集”:对于四足机器人行走,状态只需要包含机身姿态角(roll/pitch/yaw)、机身角速度、足端接触力(二值化)、以及当前步态相位。关节角度?那是底层PID的事,RL只管高层决策。
这里有个血泪教训:千万别把加速度计原始值直接喂给网络。加速度计噪声大,而且重力分量会随着姿态变化,网络得花大量容量去学这个映射关系。正确的做法是先做姿态解算,输出稳定的欧拉角。
# 别这样写:直接把6轴IMU原始数据堆进去state