1、线代控制理论倒立摆实验线性系统倒立摆实验1. 实验目的通过实验进一步熟悉和掌握基于状态空间模型的控制系统分析和设计方法,了解这些方法的原理,掌握这些方法解决实际问题的步骤,熟悉相关的 MATLAB命令和编程方法,体会这些方法特点和优势。2. 实验内容 实验对象:小车倒立摆系统 系统参数: M - 小车质量(kg)m - 摆杆质量(kg) b - 小车摩擦系数(N/m/sec) l - 摆杆连接点到质心的长度(m)I - 摆杆的转动惯量q - 摆杆以向下平衡位置为基准的角位移 j - 摆杆以向上平衡位置为基准的角位移 x - 小车位移 F - 作用于小车上的力3. 系统建模过程假设系统各结构参数
2、如下:小车质量M=0.4kg摆质量m=0.25kg小车的摩擦系数b=0.15 N / m / sec小车与摆的连接点到摆质量中心的长度l=0.4 m摆的质量惯性矩I=0.005 kg.m 2施加在小车上的力F推车位置坐标X 小车倒立摆系统的受力分析图总结小车在水平方向上的受力,可以得到以下运动方程。(1)总结摆在水平方向上的受力,可以得到以下反作用力表达式。(2)如果将上述方程式代入第一个方程式中,则将获得该系统的两个控制方程式之一。(3)为了获得该系统的第二运动方程,求和摆垂直的力。(4)为了消去上面方程式中的和项,求摆的力矩,以得到以下方程式。(5)结合这最后两个表达式,将获得第二个控制方
3、程。(6)对方程进行线性化。(7)(8)(9)将以上近似值代入非线性控制方程后,我们得出了两个线性化的运动方程。注意已代替输入。(10)(11)4. 系统数学模型建立1. 系统传递函数:为了获得线性化系统方程的传递函数,我们必须首先对系统方程进行拉普拉斯变换,假设初始条件为零。产生的拉普拉斯变换如下所示。(12)(13)从上面的传递函数可以看出,原点既有极点又有零点。这些可以被消去,传递函数变为以下;(18)其次,可以以类似的方式得出以推车位置作为输出的传递函数,从而得出以下结论。(19)2.系统状态空间表达式的建立如果将线性运动方程重新排列成一系列的一阶微分方程,则它们也可以状态空间的形式表
4、示。由于方程是线性的,因此可以将它们转化为下面的状态空间表达式5、系统模型的数学实现建立系统传递函数源代码:M = 0.4;m = 0.25;b = 0.15;I = 0.005;g = 9.8;l = 0.4;M = 0.5;m = 0.2;b = 0.1;I = 0.006;g = 9.8;l = 0.3;q = (M+m)*(I+m*l2)-(m*l)2;s = tf(s);P_cart = (I+m*l2)/q)*s2 - (m*g*l/q)/(s4 + (b*(I + m*l2)*s3/q - (M + m)*m*g*l)*s2/q - b*m*g*l*s/q);P_pend = (
5、m*l*s/q)/(s3 + (b*(I + m*l2)*s2/q - (M + m)*m*g*l)*s/q - b*m*g*l/q);sys_tf = P_cart ; P_pend;inputs = u;outputs = x; phi;set(sys_tf,InputName,inputs)set(sys_tf,OutputName,outputs)sys_tf运行结果:系统的状态空间模型源代码:M = 0.4;m = 0.25;b = 0.15;I = 0.005;g = 9.8;l = 0.4;p = I*(M+m)+M*m*l2; %denominator for the A an
6、d B matricesA = 0 1 0 0; 0 -(I+m*l2)*b/p (m2*g*l2)/p 0; 0 0 0 1; 0 -(m*l*b)/p m*g*l*(M+m)/p 0;B = 0; (I+m*l2)/p; 0; m*l/p;C = 1 0 0 0; 0 0 1 0;D = 0; 0;states = x x_dot phi phi_dot;inputs = u;outputs = x; phi;sys_ss=ss(A,B,C,D,statename,states,inputname,inputs,outputname,outputs)运行结果:六、系统的分析系统的开环脉冲响
7、应源代码:M = 0.4;m = 0.25;b = 0.15;I = 0.005;g = 9.8;l = 0.4;q = (M+m)*(I+m*l2)-(m*l)2;s = tf(s);P_cart = (I+m*l2)/q)*s2 - (m*g*l/q)/(s4 + (b*(I + m*l2)*s3/q - (M + m)*m*g*l)*s2/q - b*m*g*l*s/q);P_pend = (m*l*s/q)/(s3 + (b*(I + m*l2)*s2/q - (M + m)*m*g*l)*s/q - b*m*g*l/q);sys_tf = P_cart ; P_pend;inputs
8、 = u;outputs = x; phi;set(sys_tf,InputName,inputs)set(sys_tf,OutputName,outputs)t=0:0.01:1;impulse(sys_tf,t);title(Open-Loop Impulse Response) 运行结果:系统开环阶跃响应将以下代码剪切到M文件下,可以得到系统开环阶跃响应t = 0:0.05:10;u = ones(size(t);y,t = lsim(sys_tf,u,t);plot(t,y)title(Open-Loop Step Response)axis(0 3 0 50)legend(x,phi
9、)运行结果:系统开环极点分布:七、系统控制方法一:根据给定的系统性能指标,参照希望极点(主导极点对)的确定方法,确定系统的闭环希望极点,实现小车倒立摆基于性能指标的极点配置控制。系统的各部分结构连接框图全状态反馈控制系统的示意图如下所示:源代码:A= sys_d.a;B = sys_d.b;C = sys_d.c;D = sys_d.d;Q = C*C;Q(1,1) = 5000;Q(3,3) = 100R = 1;K = dlqr(A,B,Q,R)Ac = (A-B*K);Bc = B;Cc = C;Dc = D;states = x x_dot phi phi_dot;inputs = r
10、;outputs = x; phi;sys_cl = ss(Ac,Bc,Cc,Dc,Ts,statename,states,inputname,inputs,outputname,outputs);t = 0:0.01:5;r =0.2*ones(size(t);y,t,x=lsim(sys_cl,r,t);AX,H1,H2 = plotyy(t,y(:,1),t,y(:,2),plot);set(get(AX(1),Ylabel),String,cart position (m)set(get(AX(2),Ylabel),String,pendulum angle (radians)titl
11、e(Step Response with Digital LQR Control)A = sys_d.a;B = sys_d.b;C = sys_d.c;D = sys_d.d;Q = C*C;Q(1,1) = 5000;Q(3,3) = 100R = 1;K = dlqr(A,B,Q,R)运行结果如下:源代码:Ac = (A-B*K);Bc = B;Cc = C;Dc = D;states = x x_dot phi phi_dot;inputs = r;outputs = x; phi;sys_cl = ss(Ac,Bc,Cc,Dc,Ts,statename,states,inputnam
12、e,inputs,outputname,outputs);t = 0:0.01:5;r =0.2*ones(size(t);y,t,x=lsim(sys_cl,r,t);AX,H1,H2 = plotyy(t,y(:,1),t,y(:,2),plot);set(get(AX(1),Ylabel),String,cart position (m)set(get(AX(2),Ylabel),String,pendulum angle (radians)title(Step Response with Digital LQR Control)运行结果:小车倒立摆基于状态观测器的状态反馈控制输入源代码
13、:Ace = (A-B*K) (B*K); zeros(size(A) (A-L*C);Bce = B*Nbar; zeros(size(B);Cce = Cc zeros(size(Cc);Dce = 0;0;states = x x_dot phi phi_dot e1 e2 e3 e4;inputs = r;outputs = x; phi;sys_est_cl = ss(Ace,Bce,Cce,Dce,Ts,statename,states,inputname,inputs,outputname,outputs);t = 0:0.01:5;r = 0.2*ones(size(t);y,
14、t,x=lsim(sys_est_cl,r,t);AX,H1,H2 = plotyy(t,y(:,1),t,y(:,2),plot);set(get(AX(1),Ylabel),String,cart position (m)set(get(AX(2),Ylabel),String,pendulum angle (radians)title(Step Response with Digital Observer-Based State-Feedback Control)运行结果:系统状态极点:方法三 小车倒立摆的线性二次型最优控制由于我们的能控矩阵是4x4,所以矩阵的秩必须是4。我们将使用MA
15、TLAB生成可控性矩阵,并使用MATLAB命令秩测试矩阵的秩。将以下附加命令添加到m文件并在MATLAB命令窗口中运行将产生以下输出。源代码:Q = C*C;R = 1;K = lqr(A,B,Q,R)Ac = (A-B*K);Bc = B;Cc = C;Dc = D;states = x x_dot phi phi_dot;inputs = r;outputs = x; phi;sys_cl = ss(Ac,Bc,Cc,Dc,statename,states,inputname,inputs,outputname,outputs);t = 0:0.01:5;r =0.2*ones(size(
16、t);y,t,x=lsim(sys_cl,r,t);AX,H1,H2 = plotyy(t,y(:,1),t,y(:,2),plot);set(get(AX(1),Ylabel),String,cart position (m)set(get(AX(2),Ylabel),String,pendulum angle (radians)title(Step Response with LQR Control)运行结果:经补偿输入源代码:Q = C*C;Q(1,1) = 5000;Q(3,3) = 100R = 1;K = lqr(A,B,Q,R)Ac = (A-B*K);Bc = B;Cc = C
17、;Dc = D;states = x x_dot phi phi_dot;inputs = r;outputs = x; phi;sys_cl = ss(Ac,Bc,Cc,Dc,statename,states,inputname,inputs,outputname,outputs);t = 0:0.01:5;r =0.2*ones(size(t);y,t,x=lsim(sys_cl,r,t);AX,H1,H2 = plotyy(t,y(:,1),t,y(:,2),plot);set(get(AX(1),Ylabel),String,cart position (m)set(get(AX(2)
18、,Ylabel),String,pendulum angle (radians)title(Step Response with LQR Control)输出响应曲线:闭环极点:8、心得体会实验中,我们组对于采用状态空间方法对小车倒立摆模型进行数学建模,运用Matlab软件对系统的开环传递函数和系统的状态空间模型进行数学分析和实现。我们发现系统的开环特性不稳定,加入控制器和反馈后稳定性得到改善。我们分别使用小车倒立摆基于性能指标的极点配置控制 ,小车倒立摆基于状态观测器的状态反馈控制,小车倒立摆的线性二次型最优控制在采用状态空间方法设计控制系统并完成实验以后,我们对状态空间法的使用变得更加熟悉,在实验中将MATLAB与状态空间法结合起来,让计算变得简单,也熟悉了MATLAB中的各种功能和命令。实验一开始我们并没有得到合乎理想的曲线,在经过一系列计算和调试,反复修改源代码之后,才得到了比较理想的曲线。经过这一系列的锻炼,我们对控制器的补偿操作也更加得心应手,受益匪浅,也了解了MATLAB最基本的使用方法,学会使用MATLAB绘制传递函数曲线,求取开环闭环极点零点,还学会构造函数模型,具备了一定独立求解的能力。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1