074、位置控制:水平位置PID设计 飞控算法从入门到精通 · 074 · 位置控制:水平位置PID设计从一次炸机说起去年夏天,我在调试一架四轴植保机。GPS信号良好,磁罗盘校准通过,EKF收敛正常。切到定高+定点模式,飞机悬停——前30秒稳得像钉在天上。然后,它开始慢慢往东飘,我打杆修正,它回来一点,又飘回去。再然后,一阵侧风过来,飞机直接往西冲了5米,我还没来得及切回增稳,它已经撞上了机库的铁皮墙。事后分析日志,发现水平位置环的PID输出在风扰下出现了明显的积分饱和,而且比例项对位置偏差的响应太慢——因为我把P设得太小,怕超调。更致命的是,位置环的输出直接限幅到了姿态角的最大值,导致风大时姿态环根本来不及响应。那次之后,我重新审视了水平位置控制的设计。今天这篇笔记,就聊聊我踩过的坑和最终沉淀下来的做法。位置控制到底在控什么很多人把位置控制想得太复杂。其实,对于多旋翼来说,水平位置控制本质上就是“用姿态角去追位置误差”。你希望飞机往北飞1米,那就让飞机向北倾斜一个角度,产生向北的加速度分量,从而产生向北的速度,最终消除位置偏差。所以位置控制环的输入是期望位置和实际位置的偏差(单位:米),输出是期望的横滚角和俯仰角(单位:弧度或度)。这个输出会喂给内层的姿态环。这里有一个关键点:位置环的输出是角度,不是角速度,也不是推力。如果你把位置环的输出直接当成角速度给内环,飞机会非常贼,而且容易震荡。我见过有人这么干,结果飞机像抽风一样来回晃。经典PID结构,但参数意义完全不同