大家好,又见面了,我是你们的朋友全栈君。
先说下什么是四旋翼飞行器
名称:四旋翼飞行器
组件:一个机架,一个陀螺仪,四个无刷直流电机,一个电池,一块单片机(能飞起来的最基本配置)
原理:利用四个电机旋转产生的反作用力托起飞行器上升,利用单片机和飞行控制算法控制电机使飞行器稳定
串级PID算法
然互简单介绍下串级PID算法
名字:串级PID算法
作用:采集飞行器姿态角,输出调控量使飞行器稳定
姿态角
先说一下姿态角,现在我们想象一个平铺在空间的一个“十”字,这个字左右晃,上下晃,和绕着原点转圈就叫做三个姿态角。前两个叫俯仰,滚转,绕原点转圈的角叫偏航
(下文暂用x,y,z表示)对于仅仅保持稳定,只用x,y角就足够了,那么这三个角怎么测量出来呢?
用陀螺仪,这里我们说MPU6050,,陀螺仪就是一个芯片,唯一的作用就是可以输出三个长度为3的一维数组x[3],y[3],z[3],x,y,z代表三个角,长度为3是因为分别为角度,角速度,角加速度,串级pid只用角度与角速度。
那么具体怎么利用这三个角度控制飞行器稳定呢?
先来个简单的,比如平铺在空间中的十字,我们通过陀螺仪检测到左边往下偏10度,那么x=10,如果右边往下偏10度,x=-10,上边往下偏,y=10,下边往下偏y=-10,注意左边往下偏右边就往上偏,右边往下偏左边就往上偏,这跟个杠杆似得就不用赘述了吧。这两个变量的值会在单片机中以全局变量表示,我们可以直接使用。
如果我们检测到x=10,那么我们就需要加大左边电机的速度,减小右边电机的速度,最终使x,y维持在0,这样飞行器就稳定了,其余角度都同理。
这里的x和y值即是误差,通过误差反过来调控输入的系统叫做负反馈系统
而串级PID算法研究的就是这个要减小和增加的电机转速到底是多少。先介绍下电机转速
首先,电机速度是由PWM波控制的,占空比越大,速度越大,把PWM波占空比的变化用一个int变量speed值从0到1000的变化映射出来,这样0就代表速度0,1000就代表速度最大值。(占空比就是一个周期内高电平时间与周期的比值)
这样构成飞控系统的输入量,输出量就都出来了,输入量是陀螺仪采集的角度,输出量是speed的值,四个电机对应四个speed,分别是speed1,speed2,speed3,speed4。
串级PID衍生于PID,PID就是比例、积分和微分
下面先介绍下PID
PID分两种,增量式和位置式,增量式直接输出调控量的增量,适合于自带积分的步进电机,四旋翼使用位置式PID
P:的作用是按比例增大控制量,比如检测到x=10,此时speed1应该增加10但是10太小,我们就可以把调节量放大,如果P是5那么调节量就扩大为50了
可是只用比例会出现一个问题,那就是比如我想要调节量为33,而P是5的话我们计算得出的调节量只能为5的整数倍,30或35,与33永远有一个误差
如果体现在图像上就是曲线在平衡位置上上下下的折线移动
I:为了消除静差我们必须引入积分量,积分的特点是,只要有一点误差他就会发挥作用(因为是直接程序判断x或y与0的大小关系控制积分器开启的)
并且如果误差不消除或者变号(变号就是正变负或负变正,比如由机翼向右偏变成向左偏),积分就会越来越大,对调节量的增福会越来越大(所以记得设置一个上限)
当然你可能会疑惑积分累加出来的值怎么消除,当机翼由左偏到被比例和积分调节的向右偏时,调节量变号了,你再累加不就相当于累减了吗,就自然消除了
所以积分的调节量就在0左右波动,这样曲线就会由在平衡点上下打折线变成小波浪了
D:至于微分值是是利用上一次的误差值改变这一次的调节量,他的作用就是预测,他的值最有意思的地方就是,和你的机翼所处的位置无关,也即是说即使你的机翼往左偏
微分值也有可能调控让机翼更加往左偏,那既然这样我们为什么还要用微分值呢,其实微分值是检测两个不同的算法周期(一会重点解释这个)误差变化量的大小
假设算法周期是一秒
假设第一秒,飞机x=30,经过算法调节第二秒x=25,第三秒x=10,那么对于微分来说第一秒误差变化量为5,第二秒误差变化量为15
那么他就会阻止x继续变小,即使x变小是为了使飞机稳定,如果第一秒x=15,第2秒x=10那么他就会帮助x变小
这就是微分作用的本质,不分敌我,一心阻止误差变化的扩大,这个的作用其实就是预测误差变化,再由我们具体事件具体分析
怎么利用它
其实了解比例积分微分的本质,具体怎么利用就仁者见仁智者见智了
那么什么是串级PID呢,就是同时利用角度与角速度作为误差输入,两个PID套在一起作为系统,电机速度调控作为输出
外环角度误差先经过一个PID得出的调控量与内环角速度环的差值作为内环的输入误差,该误差再经过一个PID后得出实际电机速度调控量
具体哪里用PI哪里用PD哪里用PID可以根据自己实际情况自己调整,建议外环PI,内环PID。
下面说一下算法周期
就是通过定时器控制,经过多久取一次陀螺仪数据,多久取一次内环计算数据,多久取一次外环计算数据,这个必须要严格控制好,具体值可以和PID值一样自行调试
一年前做过四轴,只凭回忆整理,如有疏漏,谢指正,望谅解。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127538.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...
评论列表(1条)
写得太好了!看了很多篇其它的 不是太理解 谢谢博主