②对附件中的山猫飞控和自适应控制算法做介绍
③对所作工作的总结,归纳出主要的问题和注意事项
④致谢
第一部分:牢骚
我个人非常期待我的飞控中有用的部分能用到大家的四轴中,只是在这里有一点自私的请求,虽然我自知自己的代码特色并不明显,但是如果真的有用并能用在您的四轴中的话,希望您也能开源您得代码,打心底里希望大家能共同努力,把中国的四轴做大做强!
第二部分:飞控、直接法自校正极点配置控制器特点介绍
①硬件和一些不重要的东西:
450的糙机架,朗宇2212980kv的电机1045的桨电调是好赢的四合一电调,STM32F103VET6主控传感器为L3G4200+HMC5883L+ADXL345+BMP085杜邦线连接软件I2C,有个小蜂鸣器,用电阻做了个简单的电池电压测量,富斯的9通遥控和接收机,一个网上买的性能很差的433MHz串口透传模块。
②操作系统:
为了能把控制算法写到足够大并能保证各软件模块间时序的准确性,我们使用了uCOSIII操作系统,这个相比uCOSII有了很大的改进,应该说在我们的STM32上使用非常合适,但是API和前代相比有了很大变化,很多东西需要重新写。另外就是是我们的飞控可以同时使用库函数和寄存器来设置(因为我是使用寄存器的,但是工程里带了库,怕人们困惑才特意加这句话)
③通信与手柄控制的特色:
我们使用MATLAB做的上位机与飞控通信,因为MATLAB对多线程的支持非常不好,串口通信也存在很多问题,所以我的飞控通信效率非常低,使用的是字符的传输,倒是很便于用串口助手观查,最大的好处就是可以直接把飞控上截获的数据拿到MATLAB上来分析,对我等学生来说也许很有用吧,嘿嘿。
另外一个特色是可以同时支持用游戏手柄的遥控和8通航模遥控器的遥控。飞控上可以读取8通接收机的信号,使用的是外部中断的方式,直接把接收机的线接到相应引脚上就行,不需要额外寻找PPM信号(比如我用的富斯接收机就没有PPM信号),与其他控制(这里对比的是游戏摇杆和MATLAB给的控制信号)相比有最高的优先级,既航模遥控器锁电机开关(自己设定的)关闭时会在飞控内屏蔽其他外部控制输入。游戏摇杆当然就是普通的带两个摇杆的游戏手柄应该都是可以的,还是的使用我的MATLAB的上位机,也就是说如果您愿意的话完全可以在MATLAB上位机上直接控制四轴(如果你不怕坠机的话),当然,因为我只有一个性能很差的433串口透传模块,双向传输会牺牲一半以上的通信速度,要是想用后面提到的系统辨识一类对时序非常敏感的程序的话指定是不能用游戏摇杆了。
④可以进行在线的系统辨识,飞控中写入了渐消记忆最小二乘系统辨识算法,可以辨识带噪声模型的ARMA模型,之前看到坛子里有人在讨论用这种方法给四轴建模的,有了这个就方便了吧,嘿嘿~
⑤飞控中可以随意改变控制和姿态解算的频率,只需要改动头文件中的定义即可,当然得考虑算法的复杂度和I2C的读取速度。
⑥姿态解算:
⑦封装了常见的PIDPDPI控制器,关键是这里面有两个测试用的控制器,一个是开头提到的直接法自校正极点配置控制器,另一个是我自己推导的直接法自校正积分型极点配置控制器,这两个控制器主要是为了我等学生测试用的,目前还不能稳定的飞行,其中直接法自校正极点配置控制器可以实现单轴的稳定控制。
⑧一些必须放在这里说的问题:
首先是我做四轴并不是为了做一个能稳定飞行的玩具,也没有项目要求要做这个东西,所以我并没有以“把PID和姿态解算调到极致”为中心,而是以“方便测试尽可能多的控制算法”为中心。因此我的飞控存在如下问题:
第三部分:
算法设计当中出现的一些关键问题的总结:
①控制频率与系统模型间的关系:
说一些实验现象,具体原因没有深究:降低控制频率,会增大辨识得到的离散系统的增益。在做PID控制时尤为明显,我在不同控制频率下用我的PID整定方法设计控制器,得到的参数在存在很大差别,但在将控制模型转化为g0+g1Z^-1+g2Z^-2的形式后发现仅仅相差了一个增益K,控制器的零极点并没有改变,仿真上差别不大,但会增大噪声的增益,在使用高频率控制时单纯的PID方法能表现出比在低频时更好的控制效果。
25Hz时的PID
10Hz时的PID
在控制频率低于系统实际的纯延迟时,离散系统会被采样成逆不稳定系统(非最小相位系统)这个时候无论哪种方法都很难体现出控制效果了,尤其PID,即便如此,我所辨识的被控系统始终存在一个在负半轴但在单位圆内的零点,感觉它严重的影响了我各种控制算法的控制效果。
②关于确定极点配置控制器控制频率为10Hz的一些考虑:
如前所述,由于我测量到系统从控制输入到角度反馈输出的延迟大约有0.2s(不知道大家的大四轴是不也是这样的,还是单纯的是我四轴的自身问题)使得控制器在高频时阶次过高,但在低频时会变成逆不稳定系统,这是极点配置控制器不能控制的系统。所以最后折中到了10Hz,同时由于这时候理论延迟d=2,但是依然是逆不稳定的,我们额外为辨识系统多加了一阶延迟,使d=3,这才保证我们设计的控制器在3阶并保证逆稳定的条件。
③为减小自适应初期的抖动所作的一些尝试:
在自适应初期会出现很恐怖的抖动,为了尽可能的减小这种抖动,我们使用了两种方法,第一种是前面说的尽可能的降低阶次,可以有效减小抖动,第二是用仿真得到的稳态的辨识参数作为初值,这两条并用,在我们单轴的测试上达成了良好的控制效果,但是多轴时由于无法完成离线辨识所以我们一直都没有得到飞机实际飞行中的系统模型,这条我们会在下一条中探讨原因,先上一张使用自适应的高阶控制器(后)与低阶控制器(前)在有噪声模型环境下控制效果和控制量输出的仿真对比:
④为什么会使用直接法辨识控制器参数而不是在线辨识被控系统然后解丢番方程求解控制器:
⑤为什么没有使用最小方差控制器这类基于最优化的自适应控制器:
⑥为什么我会说乐观?:-]
因为我们是直接对角度进行的输入输出控制器设计,如果从角速度来进行设计的话,前面的这一大堆问题理论上都会迎刃而解,所以我们对该算法思路非常乐观,也希望想像我一样走角度直接做自适应控制的三思,多考虑从角速度模型进行辨识并控制。
以上是我整理的关于我在做四轴的自适应控制中的一些尝试方案和记录,接下来是致谢: