1.推导直线型一级倒立摆的数学建模公式,得到状态空间表达式和传递函数,并分析系统的稳定性
2.采用控制算法将系统从不稳定调整到稳定状态,并用matlab和simulink仿真实现
(参考(完整版)直线一级倒立摆建模 - 百度文库 https://wenku.baidu.com/view/ca36bbba152ded630b1c59eef8c75fbfc67d9413.html)
倒立摆系统的控制问题一直是控制领域中的一个经典问题,控制的目标是通过在小车底部施加一个力u(控制量),使小车停留在预定的位置,且不超过已预先设定好的垂直偏离角度范围。一级倒立摆系统是一个不稳定的系统,需要建立其数学模型并采用控制算法调控到稳定状态。因为其为非线性问题,处理起来较为困难,因此计算过程中需要将其线性化处理。
基本参数:
小车质量M;摆杆质量m;杆长2L;转角 θ \theta θ;小车与地面之间的摩擦系数 μ \mu μ;重力加速度 g g g
在研究过程中,应忽略空气摩擦等,而后可将倒立摆系统进行抽象化,认为其由小车和匀质刚性杆两部分组成并对这两部分进行如图所示的受力分析:
小车X方向: F − F x − f = M x ¨ (1) F-Fx-f=M\ddot{x} \tag{1} F−Fx−f=Mx¨(1)
摆杆X方向: F x = m d 2 d t 2 ( x − L s i n θ ) = m d d t ( x ˙ − L c o s θ θ ˙ ) = m x ¨ + m L s i n θ θ ˙ 2 − m L c o s θ θ ¨ (2) Fx=m\frac{\mathrm{d^2} }{\mathrm{d} t^2}(x-Lsin \theta ) = m\frac{\mathrm{d} }{\mathrm{d} t}(\dot{x}-Lcos \theta\dot{\theta}) =m\ddot{x}+mLsin \theta{\dot{\theta}}^2-mLcos \theta\ddot{\theta} \tag{2} Fx=mdt2d2(x−Lsinθ)=mdtd(x˙−Lcosθθ˙)=mx¨+mLsinθθ˙2−mLcosθθ¨(2)
摆杆Y方向: m g − F y = m d 2 d t 2 ( L c o s θ ) = m d d t ( − L s i n θ θ ˙ ) = − m L c o s θ θ ˙ 2 − m L s i n θ θ ¨ (3) mg-Fy=m\frac{\mathrm{d^2} }{\mathrm{d} t^2}(Lcos \theta ) =m\frac{\mathrm{d} }{\mathrm{d} t}(-Lsin \theta\dot{\theta}) =-mLcos \theta{\dot{\theta}}^2-mLsin \theta\ddot{\theta} \tag{3} mg−Fy=mdt2d2(Lcosθ)=mdtd(−Lsinθθ˙)=−mLcosθθ˙2−mLsinθθ¨(3)
摆杆力矩平衡: I θ ¨ = F y L s i n θ + F x L c o s θ (4) I\ddot{\theta}=FyLsin\theta +FxLcos\theta \tag{4} Iθ¨=FyLsinθ+FxLcosθ(4)
由于控制的目的是保持倒立摆直立,此处假设摆杆转角较小,则可以得到如下假设 s i n θ = θ sin\theta =\theta sinθ=θ, c o s θ = 1 cos\theta =1 cosθ=1 。
式(2)(3)(4)变为
F x = m x ¨ + m L θ θ ˙ 2 − m L θ ¨ F y = m g + m L θ ˙ 2 + m L θ θ ¨ I θ ¨ = F x L + F y L θ \begin{matrix} Fx=m\ddot{x}+mL\theta{\dot{\theta}}^2-mL\ddot{\theta}\\ Fy=mg+mL{\dot{\theta}}^2+mL\theta\ddot{\theta}\\ I\ddot{\theta}=FxL+FyL\theta\end{matrix} Fx=mx¨+mLθθ˙2−mLθ¨Fy=mg+mLθ˙2+mLθθ¨Iθ¨=FxL+FyLθ
以上方程都是非线性方程,为求得解析解,需做线性化处理,有 θ 2 = 0 、 θ ˙ = 0 、 θ ˙ 2 = 0 {\theta}^2=0、\dot{\theta}=0、{\dot{\theta}}^2=0 θ2=0、θ˙=0、θ˙2=0。设置摩擦力为 f = μ x ˙ f=\mu \dot{x} f=μx˙。设置输入控制量为u,则系统的平衡控制方程为
(2)带入(1),(2)(3)带入(4)
{ ( M + m ) x ¨ + μ x ˙ − m L θ ¨ = u ( I + m L 2 ) θ ¨ − m L x ¨ − m g L θ = 0 (5) \left\{\begin{matrix} (M+m)\ddot{x}+\mu\dot{x} -mL\ddot{\theta}=u \\ (I+mL^2)\ddot{\theta}-mL\ddot{x}-mgL\theta=0 \end{matrix}\right. \tag{5} {(M+m)x¨+μx˙−mLθ¨=u(I+mL2)θ¨−mLx¨−mgLθ=0(5)
θ ¨ = − μ m L ( M + m ) I + M m L 2 x ˙ + ( M + m ) m g L ( M + m ) I + M m L 2 θ + m L ( M + m ) I + M m L 2 u x ¨ = − μ ( I + m L 2 ) ( M + m ) I + M m L 2 x ˙ + m 2 g L 2 ( M + m ) I + M m L 2 θ + I + m L 2 ( M + m ) I + M m L 2 u (6) \begin{matrix} \ddot{\theta}=-\frac{\mu mL}{(M+m)I+MmL^2}\dot x+\frac{(M+m)mgL}{(M+m)I+MmL^2}\theta+\frac{mL}{(M+m)I+MmL^2}u \\ \ddot{x}=-\frac{\mu (I+mL^2)}{(M+m)I+MmL^2}\dot x+\frac{m^2gL^2}{(M+m)I+MmL^2}\theta+\frac{I+mL^2}{(M+m)I+MmL^2}u \end{matrix}\tag{6} θ¨=−(M+m)I+MmL2μmLx˙+(M+m)I+MmL2(M+m)mgLθ+(M+m)I+MmL2mLux¨=−(M+m)I+MmL2μ(I+mL2)x˙+(M+m)I+MmL2m2gL2θ+(M+m)I+MmL2I+mL2u(6)
状态方程:
{ X ˙ = A X + B U Y = C X + D U \left\{\begin{matrix} \dot{X}=AX+BU \\ Y=CX+DU \end{matrix}\right. {X˙=AX+BUY=CX+DU
X = [ x x ˙ θ θ ˙ ] X=\left [ \begin{matrix} x & \dot x & \theta & \dot{\theta} \end{matrix} \right ] X=[xx˙θθ˙]
状态空间表达式:
[ x ˙ x ¨ θ ˙ θ ¨ ] = [ 0 1 0 0 0 − μ ( I + m L 2 ) ( M + m ) I + M m L 2 m 2 g L 2 ( M + m ) I + M m L 2 0 0 0 0 1 0 − μ m L ( M + m ) I + M m L 2 ( M + m ) m g L ( M + m ) I + M m L 2 0 ] . [ x x ˙ θ θ ˙ ] + [ 0 I + m L 2 ( M + m ) I + M m L 2 0 m L ( M + m ) I + M m L 2 ] . u (7) \left [ \begin{matrix} \dot x \\ \ddot x \\ \dot{ \theta} \\ \ddot{\theta} \end{matrix} \right ] = \left [ \begin{matrix} 0 & 1 & 0 & 0 \\ 0 & -\frac{\mu (I+mL^2)}{(M+m)I+MmL^2} & \frac{m^2gL^2}{(M+m)I+MmL^2} & 0 \\ 0 & 0 & 0 & 1 \\ 0 & -\frac{\mu mL}{(M+m)I+MmL^2} & \frac{(M+m)mgL}{(M+m)I+MmL^2} & 0 \end{matrix} \right ] . \left [ \begin{matrix} x \\ \dot x \\ \theta \\ \dot{\theta} \end{matrix} \right ] + \left [ \begin{matrix} 0 \\ \frac{I+mL^2}{(M+m)I+MmL^2} \\ 0 \\ \frac{mL}{(M+m)I+MmL^2} \end{matrix} \right ] .u \tag{7} ⎣⎢⎢⎡x˙x¨θ˙θ¨⎦⎥⎥⎤=⎣⎢⎢⎢⎡00001−(M+m)I+MmL2μ(I+mL2)0−(M+m)I+MmL2μmL0(M+m)I+MmL2m2gL20(M+m)I+MmL2(M+m)mgL0010⎦⎥⎥⎥⎤.⎣⎢⎢⎡xx˙θθ˙⎦⎥⎥⎤+⎣⎢⎢⎢⎡0(M+m)I+MmL2I+mL20(M+m)I+MmL2mL⎦⎥⎥⎥⎤.u(7)
Y = [ x θ ] = [ 1 0 0 0 0 0 1 0 ] . [ x x ˙ θ θ ˙ ] + [ 0 0 ] . u (8) Y= \left [ \begin{matrix} x \\ { \theta} \end{matrix} \right ] = \left [ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{matrix} \right ] . \left [ \begin{matrix} x \\ \dot x \\ \theta \\ \dot{\theta} \end{matrix} \right ] + \left [ \begin{matrix} 0 \\ 0 \end{matrix} \right ] .u \tag{8} Y=[xθ]=[10000100].⎣⎢⎢⎡xx˙θθ˙⎦⎥⎥⎤+[00].u(8)
式中, x x x是小车的位移; x ˙ \dot x x˙是小车的速度; θ \theta θ是摆杆的角度; θ ˙ \dot \theta θ˙是摆杆的角速度;u是输入;Y是输出。
从能量的角度出发建立系统的运动方程,即系统的动能、势能以及外力。定义第二类拉格朗日方程为:
L = T − V d d t ∂ L ∂ q ˙ i − ∂ L ∂ q i = W i ( i = 1 , . . . , k ) (9) \begin{matrix} L=T-V\\ \frac{\rm d}{\rm d t}\frac{\partial L}{\partial \dot q_i}-\frac{\partial L}{\partial q_i}=W_i (i=1,...,k) \end{matrix} \tag{9} L=T−Vdtd∂q˙i∂L−∂qi∂L=Wi(i=1,...,k)(9)
其中, T T T是系统的动能, V V V是系统的势能, W i W_i Wi对应于广义坐标 q i q_i qi的非有势力的广义力。(有势力是指作用在物体的力所做功仅与力作用点的起始位置和终了位置有关,而与其作用点经过的路径无关的力。)
动能:
T c = 1 2 M x ˙ 2 T b = 1 2 I θ ˙ 2 + 1 2 m { [ d d t ( x − L s i n θ ) ] 2 + [ d d t ( L c o s θ ) ] 2 } = 1 2 I θ ˙ 2 + 1 2 m ( x ˙ 2 − 2 L c o s θ θ ˙ x ˙ + L 2 θ ˙ 2 ) (10) \begin{matrix} T_c=\frac{1}{2}M{\dot x}^2\\ T_b=\frac{1}{2}I{\dot \theta}^2+\frac{1}{2}m \left \{ \left [ \frac{\rm d}{{\rm d} t}(x-Lsin\theta) \right ] ^2 +\left [ \frac{\rm d}{{\rm d} t}(Lcos\theta) \right ] ^2 \right \} \\ =\frac{1}{2}I{\dot \theta}^2+\frac{1}{2}m({\dot x}^2-2Lcos\theta\dot \theta\dot x+L^2 {\dot \theta}^2) \end{matrix} \tag{10} Tc=21Mx˙2Tb=21Iθ˙2+21m{[dtd(x−Lsinθ)]2+[dtd(Lcosθ)]2}=21Iθ˙2+21m(x˙2−2Lcosθθ˙x˙+L2θ˙2)(10)
势能
V c = 0 V b = m g L c o s θ (11) \begin{matrix} V_c=0\\ V_b=mg Lcos\theta \end{matrix} \tag{11} Vc=0Vb=mgLcosθ(11)
外力
W c = F − f W b = 0 (12) \begin{matrix} W_c=F-f\\ W_b=0 \end{matrix} \tag{12} Wc=F−fWb=0(12)
总动能、势能、外力
T = T c + T b = 1 2 M x ˙ 2 + 1 2 I θ ˙ 2 + 1 2 m ( x ˙ 2 − 2 L c o s θ θ ˙ x ˙ + L 2 θ ˙ 2 ) V = V c + V b = m g L c o s θ W = W c + W b = F − f (13) \begin{matrix} T=T_c+T_b=\frac{1}{2}M{\dot x}^2+\frac{1}{2}I{\dot \theta}^2+\frac{1}{2}m({\dot x}^2-2Lcos\theta\dot \theta\dot x+L^2 {\dot \theta}^2)\\ V=V_c+V_b=mg Lcos\theta\\ W=W_c+W_b=F-f \end{matrix} \tag{13} T=Tc+Tb=21Mx˙2+21Iθ˙2+21m(x˙2−2Lcosθθ˙x˙+L2θ˙2)V=Vc+Vb=mgLcosθW=Wc+Wb=F−f(13)
结合式(9)计算lagrange方程求解
L = T − V = 1 2 M x ˙ 2 + 1 2 I θ ˙ 2 + 1 2 m ( x ˙ 2 − 2 L c o s θ θ ˙ x ˙ + L 2 θ ˙ 2 ) − m g L c o s θ = 1 2 ( M + m ) x ˙ 2 + 1 2 ( I + m L 2 ) θ ˙ 2 − m L c o s θ θ ˙ x ˙ − m g L c o s θ (14) \begin{matrix} L=T-V=\frac{1}{2}M{\dot x}^2+\frac{1}{2}I{\dot \theta}^2+\frac{1}{2}m({\dot x}^2-2Lcos\theta\dot \theta\dot x+L^2 {\dot \theta}^2)-mg Lcos\theta\\ =\frac{1}{2}(M+m){\dot x}^2+\frac{1}{2}(I+mL^2){\dot \theta}^2-mLcos\theta\dot \theta\dot x-mg Lcos\theta \end{matrix} \tag{14} L=T−V=21Mx˙2+21Iθ˙2+21m(x˙2−2Lcosθθ˙x˙+L2θ˙2)−mgLcosθ=21(M+m)x˙2+21(I+mL2)θ˙2−mLcosθθ˙x˙−mgLcosθ(14)
对 x x x求导
∂ L ∂ x ˙ = ( M + m ) x ˙ − m L c o s θ θ ˙ d d t ∂ L ∂ x ˙ = ( M + m ) x ¨ + m L s i n θ θ ˙ 2 − m L c o s θ θ ¨ ∂ L ∂ x = 0 d d t ∂ L ∂ x ˙ − ∂ L ∂ x = ( M + m ) x ¨ + m L s i n θ θ ˙ 2 − m L c o s θ θ ¨ = F − f (15) \begin{matrix} \frac{\partial L}{\partial \dot x} =(M+m)\dot x-mLcos\theta \dot \theta\\ \frac{\rm d}{\rm d t}\frac{\partial L}{\partial \dot x} =(M+m)\ddot x+mLsin\theta {\dot \theta}^2-mLcos\theta \ddot \theta\\ \frac{\partial L}{\partial x} =0\\ \frac{\rm d}{\rm dt}\frac{\partial L}{\partial \dot x} -\frac{\partial L}{\partial x}=(M+m)\ddot x+mLsin\theta {\dot \theta}^2-mLcos\theta \ddot \theta=F-f \end{matrix} \tag{15} ∂x˙∂L=(M+m)x˙−mLcosθθ˙dtd∂x˙∂L=(M+m)x¨+mLsinθθ˙2−mLcosθθ¨∂x∂L=0dtd∂x˙∂L−∂x∂L=(M+m)x¨+mLsinθθ˙2−mLcosθθ¨=F−f(15)
对 θ \theta θ求导
∂ L ∂ θ ˙ = ( I + m L 2 ) θ ˙ − m L c o s θ x ˙ d d t ∂ L ∂ θ ˙ = ( I + m L 2 ) θ ¨ + m L s i n θ θ ˙ x ˙ − m L c o s θ x ¨ ∂ L ∂ θ = m L s i n θ θ ˙ x ˙ + m g L s i n θ d d t ∂ L ∂ θ ˙ − ∂ L ∂ θ = ( I + m L 2 ) θ ¨ + m L s i n θ θ ˙ x ˙ − m L c o s θ x ¨ − m L s i n θ θ ˙ x ˙ − m g L s i n θ = 0 (16) \begin{matrix} \frac{\partial L}{\partial \dot \theta} =(I+mL^2)\dot \theta-mLcos\theta \dot x\\ \frac{\rm d}{\rm dt}\frac{\partial L}{\partial \dot \theta} =(I+mL^2)\ddot \theta+mLsin\theta \dot \theta \dot x-mLcos\theta \ddot x\\ \frac{\partial L}{\partial \theta} =mLsin\theta\dot \theta\dot x+mgLsin\theta\\ \frac{\rm d}{\rm dt}\frac{\partial L}{\partial \dot \theta} -\frac{\partial L}{\partial \theta}=(I+mL^2)\ddot \theta+mLsin\theta \dot \theta \dot x-mLcos\theta \ddot x-mLsin\theta\dot \theta\dot x-mgLsin\theta=0 \end{matrix} \tag{16} ∂θ˙∂L=(I+mL2)θ˙−mLcosθx˙dtd∂θ˙∂L=(I+mL2)θ¨+mLsinθθ˙x˙−mLcosθx¨∂θ∂L=mLsinθθ˙x˙+mgLsinθdtd∂θ˙∂L−∂θ∂L=(I+mL2)θ¨+mLsinθθ˙x˙−mLcosθx¨−mLsinθθ˙x˙−mgLsinθ=0(16)
控制方程
{ ( M + m ) x ¨ + m L s i n θ θ ˙ 2 − m L c o s θ θ ¨ = F − f ( I + m L 2 ) θ ¨ + m L s i n θ θ ˙ x ˙ − m L c o s θ x ¨ − m L s i n θ θ ˙ x ˙ − m g L s i n θ = 0 (17) \left\{\begin{matrix} (M+m)\ddot x+mLsin\theta {\dot \theta}^2-mLcos\theta \ddot \theta=F-f\\ (I+mL^2)\ddot \theta+mLsin\theta \dot \theta \dot x-mLcos\theta \ddot x-mLsin\theta\dot \theta\dot x-mgLsin\theta=0 \end{matrix}\right. \tag{17} {(M+m)x¨+mLsinθθ˙2−mLcosθθ¨=F−f(I+mL2)θ¨+mLsinθθ˙x˙−mLcosθx¨−mLsinθθ˙x˙−mgLsinθ=0(17)
假设 s i n θ = θ sin\theta =\theta sinθ=θ, c o s θ = 1 cos\theta =1 cosθ=1, θ ˙ 2 = 0 {\dot \theta}^2=0 θ˙2=0, θ θ ˙ = 0 \theta \dot \theta=0 θθ˙=0
{ ( M + m ) x ¨ − m L θ ¨ + μ x ˙ = u ( I + m L 2 ) θ ¨ − m L x ¨ − m g L θ = 0 (18) \left\{\begin{matrix} (M+m)\ddot x-mL\ddot \theta+\mu \dot x=u\\ (I+mL^2)\ddot \theta-mL\ddot x-mgL\theta=0 \end{matrix}\right. \tag{18} {(M+m)x¨−mLθ¨+μx˙=u(I+mL2)θ¨−mLx¨−mgLθ=0(18)
可以发现该式与牛顿第二定理计算得到的结果(5)是一致的,说明两种方法都可以得到正确的动力学方程式。
最后对式(18)进行拉普拉斯变换:
{ ( M + m ) X ( s ) s 2 − m L Θ ( s ) s 2 + μ X ( s ) s = U ( s ) ( I + m L 2 ) Θ ( s ) s 2 − m L X ( s ) s 2 − m g L Θ ( s ) = 0 (18) \left\{\begin{matrix} (M+m)X(s)s^2-mL\Theta (s)s^2+\mu X(s)s=U(s)\\ (I+mL^2)\Theta (s)s^2-mLX(s)s^2-mgL\Theta (s)=0 \end{matrix}\right.\tag{18} {(M+m)X(s)s2−mLΘ(s)s2+μX(s)s=U(s)(I+mL2)Θ(s)s2−mLX(s)s2−mgLΘ(s)=0(18)
可以得到摆杆转角与输入力的开环传递函数:
G r o d ( s ) = Θ ( s ) U ( s ) = m L s 2 [ ( M + m ) I + M m I 2 ] s 4 + μ ( I + m L 2 ) s 3 − ( M + m ) m g L s 2 − μ m g L s (19) \begin{matrix} G_{rod}(s)=\frac{\Theta (s)}{U(s)} =\frac{mLs^2}{[(M+m)I+MmI^2]s^4+\mu(I+mL^2)s^3-(M+m)mgLs^2-\mu mgL s} \end{matrix} \tag{19} Grod(s)=U(s)Θ(s)=[(M+m)I+MmI2]s4+μ(I+mL2)s3−(M+m)mgLs2−μmgLsmLs2(19)
小车位移与输入力的开环传递函数:
G c a r ( s ) = X ( s ) U ( s ) = ( I + m L 2 ) s 2 − m g L [ ( M + m ) I + M m L 2 ] s 4 + μ ( I + m L 2 ) s 3 − ( M + m ) m g L s 2 − μ m g L s (20) \begin{matrix} G_{car}(s)=\frac{X (s)}{U(s)} =\frac{(I+mL^2)s^2-mgL}{[(M+m)I+MmL^2]s^4+\mu(I+mL^2)s^3-(M+m)mgLs^2-\mu mgL s} \end{matrix} \tag{20} Gcar(s)=U(s)X(s)=[(M+m)I+MmL2]s4+μ(I+mL2)s3−(M+m)mgLs2−μmgLs(I+mL2)s2−mgL(20)
若控制系统在初始条件和扰动作用下 ,其瞬态响应随时间的推移而逐渐衰减并趋于原点(平衡工作点),则称该系统是稳定的。反之‚如果控制系统受到扰动作用后,其瞬态响应随时间的推移而发散,输出呈持续振荡过程‚或者输出无限制地偏离平衡状态,则称该系统是不稳定的。
李雅普诺夫稳定性判据阶线性时不变连续系统 X ˙ = A X + B U \dot{X}=AX+BU X˙=AX+BU的平衡状态 x e = 0 x_e=0 xe=0渐近稳定的充要条件是矩阵 A A A的所有特征值均具有负实部,即系统的极点都要位于负半平面。
线性连续定常系统 X ˙ = A X + B U \dot{X}=AX+BU X˙=AX+BU,如果存在一个分段连续的输入 u ( t ) u(t) u(t)‚能在有限的时间区间 [ t 0 , t f ] [t_0,t_f] [t0,tf]内‚使系统由某一初始状态‚ x ( t 0 ) x(t_0) x(t0)转移到指定的任意终端状态 x ( y f ) x(y_f) x(yf),‚则称此状态是能控的。若系统的所有状态都是能控的,‚则称此系统是状态完全能控的‚或简称系统是能控的。
可控性判别矩阵:由 A , B A,B A,B构成的可控性判别矩阵满秩。
r a n k ( Q c ) = n rank(Q_c)=n rank(Qc)=n,其中 Q c = [ B A B A 2 B ⋯ A n − 1 B ] Q_c=\left [ \begin{matrix} B & AB & A^2B \cdots A^{n-1}B \end{matrix} \right ] Qc=[BABA2B⋯An−1B], n n n是系统的维数。
对于输出方程 Y = C X Y=CX Y=CX,存在一有限时间 [ t 0 , t f ] [t_0,t_f] [t0,tf],使得在期间测量得到的 y ( t ) y(t) y(t),能唯一地确定系统的初始状态‚ x ( t 0 ) x(t_0) x(t0),‚则称此系统是可观测的。若系统的每一个状态都是可观测的,则称系统是状态完全可观测的,简称可观测的。
其判别条件为:由 A , C A,C A,C构成的可观测性判别矩阵满秩。
r a n k ( Q 0 ) = n rank(Q_0)=n rank(Q0)=n,其中 Q 0 = [ C C A C A 2 ⋯ C A n − 1 ] Q_0=\left [ \begin{matrix} C & CA & CA^2 \cdots CA^{n-1} \end{matrix} \right ] Q0=[CCACA2⋯CAn−1], n n n是系统的维数。
各参数给定为:
小车质量 | M = 0.5 kg | 摆杆质量 | m = 0.5 kg |
---|---|---|---|
地面摩擦系数 | μ \mu μ = 0.1 | 小车惯性矩 | I = 0.006 |
重力加速度 | g = 9.8 | 小车长度 | L = 0.3 m |
带入参数可以求得开环传递函数为
G r o d ( s ) = − 0.15 s 2 − 0.0285 s 4 − 0.0051 s 3 + 1.47 s 2 + 0.147 s G c a r ( s ) = − 0.051 s 2 + 1.47 − 0.0285 s 4 − 0.0051 s 3 + 1.47 s 2 + 0.147 s \begin{matrix} G_{rod}(s)=\frac{-0.15s^2}{-0.0285s^4-0.0051s^3+1.47s^2+0.147s}\\ G_{car}(s)=\frac{-0.051s^2+1.47}{-0.0285s^4-0.0051s^3+1.47s^2+0.147s} \end{matrix} Grod(s)=−0.0285s4−0.0051s3+1.47s2+0.147s−0.15s2Gcar(s)=−0.0285s4−0.0051s3+1.47s2+0.147s−0.051s2+1.47
这里求极点的方法可以直接用matlab的函数tf2zp(num,den),num和den对应传递函数和分子和分母系数。或是用solve函数求解分母的跟。计算得到系统极点:[-7.22,-0.1,0,7.14],有两个极点位于右半平面,系统不稳定。
状态方程:
A = [ 0 1 0 0 0 − 0.1789 7.7368 0 0 0 0 1 0 − 0.5263 51.5789 0 ] , B = [ 0 1.7895 0 5.2632 ] \begin{matrix} A=\left [ \begin{matrix} 0 & 1 & 0 & 0\\ 0 & -0.1789 & 7.7368 & 0\\ 0 & 0 & 0 & 1\\ 0 & -0.5263 & 51.5789 & 0 \end{matrix}\right], B=\left [ \begin{matrix} 0 \\ 1.7895 \\ 0 \\ 5.2632 \end{matrix}\right] \end{matrix} A=⎣⎢⎢⎡00001−0.17890−0.526307.7368051.57890010⎦⎥⎥⎤,B=⎣⎢⎢⎡01.789505.2632⎦⎥⎥⎤
系统的特征方程 d e t ( λ I − A ) = 0 det(\lambda I-A)=0 det(λI−A)=0,求解得到特征根同样为[-7.22,-0.1,0,7.14],系统不稳定。
能控性和能观性判据
r a n k [ B A B A 2 B ⋯ A n − 1 B ] = 4 r a n k [ C C A C A 2 ⋯ C A n − 1 ] = 4 \begin{matrix} rank \left [ \begin{matrix} B & AB & A^2B \cdots A^{n-1}B \end{matrix} \right ]=4\\ rank\left [ \begin{matrix} C & CA & CA^2 \cdots CA^{n-1} \end{matrix} \right ]=4 \end{matrix} rank[BABA2B⋯An−1B]=4rank[CCACA2⋯CAn−1]=4
所以直线一级倒立摆系统是能控的和能观测的。
由传递函数建立系统开环模型
输入为阶跃函数
e ( t ) = { 0 , t < 0 1 , t > 0 e(t)= \left\{\begin{matrix} 0,t<0\\ 1,t>0 \end{matrix}\right. e(t)={0,t<01,t>0
拉普拉斯变换
U ( s ) = ∫ 0 ∞ e ( t ) e − s t d t = ∫ 0 ∞ e − s t d t = − e − s t s ∣ 0 ∞ = 1 s U(s)=\int_{0}^{\infty} e(t)e^{-st} \rm d t=\int_{0}^{\infty} e^{-st} \rm d t=-\frac{e^{-st}}{s}|_{0}^{\infty}=\frac{1}{s} U(s)=∫0∞e(t)e−stdt=∫0∞e−stdt=−se−st∣0∞=s1
输出
Θ ( s ) = G ( s ) U ( s ) = − 0.15 s 2 s ( s + 7.22 ) ( s + 0.1 ) ( s − 7.14 ) \Theta (s)=G(s)U(s)=\frac{-0.15s^2}{s(s+7.22)(s+0.1)(s-7.14)} Θ(s)=G(s)U(s)=s(s+7.22)(s+0.1)(s−7.14)−0.15s2
逆拉普拉斯变换
θ ( t ) = L − 1 [ Θ ( s ) ] = L − 1 [ − 0.15 s 2 s ( s + 7.22 ) ( s + 0.1 ) ( s − 7.14 ) ] = L − 1 [ 0.0103 s + 7.22 + − 0.0106 s + 0.1 + 0.0003 s − 7.14 ] = 0.0103 e − 7.22 t − 0.0106 e − 0.1 t + 0.0003 e 7.14 t \theta (t)=L^{-1}[\Theta (s)]=L^{-1}[\frac{-0.15s^2}{s(s+7.22)(s+0.1)(s-7.14)}]\\ =L^{-1}[\frac{0.0103}{s+7.22}+\frac{-0.0106}{s+0.1}+\frac{0.0003}{s-7.14}]\\ =0.0103e^{-7.22t}-0.0106e^{-0.1t}+0.0003e^{7.14t} θ(t)=L−1[Θ(s)]=L−1[s(s+7.22)(s+0.1)(s−7.14)−0.15s2]=L−1[s+7.220.0103+s+0.1−0.0106+s−7.140.0003]=0.0103e−7.22t−0.0106e−0.1t+0.0003e7.14t
利用matlab编写以上函数,带入时间t=0:0.001:10就可以得到响应的曲线如下(此处也可以直接用matlab自带的函数impulse计算单位脉冲响应)
simulin仿真结果如下图,基本趋势和matlab的结果一致。
以上响应的结果都可以看出该开环模型的输出是明显发散的,说明模型不稳定,需要采用控制算法对其进行调控。
经典控制理论中,闭环传递函数的极点影响着系统运动的模态,同时极点的分布也影响着运动的瞬态性能,所以理想的办法是根据预期的性能设定相应的指标,求解极点的分布。利用根轨迹校正法,在开环系统中增设零点使整个根轨迹向左移动,从而增加系统的相对稳定性,减少系统的调节时间。
而在现代控制理论中,改变极点的分布称之为极点配置,可以通过选择反馈增益矩阵,将闭环系统的极点恰好配置在根平面上所期望的位置,以获得所希望的动态性能。将系统由不稳定变为稳定的过程也称之为“镇定”。
线性定常系统状态空间模型为:
{ X ˙ = A X + B U Y = C X + D U \left\{\begin{matrix} \dot{X}=AX+BU \\ Y=CX+DU \end{matrix}\right. {X˙=AX+BUY=CX+DU
若将状态作为反馈变量形成负反馈,可记 U = − K X U=-KX U=−KX。其中 K K K为状态反馈增益矩阵。得到状态反馈后的系统状态空间模型:
X ˙ = ( A − B K ) X \begin{matrix} \dot{X}=(A-BK)X \end{matrix} X˙=(A−BK)X
系统特征式为 d e t ( s I − A + B K ) = α n ( s − λ 1 ∗ ) ( s − λ 2 ∗ ) ⋯ ( s − λ n ∗ ) det(sI-A+BK)=\alpha _n (s- \lambda_1^*)(s- \lambda_2^*) \cdots (s- \lambda_n^*) det(sI−A+BK)=αn(s−λ1∗)(s−λ2∗)⋯(s−λn∗)。其中, λ i ∗ \lambda_i^* λi∗为期望的闭环极点。通过将由预期的极点计算得到的反馈矩阵作用到系统上,就可以将闭环系统调整为稳定的系统。
极点配置法的关键就在于期望极点的位置选取。对于一个 n n n维系统,就需要给定 n n n个实极点。要考虑极点对于系统的主导影响作用以及系统零点分布的状况,同时还需考虑系统抗干扰的能力。
求解反馈矩阵 K K K的过程:
(1)给定的线性定常系统和一组期望的闭环极点 p n e e d = [ λ 1 , λ 2 , . . . , λ n ] p_{need}=[\lambda_1,\lambda_2,...,\lambda_n] pneed=[λ1,λ2,...,λn],计算得到反馈矩阵的步骤如下:
(2)检验系统的能控性。如果系统是能控的,则继续第二步。
r a n k ( Q c ) = n Q c = [ B A B A 2 B ⋯ A n − 1 B ] \begin{matrix} rank(Q_c)=n\\ Q_c= \left [ \begin{matrix} B & AB & A^2B \cdots A^{n-1}B \end{matrix} \right ] \end{matrix} rank(Qc)=nQc=[BABA2B⋯An−1B]
单输入系统的能控标准型
{ X ˙ = A X + B U Y = C X \left\{\begin{matrix} \dot{X}=AX+BU \\ Y=CX \end{matrix}\right. {X˙=AX+BUY=CX
构造一能满足条件的可逆变换矩阵 T 1 T_1 T1如下所示:
T 1 = ( A n − 1 B , A n − 2 B , … , A B , B ) ( 1 0 0 0 0 a n − 1 1 0 0 0 ⋮ ⋮ ⋱ 0 0 a 2 a 3 … 1 0 a 1 a 2 … a n − 1 1 ) \begin{matrix} T_{1}=\left(A^{n-1} B, A^{n-2} B, \ldots, A B, B\right)\left(\begin{array}{ccccc}1 & 0 & 0 & 0 & 0 \\ a_{n-1} & 1 & 0 & 0 & 0 \\ \vdots & \vdots & \ddots & 0 & 0 \\ a_{2} & a_{3} & \ldots & 1 & 0 \\ a_{1} & a_{2} & \ldots & a_{n-1} & 1\end{array}\right) \end{matrix} T1=(An−1B,An−2B,…,AB,B)⎝⎜⎜⎜⎜⎜⎛1an−1⋮a2a101⋮a3a200⋱……0001an−100001⎠⎟⎟⎟⎟⎟⎞
则可得到能控标准型下的系统变量坐标 X = T 1 X ˉ X=T_1 \bar{X} X=T1Xˉ, X ˙ = T 1 X ˉ ˙ \dot {X}=T_1 \dot {\bar{X}} X˙=T1Xˉ˙。
X ˉ ˙ = T 1 − 1 A T 1 X ˉ + T 1 − 1 B U = A ˉ X ˉ + B ˉ U \begin{matrix} \dot{\bar{X}}=T_1^{-1} A T_1 \bar{X} +T_1^{-1} BU =\bar{A}\bar{X} + \bar{B}U\\ \end{matrix} Xˉ˙=T1−1AT1Xˉ+T1−1BU=AˉXˉ+BˉU
其中
A ˉ = T 1 − 1 A T 1 = [ 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 0 1 − a 0 − a 1 ⋯ − a n − 1 ] B ˉ = T 1 − 1 B U = [ 0 ⋯ 0 1 ] T \begin{matrix} \bar{A}=T_1^{-1} A T_1 = \left[\begin{array}{cccc}0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & 1 \\ -a_{0} & -a_{1} & \cdots & -a_{n-1}\end{array}\right]\\ \bar{B} = T_1^{-1} BU = \left[\begin{array}{c}0 & \cdots & 0 & 1\end{array}\right]^T\\ \end{matrix} Aˉ=T1−1AT1=⎣⎢⎢⎢⎡0⋮0−a01⋮0−a1⋯⋱0⋯0⋮1−an−1⎦⎥⎥⎥⎤Bˉ=T1−1BU=[0⋯01]T
(3)系统矩阵 A ˉ \bar{A} Aˉ的特征多项式
d e t ( λ I − A ˉ ) = λ n + a n − 1 λ n − 1 + . . . + a 1 λ + a 0 \begin{matrix} {\rm det}(\lambda I-\bar{A})=\lambda^n+a_{n-1}\lambda^{n-1}+...+a_1\lambda+a_0 \end{matrix} det(λI−Aˉ)=λn+an−1λn−1+...+a1λ+a0
确实系数 a 0 , a 1 , . . . , a n − 1 a_0,a_1,...,a_{n-1} a0,a1,...,an−1的值。
(4)利用给定的期望闭环极点计算期望的闭环特征多项式:
( λ − λ 1 ) ( λ − λ 2 ) . . . ( λ − λ n ) = λ n + b n − 1 λ n − 1 + . . . + b 1 λ + b 0 \begin{matrix} (\lambda -\lambda _1)(\lambda -\lambda _2)...(\lambda -\lambda _n)=\lambda^n+b_{n-1}\lambda^{n-1}+...+b_1\lambda+b_0 \end{matrix} (λ−λ1)(λ−λ2)...(λ−λn)=λn+bn−1λn−1+...+b1λ+b0
确实系数 b 0 , b 1 , . . . , b n − 1 b_0,b_1,...,b_{n-1} b0,b1,...,bn−1的值。
d e t ( λ I − ( A ˉ − B ˉ K ) ) = d e t ( λ I − ( [ 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 − a 0 − a 1 ⋯ − a n − 1 ] − [ 0 ⋮ 0 1 ] . [ k 1 ⋯ k n − 1 k n ] ) ) = d e t ( λ I − ( [ 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 − a 0 − a 1 ⋯ − a n − 1 ] − [ 0 0 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 0 k 1 k 2 ⋯ k n ] ) ) = d e t ( λ I − ( [ 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 − a 0 − k 1 − a 1 − k 2 ⋯ − a n − 1 k n ] ) ) = λ n + ( a n − 1 + k n ) λ n − 1 + . . . + ( a 1 + k n − 1 ) λ + ( a 0 + k 1 ) \begin{matrix} {\rm det}(\lambda I-(\bar{A}-\bar{B}K))\\ = {\rm det}(\lambda I-(\left[\begin{array}{cccc}0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \\ -a_{0} & -a_{1} & \cdots & -a_{n-1}\end{array}\right]-\left[\begin{array}{c}0 \\ \vdots \\ 0 \\ 1\end{array}\right] . \left[\begin{array}{c}k_1 & \cdots & k_{n-1} & k_n\end{array}\right]))\\ = {\rm det}(\lambda I-(\left[\begin{array}{cccc}0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \\ -a_{0} & -a_{1} & \cdots & -a_{n-1}\end{array}\right]-\left[\begin{array}{c} 0 & 0 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 0 \\ k_1 & k_2 &\cdots & k_n\end{array}\right] ))\\ = {\rm det}(\lambda I-(\left[\begin{array}{cccc}0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \\ -a_{0}-k_1 & -a_{1}-k_2 & \cdots & -a_{n-1}k_n\end{array}\right]))\\ =\lambda^n+(a_{n-1}+k_n)\lambda^{n-1}+...+(a_{1}+k_{n-1})\lambda+(a_{0}+k_1) \end{matrix} det(λI−(Aˉ−BˉK))=det(λI−(⎣⎢⎢⎢⎡0⋮0−a01⋮0−a1⋯⋱⋯⋯0⋮1−an−1⎦⎥⎥⎥⎤−⎣⎢⎢⎢⎡0⋮01⎦⎥⎥⎥⎤.[k1⋯kn−1kn]))=det(λI−(⎣⎢⎢⎢⎡0⋮0−a01⋮0−a1⋯⋱⋯⋯0⋮1−an−1⎦⎥⎥⎥⎤−⎣⎢⎢⎢⎡0⋮0k10⋮0k2⋯⋱⋯⋯0⋮0kn⎦⎥⎥⎥⎤))=det(λI−(⎣⎢⎢⎢⎡0⋮0−a0−k11⋮0−a1−k2⋯⋱⋯⋯0⋮1−an−1kn⎦⎥⎥⎥⎤))=λn+(an−1+kn)λn−1+...+(a1+kn−1)λ+(a0+k1)
(5)确定极点配置状态反馈增益矩阵:
由
λ n + b n − 1 λ n − 1 + . . . + b 1 λ + b 0 = λ n + ( a n − 1 + k n ) λ n − 1 + . . . + ( a 1 + k n − 1 ) λ + ( a 0 + k 1 ) \begin{matrix} \lambda^n+b_{n-1}\lambda^{n-1}+...+b_1\lambda+b_0=\\ \lambda^n+(a_{n-1}+k_n)\lambda^{n-1}+...+(a_{1}+k_{n-1})\lambda+(a_{0}+k_1) \end{matrix} λn+bn−1λn−1+...+b1λ+b0=λn+(an−1+kn)λn−1+...+(a1+kn−1)λ+(a0+k1)
得到 k i = b i − 1 − a i − 1 , i = 1 : n k_i=b_{i-1}-a_{i-1},i=1:n ki=bi−1−ai−1,i=1:n。进而求得反馈矩阵 K K K如下:
K = [ b 0 − a 0 b 1 − a 1 ⋯ b n − 2 − a n − 2 b n − 1 − a n − 1 ] \begin{matrix} \boldsymbol{K}=\left[\begin{array}{lllll}b_{0}-a_{0} & b_{1}-a_{1} & \cdots & b_{n-2}-a_{n-2} & b_{n-1}-a_{n-1}\end{array}\right] \end{matrix} K=[b0−a0b1−a1⋯bn−2−an−2bn−1−an−1]
#matlab代码
clear;clc;close all;
%% 基本参数
M = 0.5;%%小车质量
m = 0.5;%%倒立摆的质量
miu = 0.1;%%地面摩擦系数
I = 0.006;%%惯性矩
L = 0.3;%%长度
g = 9.8;%%加速度
%% 状态方程矩阵
P = (M+m)*I+M*m*L^2;%%状态方程的分母
A = [0 1 0 0;
0 -miu*(m*L^2+I)/P m^2*g*L^2/P 0;
0 0 0 1;
0 -miu*m*L/P (M+m)*m*g*L/P 0];
B = [0;(I+m*L^2)/P;0;m*L/P];
C = [1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1];
D = [0;0;0;0];
%% 极点配置法
p_ex = eig(A)';%%%A矩阵特征值求解,系统极点
p_need = [-10,-7,-1.901,-1.9];%%极点配置,将系统极点调到复平面,将得到稳定的系统
K1 = place(A,B,p_need);%%AB为系统的状态空间矩阵,向量P中是期望的闭环极点位置,返回值是增益向量。
A1 = A-B*K1;%%极点配置之后的矩阵
p_new = eig(A-B*K1)';%%极点逆向求解,极点配置之后的系统极点(验证极点配置成功与否)
t = 0:0.01:4;
x0 = [0;0;0.2;0];%%初始值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%零输入响应
sys_ex = ss(A,B,C,D);%%创建连续的状态空间模型
y_ex = initial(sys_ex,x0,t);%%零输入响应,sys为传递函数模型,x0为初始状态,t为指定的响应时间。
sys_new = ss(A-B*K1,B,C,D);%%创建连续的状态空间模型
y_new = initial(sys_new,x0,t);%%零输入响应,sys为传递函数模型,x0为初始状态,t为指定的响应时间。
figure('name','零输入响应 极点配置法')
subplot(211)
plot(t,y_ex(:,1)),hold on
plot(t,y_ex(:,2)),hold on
plot(t,y_ex(:,3)),hold on
plot(t,y_ex(:,4)),hold on
xlabel('t(s)')
ylabel('响应')
gca1 = legend('X car','V car','\theta rod','\alpha rod');
set(gca1,'location','best');
title('极点配置前')
subplot(212)
plot(t,y_new(:,1)),hold on
plot(t,y_new(:,2)),hold on
plot(t,y_new(:,3)),hold on
plot(t,y_new(:,4)),hold on
xlabel('t(s)')
ylabel('响应')
gca1 = legend('X car','V car','\theta rod','\alpha rod');
set(gca1,'location','best');
title('极点配置后')
%%%%%%%%%simulink 零输入响应
[t_sim,y_sim] = sim('pendulum_initial_simulink.mdl');
figure('name','simulink 控制后系统零输入响应')
plot(t_sim,y_sim(:,1)),hold on
plot(t_sim,y_sim(:,2)),hold on
plot(t_sim,y_sim(:,3)),hold on
plot(t_sim,y_sim(:,4)),hold on
xlabel('t(s)')
ylabel('响应')
gca1 = legend('X car','V car','\theta rod','\alpha rod');
set(gca1,'location','best');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%阶跃响应
y_ex_step = step(A,B,C,D);%%%step计算一个系统的阶跃响应
y_new_step = step(A1,B,C,D);%%%step计算一个系统的阶跃响应
figure('name','阶跃响应 极点配置法')
subplot(211)
plot(y_ex_step(:,1)),hold on
plot(y_ex_step(:,2)),hold on
plot(y_ex_step(:,3)),hold on
plot(y_ex_step(:,4)),hold on
gca1 = legend('X car','V car','\theta rod','\alpha rod');
set(gca1,'location','best');
title('极点配置前')
subplot(212)
plot(y_new_step(:,1)),hold on
plot(y_new_step(:,2)),hold on
plot(y_new_step(:,3)),hold on
plot(y_new_step(:,4)),hold on
gca1 = legend('X car','V car','\theta rod','\alpha rod');
set(gca1,'location','best');
title('极点配置后')
%%%%%%%%%simulink 阶跃响应
[t_sim,y_sim] = sim('pendulum_step_simulink.mdl');
figure('name','simulink系统阶跃响应')
plot(t_sim,y_sim(:,1)),hold on
plot(t_sim,y_sim(:,2)),hold on
plot(t_sim,y_sim(:,3)),hold on
plot(t_sim,y_sim(:,4)),hold on
gca1 = legend('X car','V car','\theta rod','\alpha rod');
set(gca1,'location','best');
零输入条件计算得到的系统响应曲线,初始扰动给摆杆一角度 0.2 0.2 0.2rad,上图为极点配置前的4个自由度响应曲线,明显发散,下图为极点配置之后的结果图,4条曲线基本都趋于稳定,且随着时间增加趋于零。系统大约在3s左右趋于稳定。
结合simulink仿真验证该结果:
给一阶跃扰动,初始状态都设置为0,极点配置之后的结果如下所示:
可以看到,matlab仿真结果和simulink的结果曲线完全一致,说明建立的模型是正确的。但是也能发现当前极点配置法得到的系统响应曲线超调量过大,原因在于极点配置法是对系统控制量 X X X乘以一个反馈系数 K K K,类似于比例控制,将使稳定系统产生较大的超调量,且没办法消除。因此后续分许需要考虑结合其他控制方法进行调控。后续仅分析零输入响应。
期望极点 [-10,-7,-19.01,-1.9]
期望极点 [-100,-7,-19.01,-19]
以上两图发现,期望系统极点越小,系统响应速度越快,达到稳定的时间越短,但是系统的超调量会也会快速增大。
最优控制,其本质就是让系统以某种最小的代价来运行,当这个代价被定义为二次泛函且系统是线性时,这个问题就称为线性二次问题,设计的控制器(即问题的解)可以称为LQR(Linear Quadratic Regulator)线性二次调节器。LQR通过取全状态反馈,将不同状态加权和得到最优控制量。
LQR控制结构原理框图:(参考https://blog.csdn.net/ChenGuiGan/article/details/116483597)
LQR控制器设计步骤:
1.根据我们想要的期望状态,初步设计好 Q Q Q(状态权重矩阵), R R R(控制权重矩阵),以及目标方程 J J J。
一方面我们希望系统达到稳定状态,及偏差最小,状态量 X X X最小; 另一方面我们希望控制量 U U U较小,即付出较小的代价达到我们的目的。最优控制目标方程:
J = m i n ∫ 0 ∞ ( X T Q X + U T R U ) d t = m i n ∫ 0 ∞ ( X T ( Q + K T R K ) X ) d t \begin{matrix} J={\rm min} \int_{0}^{\infty}\left(X^{T} Q X+U^{T} R U\right) d t = {\rm min} \int_{0}^{\infty}\left(X^{T} (Q+K^{T} R K)X\right) d t \end{matrix} J=min∫0∞(XTQX+UTRU)dt=min∫0∞(XT(Q+KTRK)X)dt
其中 U = − K X U=-KX U=−KX, Q Q Q为半正定对称阵, R R R为正定对称阵(一般都取对角阵)。且系统完全能控,完全能观,控制量 u u u不受约束。因为状态量 X X X和控制量 U U U中取值有正有负,所以需要平方和最小,在矩阵中没有平方,因此这里目标函数采用了转置乘以本身的做法模拟矩阵的平方 。其实我们可以把 X T A X X^{T} A X XTAX看作是 a x 2 ax^2 ax2的多维扩展表达式,这里我们需要 Q Q Q为半正定,就是希望 Q Q Q能起到 a ≥ 0 a≥0 a≥0的效果,同样 R R R为正定矩阵也是希望矩阵 R R R能够起到 a > 0 a>0 a>0的效果。
Q Q Q为我们提前标定的对角矩阵,标定值对应状态量 X X X各个参数的权重,也可以为非对角矩阵,考虑不同参数之间的相互关系。同样的 R R R也为对应控制量 U U U的对角矩阵,也可以考虑相互关系。
Q Q Q选取较大的值,为了目标函数 J J J较小,状态量 X X X也应该较小,也就是意味着闭环系统的矩阵 ( A − B K ) (A-BK) (A−BK)的特征值处于S平面左边更远的地方,这样状态就以更快的速度衰减到0;加大 R R R的值,会使得对应的控制量 U U U减小,控制器执行更少的动作,意味着系统的状态衰减将变慢。所以要综合看具体的实际应用场景来调节,鱼和熊掌不可兼得。建议在不同场景下采用不同的参数。
2.由目标方程 J J J推导Riccati方程求解矩阵 P P P。
为了找到 K K K,先假设存在一个常量矩阵 P P P使得:
d d t ( X T P X ) = − X T ( Q + K T R K ) X J = − ∫ 0 ∞ d d t ( X T P X ) d t = X T ( 0 ) P X ( 0 ) \begin{matrix} \frac{d}{dt}(X^T P X) = - X^{T} (Q+K^{T} R K)X\\ J= - \int_{0}^{\infty}\frac{d}{dt}(X^T P X) d t = X^T(0) P X(0) \end{matrix} dtd(XTPX)=−XT(Q+KTRK)XJ=−∫0∞dtd(XTPX)dt=XT(0)PX(0)
这里假设了闭环系统是稳定的,所以 t t t趋于 ∞ \infty ∞时, X ( t ) X(t) X(t)趋于0。
上面微分方程展开可以得到
d d t ( X T P X ) = − X T ( Q + K T R K ) X X ˙ T P X + X T P X ˙ = − X T Q X − X T K T R K X X ˙ T P X + X T P X ˙ + X T Q X + X T K T R K X = 0 \begin{matrix} \frac{d}{dt}(X^T P X) = - X^{T} (Q+K^{T} R K)X\\ \dot X^T P X+ X^T P \dot X = - X^{T} QX-X^{T} K^{T} R KX\\ \dot X^T P X+ X^T P \dot X + X^{T} QX + X^{T} K^{T} R KX = 0 \end{matrix} dtd(XTPX)=−XT(Q+KTRK)XX˙TPX+XTPX˙=−XTQX−XTKTRKXX˙TPX+XTPX˙+XTQX+XTKTRKX=0
将 X ˙ = ( A − B K ) X = A t X \dot X=(A-BK)X=A_t X X˙=(A−BK)X=AtX带入上式可以得到
X T A t T P X + X T P A t X + X T Q X + X T K T R K X = 0 X T ( A t T P + P A t + Q + K T R K ) X = 0 \begin{matrix} X^T A_t^T P X+ X^T P A_t X + X^{T} QX + X^{T} K^{T} R KX = 0\\ X^T( A_t^T P+ P A_t + Q + K^{T} R K)X = 0 \end{matrix} XTAtTPX+XTPAtX+XTQX+XTKTRKX=0XT(AtTP+PAt+Q+KTRK)X=0
这个式子要成立的话,括号里面的项必须等于0。
A t T P + P A t + Q + K T R K = 0 ( A − B K ) T P + P ( A − B K ) + Q + K T R K = 0 A T P + P A + Q + K T R K − K T B T P − P B K = 0 \begin{matrix} A_t^T P+ P A_t + Q + K^{T} R K = 0\\ (A-BK)^T P+ P (A-BK) + Q + K^T R K = 0\\ A^T P+ P A+ Q + K^T R K - K^T B^T P - P B K = 0 \end{matrix} AtTP+PAt+Q+KTRK=0(A−BK)TP+P(A−BK)+Q+KTRK=0ATP+PA+Q+KTRK−KTBTP−PBK=0
这是一个关于 K K K的二次型等式,当然这个二次型是我们不愿看到的,因为计算复杂。现在只要这个等式成立,我们何必不选择 K K K使得两个二次项正好约掉了呢?这样既符合了要求,又简化了计算。取 K = R − 1 B T P K=R^{-1}B^TP K=R−1BTP,带入上式就可以得到:
A T P + P A + Q + ( R − 1 B T P ) T R ( R − 1 B T P ) − ( R − 1 B T P ) T B T P − P B R − 1 B T P = 0 A T P + P A + Q + P T B R − 1 R R − 1 B T P − P T B R − 1 B T P − P B R − 1 B T P = 0 A T P + P A + Q + P T B R − 1 ( R R − 1 − 1 ) B T P − P B R − 1 B T P = 0 A T P + P A + Q − P B R − 1 B T P = 0 \begin{matrix} A^T P+ P A+ Q + (R^{-1}B^TP)^T R (R^{-1}B^TP) - (R^{-1}B^TP)^T B^T P - P B R^{-1}B^TP = 0\\ A^T P+ P A+ Q + P^T B R^{-1} R R^{-1} B^T P - P^T B R^{-1} B^T P - P B R^{-1}B^TP = 0\\ A^T P+ P A+ Q + P^T B R^{-1} (R R^{-1} - 1)B^T P - P B R^{-1}B^TP = 0\\ A^T P+ P A+ Q - P B R^{-1}B^TP = 0\\ \end{matrix} ATP+PA+Q+(R−1BTP)TR(R−1BTP)−(R−1BTP)TBTP−PBR−1BTP=0ATP+PA+Q+PTBR−1RR−1BTP−PTBR−1BTP−PBR−1BTP=0ATP+PA+Q+PTBR−1(RR−1−1)BTP−PBR−1BTP=0ATP+PA+Q−PBR−1BTP=0
可以发现 K K K的二次项没有了,可 K K K的取值和 P P P有关,而 P P P是我们假设的一个量, P P P只要使得的上式成立就行了。而上式在现代控制理论中极其重要,它就是有名的Riccati 方程。
A T P + P A + Q − P B R − 1 B T P = 0 \begin{matrix} A^{T} P+P A + Q - P B R^{-1} B^{T} P =0 \end{matrix} ATP+PA+Q−PBR−1BTP=0
注意到该式中 A 、 B 、 Q 、 R A、B、Q、R A、B、Q、R都是已知的,求解上式就可以得到 P P P矩阵的表达式。
3.当求解得到 P P P矩阵后,由公式取 K = R − 1 B T P K=R^{-1}B^TP K=R−1BTP计算得到反馈矩阵 K K K的表达式,进而就可以进行LQR的反馈控制 U = − K X U=-KX U=−KX。
在控制结构上两者是完全相同的,都是通过将全状态加权后反馈得到控制量,完成控制任务。不同点是极点配置设计方法是通过状态反馈,将被控对象的特征极点配置到理想平面的理想位置,如果有参考稳态误差,加上一个比例调节项来消除,从而达到想要的控制效果。从状态空间方程的角度来看,原来的被控对象状态矩阵是A阵,特征值和特征向量已经确定,通过全状态反馈后,被控对象成为A-BK,调节K可以达到调节系统的目的。补充一点,极点配置法的前提是系统能控能观测。
LQR在结构上是一样的,但是整个设计的思路是完全不同的,LQR通过构造了误差状态量和控制量的二次型性能代价函数,通过调节惩罚的力度来达到想要的控制效果,相对来说LQR方法调节起来更加直观,设计师对于状态量误差的容惩罚度(Q)还是对于执行器的付出的惩罚度(R)决定了最终的设计的最优控制量。
%% LQR控制(和极点配置法类似)
Q=[100 0 0 0;%%小车位置的误差代价
0 2 0 0;%%小车速度的误差代价
0 0 3 0;%%摆杆转角的误差代价
0 0 0 1];%%摆杆转角速度的误差代价 %%一般是对角阵
R=0.01;%%输入误差代价,减小时超调量增大,但是系统会更快趋于0
K=lqr(A,B,Q,R);
sys=ss(A-B*K,B,C,D);%经过状态量反馈后的新状态矩阵
y_LQR = initial(sys,x0,t);
figure('name','LQR控制 系统零输入响应')
set(gcf,'Position',[100 100 400 150]);%%x轴长度,y轴长度,图像长度,图像高度
plot(t,y_LQR(:,1)),hold on
plot(t,y_LQR(:,2)),hold on
plot(t,y_LQR(:,3)),hold on
plot(t,y_LQR(:,4)),hold on
set(gca,'Position',[0.1 0.23 0.88 0.74]);%%x轴长度,y轴长度,图像长度,图像高度
xlabel('t/s');
ylabel('响应');
gca1 = legend('X car','V car','\theta rod','\alpha rod');
set(gca1,'location','best');
Q=[1 0 0 0;0 2 0 0;0 0 3 0;0 0 0 1];R=0.01;
Q=[100 0 0 0;0 2 0 0;0 0 3 0;0 0 0 1];R=0.01;
增大 Q Q Q,为获得较小的目标函数,观测量将更小,系统更快的达到稳定状态。
Q=[1 0 0 0;0 2 0 0;0 0 3 0;0 0 0 1];R=1;
增大 R R R,为获得较小的目标函数,控制量将更小,控制器变化缓慢,系统响应不容易出现超调的现象,但是达到稳定状态的速度也更慢。
此文档为本人初步采用一级倒立摆学习控制和simulink时的记录,仅用于个人学习。文档中含有大量网上摘抄的内容,少部分注释了来源,如有冒犯请谅解。
本文中仅采用了极点配置法和LQR来对倒立摆的稳定进行控制,两种方法仅在获取反馈矩阵的途径上有所不同,本质上都是给系统的观测量加一个比例反馈系数以调控其稳定性,在计算过程中发现由于仅有比例控制带来的超调量过大的问题尤其明显,因此后续还希望学习更多的控制方法以克服该问题。另外极点配置法需要给定预期的极点位置,LQR需要先给定观测量和控制量的权重矩阵 Q 、 R Q、R Q、R,这两个矩阵的选取也需要根据一定的经验以及具体问题具体分析。