【空心杯四旋翼TinyLeaf】PID算法入门

       PID算法的介绍和资料很多,笔者在大一时就听学长说这个PID算法是如何神奇,我当时找到了PID的公式研究了没多久就放弃了,因为完全不能理解!公式看懂了,但是不知道每个变量代表什么,如何使用。

       大一下学期的时候笔者参加了学院的电子设计竞赛校赛,控制类的题目是风控小球,要求是:

       控制两端的直流风机吹在一个直线导轨上的乒乓球,使得乒乓球停在导轨的指定位置。

       这个题目让我顿悟了PID的规律。感兴趣的同学可以去尝试实现一下。

       PID是一门来源于实践的技术,所以我们必须在实践的方法来理解。

       这是一个很好的用来解释PID的模型,下面笔者将以这道题目的需求来介绍PID的作用。首先,控制的目的是让被控对象跟随给定,这里出现了第一个术语:“给定”,给定是我们所期望被控对象达到的状态。

       显然,在时间上,被控对象是不能瞬间从当前状态切换到给定的(除非被控对象正好就在给定位置),所以显然被控对象移动到给定状态需要一个过程,在此过程中,被控对象的当前状态(输出c(t))和给定r(t)之间的差叫做误差e(t) = r(t) - c(t)。被控对象追随给定r的过程,就是误差e逐渐收敛为0的过程。

       回到“风机-小球系统”,乒乓球是被控对象,评委随机指定的位置就是给定,左右的两个风机是执行器,为了简化系统,在此把风机提供的动力看随执行量u线性变化无时延的,也就是说我给风机一个信号,风机吹的风立马就能使小球受到推力(现实并非如此,先讨论理想情况)。

       应该如何实现控制呢?球在给定左边,风就把求往右吹,反之往左吹?这个叫做开关控制,控制量就是+u和-u(有时还有0,即执行器不动作),很可惜这个系统不太适合,使用这种办法的结果就是,这个球在给定位置左右滚动,幅度还很大。

       怎么办?明明乒乓球距离给定位置只差1cm了,风机还在呼呼的吹,这肯定不行,我们可以试试,乒乓球离给定远(误差绝对值大)时,吹的力气大一点;等到乒乓球很靠近给定位置(误差的绝对值很小)时,风机就小点吹;到达给定位置(误差为0)时,风机就不动作了。将执行量写作:

u = k_{p}*e

       很好!这就是比例控制(PID中的P)。

       不过,这个系统仍然不是运作的很好。力学告诉我们:乒乓球的速度是力的积分。假设乒乓球开始时静止在给定的右边,按照比例控制的控制律,乒乓球在到达给定位置之前,风机一直都在把球往左边吹,那么到达给定时,根据积分,乒乓球的速度一定不为0,自然乒乓球不会老老实实的待在给定位置,而是会在惯性下冲过给定,跑到给定左边去。然后又被吹回来,如此往复。依旧不能稳定停在给定位置。这个时候开始思考:是什么影响了控制器的效果呢?对,是乒乓球的速度!如果在控制小球的位置的同时,也控制住小球的速度就好了!速度是有方向的数据,我们希望乒乓球在给定位置上时速度为零,速度如何获得?我们可以得到通过反馈得到误差,误差的量纲是长度,它关于时间的微分就是速度。

误差e(t)是连续量的时候微分就是误差关于时间的导数\frac{\mathrm{d} e\left ( t \right )}{\mathrm{d} t}

误差e(t)是离散的时候(数字系统)微分就是当前时刻误差减去上一时刻误差

       \dot{e}=e\left ( k \right )-e\left ( k-1 \right ) 或 \dot{e}=\frac{e\left ( k \right )-e\left ( k-1 \right )}{h}(有时除以采样时间)

把执行量u写成:

       u=k_{p}*e+k_{d}*\dot{e}

       这样再来看“风机-小球系统”,假设乒乓球在给定位置,误差e已经是0了,但是误差微分\dot{e}不为零,如果执行器中含有一块误差为分的成分,那么显然执行器已经在执行反向动作了。

       假设乒乓球在给定位置右边,开始时误差e很大,误差微分\dot{e}为零,小球在风机作用下开始逐渐加速,此时误差e开始变小(从正值向0变化),而误差微分\dot{e}开始变小(从0箱负值变化),可以想见在乒乓球到达给定之前,一定有一个时刻t_{x}会让执行量在此时

       u\left ( t_{x} \right )=k_{p}*e\left ( t_{x} \right )+k_{d}*\dot{e}\left ( t_{x} \right )=0

       这在系统中的实际情况就是,小球实现了“提前刹车”,这对于消除控制系统的超调和提高控制的快速性很有帮助。这就是典型的比例-微分控制(PD控制)。值得一说的是,微分控制还有一个优势就是可以“抵御”剧烈扰动,比如突然用手指弹一下乒乓球,误差的变化不是很大,但是误差微分却在短时间内变得很大,因此执行器会剧烈动作来抵御,这在实际系统中可以观测到一种“阻尼”现象。

       现在我们看PID,比例-积分-微分控制,他的控制量公式为:

      u=\left (k_{p}*e \right )+\left (k_{i}*\int e \right )+\left (k_{d}*\dot{e} \right )

       可以看到控制量的公式在PD控制的基础上多了一个k_{i}*\int e \right,这就是误差的积分参与了控制。那么,积分到底对系统有什么帮助呢?假设把乒乓球放在一个很靠近的给定的位置,误差是一个很小值,误差微分是0,如果没有积分的作用,风机会吹非常微弱的风(因为误差很小)。如果这个时候乒乓球与导轨的静摩擦比风的推力大,那么乒乓球是不会动作的,乒乓球到给定位置的这一小段误差就称之为“静差“”,但是如果有积分作用,这个很小的误差也会慢慢累积变大,风也会慢慢变大直到把小球对到给定位置,这就是积分环节的消除静差作用。

       至此,笔者已经将PID控制律大致的描述了一遍。码字不易,如果对您有帮助,点个赞吧谢谢!


       下一篇,笔者将从控制理论的角度分析PID的作用。

你可能感兴趣的:(四旋翼)