自抗扰控制(ADRC)替代PID,无人机FOC中的下一代控制算法
在无人机电机控制领域,PID控制器已经统治了数十年。它结构简单、参数直观、实现容易,几乎成了嵌入式开发的入门必修课。但随着无人机应用场景的拓展——高原巡检、重载运输、高速竞速——PID的局限性正变得越来越明显:它处理不了外部扰动带来的持续性误差,也无法适应环境变化引起的模型漂移。自抗扰控制正在从学术界走向工程界,成为FOC系统中PID的有力替代者。
ADRC的控制哲学:把扰动当成状态来观测
PID的控制逻辑基于“误差驱动”:比例项对当前误差做出反应,积分项累积历史误差来消除静差,微分项预测误差变化趋势来抑制振荡。这套逻辑在系统模型相对固定、扰动可预测的场景下工作得很好。但当外部扰动频繁变化时,PID的积分项会陷入一个两难境地——积得太慢,静差消除不及时;积得太快,超调和振荡又随之而来。
ADRC的控制哲学完全不同。它不依赖误差的累积来对抗扰动,而是直接观测扰动、实时补偿。ADRC将系统内部建模误差和外部扰动统称为“总扰动”,并将其扩张为系统的一个新状态,通过扩张状态观测器在线估计这个扰动,然后在控制律中直接减去估计值。
以一阶系统为例,系统动态可以用`dy/dt = b0*u + f(t)`描述,其中`f(t)`就是总扰动。扩张状态观测器实时估计`f(t)`的数值,控制律设计为`u = (u0 - z3)/b0`,其中`z3`是估计出的总扰动。通过这个减法,控制系统对外表现出的动态就被简化为一个纯粹的积分器串联形式,而不是原始的非线性或时变系统。换言之,ADRC先把系统“变成”好控制的样子,然后再施加控制——这是它与PID的本质区别。
从数学模型到状态方程
以四旋翼无人机的滚转通道为例,姿态动力学方程可以写为`Ixx * d²φ/dt² = τ_x + d(t)`,其中`d(t)`是外部扰动(如阵风带来的气动力矩)。将其改写成状态空间形式:
dφ/dt = ω
dω/dt = (τ_x + d(t)) / Ixx = τ_x/Ixx + d(t)/Ixx
定义`f(t) = d(t)/Ixx`为总扰动(包括未建模动态),`b0 = 1/Ixx`为控制增益的估计值,系统简化为`d²φ/dt² = b0*u + f(t)`。这正是ADRC的标准形式。扩张状态观测器以系统输出`y = φ`和输入`u = τ_x`为输入,输出三个估计状态:`z1`跟踪实际角度`φ`,`z2`跟踪角速度`ω`,`z3`跟踪总扰动`f(t)`。观测器的收敛性由观测器增益`β1`、`β2`、`β3`保证。
ADRC取代PID的三个关键优势
与传统PID相比,ADRC在电机控制中展现出三个关键优势。首先是抗扰性能的本质差异:PID依赖误差累积,扰动发生后先产生误差再积分补偿;ADRC在扰动影响系统输出前就通过ESO估计出扰动值并前馈抵消。倾转三旋翼无人机的研究表明,在外界扰动状态下采用ADRC比PID能更显著地抑制扰动影响。
其次是对模型变化的自适应能力。当电机温度升高导致绕组电阻和磁链变化时,PID需要重新整定参数;而ADRC将这种参数漂移视为总扰动的一部分,通过ESO实时补偿,无需修改控制参数。这种鲁棒性在高原低温环境下尤为重要。
第三个优势是结构统一性。无论是一阶系统(电流环)还是二阶系统(速度环、位置环),ADRC都采用相同的“TD+ESO+NLSEF”三模块架构,参数整定的方法论一致,降低了多环系统的调试复杂度。
C语言程序实现
以下是基于RoboMaster开源项目和CSDN技术博客整理的ADRC核心代码:
扩张状态观测器的C实现:**
typedef struct {
float z1; // 状态1估计值
float z2; // 状态2估计值
float z3; // 总扰动估计值
float b0; // 控制增益
float beta1, beta2, beta3; // 观测器增益
float dt; // 采样周期
} ESO_HandleTypeDef;
void ESO_Update(ESO_HandleTypeDef *eso, float y, float u) {
float e = y - eso->z1;
float fe = fal(e, 0.5f, 0.01f);
float fe1 = fal(e, 0.25f, 0.01f);
// 欧拉法离散化更新
eso->z1 += eso->dt * (eso->z2 - eso->beta1 * e);
eso->z2 += eso->dt * (eso->z3 - eso->beta2 * fe + eso->b0 * u);
eso->z3 += eso->dt * (-eso->beta3 * fe1);
}
fal函数是ADRC中的非线性环节核心:**
float fal(float e, float alpha, float delta) {
if (fabs(e) <= delta) {
return e / powf(delta, 1.0f - alpha);
} else {
return copysignf(powf(fabs(e), alpha), e);
}
}
在FOC电流环的应用中,ESO以电压指令为输入`u`、以电流反馈为输入`y`,实时估计电流环中的总扰动——包括反电动势、电感参数误差、电源电压波动等。通过总扰动补偿,电流环对外呈现为一阶惯性特性,带宽和稳定性的设计变得简洁。
落地现状与调试挑战
尽管ADRC在理论上优势明显,在工程落地中仍面临挑战。RoboMaster社区的开源项目对比测试显示,在6020云台电机的角度闭环测试中,ADRC和PID在设定值跳变后的响应前半段几乎重合,ADRC在后半段上升略快,但参数整定的复杂度和时间投入远高于PID。该项目的测试者直言:“ADRC调参时候消耗的脑细胞,换来的性能提升确实有点微乎其微。”
IEEE 2024年的四旋翼姿态控制对比研究同样验证了这一观察:ADRC响应速度快,但会引入较大的超调和振荡,而NMPC在响应速度和稳定性方面表现更优,但计算量更大。
这说明ADRC目前更适合对扰动抑制要求高、对调试时间不敏感的研发场景,而对量产产品而言,PID仍是易用性更强的选择。MATLAB/Simulink仿真模型显示,ADRC在抗干扰能力、鲁棒性方面优于PID,但计算量处于中等水平。
ADRC的未来演进
从学术趋势看,ADRC正在与模型补偿和智能优化算法结合。通过将被控对象的部分已知模型信息引入ESO的设计,可以进一步提高观测精度和系统响应速度。同时,倾转三旋翼无人机的研究表明,ADRC与列文伯格-马夸尔特参数寻优算法的结合,使姿态角扰动比传统分配算法下降约92.78%。
在无人机FOC系统中,ADRC正从“理论优越”走向“工程可靠”。它不是PID的简单替代,而是在复杂扰动环境下实现更高精度控制的关键技术路径。当你的电机在强风扰动下也能稳住姿态、在参数漂移时仍保持响应一致时,ADRC的价值就不再只是论文中的数学公式,而是真实飞行中的性能提升。





