关于倒立摆的相关背景:倒立摆,Inverted Pendulum ,是典型的多变量、高阶次、非线性、强耦合、自然不稳定系统。倒立摆系统的稳定控制是控制理论中的典型问题,在倒立摆的控制过程中能有效反映控制理论中的许多关键问题 ,如非线性问题、鲁棒性问题、随动问题、镇定、跟踪问题等。因此倒立摆系统作为控制理论教学与科研中典型的物理模型 ,常被用来检验新的控制理论和算法的正确性及其在实际应用中的有效性。所以我此次实验采用一阶倒立摆来验证。
当摆杆夹角很小时,近似线性化处理:
( I + m l 2 ) θ ¨ + m g l θ = m l x ¨ \large(I+ml^2)\ddot \theta+mgl\theta=ml\ddot x (I+ml2)θ¨+mglθ=mlx¨
( M + m ) x ¨ + b x ˙ − m l θ ¨ = u \large(M+m)\ddot x+b\dot x-ml\ddot \theta=u (M+m)x¨+bx˙−mlθ¨=u
根据微分方程组做拉普拉斯变换联立求得外力针对角度的传递函数:
ϕ ( s ) U ( s ) = m l 2 q s 2 s 4 + b ( I + m l 2 ) q s 3 − ( M + m ) m g l q s 2 − b m q l q s \LARGE\frac{\phi(s)}{U(s)}=\frac{\frac{ml^2}{q}s^2}{s^4+\frac{b(I+ml^2)}{q}s^3-\frac{(M+m)mgl}{q}s^2-\frac{bmql}{q}s} U(s)ϕ(s)=s4+qb(I+ml2)s3−q(M+m)mgls2−qbmqlsqml2s2
将各种参数输入matlab,
编辑一个函数脚本GetPendulum来求传递函数的系数:
function [G] = GetPendulum(M,m,l)
b = 0.15;I = 0.005;
g = 9.81;
q = (M+m)*(I+m*l^2)-(m*l)^2;
num = [m*l/q 0 0];
den = [1 b*(I+m*l^2)/q (-(M+m)*m*g*l)/q (-b*m*g*l)/q 0];
G=tf(num,den);
end
这是一个典型的二阶系统
模糊集合设计:
总共有两个输入三个输出,输入角度和角度微分的模糊集合划分都相同,论域为[-5,5],模糊集合为3个,分别命名为:[N Z P],输出P I D三个参数的范围分别为[110,120],[115,125],[80,90],模糊集合为3个命名为:[S M B]它们的分布如上图所示。在simulink中搭建简单的反馈控制模型,其中两个并行系统的控制任务分别由模糊PID控制器和普通PID控制器担任。普通PID控制器的三个控制参数分别选为:P:115 I:120 D:85。
阶跃信号输出结果
随机信号输出结果
可以看出,对于阶跃输入,虽然普通PID控制器响应较快,但是模糊PID控制效果相比更加平滑。而对于随机信号输入,普通PID的输出已经几乎跟随输入信号,失去了控制效果,而模糊PID控制器可以较好地克服随机信号的干扰,输出比较平滑且稳定。
当然,这只是将非线性的倒立摆系统简单地在平衡点附近近似为线性系统,所以对于非线性的倒立摆系统来说,当角度比较大时便不再适用,而且输入仅为角度,无法做到对于位置的控制,甚至有可能超出运动范围。这种设计在实际应用中可能并不合理,所以下面我设计了倒立摆的分段模糊控制系统。
重新建立单级倒立摆的精确微分方程模型
单级倒立摆示意图如下:
各种参数含义与取值:
符号 | 物理意义 | 单位与大小 |
---|---|---|
M M M | 小车质量 | 2kg |
m m m | 小球质量 | 0.8kg |
l l l | 摆杆长度 | 0.25m |
b x b_x bx | 小车摩擦系数 | 0.005kg/s |
b θ b_θ bθ | 摆杆摩擦系数 | 0.0005 k g m 2 / s kgm^2/s kgm2/s |
F F F | 小车受力(控制力) | -N |
x , x 2 x ,x_2 x,x2 | 小车和小球位移 | -m |
θ θ θ | 摆杆摆角 | -rad |
建模过程:
由于现代控制理论中状态空间的相关内容还没有学完,我在这里只建立最朴素的微分方程模型,代入simulink直接求值。
根据拉格朗日方程,我们可以列出倒立摆的运动关系:
L = T − V = 1 / 2 M v 1 2 − m g c o s θ \large L=T-V=1/2Mv^2_1-mgcos\theta L=T−V=1/2Mv12−mgcosθ
在上式中:
v 1 2 = x ˙ 2 \large v^2_1=\dot x^2 v12=x˙2
v 2 2 = ( d d t ( x − l s i n θ ) ) 2 + ( d d t ( l c o s θ ) ) 2 = x ˙ 2 − 2 l x ˙ θ ˙ c o s θ + l 2 θ ˙ 2 \large v^2_2=(\frac{\mathrm{d}}{\mathrm{d}t}(x-lsin\theta))^2+(\frac{\mathrm{d}}{\mathrm{d}t}(lcos\theta))^2=\dot x^2-2l\dot x\dot\theta cos\theta+l^2\dot\theta^2 v22=(dtd(x−lsinθ))2+(dtd(lcosθ))2=x˙2−2lx˙θ˙cosθ+l2θ˙2
将 v 1 2 v^2_1 v12和 v 2 2 v^2_2 v22代入 L L L中得:
L = 1 / 2 ( M + m ) x ˙ 2 = m l x ˙ θ ˙ c o s θ + 1 / 2 m l 2 θ ˙ 2 = m g c o s θ \large L=1/2(M+m)\dot x^2=ml\dot x\dot\theta cos\theta+1/2ml^2\dot\theta^2=mgcos\theta L=1/2(M+m)x˙2=mlx˙θ˙cosθ+1/2ml2θ˙2=mgcosθ
此时列拉普拉斯方程:
d d t ( d L d x ˙ ) − d L d x = F − b x x ˙ \large \frac{\mathrm{d}}{\mathrm{d}t}(\frac{\mathrm{d}L}{\mathrm{d}\dot x})-\frac{\mathrm{d}L}{\mathrm{d}x}=F-b_x\dot x dtd(dx˙dL)−dxdL=F−bxx˙
d d t ( d L d θ ˙ ) − d L d θ = b θ θ ˙ \large \frac{\mathrm{d}}{\mathrm{d}t}(\frac{\mathrm{d}L}{\mathrm{d}\dot\theta})-\frac{\mathrm{d}L}{\mathrm{d}\theta}=b_{\theta}\dot\theta dtd(dθ˙dL)−dθdL=bθθ˙
在上式中代入 L L L得:
( M + m ) x ¨ − m l θ ¨ c o s θ + m l θ ˙ 2 s i n θ = F − b x x ˙ \large (M+m)\ddot x-ml\ddot\theta cos\theta+ml\dot\theta^2sin\theta=F-b_x\dot x (M+m)x¨−mlθ¨cosθ+mlθ˙2sinθ=F−bxx˙
− x ¨ c o s θ + l θ ¨ − g s i n θ = − b θ θ ˙ \large -\ddot xcos\theta+l\ddot\theta-gsin\theta=-b_\theta\dot\theta −x¨cosθ+lθ¨−gsinθ=−bθθ˙
解出对应的 θ ¨ \ddot\theta θ¨和 x ¨ \ddot x x¨:
θ ¨ = 1 / ( ( M + m ) c o s θ l = m l c o s θ ) [ ( M + m ) g t a n θ = ( M + m ) c o s θ b θ θ ˙ − m l θ ˙ 2 s i n θ + F − b x x ˙ ] \large \ddot\theta=1/(\frac{(M+m)}{cos\theta}l=mlcos\theta)[(M+m)gtan\theta=\frac{(M+m)}{cos\theta}b_\theta\dot\theta-ml\dot\theta^2sin\theta+F-b_x\dot x] θ¨=1/(cosθ(M+m)l=mlcosθ)[(M+m)gtanθ=cosθ(M+m)bθθ˙−mlθ˙2sinθ+F−bxx˙]
x ¨ = 1 M + m = m c o s 2 θ ( m g s i n θ c o s θ − m b θ θ ˙ c o s θ − m l θ ˙ 2 s i n θ + F − b x x ˙ ) \large \ddot x=\frac{1}{M+m=mcos^2\theta}(mgsin\theta cos\theta-mb_\theta\dot\theta cos\theta-ml\dot\theta^2sin\theta+F-b_x\dot x) x¨=M+m=mcos2θ1(mgsinθcosθ−mbθθ˙cosθ−mlθ˙2sinθ+F−bxx˙)
此时利用状态空间方程的一点知识,构建状态变量:
[ x 1 x 2 x 3 x 4 ] T = [ x x ˙ θ θ ˙ ] T \large [x_1 \quad x_2 \quad x_3 \quad x_4]^T=[x\quad \dot x \quad\theta \quad \dot\theta]^T [x1x2x3x4]T=[xx˙θθ˙]T
列出四个状态变量的表达式:
x ˙ 1 = x 2 \large \dot x_1=x_2 x˙1=x2
x ˙ 2 = 1 M + m − m c o s 2 x 3 ( m g s i n x 3 c o s x 3 − m b θ x 4 c o s x 3 − m l x 4 2 s i n x 3 + F − b x x 2 ) \large \dot x_2=\frac{1}{M+m-mcos^2x_3}(mgsinx_3cosx_3-mb_\theta x_4cosx_3-mlx^2_4sinx_3+F-b_xx_2) x˙2=M+m−mcos2x31(mgsinx3cosx3−mbθx4cosx3−mlx42sinx3+F−bxx2)
x ˙ 3 = x 4 \large \dot x_3=x_4 x˙3=x4
x ˙ 4 = 1 ( M + m ) c o s x 3 l − m l c o s x 3 [ ( M + m ) g t a n x 3 − ( M + m ) c o s x 3 b θ x 4 − m x 4 2 s i n x 3 + F − b x x 2 ] \large \dot x_4=\frac{1}{\frac{(M+m)}{cosx_3}l-mlcosx_3}[(M+m)gtanx_3-\frac{(M+m)}{cosx_3}b_\theta x_4-mx^2_4sinx_3+F-b_xx_2] x˙4=cosx3(M+m)l−mlcosx31[(M+m)gtanx3−cosx3(M+m)bθx4−mx42sinx3+F−bxx2]
它们就是我们得出的微分方程模型。
初步设计:
模糊集合设计:
总共有两个输入一个输出,三者模糊集合的划分都相同,此处仅列出误差e和输出u。论域为[-6,6],模糊集合为5个,分别命名为:[NB NS ZO PS PB],它们的分布如上图所示。由于在偏差过大时输出的控制应当几乎相同,故两侧的模糊集合曲线为梯形。模糊规则库的设计:
e\ de | NB | NS | ZO | PS | PB |
---|---|---|---|---|---|
NB | NB | NB | NB | NS | NB |
NS | NB | NB | NS | PB | PS |
ZO | NB | NB | ZO | PB | PB |
PS | PS | NB | PS | PB | PB |
PB | PB | PS | PB | PB | PB |
在实际仿真中,经过一系列的实验,我发现在这种参数设置下控制效果最好,但是控制精度似乎还不尽如人意,所以我考虑将位置和角度的模糊控制器分别设计并增加控制器的精度。
改进设计:
模糊集合设计:
总共有两个输入一个输出,三者模糊集合的划分都相同,此处仅列出误差e和输出u。论域为[-6,6],模糊集合为7个,分别命名为:[NB NM NS ZO PS PM PB],它们的分布如上图所示。模糊规则库的设计:
位置规则库:
e\de | NB | NM | NS | ZO | PS | PM | PB |
---|---|---|---|---|---|---|---|
NB | NB | NB | NB | NM | NM | NS | NS |
NM | NB | NB | NM | NM | NS | NS | ZO |
NS | NM | NM | NS | NS | ZO | PS | PS |
ZO | NM | NS | NS | ZO | PS | PS | PM |
PS | NS | NS | ZO | PS | PS | PM | PM |
PM | ZO | ZO | PS | PS | PM | PM | PB |
PB | PS | PS | PM | PM | PB | PB | PB |
角度规则库:
e\de | NB | NM | NS | ZO | PS | PM | PB |
---|---|---|---|---|---|---|---|
NB | NB | NB | NB | NB | NM | ZO | ZO |
NM | NB | NB | NB | NM | NM | ZO | ZO |
NS | NM | NM | NM | NS | ZO | PS | PS |
ZO | NM | NM | NS | ZO | PS | PM | PM |
PS | NM | NS | ZO | PS | PM | PM | PM |
PM | ZO | ZO | PM | PM | PB | PB | PB |
PB | ZO | ZO | PM | PM | PB | PB | PB |
针对位置和角度的不同性质,重新设计模糊控制器,得到的simulink仿真结果得到了显著提高。 在调节参数时,我发现位置误差具有的线性较强,故控制规则曲面接近于平面比较合适;而角度误差的非线性更强,在角度误差和误差微分一个为PB,另一个为NB时,输出控制位ZO最为合适。
建立simulink仿真模型:
我们将得到的微分方程模型代入simulink中,其中子系统Pendulum Dynamics是倒立摆的模拟,输入量是: x x ˙ θ θ ˙ F x\quad \dot x\quad \theta\quad \dot\theta\quad F xx˙θθ˙F 输出量是下一时刻对应的 x x ˙ θ θ ˙ x\quad \dot x\quad \theta\quad \dot\theta xx˙θθ˙ 从而实现对系统的仿真。
总体模型:
其中将位置误差、位置误差的微分作为模糊控制器1的输入,将角度误差、角度误差的微分作为模糊控制器2的输入,最后将两种控制效果合成(角度输入控制器效果为正,位置输入控制器效果为负)作为力输入倒立摆子系统中进行计算,子系统将下一步的四个参数反馈回控制器。
其中的两个函数就分别是上面推导初的和的微分方程表达式。
同时,为了直观观察,我还编写了matlab窗口运行的仿真程序,将模糊控制过程可视化为动画,不过由于整个过程都是用窗口程序单独编写的,在求变量微分时采用的一阶差分来代替,而且为了计算快速仿真时间间隔选用0.01s,窗口仿真动画与simulink仿真曲线稍有差异。其中仿真动画程序参考了GitHub上面的一个项目,地址为:点击访问
运行效果如下图:
原始控制器位置响应曲线(x1为位置,x2为速度)
原始控制器角度曲线(x3为角度,x4为角速度)
原始控制器输出曲线(F为力,ux为控制器1输出,uq为控制器2 输出)
改进控制器位置响应曲线(x为位置,dx为速度)
原始控制器角度曲线(θ为角度,dθ为角速度)
原始控制器输出曲线(F为力,ux为控制器1输出,uq为控制器2 输出)
从上述仿真结果可以看出,在10秒的仿真时间内,原始模糊控制器虽然可以完成控制,但是控制效果不好,其状态变量会经过较大的震荡,而控制力的输出虽然比较稳定,但合成它的两个模糊控制器输出量也呈现震荡形式。而改进控制器在各种状态参数都稳定的前提下,两个控制器的输出量也呈现收敛的趋势。
但是我在试着用参考资料代入我的模型求解时却遇到了一些问题,相反第一种控制器控制下系统稳定得更快,这可能与窗口程序中时间间隔选取过大等等条件有关。由于这是在不使用模糊控制器设计软件和simulink的前提下编写的程序,比较具有创新性,所以我在提交的作业中还是附上了窗口程序的代码和录制的动画视频。(见“各种图片……”文件夹)
同时,根据simulink求解的结果我也对其进行了动画可视化处理,首先通过运行对应的simulink模型,再运行Animation.m脚本即可查看并录制动画。
备注:后续进行了二级倒立摆的尝试,由于增加的角度变量与前两个状态变量有较强的非线性耦合性,所以模糊规则较难设计。最终只能实现第一级直立,稳定状态下第二级是下垂的,后续在学习相关知识后还会继续努力完成。
源代码下载