062、LQR在姿态控制中的应用
飞控算法从入门到精通 · 062 | LQR在姿态控制中的应用
从一次炸机说起
去年夏天,我在调试一架四旋翼的横滚通道时,遇到了一个诡异的现象:悬停时姿态稳定,但一旦给一个阶跃指令(比如快速横滚30度),飞机会先超调到40度,然后剧烈震荡两三个周期才收敛。PID参数调了整整两天,从P到D到I,甚至试了积分限幅、微分低通滤波,效果始终不理想。后来换上了LQR,第一次试飞,阶跃响应干净得像教科书里的图——超调不到5%,调节时间缩短了40%。那次之后,我彻底把姿态控制的PID方案换成了LQR。
这不是说PID不好,而是当你需要精确控制姿态、尤其是对响应速度和阻尼有严格要求的场景下,LQR的“状态反馈”思路比PID的“误差反馈”更直接、更系统。今天这篇笔记,我们就从工程落地的角度,把LQR在姿态控制里的应用拆开揉碎。
LQR到底在干什么
很多初学者一上来就被Riccati方程吓住了。其实你完全可以先把它当黑盒——给定一个系统模型(A, B矩阵),再给定两个权重矩阵Q和R,LQR会给你一个最优的反馈增益矩阵K。这个K的意义是:把当前状态x(比如角度、角速度)乘以K,得到控制量u,就能让系统在“状态偏离小”和“控制能量小”之间取得最优折中。
在姿态控制里,状态x通常是四元数或欧拉角的偏差,加上角速度偏差。控制量u是三个轴上的力矩(或者直接是电机油门差值)。LQR的任务就是:当飞机偏了,该用多大的力气、以多快的速度把它拉回来,同时不让电机转得太猛。
模型怎么建——别用太复杂的
LQR依赖线性模型
