资讯详情 四旋翼轨迹跟踪:从PID到ADRC的完整控制链路与调参实战
📅 2026/10/15 8:22:08
四旋翼的轨迹跟踪绕不开PID但只抱着PID又总觉得在某些场景下差口气。调参调到怀疑人生、室外风一吹就晃、载重一变就得重新整定这些坑我基本都踩过一遍。后来接触了ADRC自抗扰控制再看之前那些让人头疼的扰动问题思路一下打开了不少。这篇我详细聊聊四旋翼从模型、PID到ADRC的完整控制链路重点放在两种控制器在轨迹跟踪上的设计差异、调参逻辑和实测对比。不管你是刚入门在做仿真、还是已经在真机上被参数折磨这篇文章应该能帮你把控制器的底层层逻辑捋清楚。适合三类人看一是正在做四旋翼建模与仿真、需要一套可落地控制方案的学生或开发者二是对PID调参有经验、但想尝试更抗扰的控制器、又不知道怎么入手的朋友三是准备做轨迹跟踪优化、需要在PID和ADRC之间做技术选型的工程师。我不会堆公式但该有的推导和参数逻辑都会给到你照着调基本能复现。1. 四旋翼模型控制设计之前先把手里的牌摸清楚很多人上来就调PID模型是什么样其实没完全搞明白导致参数换一架飞机就废、加个负载就飘。这里把模型拆开讲清楚控制在后面才会有根。1.1 坐标系定义与运动学关系四旋翼的运动我们先分两个坐标系看地面惯性坐标系和机体坐标系。地面系是NED北东地习惯比较多但为了直观做轨迹跟踪的时候用ENU东北天更符合直觉高度方向Z直接向上为正。机体系则是固连在飞机上原点在质心X轴一般朝机头方向。姿态角这里得强调一下定义横滚角滚、俯仰角、偏航角对应绕机体X、Y、Z轴旋转。旋转顺序推荐ZYX的内旋方式这和我们习惯的先偏航、再俯仰、最后横滚一致。转换到地面系的旋转矩阵不是随便写的用ZYX顺序推导的时候矩阵长这样[ R \begin{bmatrix} \cos\theta\cos\psi \sin\phi\sin\theta\cos\psi-\cos\phi\sin\psi \cos\phi\sin\theta\cos\psi\sin\phi\sin\psi \ \cos\theta\sin\psi \sin\phi\sin\theta\sin\psi\cos\phi\cos\psi \cos\phi\sin\theta\sin\psi-\sin\phi\cos\psi \ -\sin\theta \sin\phi\cos\theta \cos\phi\cos\theta \end{bmatrix} ]这个矩阵在后续做位置控制、把期望升力分解到三个轴上的时候会反复用到。一个小提醒如果你在仿真里发现姿态角超过90度这个旋转矩阵会出现奇异性四旋翼的常规飞行一般不会到这个角度但在做特技飞行动作时注意了。位置运动学的核心其实很简单地面系下的位置求导得到速度速度再求导得到加速度。但加速度的来源是机体坐标系的力和重力需要一个坐标变换把机体系的推力映射到地面系。这一步很多人都忽略了导致位置环总是调不稳。具体在下一小节说动力学的时候会接上。1.2 动力学建模与执行器模型四旋翼的动力学分两块平动和转动。平动方程由牛顿第二定律地面系下[ m\ddot{P} R \cdot F_b mg ]注意这里(F_b)是机体系的合力主要为四个电机产生的总推力方向沿机体Z轴向上。重力项单独加。展开后就是三个方向的加速度方程。写代码的时候(R)的计算一定要和姿态解算模块用同一个旋转顺序否则位置环的指令到姿态环就会打架这是个很隐蔽的坑。转动方程就用欧拉方程在机体系下[ J \dot{\Omega} -\Omega \times J\Omega \tau ](J)是惯性矩阵(\Omega)是机体角速度(\tau)为力矩。四旋翼一般对称结构所以(J)近似对角。(-\Omega \times J\Omega)这个陀螺力矩项在小角度和低速转动时不大但做高速机动时会明显ADRC能把它当作内部扰动处理掉一部分PID在这块就吃亏了。执行器部分电机转速和推力、力矩的关系基本是二次的[ T_i k_T \omega_i^2, \quad M_i k_M \omega_i^2 ]四旋翼的差速产生力矩横滚由左右电机差速俯仰由前后电机差速偏航由对角电机反扭矩差产生。这里给一套常规的混控矩阵思路[ \begin{bmatrix} U_1 \ U_2 \ U_3 \ U_4 \end{bmatrix}\begin{bmatrix} k_T k_T k_T k_T \ 0 -L k_T 0 L k_T \ -L k_T 0 L k_T 0 \ k_M -k_M k_M -k_M \end{bmatrix} \begin{bmatrix} \omega_1^2 \ \omega_2^2 \ \omega_3^2 \ \omega_4^2 \end{bmatrix} ](U_1)是总升力(U_2)到(U_4)是滚转、俯仰、偏航力矩。这样建模之后控制器出来的是(U_1)和三个力矩指令再通过混控矩阵反解出四个电机的期望转速。1.3 轨迹跟踪问题的完整控制链路拆解轨迹跟踪不是一个控制器的事而是一整条链路期望轨迹 → 位置环 → 速度环可选 → 姿态期望生成 → 姿态环 → 角速度环 → 混控 → 电机 → 机体动力学 → 位置更新。位置环输出的是期望加速度下面要把它翻译成姿态指令。方式是对水平加速度做反解[ \phi_{des} \arcsin\left(\frac{a_{y,des}}{g}\right), \quad \theta_{des} \arcsin\left(\frac{a_{x,des}}{g\cos\phi}\right) ]注意这里的加速度是水平方向的期望加速度由位置环PD控制器给出然后限制幅值避免生成过大倾角导致姿态环饱和。高度通道则是独立的位置环直接给期望升力再加前馈项把重力补偿掉。姿态环再往内就是角速度环这是整个控制系统带宽最高的地方。整个链路的带宽应该递减角速度环最高姿态环降低位置环最低。工程上常见经验值角速度环带宽约15-30 rad/s姿态环约为角速度环的1/3到1/2位置环再低5-10倍。这样设计保证了外层不会把内层激励得饱和每一层都能各司其职。2. PID控制设计经典方案的工程落地方案PID在四旋翼上依然是绝对的主力因为简单、计算量小、参数物理意义直观。但PID在四旋翼上不是孤立使用的串级结构才是关键。2.1 串级PID结构与环路分工轨迹跟踪的PID控制从上到下拆成三个层次位置环外环输入期望位置输出期望姿态角。一般只用P和DI用得少或者不用因为积分容易导致超调和震荡而且有风扰动时用ADRC或者前馈补偿更合适。姿态环中环输入期望姿态角输出期望角速度。一般用P可加少量D用于改善动态响应。角速度环内环输入期望角速度输出力矩指令。用PID完整形式I项在这里很有用它负责消除重力偏移、电机转速不一致、重心偏移等造成的稳态误差。为什么不用单环直接位置控到电机原因在于四旋翼是一个典型的欠驱动、强耦合系统姿态响应的动态特性直接决定了外环能推多快。串级之后内环先把姿态角速率稳定住外环才能放心地根据位置误差去指挥姿态变化。如果单环去做位置误差直接给电机指令姿态动态的延迟和超调全都会叠加到位置响应上调试难度和损伤风险都会明显增大。以高度通道为例一个简单的串级结构可以描述为位置环高度Z(a_{z,des} k_{p,z}(z_{des} - z) k_{d,z}(\dot{z}_{des} - \dot{z}) g)姿态环推力到升力(F_{des} m \cdot a_{z,des})角速度环以及混控把期望升力分配到各电机。位置环输出加速度不需要做限幅必须限幅而且应该和飞行器的物理能力匹配。比如一架最大倾角30度的四旋翼水平加速度上限大约就是(g \times \tan(30°) ≈ 5.66 m/s²)。这个限幅也是保护内环不饱和的第一道防线。2.2 PID参数整定的工程方法与经验值PID参数整定我推荐的顺序是由内到外、先P后D、最后加I。每个环节都有具体的手感信号不要盲目自动调参先用阶跃响应去观察曲线。第一步整定角速度环把期望角速度设成阶跃信号从小P开始比如0.05逐步加大P直到角速度响应开始出现低频振荡回调15%-20%再加入少量I消除稳态误差。角速度环的D项一般不加或者加很小因为角速度反馈本身已经有微分作用再加D容易放大噪声。第二步整定姿态环在角速度环闭环稳定后姿态环P从0.5开始角度单位用弧度逐步增加观察姿态角跟踪是否出现超调和振荡。如果角速度环噪声偏大姿态环D项可以从0.01加入做阻尼但大部分情况不需要。第三步整定位置环位置环P从0.5开始加D项位置环一定要加否则会来回穿越目标点表现为点头式的反复震荡。位置环D项本质上是阻尼对速度进行反馈实测在Pixhawk级别的飞控上位置环D项取P项的0.2-0.5倍效果比较靠谱。给一组常规参数作为参考起点单位统一为国际单位制角速度为弧度/秒环路P初值I初值D初值注释角速度环0.05-0.150.005-0.020先不加D避免噪声姿态环0.5-2.000.01-0.05以P为主I看需要位置环0.5-1.500.1-0.5D项是位置环的灵魂高度通道的P比水平通道要大一点因为Z轴不需要通过倾角来产生加速度直接推力就能响应带宽天生可以更高。2.3 PID控制器的局限性与典型痛点先说最典型的痛点扰动抑制能力有限。四旋翼在室外飞行时风是一个持续、时变、空间分布不均的扰动。PID的I项虽然能消除稳态误差但I项的响应是滞后的等风把飞机吹偏了一段距离之后积分才开始慢慢纠正这期间的偏航误差已经造成了轨迹偏移。想用大I去压制风的扰动又会带来积分饱和、超调、低频振荡。这个矛盾本质上是PID结构决定的用参数调可以缓解但很难根治。第二个痛点是模型变化后的脆弱性。载重变了、电池电压变了、甚至桨叶磨损一点都会让系统增益变化。PID参数是为一个工作点整定的一旦工作点变了性能就随之下降。对做产品的团队来说这意味着每换一个负载配置都要重新整定一次参数成本很高。第三个痛点是姿态解算延迟对PID的放大效应。姿态环输出角速度期望角速度环PID对姿态解算的延迟非常敏感。如果滤波加得太重、控制频率又不高比如低于200Hz很容易在内环产生极限环振荡飞机表现为高频抖舵PID在这种情况下几乎无解——只能靠把环路截止频率降下来缓解但性能也跟着下来了。我在实际调试中的体会是PID像一把极其可靠的标准工具箱里的扳手大多数螺丝它都能拧但对会动的螺丝时变扰动、尺寸变的螺丝模型变化就力不从心。这也是我后来花大力气去研究ADRC的根本原因。3. ADRC控制设计把扰动当作状态来处理ADRC的出现本质上是在回答一个工程问题扰动不知道、模型不精确能不能在控制的过程中把它估出来然后干掉答案是能ADRC的核心就是扩张状态观测器ESO。3.1 ADRC的核心思想与结构拆解ADRC把被控对象在这里是四旋翼的姿态或位置通道看成一个串联积分器总扰动的结构。以滚转通道为例把模型写成[ \ddot{\phi} f(\phi, \dot{\phi}, w, t) b \tau_\phi ](f)代表所有模型未知项、内部耦合、外部风扰动等一切不确定动态叫做总扰动。(b)是控制增益由我们手动给出。ADRC的思路是用ESO把状态(x_1\phi)、(x_2\dot{\phi})和扩张出来的总扰动(x_3f)一起观测出来然后在控制量里减去对总扰动的估计把系统还原成一个纯双积分器再用简单的PD控制去锁定。ADRC的三个核心组件如下跟踪微分器TD安排过渡过程和提取微分信号能有效减小超调。扩张状态观测器ESO实时估计状态和总扰动是ADRC的眼睛。非线性误差反馈NLSEF构造控制律一般用PD结合扰动补偿。实际工程中TD在那里可有可无——如果你目标是最大化抗扰性能ESO决定了下限TD只是把目标轨迹柔化一下。我的建议是前期的位置环加TD让轨迹更平顺但姿态环往往不加TD因为姿态环需要极点响应快TD反而会让响应变慢。3.2 ESO的设计原理与参数对应关系ESO的设计核心是把总扰动当作第三个状态然后构建观测器。连续形式的ESO对这样一个系统[ \dot{x}_1 x_2 ] [ \dot{x}_2 x_3 b u ] [ \dot{x}_3 \dot{f}未知有界 ]观测器方程线性形式为[ \dot{\hat{x}}_1 \hat{x}_2 l_1(x_1 - \hat{x}_1) ] [ \dot{\hat{x}}_2 \hat{x}_3 b u l_2(x_1 - \hat{x}_1) ] [ \dot{\hat{x}}_3 l_3(x_1 - \hat{x}_1) ]观测器增益(l_1,l_2,l_3)的选择工程上最常用的方法是基于带宽概念将观测器特征方程配到((s\omega_o)^3)的形式[ l_1 3\omega_o, \quad l_2 3\omega_o^2, \quad l_3 \omega_o^3 ](\omega_o)就是观测器带宽。这个带宽是ADRC里最核心的旋钮带宽越大对扰动的估计越快越准但同时放大了传感器噪声。这本质上是一个噪声和响应速度的权衡。ESO的离散化也很关键。我的习惯是直接用前向欧拉法控制频率500Hz-1kHz时离散形式如下# 以滚转通道角度phi_deg为例简化版 phi, phi_dot, disturbance state_est # 离散ESO更新前向欧拉 phi_est_dot phi_dot_est l1 * (phi_measured - phi_est) phi_dot_est_dot disturbance_est b0 * u l2 * (phi_measured - phi_est) disturbance_est_dot l3 * (phi_measured - phi_est) phi_est phi_est_dot * dt phi_dot_est phi_dot_est_dot * dt disturbance_est disturbance_est_dot * dt注意这里(b0)是b的估计它不需要精确ADRC的鲁棒性在于(b0)偏差造成的未建模动态会被ESO当作总扰动的一部分去估计并补偿。但(b0)差太远会导致观测器对控制输入的敏感度不准扰动观测相位滞后严重。实测经验是(b0)偏差在±30%以内控制性能基本不会显著恶化。3.3 ADRC控制律与扰动补偿环节ADRC的控制律不太复杂。先用PD反馈算出基准控制量[ u_0 k_p (r - \hat{x}_1) - k_d \hat{x}_2 ]然后减去扰动补偿项[ u \frac{u_0 - \hat{x}_3}{b0} ]这样处理后系统的闭环动态就被校正成了[ \ddot{x}_1 ≈ (u_0 - \hat{x}_3 f)/b \cdot b0 u_0 ... ]当观测准确、(\hat{x}_3 ≈ f)、(b0 ≈ b)时系统就变成一个纯双积分器PD控制器的极点可以随意配置而且几乎不受原模型影响。这是ADRC在四旋翼上表现优于PID的根本逻辑——它不是在调扰动而是在观测并消除扰动。增益(k_p)、(k_d)的选择控制器带宽(\omega_c)确定后用极点配置[ k_p \omega_c^2, \quad k_d 2\omega_c ]这样ESO带宽(\omega_o)一般取控制器带宽(\omega_c)的3-5倍。如果传感器噪声太大可以缩小这个倍数比如3倍如果扰动很强而噪声可控放大到7倍甚至10倍也可以。一个具体量化感受纯PD补偿后系统变成了标准化二阶系统阻尼为1时临界阻尼没有任何超调。你不再需要像调PID那样去挪零点调阻尼只需要确定一个带宽就行。对Do工程师来说这个心智模型的简化是巨大的。3.4 四旋翼分通道应用ADRC的架构设计四旋翼的ADRC不必所有通道都上最推荐的做法是姿态角和角速度内环用ADRC位置外环用PID或者带前馈的相对简单控制。为什么因为姿态内环是抗扰最关键的层级外部风产生的力矩扰动要在这里被处理掉而位置外环的扰动主要是重力残差和加速度计噪声叠加ADRC的优势不如内环明显。如果要做全通道ADRC可以给每个通道滚转姿态、俯仰姿态、偏航姿态、高度各设计一个一维ADRC因为四旋翼的三个姿态通道在控制层面可以解耦处理前提是小角度假设或者做好倾角补偿。姿态环ADRC的输入是期望姿态角输出是期望角速度角速度环ADRC的输入是期望角速度输出是力矩指令。这样两个ADRC级联内环的ESO会帮外环把大部分扰动都消化了。位置环则建议保留PID因为位置环的动态主要受轨迹规划限制过强的抗扰调节反而会让机体对轨迹的小波动反应过度造成抖的感受。高度通道的ADRC特别值得单独说说。四旋翼的垂直通道受地面效应、桨叶气流、电池电压下降导致的推力衰减等影响很大。用ADRC后ESO很轻松就能把推力衰减和额外重力估计出来并补偿掉高度保持的平稳性大幅提升。实测中我最直观的感受是油门中位在不同电量之间自动被ADRC跟踪住了不再需要手动调节。4. 仿真对比与轨迹跟踪实现细节在这里给一套可以直接跑的仿真框架思路和对比结果偏向实际工程的实现细节。不必强求用某一个仿真器重要的是搞清楚怎么把控制器嵌入到模型里。4.1 仿真环境搭建与模型接入仿真不需要高深的工具用常规的数值计算环境就能完成。模型的输入是四个电机的转速指令输出是位置、速度、姿态、角速度。常规做法是# 简化主循环结构 state init_state() for t in np.arange(0, T, dt): # 1. 规划期望轨迹 pos_des, vel_des trajectory_generator(t) # 2. 位置环PID为例输出期望姿态角 a_des pid_position(pos_des, state.pos, vel_des, state.vel) phi_des, theta_des acceleration_to_attitude(a_des) psi_des 0.0 # 或指定偏航 # 3. 姿态环PID或ADRC输出期望角速度 p_des attitude_pid(phi_des, state.phi, ...) q_des attitude_pid(theta_des, state.theta, ...) r_des attitude_pid(psi_des, state.psi, ...) # 4. 角速度环PID或ADRC输出力矩 tau_phi rate_pid(p_des, state.p, ...) tau_theta rate_pid(q_des, state.q, ...) tau_psi rate_pid(r_des, state.r, ...) # 5. 混控 电机动态 刚体动力学更新 throttle, motor_cmds mixer(U1_des, tau) state update_dynamics(state, motor_cmds, dt)在这个架构里把姿态环和角速度环的控制器从PID替换成ADRC只需要关注每个通道的输入输出接口不要变。这样位置的对比才公平改的是内环外环逻辑不变。4.2 PID与ADRC在轨迹跟踪上的效果对比我跑过一个矩形螺旋爬升的轨迹跟踪任务对比两种控制器的表现先看无扰动情况。PID串级和ADRC都能完成轨迹跟踪但差异已经显现。PID在转弯处有一定的超调尤其在矩形角落会发现轨迹圆角化得比较明显ADRC由于有TD的过渡过程柔化轨迹贴合更紧拐角处的过冲明显更小RMS轨迹误差约低30%-50%。再看有风扰动情况模拟阵风叠加一个持续侧向风。PID的表现是稳态偏航距离约0.3-0.5米取决于风力和参数轨迹出现明显的顺风漂移后慢慢纠正。ADRC则因为ESO快速估计出侧风的等效力在同样条件下稳态误差仅为0.1米左右动态最大偏差也小一半以上。最惊艳的是高度通道在有气压计噪声时ADRC的高度保持波动幅度明显低于PID。最后看模型参数失配情况把模型质量增加20%但控制器参数不变。PID的轨迹跟踪误差明显变大尤其在水平加速段会延迟响应ADRC因为ESO把模型变化当成扰动实时估计性能衰减很小RMS误差基本保持在同一数量级。对比项PID串级ADRC无扰动轨迹误差基准小降低30%-50%风扰动下稳态误差基准较大降低60%-80%质量失配20%后误差显著上升误差小幅上升高频噪声敏感度较低需调整观测器带宽调参难度参数多关联性强带宽原则逻辑清晰计算资源很低略高但远未到压力4.3 实现细节从仿真到半物理的过渡要点仿真里跑通之后上真机前建议做一次模型在环测试如果环境支持把控制器跑在实飞控制器上模型跑在仿真器里。这个环节能发现很多纯数值仿真发现不了的问题控制频率能不能稳定达到预设值记录数据是否完整限幅保护是否生效把控制器移植到真机时下面几个点是我踩过的坑第一控制频率一致性。仿真里我用固定步长积分没问题真机上要确认内环控制频率确实能达到500Hz以上。如果达不到ESO的离散化误差会变大观测扰动相位滞后加剧轻则性能下降重则发散。第二传感器噪声模型要真实。仿真中如果给角度测量加上3-5毫弧度的白噪声约0.2-0.3度ESO的带宽就要从(\omega_c)的7倍降到4-5倍否则角速度估计的噪声会被放大到肉眼可见的抖舵程度。仿真时不要过度忽略噪声不然真机表现会让你措手不及。第三执行器限幅和延时不可忽略。电机的响应不是瞬时的有约20-30ms的时延尤其在大信号变化时电机转速变化还有速率限制。ADRC的ESO会把执行器动态部分当作扰动去估计但如果执行器饱和了ESO的补偿会失真控制器输出积分项继续增大极端情况下会导致积分饱和式的失控。所以控制量限幅一定要跟实际执行器能力匹配而且要在饱和时冻结积分器或观测器修正。5. 常见问题与调试经验记录调试ADRC和PID的过程中我积累了一些非常具体的排错经验每一步都是实打实从波形图上总结出来的。5.1 ADRC调试中的震荡问题排查ADRC最常出现的故障是持续的等幅振荡频率较高5-10Hz伴随电机声音发闷。先看是否由观测器带宽过大引起将(\omega_o)降为原来的1.5-2倍振荡若消失或明显减弱就是观测器带宽过大、放大噪声所致。如果振荡频率较低1-3Hz且幅度周期变化大概率是(b0)设置过小导致控制增益被ESO过度补偿形成极限环。试着把(b0)增大20-30%看振荡周期是否拉长、幅度是否减小。还有一种振荡只在轨迹跟踪中出现在特定方向——这时候检查加速度反解的姿态角是否与姿态环的期望方向一致。四旋翼的横滚角和俯仰角的控制方向与位置环反解出来的(\phi_{des})、(\theta_{des})在符号上是否配对了我遇到过一次某个轴的姿态角反馈符号反了外环看起来正常但内环稳定之后飞机表现为缓慢螺旋漂移很难判断。5.2 ESO带宽与传感器噪声的矛盾处理这是一个天然矛盾带宽低了扰动估计滞后带宽高了噪声放大。给一套实操化的处理套路先评估传感器的噪声水平。观察姿态角在悬停时的标准差如果超过0.5度说明噪声偏大。设置(\omega_c 5)初始(\omega_o 3\omega_c 15)跑一次悬停看角速度估计的噪声。缓慢加大(\omega_o)每次增加20%观察两个指标轨迹跟踪误差是否持续下降角速度估计噪声是否明显上升。取二者平衡的拐点位置。如果中值滤波后角速度噪声还是大优先考虑引入低通滤波到控制量前馈通路而不是压缩带宽。实测下来大多数四旋翼载具的(\omega_o/\omega_c)比值落在3到5之间飞控传感器质量较好、结构刚度较高的可以逼近6。超过6以后我几乎每次都能看到尾迹抖动的迹象。5.3 真机飞行中的安全兜底策略无论用PID还是ADRC真机飞行必须设计好安全兜底策略这是经验而不是选项。第一层保护控制量限幅。姿态环路输出的力矩指令需要限幅防止奇异机动。第二层保护观测器冻结。当姿态角超过设定阈值比如45度暂停ESO更新防止大角度下模型线性化失效导致观测器发散。第三层保护遥控器切换通道。在遥控器上设置一个开关能在PID和ADRC之间切换切换时做好控制器状态重置否则从ADRC切到PID积分项可能有累积初始值导致瞬间跳变。关于切换的细节务必加过渡斜坡或切换瞬间重置积分器逻辑。我在一次试飞中直接用开关切换ADRC的补偿项瞬间从某个值归零飞机直接一个猛点头侧翻还好高度低只伤了一个桨。之后我在切换逻辑里加了1秒的斜坡过渡把扰动补偿量逐渐降到零再切换PID路径一切就平顺了。5.4 参数备份与回归测试的好习惯控制器参数和飞行数据是高度耦合的调参过程必须做版本管理。我的做法是为每次调参建立一个独立配置命名空间统一记录以下信息期望轨迹类型、质量配置电池、载荷、(\omega_c)、(\omega_o)、(b0)、PID各环节的增益。飞行后进行RMS误差统计输出到统一的记录表里。这样做的最大好处是能快速回溯环境同样、任务同样、参数有差异时问题出在哪个环节一目了然。很多算法团队明明某个参数在仿真里更优实飞却表现不佳就是因为没有把环境因子风速、气压、温度一并记录。我在风洞条件下测试时发现温度变化会改变空气密度从而影响推力系数这个效应在ESO里会被当作扰动吃掉导致扰动观测值异常偏大但控制性能实际没差。如果不记录环境光看控制量去调参就会误入歧途。6. 轨迹跟踪控制中的实操经验总结与扩展思路做四旋翼控制这些年踩过的坑很多从仿真到真机的转换是最大的一道门槛。如果你之前没有上过真机先别急着追求高分论文里的复杂算法。我的建议是先把PID串级调到一个接近极限的状态记录好它的性能边界在哪里再去尝试ADRC。这样两者的对比才客观你才清楚新算法带来的收益是否值得那部分改造工作量。具体来说一个比较推荐的顺序是仿真里把PID和ADRC都测熟明白各自的参数调节手感然后真机上先跑一套完整的PID轨迹跟踪记录标准轨迹的RMS误差和最大偏离量之后再换成ADRC在同样的期望轨迹和同样的环境条件下对比。不要一次换两个变量——既换算法又换轨迹出了问题你根本没法定位。关于ADRC的参数上手值如果参考系统跟上面说的一致质量约1kg、力臂约0.25m姿态内环的(b0)可以取1.5左右位置环的(b0)取1.0左右然后根据实际推力模型反推微调。关键验证方法给一个快速期望姿态阶跃观察响应曲线如果第一个超调很大说明干扰补偿过强请降低(b0)如果响应迟缓且稳态误差迟迟不收敛说明扰动估计滞后需要增大(\omega_o)。最后分享一个让轨迹跟踪质感提升明显的小技巧在期望轨迹输入端加上二阶参考模型或者TD让期望位置信号平滑过渡。这个前端的平滑处理让位置环的微分项不会因为轨迹跳变产生尖峰也就不会激励姿态内环的瞬态响应。在同样的参数条件下仅加这一步跟踪超调就能减小近一半。很多人把精力全花在控制算法上却忽略了参考轨迹的整形这在工程上是划算的手段。如果你准备更进一步可以从这个方向扩展把ESO估计出来的总扰动信号记录下来就能得到整个飞行过程的扰动估计曲线——这个信号对分析飞行器健康状况、结构振动、甚至电机性能衰减都很有价值。ADRC的意义不只是控制性能提升它还给了一层观测的能力让你真正看到飞机在这场飞行中经历了什么。这是我个人认为ADRC比PID更吸引人的地方。