详解pid控制

PID是目前工程上使用最广泛,最稳定的方法,说实话想做点实际的东西PID必不可少,对于PID的掌握是搞控制的基本。

本文会系统梳理PID控制,从基础的P控制器开始,PI控制器解决P控制器不能用大增益的问题,PID控制器解决PD控制器稳态误差不为0的问题。

文章乱码比较多,感兴趣可以看下面这个链接:

PID 控制器的优缺点,并浅谈改进方法? - Mr.Bo的回答 - 知乎 https://www.zhihu.com/answer/1925148521

最简单的反馈控制器就是P Control and First-Order Error Dynamics,也就是PID里的P,PID是比例-积分-微分控制的缩写,这个了解自动控制原理的话大家都很熟悉了,它的控制律为:

 K_p>0 ,这种控制器被称为比例控制器,或P控制器,因为它创建一个与位置误差 \theta_e(t)=\theta_d(t)-\theta(t)成比例的校正控制,换句话说,恒定的控制增益  K_p 有点像一个虚拟的弹簧,试图把实际的关节位置拉到期望的关节位置。P控制器是线性控制器的一个例子,因为它产生的控制信号是误差  \theta_e(t) 的线性组合也可能是其的导数和积分。

如果  \theta_d(t) 是常数,那么  \dot\theta_d(t)=0 ,就称为setpoint control,这时候误差动力学为:

代入P控制器就有:

显然这是一个时间常数  \tau=1/K_p 的一阶误差动力学方程,它的衰减指数误差响应如下图,稳态误差为零,没有超调,2%的沉降时间为  4/K_p ,更大的  K_p 意味着更快的响应。

如果  \theta_d(t) 不是常数,而  \dot\theta_d(t)=c ,这时候误差动力学代入P控制器为:

处理一下:

解微分方程,就有:

当时间趋于无穷时,它收敛于非零值  c/K_p ,与setpoint control不同,稳态误差  e_{ss} 是非零的,关节位置总是滞后于运动参考点,通过选择控制增益  K_p ,可以使稳态误差  c/K_p 变小,但是  K_p 的大小受到实际情况的限制,一个是真正的关节有速度限制,  K_p 过大显然是不行的,另一方面,较大的增益可能给系统带来不稳定的问题。

那么想用大的增益怎么办?比例积分控制器或PI控制器PI Control and Second-Order Error Dynamics就出现了,它添加与误差对时间积分成比例的项:

PI控制器的方块图如下:

如果  \theta_d(t) 不是常数,而  \dot\theta_d(t)=c ,这时候误差动力学代入PI控制器为:

上式对时间求导:

利用上一帖中二阶误差动力学的相关知识,可以看出系统的固有频率  \omega_n=\sqrt{K_i} ,阻尼比为  \zeta=K_p/2\sqrt{K_i} 类比经典的弹簧阻尼系统,增益  K_p 的作用等同于 b/m (  K_p 越大,阻尼常数b越大),增益  K_i 的作用等同于  k/m (  K_i 越大,弹簧刚度k越大)。

那么  K_p,K_i>0 时,PI控制的误差动力学方程是稳定的,特征方程的根为:

让  K_p 等于20,然后在复平面上画出  K_i 从0增长的根轨迹(root locus)为下图:

对于根轨迹图的讨论就不再赘述了,可以画出下面的误差响应图,罗马数字1,2,3分别对应过阻尼,临界阻尼和欠阻尼的响应。

有了上面的讨论,对于临界阻尼情况(  K_i=K_p^2/4 ),我们总是可以选择  K_p,K_i ,增加  K_p,K_i 使误差响应尽可能快,然而,实际情况的限制也不能让增益取的过大,在满足实际情况下,尽可能使  K_p,K_i 满足临界阻尼条件。

现在来对比一下P控制器和PI控制器,下图显示了P控制器和PI控制器尝试跟踪匀速轨迹的性能,两种情况下的比例增益  K_p 是相同的,而对于P控制器  K_i=0 ,从响应的形状来看,似乎PI控制器的  K_i 选择的大了一些,使系统欠阻尼,但依旧很明显,PI控制器的  e_{ss}=0 ,而P控制器的  e_{ss}\not=0 ,这与上面的分析一致。

如果期望的速度 \dot\theta_d(t)\not=c ,PI控制器就不能完全消除稳态误差,但是,如果期望速度变化缓慢,那么一个设计良好的PI控制器可以提供比P控制器更好的跟踪性能。

左图为跟踪轨迹图,右图为误差响应

进入PID前,先看这个:

如上图,考虑摩擦等阻力,动力学方程就为:

式中:

 \\ \tau_{fric}=b\dot \theta,b>0

简写一下,就为:

Feedback Control: PID Control(线性比例-积分-微分控制或PID控制),PID控制器就是PI控制器加上与误差对时间的导数成比例的一项,控制律如下:

上式中增益  K_p,K_i,K_d 都是正的,比例增益  K_p 类似于一个弹簧,试图减少位置误差  \theta_e=\theta_d-\theta ,微分增益  K_d 类似于一个阻尼器,试图减少速度误差  \dot\theta_e=\dot\theta_d-\dot\theta ,积分增益可用于减少或消除稳态误差。PID控制器方块图如图:

(1)PD Control and Second-Order Error Dynamics

如果  K_i=0 ,就称为PD控制,假设机器人在水平面上运动(g = 0),将PD控制律代入动力学,就有:

如果  \theta_d 是常数,那么  \dot\theta_d=\ddot\theta_d=0 ,那么  \dot\theta_e=-\dot\theta,\ddot\theta_e=-\ddot\theta ,这时候误差动力学为:

写成二阶形式:

那么固有频率和阻尼比就为:

系统要稳定,那么  b+K_d,K_p 就要为正,如果误差动力学方程是稳定的,则稳态误差为零,如果不出现超调和快速响应,增益  K_d 和  K_p 应选择满足临界阻尼情况,如果想要快速响应,应选择尽可能高的满足实际问题的  K_p ,过高的  K_p 可能导致抖振(扭矩快速变化的情况)的发生。

如果其它条件不变,连杆在垂直平面上运动(g > 0),根据上面的PD控制律,误差动力学可以写成:

观察上式,你会发现在  K_p\theta_e=mgrcos\theta 时,关节将保持静止,即  \theta_d\not=\pm\pi/2 时稳态误差 \theta_e\not=0 ,因为机器人在  \theta_d\not=\pm\pi/2 必须提供一个非零的力矩来保持连杆静止,但PD控制律只有在  \theta_e\not=0 会在静止时产生非零力矩,这就陷入了矛盾,想让稳态误差变成0,但它就不是0,当然我们可以通过增大  K_p 来降低稳态误差,但是,我们上面讨论了,  K_p 会受到实际情况的限制,那这种情况该如何解决?PID就出场了。

(2)PID Control and Third-Order Error Dynamics

为了消除稳态误差,我们通过设置  K_i> 0 让控制器化身PID控制器,下图展示了积分项加入控制器的效果:

左图为跟踪效果,中间为比例积分微分项各自的贡献,右图为控制情况

写出误差动力学:

 \tau_{dist} 为扰动力矩代替了重力项  mgrcos\theta ,上式两边求导,就有三阶误差动力学:

如果  \tau_{dist} 是常数,那么上式的特征方程为:

如果特征方程的所有根都有负实部,则误差动力学是稳定的,且收敛于零,为了稳定还必须满足以下控制增益条件:

增益  K_i 必须同时满足一个下限和一个上限。合理的设计策略是选择  K_p,K_d 以获得良好的瞬态响应,然后选择  K_i (从下面的根轨迹可以看出  K_i 太大,系统是不稳定的)使其能够减少或消除稳态误差,但又不至于对稳定性产生显著影响,在上面左边那张图可以明显看出效果。

特征方程的根轨迹,讨论就略去了

实际使用中,对于许多机器人控制器  K_i=0 ,因为稳定性是最重要的,可以用其他方法限制积分控制不利稳定的问题,比如integrator anti-windup,对允许的误差积分的大小设置一个限制。

PID控制算法的伪代码如下图:

虽然上述的分析集中于setpoint control,但是PID控制器很好地适用于轨迹跟踪,当然,它不是什么时候都有用,积分控制并不能消除沿任意轨迹的跟踪误差。


版权声明:本文为weixin_50238901原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。