简单火箭2吧 关注:5,858贴子:83,770
  • 9回复贴,共1

定点降落轨迹控制之——大延迟慢速响应系统PID参数调整探讨

只看楼主收藏回复

如题,最近一直苦恼于返回火箭定点降落垂直下降段精确轨迹控制问题。反复尝试后发现,PID控制可能是解决这个难题的唯一方法。这又涉及到如何在一个大延迟慢速响应的系统,利用有限的可观察时间,完成PID参数的调整。
虽然目前还没有完成最后调试,但已经有了一些心得。写在这里,提供一个思路,供有相似需要的“肝帝”参考。
先来看一下PID程序
凑合一下,因为程序在另一部手机上,不方便截图。拍个照。
Δ,误差矢量。用目标相对位置矢量,减去该矢量在垂直方向上的投影。得到水平方向上的位移向量。
∑Δ,积分矢量。用上一次积分在误差矢量上的投影,加上本次误差矢量。也就是,每次积分,都抛弃非误差方向上的无效值。做积分时,用帧时长对误差矢量做了个修正,减小手机运行帧速率变化对程序的影响。
DΔ,微分矢量。这个,考虑引起位移变化的就是速度,所以直接用速度的水平分量作为微分矢量。前面的-1是根据计算需要,对速度矢量取反向。
下面150*那个是PID运算算法。
位置矢量模的150倍,指向正上方,作为目标方向,在这里起到稳定作用。clamp150限定误差、积分、最终控制量三者最大矢量长度均为150。这是跟系统学的。限定最大值,可以避免过度调节导致失控。和正上方向矢量长度150结合在一起,限定火箭最大倾斜角度为45°。
到此,PID控制程序准备完成。


IP属地:河北来自Android客户端1楼2023-07-27 00:31回复
    【1】比例控制参数调节
    查各种PID调节的文章,都会告诉你比例系数要先调节出等幅震荡,再减小到1/4比例衰减波形。但在这个降落程序中,时间有限,根本无法观察到震荡波形。那么怎么调节呢?
    我的方法是“走极端”。先设个很小的比例系数,比如0.1、0.5。只要能观察到火箭稳定垂直下落就行,不用在乎落点偏差多少。然后开始放大比例系数,可以从1开始。直到观察到火箭下落轨迹开始偏向另一侧。记住这个数值,这是后面调整的一个“标尺”。


    IP属地:河北来自Android客户端2楼2023-07-27 00:41
    回复
      【2】续前
      找到标尺后,就是调出“震荡”来。成倍放大之前的“标尺”。让火箭能够在下落过程中第一次大幅度偏离后,有时间再反向回调一次就够了。这时的比例系数,差不多就够进行后续调节所用了。
      调完比例系数,下一步就是调微分系数。也就是先调出PD控制来。
      因为系统响应延迟太大,响应速度太慢。所以微分系数很难把握。在积分系数调节之前,先调微分系数,可以找到微分系数的大致范围。
      调整目标:显著压制住比例控制带来的“超调量”,也就是之前调出来的大幅度偏移中的第一次偏移。就像我现在的程序,微分系数达到了256。其实我在写这段的时候,另一部手机正在测试系数1024的状态。


      IP属地:河北来自Android客户端3楼2023-07-27 00:55
      回复
        【3】续前
        根据早前搞寻的制导的经验。三维空间中,微分系数的上限是,由于火箭响应缓慢,方向调整速度跟不上微分控制变化速度,火箭不在误差方向上摆动,而是跟随快速变化的锁定点“转圈”。这时候就说明微分系数略微“过敏”。可以进行下一步调整了。
        如果很难观察到这个现象,说明比例系数还是不够高。可以继续放大比例系数后,再放大微分系数尝试。


        IP属地:河北来自Android客户端4楼2023-07-27 01:03
        回复
          【4】尝试添加积分系数。
          积分时间常数,也就是积分系数那里的分母(图片中用0屏蔽了积分系数,这时候应该将分子换成1),先取微分系数的三分之二。
          当前测试结果,火箭触地前连续画圆的圆心位置没有明显变化,说明积分系数未生效。准备大幅度减小积分时间常数进行尝试。先减小4倍。设为25。
          测试结果:调节速度变快,但偏离靶点情况依然没有明显改善。再次尝试放大积分系数(即减小积分时间常数)。这次用5。
          测试结果:稍微好一点儿,但效果依然不明显。
          分析原因:由于限制了调整量最大值,整个旋转过程,调整量一直保持最大状态。
          说明比例系数、微分系数均过高。尝试降低微分系数看有无改善。


          IP属地:河北来自Android客户端5楼2023-07-27 01:25
          回复
            【5】
            降低微分系数,对改善落点位置有较明显作用。说明之前调整量“饱和”,确实是系数调整效果不明显主要原因。
            这时候,我考虑先不动微分系数。降低一下比例系数,让调整量远离饱和状态一些(比例系数是乘给整个方程的,可以降低整个系统的饱和状态,但会造成系统响应速度下降。这也是为啥我一开始要用大比例系数的原因,方便观察系统反应状态)。
            比例系数由4变3。这个系数本来就不大,不太适合大幅度改变。
            可以看到,躺下的位置里靶心更近了。火箭下三分之一处大概就是落地前连续画圆的圆心位置。说明降低比例系数有效。也说明积分系数“够大”。下一步就是继续降低比例系数,直到落点能够稳定在“最接近”圆心的位置上。
            这里继续保持较大的微分系数,是为了能够观察到“连续画圆”现象,以便确定落点误差是否得到有效消除。


            IP属地:河北来自Android客户端6楼2023-07-27 01:42
            回复
              【6】
              新一次测试,比例系数降到2。火箭画圆圆心反而出现偏离趋势,超调量压制效果减弱。说明暂时不能再减小比例系数。恢复比例系数到2.5。尝试减小微分系数,降低画圆效果。
              微分系数降低一半,画圆现象几乎消失。但系统出现大幅度左右飘摆。验证了前面的调试结果:之前的微分系数相对合适。值大概在512。
              到这里,调整陷入一个“小”僵局:系统响应有些“过敏”,超调量难以压制。系统误差依然很大,消除误差又需要增大比例系数和积分系数(减小积分时间常数)。看来需要给系统整体“脱敏”。也就是降低最大调整量。
              这里取巧一下。水平调整量减小,其实放大垂直方向矢量大小也可以起到效果。也就是让火箭最大倾斜角度减小。


              IP属地:河北来自Android客户端7楼2023-07-27 02:03
              回复
                【6】
                公布做完睡前试飞结果
                垂直矢量增大1倍,微分系数亡调了,还是256。比例系数2.5,积分系数1/2.5。
                “画圈”现象彻底消失。第一次大幅度超调之后,调整幅度迅速降低,并稳定在首次超调方向上。
                系统响应曲线特征为:微分量过大引起超稳。
                但是,超调量这个有点儿不好解决。


                IP属地:河北来自Android客户端8楼2023-07-27 07:57
                收起回复
                  终于搞定了!效果不说杠杠滴,至少能用了。
                  两枚火箭肩靠肩。其实呢,第二枚火箭原本已经撞到第一枚火箭了,只是没撞倒。
                  昨晚程序调整失败原因已经找到。我会新开一篇帖子进行说明。



                  IP属地:河北来自Android客户端9楼2023-07-27 16:55
                  回复