第189篇 能控性与能观性——系统能不能控制/观测的判定

第189篇 能控性与能观性——系统能不能控制/观测的判定 上篇聊了状态空间表示知道了怎么用A、B、C、D四个矩阵描述一个系统。但你有没有想过一个问题给了你这些矩阵你怎么知道这个系统到底能不能被控制听起来有点荒谬——系统都建好了怎么会不能控制讲真这种情况在工程里太常见了。之前做倒立摆的团队就踩过这个坑。小车的电机只能施加水平力但摆杆的摆动需要力矩控制。如果电机的安装位置不对或者传动机构有死区你就可能发现不管怎么调PID参数摆就是稳不住。这不是调参的问题是系统本身就不完全能控。能控性和能观性是现代控制理论里最基础的两个判定。搞不懂这两个后面的状态反馈、观测器、LQR全白学。能控性我能不能把系统推到任意状态能控性的定义很直白给定一个系统dx/dt Ax Bu如果存在一个有限时间内的控制输入u(t)能把系统从任意初始状态转移到任意终止状态就说这个系统是完全能控的。说白了就是我能不能通过操控输入把系统推到任何我想要的位置判断能控性的方法也很简单——构造能控性矩阵Co [B, AB, A²B, ..., A^(n-1)B]如果这个矩阵满秩秩等于状态维数n系统就是完全能控的。拿之前的小车模型举例状态是[位置, 速度]A [[0,1],[0,0]]B [[0],[1]]import numpy as np A np.array([[0, 1], [0, 0]]) B np.array([[0], [1]]) # 构造能控性矩阵 Co np.hstack([B, A B]) print(能控性矩阵Co:) print(Co) print(秩:, np.linalg.matrix_rank(Co))算出来Co [[0, 1], [1, 0]]秩为2等于状态维数所以这个小车是完全能控的。物理意义也很清楚通过控制加速度你既能改变速度直接控制也能改变位置速度积分得到位置。但如果你有一个系统B [[1], [0]]也就是说输入只能直接影响位置、不能直接影响速度那Co [[1, 0], [0, 0]]秩为1不满秩系统不能控。这就像你只能控制方向盘但不能控制油门——有些状态你根本够不着。面试的时候面试官问怎么判断能控性你就说构造能控性矩阵看秩。如果面试官追问PBH判据了解吗你可以补充系统矩阵A的每个特征值λ矩阵[λI-A, B]都要满秩这也是能控的充要条件。PBH判据的好处是能告诉你哪个模态不能控。能观性我能不能从输出反推内部状态能观性是能控性的对偶问题。能控性问的是输入能不能影响所有状态能观性问的是输出能不能反映所有状态。定义给定系统dx/dt Ax Buy Cx如果通过观测输出y(t)在有限时间内的变化能唯一确定系统的初始状态x(0)就说系统是完全能观的。说白了我从外面能看到的信息输出y够不够推断系统内部所有状态判断方法和能控性类似构造能观性矩阵Ob [C; CA; CA²; ...; CA^(n-1)]如果Ob满秩秩等于n系统完全能观。还是那个小车模型C [[1, 0]]只能观测位置C np.array([[1, 0]]) # 构造能观性矩阵 Ob np.vstack([C, C A]) print(能观性矩阵Ob:) print(Ob) print(秩:, np.linalg.matrix_rank(Ob))算出来Ob [[1, 0], [0, 1]]秩为2完全能观。物理意义虽然只能直接测位置但位置的变化率就是速度所以从位置的时间序列也能推算出速度。但如果C [[0, 1]]只能观测速度Ob [[0, 1], [0, 0]]秩为1不能观。你只看到速度但不知道初始位置在哪——位置信息丢失了。能控和能观的对偶关系这里有个很漂亮的数学结论能控性和能观性是对偶的。具体来说系统(A, B, C)的能控性等价于对偶系统(A^T, C^T, B^T)的能观性反过来也一样。这个对偶关系不只是数学上的巧合它在工程上有实际意义。比如你要设计一个观测器从输出估计状态可以把它转化为一个状态反馈问题把输出反馈到状态估计然后利用能控性的工具来分析。这就是Luenberger观测器的设计思路后面第191篇会详细讲。面试的时候面试官问能控和能观有什么关系你就说对偶原理然后把(A,B)能控等价于(A^T,C^T)能观说出来基本就满分了。不能控/不能观怎么办实际系统中不能控或不能观的情况太常见了。怎么处理不能控的情况先做能控性分解把系统分成能控子系统和不能控子系统。不能控的部分你管不了只能确保它是稳定的。能控的部分你才能设计控制器。之前有个做无人船的团队船上有两个推进器但安装位置有偏差导致偏航方向不完全能控。他们的做法是分析出不能控的模态某个方向的偏航确保这个模态本身是稳定的水阻力会自然衰减然后只控制能控的部分。不能观的情况做能观性分解把能观的状态和不能观的状态分开。不能观的部分你没法从输出推断得靠其他手段比如加传感器、或者利用物理模型的先验知识。还有一种更常见的情况系统本身是能控能观的但你选的传感器或执行器不合理导致(C, A)或(A, B)不满秩。这时候解决方案是加传感器或执行器。很多四旋翼团队在调飞控的时候发现某个轴不稳定最后排查出来是IMU安装位置不对导致某个方向的角速度观测不到。补充一个实际踩坑的经验。之前做全向移动底盘的项目三个麦克纳姆轮各有一个电机编码器理论上三自由度完全能控。但调试时发现偏航方向响应特别差检查能控性矩阵发现某个方向的条件数特别大——不是不能控是几乎不能控。原因是轮子安装角度的加工误差导致某个方向的力臂特别短。最后解决办法是换高精度齿轮箱来减小安装角度误差同时在控制算法里对这个方向做了增益方面的补偿。这件事让我深刻理解到能控性矩阵的秩只是定性判断实际工程中还要看条件数条件数太大的话实际效果跟不能控差不多。面试实战能控能观的常见问题Q能控性矩阵不满秩意味着什么A意味着存在某些状态变量不管你施加什么控制输入都没法影响到它。这些状态是失控的你没法通过输入来改变它们的行为。Q系统不稳定但能控有没有意义A有意义。能控性跟稳定性是两回事。系统不稳定只是说明A矩阵的特征值有正实部但只要能控你就可以通过状态反馈把极点配到左半平面让系统稳定。这正是下一篇要讲的内容。Q能控性和传递函数的零点有什么关系A如果系统不能控或不能观传递函数会出现零极点对消。能控能观的系统传递函数没有零极点对消。这也是为什么传递函数会丢掉不能控/不能观的模态。Q实际工程中怎么快速判断能控性A小系统直接算能控性矩阵的秩。大系统比如状态维数超过100算秩可能数值不稳定这时候用PBH判据或者检查能控Gramian矩阵的条件数。讲真能控性能观性这个知识点面试考得最多的不是计算而是物理直觉。面试官想听你说能控意味着输入能影响所有状态而不是能控性矩阵满秩。前者说明你真懂了后者只是背了定义。小结今天聊了能控性和能观性现代控制理论最基础的两个判定。能控性回答输入能不能影响所有状态能观性回答输出能不能反映所有状态。判断方法就是构造能控/能观矩阵看秩。这两个性质决定了你能不能设计控制器和观测器。如果系统不能控你设计再好的控制器也没用。如果系统不能观你设计再好的观测器也是白搭。下一篇我们聊状态反馈与极点配置——当系统能控的时候怎么通过反馈把系统的极点放到你想要的位置让系统按你期望的方式响应。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第188篇 状态空间表示——现代控制的起点下一篇预告第190篇 状态反馈与极点配置——让系统按你想要的方式响应有任何问题欢迎评论区留言我会尽量回复。