纸面上的模型,与房间里的机器人
在本章前面,我们搭建的控制器都重度依赖机器人的模型。比如计算力矩控制和反馈线性化,它们会按机器人的惯性矩阵和重力项精确算出所需力矩,先把机器人自身的动力学抵消掉,再在上面叠加一个干净的、教科书式的响应。模型正确时,这招很漂亮。麻烦在于,模型从来都不完全正确。
想象一条空载时调好的机械臂,现在被要求拎起一整罐油漆。它的有效质量陡然增加,于是先前精心抵消的重力项就算错了,机械臂往下沉。再加上随润滑脂升温而变化的关节摩擦、用了一年后出现旷量的齿轮,以及传感器的缓慢漂移,纸面与现实的差距只会越拉越大。本篇要讲的,正是那些一开始就预料到模型有误、却仍能保持稳定的控制器。
两条出路:把未知量学出来,或为它们披上铠甲
自适应控制走的是乐观路线:如果某个参数不确定,就让机器人一边运行一边把它学出来。控制器内部维护一个不断更新的估计值,比如负载质量,观察实际运动如何偏离预测运动,再把这个估计值往上或往下微调,以缩小误差。拎起油漆罐,一两秒内控制器就自我说服到了更重的质量,下沉随之消失——无需人工重调。
鲁棒控制走的是悲观路线:别去钉死那个未知量,直接按最坏的合理情形来设计。你告诉控制器质量落在 1 到 5 公斤之间,要求给出一个固定的设计,在整个区间内都保持稳定。结果是一个永远不必学习、也永远不会被打个措手不及的控制器——代价是当实际条件其实很温和时它会显得保守,就像在最后晴了的日子里穿了雨衣。
滑模控制是鲁棒家族里最激进的成员。它在误差空间里定义一个目标面——比如「位置误差加速度误差等于零」——然后让控制量又快又猛地来回切换,把系统狠狠按到这个面上并钉住。一旦机器人落在面上,数学就保证它会朝目标滑去,与确切的质量或摩擦无关。它对模型误差极不敏感。
选哪条路是实打实的工程取舍。当不确定性很大但变化缓慢、且你能容忍一小段学习过渡时,自适应控制最出彩。当你需要从第一毫秒就有保证、又能容忍一些保守或抖振时,鲁棒控制与滑模控制最出彩。许多量产系统会把两者混用——慢变的部分靠学习,快变的部分靠铠甲。
看见测不到的东西:状态观测器
第二种「出错」是测量的缺失。现代控制喜欢作用于机器人的完整状态——每个关节的位置和速度,也许还有内部磁通或温度——但真实机器人很少能把这些全部测到。编码器给你位置;干净的速度往往得靠推断,而像力控关节内部弹性变形这类量,可能压根没有传感器。那么,在看不见完整状态时,你又怎么做全状态反馈呢?
状态观测器从你能测到的输出里重建隐藏状态。龙伯格观测器是最干净的例子:在软件里并行跑一份机器人模型的副本,喂给它同样的指令,让它预测传感器应当读到什么。把这个预测与真实读数比对;一旦两者不一致,就把差值反馈回去修正内部模型。这份副本会收敛到真实的隐藏状态,于是你就有了估计出的速度和内部变量,可以送进全状态反馈。
# Luenberger observer, one update step x_hat = x_hat + dt * (A @ x_hat + B @ u) # predict from the model copy y_hat = C @ x_hat # what the sensors SHOULD read x_hat = x_hat + L @ (y_meas - y_hat) # correct by the measurement gap # L is the observer gain; bigger L trusts the sensor, smaller L trusts the model
观测器能成立,前提是隐藏状态确实在输出上留下了「指纹」——这一性质叫可观测性。如果两种不同的内部情形会永远产生完全相同的传感器读数,那任何观测器都无法区分它们,重建也就失败了。在信任观测器之前先检查可观测性,就像在开车过桥之前先确认桥能承重一样,是最基本的。
还有一个把本节与全章勾连起来的实用手段:增益调度。不用单一的固定控制器(或观测器),而是预先调好几套,再根据工况——机械臂是伸展还是收拢、是慢是快——在它们之间切换或混合。它是自适应控制的一个轻量级表亲:你并不在线学习新增益,但确实会随着机器人有效动力学的变化,切换当前生效的那套预设增益。
把它们组装起来——并望向边界之外
没有哪台真实机器人会孤立地只用其中一种。在一台行走的人形机器人上,本章讲的一切会同时叠进一个全身控制器里:观测器估计身体的速度和质心去向,优化器在一次求解中同时统筹平衡、伸手和关节限位,而鲁棒或自适应项则在底层默默吸收摩擦与负载的变化。本篇的这些方法并非彼此竞争——它们是同一个栈里的不同层。
留意贯穿整章的那个反复出现的模式:先写下你能写出的最好模型,再加上一套机制来扛住你弄错的那部分。阻抗控制扛住了你无法预测的接触;自适应与鲁棒控制扛住了你无法钉死的参数;观测器扛住了你无法测量的状态。「优雅地处理模型误差」大概就是高级控制的那条贯穿主线。
前沿把这个想法推得更远。基于学习的控制用从数据中学到的模型取代手写模型——一个视觉-语言-动作模型,或一个由模仿学习训练出的策略,能捕捉到任何方程都没刻画的、杂乱的摩擦与接触效应。再往外,脑机接口让人的神经信号成为控制器要跟踪的参考,把机械肢体变成意图的延伸。那个诚实的内核始终不变:模型一定会错,所以要造出能与之共处的控制。