姿态控制

姿态控制

       在完成姿态的解算后,就可以做姿态的控制部分。一开始虽然传感器没有校准,也没关系,飞机还是等飞起来的,只是可能有点飘。后面再写怎么校准的博客吧。我没有用什么高大上的算法,无人机的姿态控制只需要用传统的PID就行,是的,两个PID就可以让你的飞机稳稳的飞起来,并可以用遥控器控制飞行。
       想要完成基本的控制,得先了解一下PID的基本知识。四轴PID详解这个写的特别详细,细看的同学可以好好看看。先记住P、I、D三个参数作用即可,遇到实际的问题再细看,找出相对应原因。

PID三个参数作用


比例P的作用:减少偏差,比例越大消除的越快,但太大的P会造成系统震荡,直至发散。单纯的P作用始终还是会有轻微的震荡,有点抖动。

积分I的作用:消除稳态误差,能够做到有级调节。PI调节会让系统感觉比较柔顺。需要注意积分饱和现象。

微分D的作用:减少超调量,抑制震荡,增加系统的快速性。太大的D也会造成系统震荡,直至发散。

记住一句话:控制好无人机主要还是靠P,其他两个ID只是辅助。

串级PID算法


       串级PID就是两个PID串联在一起,分为内环PID和外环PID。内环控制角速率,外环控制角度。
串级PID:
外环PID一般只用一个P即可:

外环角度误差   =    期望角度    -     当前角度 

外环PID输出    =     Kp       *     外环角度误差

其中:期望角度可以来自遥控器的打杆量,比如:pitch通道-40度到40度。当前角度应该是姿态解算出来的角度,单位就是

内环PID一般用P、I、D三个参数来控制:

内环角速度误差     =   期望角速度    -   当前角速度     =    外环PID输出    -    当前角速度

内环PID_P        =   Kp           *         内环角速度误差

内环PID_I        =   Ki           *         内环角速度误差积分

内环PID_D        =   Kd          *          内环角速度微分

内环PID输出       =     内环PID_P     +       内环PID_I      +      内环PID_D

其中:期望的角速度就是来自外环PID输出,当前角速度则是来自陀螺仪的数据,单位是度/秒

注意:
1、外环期望角度来自遥控器的打杆量,遥控器量程是1000-2000,需要映射成-40至40或者-30至30。
2、当前角度是姿态解算出来的欧拉角值,单位是 ,而不是弧度
3、对外环角度误差和外环PID输出进行限幅,防止出错。

4、当前角速度是陀螺仪采集的AD值数据进行单位转换,单位是 度/秒,需要低通滤波,防抖动。
5、内环PID角速度误差积分值在飞机起飞前应该一直为0,否则会满。可以设置一个油门阈值,当油门小于这个值时,积分都为0。对积分大小进行限幅,防止积分爆满。
6、对内环的误差、输出上下限、积分值上下限都进行
限幅
,防止出错。

7、微分会扩大由于电机震荡带来的误差,最好在PID内部对微分进行低通滤波。
8、内环PID如果采用传统的PID效果不好,可以采用微分先行PID,只对输出进行微分,而对指令不起微分作用,适合给定指令频繁升降的场合,可以避免指令的改变导致超调过大。

       这样对于Pitch、Roll轴分别进行串级PID控制,再加上Yaw的角速度控制,会输出三个值送到混控器中,再加上油门,四个值通过混控器映射到四个电机中,进行控制。(混控器后面再另外写博客说吧)

PID调试方法


       无人机这个东西,手掌大的还好,像F450、F550这样,第一次调试起来比较危险,最好有个四轴调试架。类似这样的就挺好无名的万向云台安装好后,利用万向云台调试起来也比较安全。
       调试前应该做好很多准备工作
1、先不上桨,飞控里设置好接收机程序,遥控器拨动油门,电机能转,这是最基本的吧。把遥控器设置好,微调值都归0
2、拨动Pitch、Roll、Yaw对应的电机转的方向正确
3、进行油门校准,直接将油门输出给电机或者把所有的内外环PID参数都为0时,电机转速基本一致。
4、最好要有个地面站能够看到自己的数据,比如内环PID的期望值曲线,反馈值曲线,输出曲线,这三条最基本的曲线。
5、最好有个地面站可以在线更改PID参数,飞控能够把PID参数存在Flash中,提高调试效率。

调试:
1、先调试内环,再调试外环。先调试Pitch和Roll,同时这两个轴的参数可以一样。在程序中,把外环去掉,遥控器输出就是内环的期望。这样就是一个PID,输入是遥控器的打舵量,-40至40,反馈值陀螺仪的角速率,PID输出送到混控器。这个也叫做角速率模式,直接用遥控器控制飞机的角速率,而不是角度。

2、Pitch和Roll内环P给一个差不多的值,例如1.0,其他的都是0。外环不参与,程序中应该没有它的事,Yaw,也不参与,可以程序中先注释掉。增大油门到差不到能够起飞的样子。飞机一开始建议放在云台上放置水平,一开始增加油门,应该还是差不多水平,随着油门的增大,多多少少都会向一边倾斜,没事。当油门差不多了,推动Pitch或者Roll一点,飞机要是开始震荡剧烈,说明参数P太大了;如果没反应,继续推动摇杆,飞机没反应,或者反应很慢,这时候说明P太小了。P每次增加减少应该都是零点几。如果增加到了3.0甚至更大,还是没反应,这时候应该看看程序是不是有问题了,或者加入D

3、很好的P能让飞机看起来很好的跟随遥控器的打舵量,遥控器回中时,飞机基本不动,会倾斜在调试架上。但是可能还是有点震动。这时候需要加入D,来抑制震荡。合适的D,会让摇杆回中时,飞机基本不震荡,立马停住。如果这时候Pitch和Roll的内环PD都加上了,无人机应该可以立起来了,**不会倒在调试架上,而是倾斜着。**太大的D也会造成系统震荡。

4、加入一点I会让飞机动起来更加柔顺,看起来更好。想要更加柔顺点,要增加I,P就得减少,D也得跟着减少。

5、如果这时候飞机能够跟随打舵量,杆动机动,杆停机停,说明内环基本上调好了。可以改变程序,加入之前的外环P。这时候期望角度来源遥控器的打舵量,外环输出就是内环的期望角速率。给外环P一个合适的值,比如2.0。 合适的P会让无人机基本保持在水平,基本不再倾斜了,拨动打舵量,飞机会定在一个角度,不动,遥控器回中,飞机回到水平。如果跟着打舵量到一定角度或者回到水平的过程很慢,说明外环P小了,加大P,也有可能是内环P太大,都试试。如果跟着打舵量到一定角度或者回到水平有抖动,说明外环P太大,减少点。

6、Yaw只控制角速度,内环参数和其他两个差不多。飞机起飞时不自旋即可。

垂直起飞


       经过PID的调试,飞机应该能够飞起来了,但是会发现飞机是斜着起飞。或者放在水平的地面,加一点点油门,有的电机转,有的不转,即使油门已经校准好了。原因都是因为加速度计安装不水平导致的。加速度计不水平,为了保持加速度计水平(不是机架水平),电机转速不一致。
       解决的办法一个就是把飞控或者IMU重新安装水平,尽量和机架平行。然后再调整遥控器的微调按钮,让飞机差不多垂直起飞。另外一个办法就是先把飞控或者IMU从飞机上拆掉,进行六面校准或者球面校准,得到偏差量和尺度因子,然后装到机架上再进行安装误差校准。(校准的方法后面再写博客来说)这样再通过一点点遥控器的微调,基本上飞机能够很好的垂直飞行,并且即使没有光流也能一般效果的定在空中了(没有风等吹)。

你可能感兴趣的:(自研飞控)