尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

第191篇 状态观测器——测不到的状态量怎么估计

第191篇 状态观测器——测不到的状态量怎么估计 上篇讲了状态反馈和极点配置核心思路是用u -K*x把所有状态反馈回来通过选择K把极点放到想要的位置。但有个前提你得知道所有状态。现实情况是传感器又贵又有噪声。一个六自由度机械臂关节角度可以用电编码器测关节速度呢直接微分角度信号噪声太大。关节力矩呢得力矩传感器一个就好几千。你不可能给每个状态变量都装一个传感器。那怎么办用能测到的量结合系统的数学模型把测不到的量算出来。这就是状态观测器干的事。状态观测器在机器人领域太重要了。卡尔曼滤波本质上就是个观测器SLAM里的状态估计、无人机的高度估计、机械臂的力估计背后都有观测器的思想。面试的时候观测器设计和极点配置是一对必考题。全维观测器把整个系统复制一遍最简单的观测器叫Luenberger观测器也叫全维观测器。思路特别直白你在计算机里建一个系统的副本让它跟着真实系统跑。dx_hat/dt A*x_hat B*u L*(y - C*x_hat)x_hat是状态的估计值。前两项Ax_hat Bu就是你的系统模型在预测状态怎么变化。关键是第三项L*(y - Cx_hat)——这是用实际测量值y和估计输出Cx_hat的差来修正估计。L是观测器增益矩阵决定了我多相信测量值。如果L选得好估计误差e x - x_hat会快速收敛到零。把估计误差的动力学推导一下de/dt (A - L*C)*e看到了吗估计误差的 dynamics 由矩阵(A - LC)决定。只要(A - LC)的特征值都在左半平面误差就会指数衰减到零。这跟状态反馈的形式(A - BK)是不是很像没错这就是对偶关系的体现。设计观测器增益L本质上就是一个极点配置问题只不过配的是(A - LC)的极点。import numpy as np from scipy.signal import place_poles # 系统矩阵 A np.array([[0, 1], [-2, -3]]) B np.array([[0], [1]]) C np.array([[1, 0]]) # 只能测位置 # 设计观测器用对偶原理 # (A, C)的能观性等价于(A^T, C^T)的能控性 # 所以用place_poles配(A^T, C^T)的极点得到L^T desired_observer_poles [-10, -10] # 观测器极点比控制器快5倍 result place_poles(A.T, C.T, desired_observer_poles) L_T result.gain_matrix L L_T.T print(观测器增益L:, L) # 验证 eigenvalues np.linalg.eigvals(A - L C) print(观测器误差极点:, eigenvalues)注意观测器极点一般要比控制器极点快3-5倍。为什么因为观测器需要快速收敛——如果观测器收敛太慢控制器拿到的状态估计不准整个闭环系统的性能就差了。但也不能太快否则测量噪声会被放大。工程上一般取控制器极点的3-5倍。降维观测器只估计测不到的那些状态全维观测器估计所有状态。但你想想有些状态你本来就能直接测量何必再估计一遍降维观测器的思路就是能测的状态直接用测量值只估计那些测不到的状态。假设系统有n个状态、m个输出且输出直接就是某几个状态的测量值。那你只需要估计(n-m)个状态观测器的维数从n降到(n-m)。降维观测器在实际工程中用得很多。比如机械臂控制中关节角度有编码器可以直接测但关节速度需要估计。这时候你只需要一个一维的降维观测器来估计速度而不是用全维观测器把所有状态都重新估计一遍。降维观测器的设计稍微复杂一些因为估计方程里会包含测量值的微分。工程上为了避免微分噪声通常会做一些变换来消除这个项。面试的时候降维观测器考得不多但如果你能主动提出来面试官会觉得你理解很深。实际项目中降维观测器用得比全维观测器更普遍。道理很简单——能直接测的量就别浪费算力去估计。一个四旋翼飞控姿态用IMU直接测了你只需要估计加速度或者外力扰动降维观测器完全够用。观测器在机器人中的实际应用讲几个实际场景帮你建立直觉。无人机高度估计。无人机上有气压计测高度、IMU测加速度。气压计有漂移IMU有积分误差。单独用哪个都不准。用观测器把两者融合气压计提供长期准确的绝对高度IMU提供短期精确的高度变化率。观测器融合两者得到比任何单一传感器都准的高度估计。这个场景其实就是卡尔曼滤波的经典应用。状态向量是[高度, 垂直速度]气压计测量高度但有慢漂移IMU的加速度做积分得到速度。观测器卡尔曼滤波自动平衡两者的可信度短期更相信IMU响应快长期更相信气压计不漂移。机械臂速度估计。编码器测关节角度采样周期内做差分得到速度。但差分会放大量化噪声尤其在低速时噪声很大。用观测器从角度测量估计速度可以在不引入噪声放大的前提下得到平滑的速度估计。很多开源机械臂固件里就是这么做的。无传感器控制。有些场景下你连传感器都没有。比如低成本无人车用反电动势观测器来估计电机转速完全不用编码器。PMSM无传感器控制就是这个思路——用电压电流的观测器反推转子位置和速度。再讲一个调试观测器收敛性的真实案例。之前帮一个无人机团队调高度观测器气压计和IMU数据融合用Luenberger观测器。仿真里观测器误差50毫秒就收敛到零了但实物上发现初始几秒高度估计值跳动非常厉害。排查发现两个问题一是气压计数据有高频振动噪声电机振动通过机架传导到传感器观测器增益太大把噪声放大了二是初始时刻气压计读数和真实高度有个固定偏差开机时的大气压校准没完成观测器需要时间来消除这个初始误差。最后解决方案是加了个低通滤波预处理气压计数据同时观测器增益分阶段调整——前2秒用较小增益让估计值慢慢收敛之后切到正常增益。这个经验说明观测器设计不能只看理论收敛速度还要考虑噪声抑制和初始过渡过程。面试实战观测器常见问题Q观测器和卡尔曼滤波有什么区别ALuenberger观测器是确定性的不考虑噪声。卡尔曼滤波是随机性的假设过程噪声和测量噪声都是高斯白噪声在最小均方误差意义下最优。简单说卡尔曼滤波是最优的Luenberger观测器。Q观测器增益L怎么选A经典方法是极点配置把(A-LC)的极点放到期望位置。工程上观测器极点比控制器极点快3-5倍。如果用卡尔曼滤波L是通过解Riccati方程自动算出来的不需要手动选极点。Q观测器的初始误差会影响稳定性吗A不会。只要(A-LC)稳定初始误差会指数衰减。衰减速度取决于观测器极点的实部。极点越左衰减越快。Q分离原理在实际中有什么限制A分离原理假设系统是线性的、没有约束。实际系统中如果有执行器饱和、状态约束等非线性因素分离原理就不严格成立了。这时候需要更复杂的分析工具。讲真观测器这个知识点面试最爱问的是观测器和卡尔曼滤波的关系。你要能说清楚Luenberger观测器是确定性框架、卡尔曼是随机性框架卡尔曼的增益是自动算出来的而不是手动配的面试官就会觉得你是真懂了。小结今天聊了状态观测器。核心思想是用系统模型和可测量的输出估计那些测不到的状态。Luenberger观测器是最基本的形式通过观测器增益L把估计误差的极点配到期望位置。观测器解决了状态反馈需要知道所有状态的局限。把观测器和状态反馈组合起来就是所谓的基于观测器的状态反馈控制分离原理保证两者可以独立设计。下一篇我们聊LQR最优控制——不再手动选极点而是通过最小化一个代价函数让计算机自动算出最优的反馈增益。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第190篇 状态反馈与极点配置——让系统按你想要的方式响应下一篇预告第192篇 LQR最优控制——代价函数设计和Riccati方程求解有任何问题欢迎评论区留言我会尽量回复。
返回列表