多旋翼PID调参(手动/高级)
本主题提供有关PX4控制器以及如何调参的详细信息。
TIP
对于在悬停推力点附近对飞行器进行调参,建议使用自动调参功能,因为其方法直观、简便且快速。这满足了许多飞行器的需求。
当自动调参在悬停推力点附近调整效果不佳时(例如,飞行器在更高推力时存在非线性和振荡情况),手动调参就派上用场了。此外,深入了解基本调参的工作原理以及如何使用飞行模式(Airmode)设置,手动调参也很有帮助。
调参步骤
INFO
出于安全考虑,默认增益设置为较低值。您必须增大增益才能获得良好的控制响应。
以下是调参时需遵循的要点:
- 调整增益时,所有增益值都应缓慢增加,因为增益过大可能会引发危险的振荡!一般每次增益值的调整幅度约为20% - 30%,在获得最优增益值后,基于该最优值再下调5% - 10%。
- 在修改参数前务必先着陆。缓慢增加油门,观察是否出现振荡现象。
- 在悬停推力点附近对飞行器进行调参,并使用推力曲线参数来解决推力非线性或高推力振荡问题。
- 可选择使用SDLOG_PROFILE参数启用高速率日志记录配置文件,以便通过日志评估速率和姿态跟踪性能(之后可禁用该选项)。
WARNING
调参时务必禁用MC_AIRMODE。
角速度控制器
速率控制器是最内层的控制环,包含三个独立的PID控制器,用于控制机体的角速度(横滚、俯仰、偏航)。
INFO
一个调校良好的速率控制器非常重要,因为它会影响所有飞行模式。例如,在位置模式下,如果速率控制器调校不佳,飞行器会出现“抖动”或振荡(飞行器无法在空中完全静止悬停)。
速率控制器架构/形式
PX4在单一的“混合”实现中支持两种(数学上等效)形式的PID速率控制器:并行模式(Parallel)和标准模式(Standard)。
用户可以通过将另一种形式的比例增益设置为“1”来选择使用的形式(即在下面的图表中,对于并行模式,将K设置为1;对于标准模式,将P设置为1 - 这将用一条线替换K或P模块)。
- G(s) 表示飞行器的角速率动力学特性。
- r 是速率设定点。
- y 是机体角速率(由陀螺仪测量)。
- e 是速率设定点与测量速率之间的误差。
- u 是PID控制器的输出。
这两种形式将在后面详细介绍。
INFO
微分项(D)位于反馈路径上,以避免一种称为微分冲击的效应。
并行模式
并行模式 是最简单的形式,因此在教科书中经常使用。在这种情况下,控制器的输出只是简单地将比例项、积分项和微分项相加。
标准模式
这种形式在数学上与并行模式等效。其主要优点(尽管看似有点违反直觉)是将比例增益的调试与积分增益和微分增益分离开来。这意味着对于一个新的平台,通过使用相同尺寸/推力无人机的增益,只需简单调整K增益就更容易使其正常飞行。
角速度PID调试
调试角速度PID控制器涉及以下参数:
- 横滚速率控制(MC_ROLLRATE_P、MC_ROLLRATE_I、MC_ROLLRATE_D、MC_ROLLRATE_K)
- 俯仰速率控制(MC_PITCHRATE_P、MC_PITCHRATE_I、MC_PITCHRATE_D、MC_PITCHRATE_K)
- 偏航速率控制(MC_YAWRATE_P、MC_YAWRATE_I、MC_YAWRATE_D、MC_YAWRATE_K)
速率控制器可在特技飞行模式(Acro mode)或稳定模式(Stabilized mode)下进行调试:
特技飞行模式 更受青睐,因为它允许进行独立的速率控制测试。然而,驾驶难度会显著增加。
WARNING
如果选择此模式,您必须禁用所有摇杆指数,并为所有轴设置合理的最大速率:
MC_ACRO_EXPO
= 0,MC_ACRO_EXPO_Y
= 0,MC_ACRO_SUPEXPO
= 0,MC_ACRO_SUPEXPOY
= 0MC_ACRO_P_MAX
= 200,MC_ACRO_R_MAX
= 200MC_ACRO_Y_MAX
= 100
对于PX4 v1.15及更高版本,默认设置为此目的,所有轴的最大速率为100°/s线性映射。
稳定模式 飞行更简单,但要区分特定行为是由姿态控制器还是速率控制器引起的,则要困难得多。
如果您的飞行器根本无法起飞:
- 如果首次尝试起飞时出现强烈振荡(以至于无法起飞),降低所有的P和D增益,直至飞行器能够起飞。
- 如果对遥控器操作的反应极小,增大P增益。
在 手动模式 或 特技飞行模式 下,实际调参过程大致相同:您需要反复调试横滚和俯仰的P和D增益,然后调试I增益。一开始,横滚和俯仰可以使用相同的值,待大致调好后,在精细调试阶段可分别对横滚和俯仰进行调整(如果您的飞行器是对称的,就无需再进行精细调整)。对于偏航,过程非常相似,只是D增益可以设为0。
比例增益 (P/K)
比例增益用于最小化跟踪误差(以下我们用P来指代P或K)。它可以加快响应速度,因此应在不引发振荡的前提下尽量设高。
- 如果P增益过高:您会看到高频振荡。
- 如果P增益过低:
- 飞行器对遥控器的输入反应迟钝。
- 在 特技飞行模式 下,飞行器会漂移,您需要不断修正以保持其水平。
微分增益 (D)
D(微分)增益用于速率阻尼。同样,此值应尽量设大以避免超调。
- 如果D增益过高:电机会变得抖动(可能还会发热),因为D项会放大噪声。
- 如果D增益过低:在阶跃输入后会出现超调。
典型值如下:
- 标准模式(P = 1):对于任何K值,在0.01(4英寸竞速机)到0.04(500尺寸飞行器)之间。
- 并行模式(K = 1):根据P的值,在0.0004到0.005之间。
积分增益 (I)
I(积分)增益会记住误差。当一段时间内未达到期望速率时,I项会增加。它很重要(特别是在飞行 特技飞行模式 时),但不应设置得过高。
- 如果积分增益过高:您会看到缓慢振荡。
- 如果I增益过低:在 特技飞行模式 下测试最佳,将飞行器向一侧倾斜约45度并保持。它应该始终保持该角度。如果它漂移回来,增大I增益。在日志中,如果期望速率与实际速率在较长时间内存在偏差,也表明I增益较低。
典型值如下:
- 标准模式(P = 1):对于任何K值,在0.5(垂直起降固定翼飞机)、1(500尺寸飞行器)和8(4英寸竞速机)之间。
- 并行模式(K = 1):如果P约为0.15,在0.3到0.5之间。俯仰增益通常需要比横滚增益略高。
测试步骤
要测试当前增益,在悬停时提供快速的阶跃输入,观察飞行器的反应。它应该反应迅速,振荡和超调量都较小(有一种“锁定”的感觉)。
例如,在横滚方向上进行阶跃输入,将横滚摇杆推向一侧,然后迅速回中(注意,如果直接松手,由于摇杆的弹簧结构,它会振荡 - 调好的无人机会跟随这些振荡)。
INFO
在 特技飞行模式 下,调参良好的飞行器不会随机向一侧倾斜,即使不进行任何修正,也能保持姿态数十秒。
日志
查看日志有助于评估调参效果。以下是一份调参良好的横滚和偏航角速度日志。
以下日志中横滚角速度调试良好,其中有几个翻转动作,即非常极限的阶跃输入。您可以看到飞行器的超调量非常小:
角度控制
角度控制环控制机体的姿态角,并通过以下参数输出目标角速度:
- 横滚控制(MC_ROLL_P)
- 俯仰控制(MC_PITCH_P)
- 偏航控制(MC_YAW_P)
姿态角控制环的调试要容易得多。实际上,大多数情况下默认值就足够了,无需调整。
要调试姿态控制器,在 稳定模式 下飞行,逐步增大P增益。如果看到振荡或超调,说明增益调得过高。
以下几个参数也可调整,它们决定了绕三个轴的最大角速度:
- 最大横滚速率(MC_ROLLRATE_MAX)
- 最大俯仰速率(MC_PITCHRATE_MAX)
- 最大偏航速率(MC_YAWRATE_MAX)
推力曲线
上述调整均基于悬停油门。但当逐渐增大到满油门时,飞行器可能会再次出现振荡。
为解决此问题,可使用THR_MDL_FAC参数调整推力曲线。
INFO
如果更改此参数,可能需要重新调试速率控制器。
默认情况下,从电机控制信号(例如PWM)到预期推力的映射是线性的 - 将THR_MDL_FAC
设置为1可使其变为二次方关系。介于两者之间的值使用两者的线性插值。典型值在0.3到0.5之间。
如果您有推力测试台 (或者能够同时测量推力和电机指令),您可以确定电机控制信号与电机实际推力之间的关系,并为数据拟合一个函数。PX4中称为actuator_output
的电机指令可以是相应电调使用的PWM、Dshot、UAVCAN指令。此笔记本展示了一种如何根据先前测量的推力和PWM数据计算推力模型因子THR_MDL_FAC
的方法。此图中显示的曲线由α和k参数化,并且还以实际单位(kgf和μs)显示推力和PWM。为了简化曲线拟合问题,您可以将数据在0到1之间归一化,以找到k而无需估计α(当数据归一化时,α = 1)。
]
INFO
PWM与静态推力之间的映射在很大程度上取决于电池电压。
进行此实验的另一种方法是绘制归一化电机指令和推力值的散点图,并通过试验THR_MDL_FAC
参数迭代调整推力曲线。此处显示了该图的一个示例:
如果在实验中收集了全量程范围内的原始电机指令和推力数据,可以使用以下公式对数据进行归一化:
normalized_value = ( raw_value - min (raw_value) ) / ( max ( raw_value ) - min ( raw_value ) )
在获得归一化值的散点图后,可以尝试通过绘制以下公式使曲线匹配:
_rel_thrust = ( THR_MDL_FAC
) * rel_signal^2 + ( 1 - THR_MDL_FAC
) * rel_signal*
在0到1的归一化电机指令值的线性范围内。请注意,这是固件中用于映射推力和电机指令的公式,如THR_MDL_FAC参数参考中所示。这里,rel_thrust 是0到1之间的归一化推力值,rel_signal 是0到1之间的归一化电机指令信号值。
在上述示例中,当THR_MDL_FAC
设置为0.7时,曲线似乎拟合得最佳。
如果您没有推力测试台,也可以凭经验调整建模因子。从0.3开始,每次增加0.1。如果该值过高,在较低油门值时会开始注意到振荡。如果该值过低,在较高油门值时会注意到振荡。
Airmode与混合器饱和
速率控制器输出三个轴(横滚、俯仰和偏航)的扭矩指令以及一个标量推力值,这些需要转换为各个电机的推力指令。这一步骤称为混合。
可能会出现某个电机指令变为负值的情况,例如在低推力和大横滚指令时(类似地,它也可能超过100%)。这就是混合器饱和。除了可反转电机外,飞行器在物理上无法执行这些指令。PX4有两种模式来解决此问题:
要么通过降低横滚的指令扭矩,使电机指令均不低于零(Airmode禁用)。在极端情况下,当指令推力为零时,这意味着无法再进行姿态校正,这就是为什么此模式始终需要最小推力的原因。
要么通过增加(提升)指令推力,使电机指令均不为负(Airmode启用)。这具有很大的优势,即使在低油门或零油门时,姿态/速率也能正确跟踪。它通常会提高飞行性能。
然而,这会增加总推力,可能导致即使将油门降至零,飞行器仍继续上升的情况。对于调参良好、功能正常的飞行器,这种情况不会发生,但例如当飞行器因P调参增益过高而强烈振荡时,就可能出现这种情况