四轴飞行器PID调参建议
在动态控制中,我们通过调整PID三个参数来获得动力,同时消除振荡,找到对你当前的飞行场景来说更优的手感。
P(Propotional)是比例的简称。
“P”单元控制着控制系统的所有动力,以达到所需的输出。如果“P”单元没有足够的输出,无人机就没有足够的动力来反馈你的控制命令;如果“P”单元输出过大,无人机就会反应过度,发生振荡。它的特点和弹簧完全一致。
简单来说,它的作用就是测量无人机当前位置与目标位置的距离。这个距离越远,就需要更大的力给掰回去。
P越大,“弹簧”越硬,回复的速度越快,震动的频率也越高。
所以一般建议设置P值较大,增强无人机的反应能力
如果闭环控制中只有P,结果就是飞机会持续无休止地振荡,这个时候就要引入D来消除振荡。
D(Differential)是微分的简称。
D就是通过微分的方法来计算运动速度。用人话来说,就是D越大在物体运动时的阻力就越大。这个阻力和物体的运动方向相反。
你可以把它想象成把振动的物体丢到液体里的过程。
D越大,液体密度越大,“物体”在运动时的阻力就越大,就能更快静止下来。
稍微加一点D,P带来的振幅会变小,无人机会更快地停在目标位置。
但如果D值过大,这个阻力会抵消回复力,让控制变得非常迟钝,整个运动过程就会显得有些油腻。
根据需求调节,一般是航拍机追求画面比较稳定,所以普遍较高。
而穿越机,最求反应迅速,考虑跟多的就是P高一点,D小一点
I(Integral)是积分的简称。
“I”单元对外界干扰或存在的系统误差进行纠正,以确保最后的输出符合预期。
飞机会不停地检测位置是否存在偏差,如果存在的偏差越大、持续时间越长,就会产生一个越大的力来矫正。
一般情况下,我们可以把I值设的高一点,使得飞行器尽快从误差值恢复到目标值
但需要注意的是,I值过大,使得飞行器恢复力过大也会产生振荡。
最后提供一个小飞机的PID作为参考,每个飞行器电机与重量都不同,所以一般而言原厂的PID参数就足够日常飞行了
void PID_ParamInit(void)
{
pidRateX.kp = 2.0f;//内环,角速度环
pidRateY.kp = 2.0f;
pidRateZ.kp = 4.0f;
pidRateX.ki = 0.0f;
pidRateY.ki = 0.0f;
pidRateZ.ki = 0.0f;
pidRateX.kd = 0.08f;
pidRateY.kd = 0.08f;
pidRateZ.kd = 0.5f;
pidPitch.kp = 7.0f;//外环,角度环
pidRoll.kp = 7.0f;
pidYaw.kp = 7.0f;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!