113、MPC:非线性MPC与实时优化 113、MPC:非线性MPC与实时优化从一次电机堵转说起去年调试一个四足机器人单腿的力控,用的线性MPC,模型是简单的质量-弹簧-阻尼。空载跑得挺好,一上负载,电机堵转,电流直接爆表。查了半天,发现是关节摩擦力矩的非线性项在MPC的线性化模型里被忽略了——线性MPC把摩擦当成可忽略的小扰动,结果实际摩擦力矩在低速区是非线性的Stribeck效应,控制器还在那按线性模型算最优控制量,给出来的力矩指令根本推不动负载,积分项越积越大,最后饱和。那次之后我彻底明白:线性MPC在强非线性系统面前就是个玩具。但非线性MPC(NMPC)的实时性又是个大坑——你算一个优化问题要几十毫秒,电机早跑飞了。这篇文章就聊聊我踩过的这些坑,以及怎么在嵌入式平台上把NMPC跑起来。非线性MPC到底在算啥线性MPC的核心是:把非线性系统在某个工作点线性化,然后求解一个二次规划(QP)。NMPC不干这事,它直接面对原始的非线性模型:min J = Σ (x_k - x_ref)^T Q (x_k - x_ref) + u_k^T R u_k s.t. x_{k+1} = f(x_k, u_k) // 非线性状态方程 x_min ≤ x_k ≤ x_max u_min ≤ u_k ≤ u_max这里的f(x,u)可以是任何非线性函数——机器人动力学、化学反应动力学、车辆轮胎模型。问题在于,这个优化问题是非凸的,没有解析解,只能用数值方法迭代求解。