前言
上一讲无人机飞控姿态调参中我们对姿态控制的一般调参方法进行了详细说明,今天笔者以PX4为例跟大家聊一聊姿态控制的一些高级功能。
由于PID控制器是基于误差反馈的线性控制器,所以一旦无人机的运动超出PID参数适用的线性化范围,其控制性能就会显著下降,甚至会出现发散的后果。
所以我们之前在悬停状态下调试的PID参数在总距(油门)位置很高或者很低的时候就有可能出现不适用的情况。
当然,并不是说所有的飞行器都会出现这个情况,这个跟很多因素有关,比如飞行器的构型,电机的性能,PID参数的裕度,飞行器当时的飞行状态、外界风场等等,笔者在之前的飞行测试中就出现过此类情况。
那遇到此类情况时应该怎么办呢?
笔者这里有三种方法可以解决此类问题:
第一种方法就是调试PID参数,使它们有更好的适应范围,这种方法比较低端,也会带来很多工作量,效果也不一定很好。
第二种方法是建立非线性模型,引入部分较为准确的非线性模型来消除模型非线性带来的影响,这种方法也是控制领域实际应用最为广泛的方法,先设计一个线性控制器,然后再把能够较为准确建模的非线性部分引入控制当中,其往往能够比单纯的线性控制器达到更好的控制效果。
第三种方法就是根据不同的飞行状态设定不同的PID参数。
接下来笔者先来谈一下为什么总距(油门)在低位和高位时会出现此类情况呢?这是因为单个电机带动桨叶旋转产生的升力跟转速基本是呈平方关系,而转速跟电机PWM输入的关系是非线性的,具体是什么关系跟电机性能以及负载相关,笔者只知道是正相关的。
所以如果将姿态控制的输出解耦后直接对应每个电机的PWM输入就会出现总距(油门)在悬停附近时调好的PID参数无法在高油门或者低油门时展现很好的飞行性能。
总距曲线
所以在PX4中对总距(油门)和PWM的关系进行了建模。其模型是这样的:
其中,k是可调的参数。那已知姿态控制器的输出,也就是单个电机的期望油门时,PWM输出就是解上述的二元一次方程,其结果是这样的:
在代码中的实现形式如下图所示:
图中_thrust_factor对应的参数为THR_MDL_FAC,这个参数具体是多少合适,笔者也不知道,但经验数据显示一般在0.3-0.5之间,调试的人可以从0.3开始测试,每次加0.1。如果参数过大,那么在低总距(油门)时,飞行器会出现震荡现象。
在不同的参数下,升力和PWM的对应升力曲线如下:
如果有条件的话,可以采购电机测试设备对曲线进行标定,这样的话得出的参数会更加准确。
在这提醒一下,如果你改变了升力曲线的参数,那姿态环的控制参数也应该重新调试,因为油门到PWM输出的这一环也是跟姿态控制器呈串级关系的,此环节参数的改变也会影响到姿态环的控制。
油门PID衰减(TPA)
第三种方法是根据不同的总距(油门)输出值,确定不同的PID参数,PX4中称为油门PID衰减(Throttle PID Attenuation(TPA)),也就是说姿态环的参数在总距大于某个设定值(Breakpoint)时会随着总距的增加会线性的减小。
具体的PID参数随总距(油门)衰减的曲线图如下所示:
大家可能会疑惑为什么是减小呢?这是跟我们上面提到的升力曲线模型有关的,看上面升力曲线的图我们可以得到PWM越大,升力越大时,曲线的斜率也是越大的,也就是说,在总距(油门)越大时,改变同等大小的PWM产生的升力变化是越大的,所以这时候使用较小的PID参数比较合适。
PX4中跟TPA相关的参数有六个:
MC_TPA_BREAK_P:P参数开始衰减的设定值;
MC_TPA_BREAK_I:I参数开始衰减的设定值;
MC_TPA_BREAK_D:D参数开始衰减的设定值;
MC_TPA_RATE_P:P参数衰减的斜率;
MC_TPA_RATE_I:I参数衰减的斜率;
MC_TPA_RATE_D:D参数衰减的斜率;
TPA这个功能能不用就尽量不用,因为使用升力曲线已经可以达到比较好的效果,而TPA在高油门时线性减小PID参数达到的效果不一定比设置一个合适的升力曲线要好。
有兴趣的读者可以自己去分别使用两种方法进行调试后观察一下效果。
控制饱和
控制律输出的总距(油门)、滚转、俯仰、偏航四个通道值经过混控器转换成单个电机的油门值。
关于这个转换过程,我们有时间会单独描述。当总距(油门)接近0时,单个电机的油门值很容易就成为负值;而当总距(油门)值接近1时,单个电机的油门值很容易超过1;这里我们对油门的输出范围进行了归一化,便于运算。
也就是说,当总距靠近两头的时候,因为滚转、俯仰、偏航三个通道的控制就会引起电机饱和现象,这就会导致飞行器丧失滚转、俯仰、偏航的控制能力。
PX4中为此设计了两种模式。是保大还是保小,你们自己来决定。
优先保证总距(油门)通道控制还是俯仰、滚转、偏航控制,由参数MC_AIRMODE来决定,该参数为0时优先保证总距(油门)通道控制,该参数为1时优先保证俯仰和滚转通道控制,该参数为2时优先保证俯仰、滚转、偏航通道控制。
当优先保证总距(油门)通道控制时,混控器输出什么就是什么,超多[0,1]的范围了就直线限制到0或1。
所以这时候为了保证飞控在低油门和高油门都能有一定的俯仰、滚转、偏航通道的控制能力,我们需要对飞行器飞行时的总距(油门)值进行一定的限制,比如最小限制为15%,最大限制为85%。
当实行优先保证俯仰、滚转等通道时,飞行器会在单个电机饱和时强行把总距的值减小或者增加,从而实现俯仰、滚转等通道的完全行为能力。
所以你会看到在空中出现你想要飞机下降却上升的情况。
以笔者的经验来看,优先保证俯仰、滚转、偏航通道的控制更加重要,总距(油门)出现一定的控制误差一般不会导致飞行器坠毁,而俯仰、滚转通道的控制能力丧失很可能导致严重的后果。
另外,选取合适的电机保证飞行器具有宽裕的控制能力当然是最好的选择,不过有时候因为续航、经济性等其他原因而牺牲一定的电机控制能力,这时候我们的设计就派上用场了。
总结
今天的内容主要是跟姿态控制时出现的电机饱和以及电机输出升力的非线性有关,这些控制问题在处理不当时会影响到飞行器的控制性能,所以,还是应当仔细考虑,谨慎处理,避免飞行器在飞行中出现不可控的情况。
飞行无小事,上天需谨慎!!!
本文转载于【无人机系统技术】,作者文龙,北航博士。提供服务:免费分享无人机技术知识,开发经验,实际问题解析,解读开源飞控px4和ardupilot的算法和代码,关注公众号第一时间免费看心得知识。