飞控中的系统辨识:最小二乘法与递推算法
从一次炸机说起
去年夏天调试一架四轴,PID参数调了三天,悬停稳得像块石头。结果一换电池,飞机直接翻了个跟头。查了半天,发现是电机响应曲线变了——旧电池内阻大,新电池电压高,同样的PWM输出,转速差了一大截。
那一刻我意识到:飞控参数不能靠“调”,得靠“算”。系统辨识,就是让飞控自己学会认识自己的腿脚。
最小二乘法:最朴素的“猜谜”逻辑
假设你的飞机在某个轴上的动力学模型是:
y(t) = a1*y(t-1) + a2*y(t-2) + b1*u(t-1) + b2*u(t-2)y是角速度,u是PWM输入。你有一堆历史数据,想找出a1、a2、b1、b2这四个未知数。
最小二乘法的思路很直白:让模型预测值和实际值的误差平方和最小。写成矩阵形式:
Y = Φ * θθ就是我们要找的参数向量。最小二乘解是:
θ = (Φ^T * Φ)^(-1) * Φ^T * Y这个公式看起来干净,但实际用起来坑很多。
数据矩阵怎么构造?这里踩过坑
// 别这样写:直接拿原始数据堆float<