[论文解读]二阶非线性不确定系统的PID控制器设计

PID controller design for second order nonlinear uncertain systems
摘要 复现一下论文的推导过程,补充一些推导细节,证明PID可以控制满足一定条件的二阶非线性系统并全局稳定,最后跑个仿真。

  对二阶非线性系统(相对阶为2)
x ˙ 1 = x 2 x ˙ 2 = f ( x 1 , x 2 , t ) + u ( t ) \begin{aligned} \dot x_1 =& x_2 \\ \dot x_2 =& f(x_1,x_2,t)+u(t) \\ \end{aligned} x˙1=x˙2=x2f(x1,x2,t)+u(t)
其中 f ( x 1 , x 2 , t ) f(x_1,x_2,t) f(x1,x2,t) 满足
∣ ∂ f ∂ x 1 ∣ ≤ L 1 , ∣ ∂ f ∂ x 2 ∣ ≤ L 2 \left|\frac{\partial f}{\partial x_1}\right|\leq L_1, \left|\frac{\partial f}{\partial x_2}\right|\leq L_2 x1f L1, x2f L2
取控制信号为
u ( t ) = k p e ( t ) + k i ∫ 0 t e ( τ ) d τ + k d e ˙ ( t ) u(t)=k_pe(t)+k_i\int_0^te(\tau)\text d\tau+k_d\dot e(t) u(t)=kpe(t)+ki0te(τ)dτ+kde˙(t)
其中 e ( t ) = y ∗ − x 1 ( t ) e(t)=y^*-x_1(t) e(t)=yx1(t) 为待跟踪信号 y ∗ y^* y 与系统输出 x 1 ( t ) x_1(t) x1(t) 的差。定义
x ( t ) = ∫ 0 t e ( τ ) d τ + f ( y ∗ , 0 , 0 ) k i y ( t ) = e ( t ) z ( t ) = e ˙ ( t ) g ( y , z , t ) = − f ( y ∗ − y , − z , t ) + f ( y ∗ , 0 , 0 ) \begin{aligned} & x(t) = \int_0^te(\tau)\text d\tau+\frac{f(y^*,0,0)}{k_i} \\ & y(t) = e(t) \\ & z(t) = \dot e(t) \\ & g(y,z,t) = -f(y^*-y,-z,t) + f(y^*,0,0) \end{aligned} x(t)=0te(τ)dτ+kif(y,0,0)y(t)=e(t)z(t)=e˙(t)g(y,z,t)=f(yy,z,t)+f(y,0,0)

z ˙ ( t ) = e ¨ = − x ¨ 1 = − f ( x 1 , x 2 , t ) − ( k p e ( t ) + k i ∫ 0 t e ( τ ) d τ + k d e ˙ ( t ) ) = − f ( y ∗ − e , − e ˙ , t ) − k p y − k i x + f ( y ∗ , 0 , 0 ) − k d z = f ( y ∗ , 0 , 0 ) − f ( y ∗ − y , − z , t ) − k i x − k p y − k d z \begin{aligned} \dot z(t) =& \ddot e = -\ddot x_1 \\ =& -f(x_1,x_2,t) -\left(k_pe(t)+k_i\int_0^te(\tau)\text d\tau+k_d\dot e(t)\right) \\ =& -f(y^*-e,-\dot e,t) -k_py-k_ix+f(y^*,0,0)-k_dz \\ =& f(y^*,0,0)-f(y^*-y,-z,t) -k_ix -k_py -k_dz \\ \end{aligned} z˙(t)====e¨=x¨1f(x1,x2,t)(kpe(t)+ki0te(τ)dτ+kde˙(t))f(ye,e˙,t)kpykix+f(y,0,0)kdzf(y,0,0)f(yy,z,t)kixkpykdz

{ x ˙ = y y ˙ = z z ˙ = g ( y , z , t ) − k i x − k p y − k d z \left\{\begin{aligned} & \dot x=y \\ & \dot y=z \\ & \dot z=g(y,z,t) -k_ix -k_py -k_dz \\ \end{aligned}\right. x˙=yy˙=zz˙=g(y,z,t)kixkpykdz
其中 g ( y , z , t ) g(y,z,t) g(y,z,t) 为非线性函数,可以使用局部线性化的方法将其中的 y y y z z z 分离,即
g ( y , z , t ) = b ( y , t ) y + a ( y , z , t ) z g(y,z,t)=b(y,t)y+a(y,z,t)z g(y,z,t)=b(y,t)y+a(y,z,t)z
其中
b ( y , t ) = { g ( y , 0 , t ) y ,   y ≠ 0 ∂ g ∂ y ∣ ( 0 , 0 , t ) ,   y = 0 , a ( y , z , t ) = { g ( y , z , t ) − g ( y , 0 , t ) z ,   z ≠ 0 ∂ g ∂ z ∣ ( y , 0 , t ) ,   z = 0 , b(y,t)=\left\{\begin{aligned} \frac{g(y,0,t)}y &,\ y\neq 0 \\ \left.\frac{\partial g}{\partial y}\right|_{(0,0,t)} &,\ y=0 \end{aligned}\right., a(y,z,t)=\left\{\begin{aligned} &\frac{g(y,z,t)-g(y,0,t)}z&,\ z\neq 0 \\ &\left.\frac{\partial g}{\partial z}\right|_{(y,0,t)}&, \ z = 0 \end{aligned}\right., b(y,t)= yg(y,0,t)yg (0,0,t), y=0, y=0,a(y,z,t)= zg(y,z,t)g(y,0,t)zg (y,0,t), z=0, z=0,
于是
[ x ˙ y ˙ z ˙ ] = [ 0 1 0 0 0 1 − k i b ( y , t ) − k p a ( y , z , t ) − k d ] [ x y z ] \begin{bmatrix} \dot x \\ \dot y \\ \dot z \end{bmatrix} = \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ -k_i & b(y,t)-k_p & a(y,z,t)-k_d \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix} x˙y˙z˙ = 00ki10b(y,t)kp01a(y,z,t)kd xyz
下面用李雅普诺夫函数证明稳定性。
取PID参数 k p k_p kp k i k_i ki k d k_d kd 满足下面几个条件
k p > L 1 ,   k d > L 2 ,   k i > 0 , ( k p − L 1 ) ( k d − L 2 ) − k i > L 2 k i ( k d + L 2 ) (1) \begin{aligned} & k_p>L_1,\ k_d>L_2,\ k_i>0, \\ & (k_p-L_1)(k_d-L_2)-k_i>L_2\sqrt{k_i(k_d+L_2)} \\ \end{aligned}\tag{1} kp>L1, kd>L2, ki>0,(kpL1)(kdL2)ki>L2ki(kd+L2) (1)
定义
ψ 0 = inf ⁡ y , z , t { k d − a ( y , z , t ) } ψ 1 = sup ⁡ y , z , t { k d − a ( y , z , t ) } ψ = ψ 0 + ψ 1 2 ϕ ( y ) = k p − b ( y ) ϕ 0 = inf ⁡ y ϕ ( y ) μ = 2 ( ϕ 0 ψ 0 + k i ) 4 ϕ 0 + L 2 2 (2) \begin{aligned} \psi_0 =& \inf_{y,z,t}\{k_d-a(y,z,t)\} \\ \psi_1 =& \sup_{y,z,t}\{k_d-a(y,z,t)\} \\ \psi =& \frac{\psi_0+\psi_1}2 \\ \phi(y) =& k_p-b(y) \\ \phi_0 =& \inf_y\phi(y) \\ \mu =& \frac{2(\phi_0\psi_0+k_i)}{4\phi_0+L_2^2} \end{aligned} \tag{2} ψ0=ψ1=ψ=ϕ(y)=ϕ0=μ=y,z,tinf{kda(y,z,t)}y,z,tsup{kda(y,z,t)}2ψ0+ψ1kpb(y)yinfϕ(y)4ϕ0+L222(ϕ0ψ0+ki)(2)
其中 μ \mu μ 是个大于0的常数。取李雅普诺夫函数
V ( x , y , z ) = [ x y z ] P [ x y z ] + ∫ 0 y ( ϕ ( s ) − ϕ 0 ) s d s V(x,y,z)=\begin{bmatrix} x & y & z \end{bmatrix}P \begin{bmatrix} x \\ y \\ z \end{bmatrix} +\int_0^y(\phi(s)-\phi_0)s\text ds V(x,y,z)=[xyz]P xyz +0y(ϕ(s)ϕ0)sds
其中
P = 1 2 [ μ k i k i 0 k i ϕ 0 + μ ψ μ 0 μ 1 ] P=\frac 12\begin{bmatrix} \mu k_i & k_i & 0 \\ k_i & \phi_0+\mu\psi & \mu \\ 0 & \mu & 1 \end{bmatrix} P=21 μkiki0kiϕ0+μψμ0μ1
为半正定矩阵。下面证明 P P P 为半正定矩阵。根据式(2)的定义和式(1)的约束条件可得
ϕ 0 ≥ k p − L 1 > 0 , k d + L 2 ≥ ψ ≥ ψ 0 ≥ k d − L 2 > 0 , μ > 0 , ϕ 0 ψ 0 − k i > ( k p − L 1 ) ( k d − L 2 ) − k i > L 2 k i ( k d + L 2 ) > L 2 k i ψ 0 > 0 \begin{aligned} & \phi_0\geq k_p-L_1>0, \\ & k_d+L_2\geq\psi\geq\psi_0\geq k_d-L_2>0, \\ & \mu>0, \\ & \phi_0\psi_0-k_i>(k_p-L_1)(k_d-L_2)-k_i \\ &> L_2\sqrt{k_i(k_d+L_2)}>L_2\sqrt{k_i\psi_0}>0 \end{aligned} ϕ0kpL1>0,kd+L2ψψ0kdL2>0,μ>0,ϕ0ψ0ki>(kpL1)(kdL2)ki>L2ki(kd+L2) >L2kiψ0 >0
ϕ 0 ψ 0 − k i > L 2 k i ψ 0 ( ϕ 0 ψ 0 − k i ) 2 > L 2 2 k i ψ 0 ( ϕ 0 ψ 0 + k i ) 2 > L 2 2 k i ψ 0 + 4 k i ϕ 0 ψ 0 \begin{aligned} \phi_0\psi_0-k_i >& L_2\sqrt{k_i\psi_0} \\ (\phi_0\psi_0-k_i)^2 >& L_2^2k_i\psi_0 \\ (\phi_0\psi_0+k_i)^2 >& L_2^2k_i\psi_0+4k_i\phi_0\psi_0 \\ \end{aligned} ϕ0ψ0ki>(ϕ0ψ0ki)2>(ϕ0ψ0+ki)2>L2kiψ0 L22kiψ0L22kiψ0+4kiϕ0ψ0
下面用这些条件和结果证明如下3个式子
μ < ψ 0 4 ( μ ϕ 0 − k i ) ( ψ 0 − μ ) > μ 2 L 2 2 μ ϕ 0 > k i (3) \begin{aligned} & \mu < \psi_0 \\ & 4(\mu\phi_0-k_i)(\psi_0-\mu) > \mu^2L_2^2 \\ & \mu\phi_0 > k_i \end{aligned}\tag{3} μ<ψ04(μϕ0ki)(ψ0μ)>μ2L22μϕ0>ki(3)
第3个式子可以由前两个得到。
μ − ψ 0 = 2 ( ϕ 0 ψ 0 + k i ) − ψ 0 ( 4 ϕ 0 + L 2 2 ) 4 ϕ 0 + L 2 2 = 2 k i − 2 ϕ 0 ψ 0 − ψ 0 L 2 2 4 ϕ 0 + L 2 2 < − ψ 0 L 2 2 4 ϕ 0 + L 2 2 < 0 \begin{aligned} \mu-\psi_0 =& \frac{2(\phi_0\psi_0+k_i)-\psi_0(4\phi_0+L_2^2)}{4\phi_0+L_2^2} \\ =& \frac{2k_i-2\phi_0\psi_0-\psi_0L_2^2}{4\phi_0+L_2^2} \\ <& \frac{-\psi_0L_2^2}{4\phi_0+L_2^2}<0 \\ \end{aligned} μψ0==<4ϕ0+L222(ϕ0ψ0+ki)ψ0(4ϕ0+L22)4ϕ0+L222ki2ϕ0ψ0ψ0L224ϕ0+L22ψ0L22<0
4 ( μ ϕ 0 − k i ) ( ψ 0 − μ ) − μ 2 L 2 2 = − ( 4 ϕ 0 + L 2 2 ) μ 2 + 4 ( ϕ 0 ψ 0 + k i ) μ − 4 k i ψ 0 = 1 4 ϕ 0 + L 2 2 [ − 4 ( ϕ 0 ψ 0 + k i ) 2 + 8 ( ϕ 0 ψ 0 + k i ) 2 − 4 k i ψ 0 ( 4 ϕ 0 + L 2 2 ) ] = 4 4 ϕ 0 + L 2 2 [ ( ϕ 0 ψ 0 + k i ) 2 − 4 k i ϕ 0 ψ 0 − k i ψ 0 L 2 2 ] > 0 \begin{aligned} & 4(\mu\phi_0-k_i)(\psi_0-\mu) - \mu^2L_2^2 \\ =& -(4\phi_0+L_2^2)\mu^2+4(\phi_0\psi_0+k_i)\mu-4k_i\psi_0 \\ =& \frac{1}{4\phi_0+L_2^2}\Big[-4(\phi_0\psi_0+k_i)^2+8(\phi_0\psi_0+k_i)^2 -4k_i\psi_0(4\phi_0+L_2^2)\Big] \\ =& \frac{4}{4\phi_0+L_2^2}\Big[(\phi_0\psi_0+k_i)^2 -4k_i\phi_0\psi_0-k_i\psi_0L_2^2\Big]>0 \\ \end{aligned} ===4(μϕ0ki)(ψ0μ)μ2L22(4ϕ0+L22)μ2+4(ϕ0ψ0+ki)μ4kiψ04ϕ0+L221[4(ϕ0ψ0+ki)2+8(ϕ0ψ0+ki)24kiψ0(4ϕ0+L22)]4ϕ0+L224[(ϕ0ψ0+ki)24kiϕ0ψ0kiψ0L22]>0
于是矩阵 P P P 的三阶顺序主子式的行列式
μ k i > 0 det ⁡ [ μ k i k i k i ϕ 0 + μ ψ ] = μ k i ( ϕ 0 + μ ψ ) − k i 2 ≥ k i ( μ ϕ 0 + μ 2 ψ 0 − k i ) > k i μ 2 ψ 0 > 0 det ⁡ [ μ k i k i 0 k i ϕ 0 + μ ψ μ 0 μ 1 ] = k i ( μ ϕ 0 + μ 2 ψ − k i − μ 3 ) > k i ( μ 2 ψ 0 − μ 3 ) = k i μ 2 ( ψ 0 − μ ) > 0 \begin{aligned} & \mu k_i>0 \\ & \operatorname{det}\begin{bmatrix} \mu k_i & k_i \\ k_i & \phi_0+\mu \psi \end{bmatrix} = \mu k_i(\phi_0+\mu \psi)-k_i^2 \geq k_i(\mu \phi_0+\mu^2 \psi_0-k_i)> k_i \mu^2 \psi_0>0 \\ & \operatorname{det}\begin{bmatrix} \mu k_i & k_i & 0 \\ k_i & \phi_0+\mu \psi & \mu \\ 0 & \mu & 1 \end{bmatrix} = k_i(\mu \phi_0+\mu^2 \psi-k_i-\mu^3)> k_i(\mu^2 \psi_0-\mu^3)=k_i \mu^2(\psi_0-\mu)>0 \end{aligned} μki>0det[μkikikiϕ0+μψ]=μki(ϕ0+μψ)ki2ki(μϕ0+μ2ψ0ki)>kiμ2ψ0>0det μkiki0kiϕ0+μψμ0μ1 =ki(μϕ0+μ2ψkiμ3)>ki(μ2ψ0μ3)=kiμ2(ψ0μ)>0
所以 P P P 正定。
A T P + P A = 1 2 [ 0 0 − k i 1 0 b − k p 0 1 a − k d ] [ μ k i k i 0 k i ϕ 0 + μ ψ μ 0 μ 1 ] + 1 2 [ μ k i k i 0 k i ϕ 0 + μ ψ μ 0 μ 1 ] [ 0 1 0 0 0 1 − k i b − k p a − k d ] = 1 2 [ 0 − μ k i − k i μ k i k i + μ ( b − k p ) b − k p k i ϕ 0 + μ ( ψ + a − k d ) μ + a − k d ] + 1 2 [ 0 μ k i k i − μ k i k i + μ ( b − k p ) ϕ 0 + μ ( ψ + a − k d ) − k i b − k p μ + a − k d ] = [ 0 0 0 0 k i + μ ( b − k p ) 1 2 ( b − k p + ϕ 0 + μ ( ψ + a − k d ) ) 0 1 2 ( b − k p + ϕ 0 + μ ( ψ + a − k d ) ) μ + a − k d ] \begin{aligned} & A^\text TP+PA \\ =& \frac 12\begin{bmatrix} 0 & 0 & -k_i \\ 1 & 0 & b-k_p \\ 0 & 1 & a-k_d \end{bmatrix} \begin{bmatrix} \mu k_i & k_i & 0 \\ k_i & \phi_0+\mu\psi & \mu \\ 0 & \mu & 1 \end{bmatrix} +\frac 12\begin{bmatrix} \mu k_i & k_i & 0 \\ k_i & \phi_0+\mu\psi & \mu \\ 0 & \mu & 1 \end{bmatrix} \begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ -k_i & b-k_p & a-k_d \end{bmatrix} \\ =& \frac 12\begin{bmatrix} 0 & -\mu k_i & -k_i \\ \mu k_i & k_i+\mu(b-k_p) & b-k_p \\ k_i & \phi_0+\mu(\psi+a-k_d) & \mu+a-k_d \\ \end{bmatrix} +\frac 12\begin{bmatrix} 0 & \mu k_i & k_i \\ -\mu k_i & k_i+\mu(b-k_p) & \phi_0+\mu(\psi+a-k_d) \\ -k_i & b-k_p & \mu+a-k_d \\ \end{bmatrix} \\ =& \begin{bmatrix} 0 & 0 & 0 \\ 0 & k_i+\mu(b-k_p) & \frac 12(b-k_p+\phi_0+\mu(\psi+a-k_d)) \\ 0 & \frac 12(b-k_p+\phi_0+\mu(\psi+a-k_d)) & \mu+a-k_d \\ \end{bmatrix} \\ \end{aligned} ===ATP+PA21 010001kibkpakd μkiki0kiϕ0+μψμ0μ1 +21 μkiki0kiϕ0+μψμ0μ1 00ki10bkp01akd 21 0μkikiμkiki+μ(bkp)ϕ0+μ(ψ+akd)kibkpμ+akd +21 0μkikiμkiki+μ(bkp)bkpkiϕ0+μ(ψ+akd)μ+akd 0000ki+μ(bkp)21(bkp+ϕ0+μ(ψ+akd))021(bkp+ϕ0+μ(ψ+akd))μ+akd
V ˙ = x ⃗ T ( A T P + P A ) x ⃗ + ( ϕ ( y ) − ϕ 0 ) y y ˙ = [ x y z ] [ 0 0 0 0 k i − μ ϕ ( y ) 1 2 ( ϕ 0 − ϕ ( y ) + μ ( ψ + a − k d ) ) 0 1 2 ( ϕ 0 − ϕ ( y ) + μ ( ψ + a − k d ) ) μ + a − k d ] [ x y z ] + ( ϕ ( y ) − ϕ 0 ) y z = [ y z ] [ k i − μ ϕ ( y ) 1 2 μ ( ψ + a − k d ) 1 2 μ ( ψ + a − k d ) μ + a − k d ] [ y z ] + [ y z ] [ 0 1 2 ( ϕ 0 − ϕ ( y ) ) 1 2 ( ϕ 0 − ϕ ( y ) ) 0 ] [ y z ] + ( ϕ ( y ) − ϕ 0 ) y z = − [ y z ] Q [ y z ] \begin{aligned} \dot V =& \vec x^\text T(A^\text TP+PA)\vec x +(\phi(y)-\phi_0)y\dot y \\ =& \begin{bmatrix} x & y & z \end{bmatrix} \begin{bmatrix} 0 & 0 & 0 \\ 0 & k_i-\mu\phi(y) & \frac 12(\phi_0-\phi(y)+\mu(\psi+a-k_d)) \\ 0 & \frac 12(\phi_0-\phi(y)+\mu(\psi+a-k_d)) & \mu+a-k_d \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix} +(\phi(y)-\phi_0)yz \\ =& \begin{bmatrix} y & z \end{bmatrix} \begin{bmatrix} k_i-\mu\phi(y) & \frac 12\mu(\psi+a-k_d) \\ \frac 12\mu(\psi+a-k_d) & \mu+a-k_d \\ \end{bmatrix} \begin{bmatrix} y \\ z \end{bmatrix} +\begin{bmatrix} y & z \end{bmatrix} \begin{bmatrix} 0 & \frac 12(\phi_0-\phi(y)) \\ \frac 12(\phi_0-\phi(y)) & 0 \\ \end{bmatrix} \begin{bmatrix} y \\ z \end{bmatrix} +(\phi(y)-\phi_0)yz \\ =& -\begin{bmatrix} y & z \end{bmatrix}Q \begin{bmatrix} y \\ z \end{bmatrix} \end{aligned} V˙====x T(ATP+PA)x +(ϕ(y)ϕ0)yy˙[xyz] 0000kiμϕ(y)21(ϕ0ϕ(y)+μ(ψ+akd))021(ϕ0ϕ(y)+μ(ψ+akd))μ+akd xyz +(ϕ(y)ϕ0)yz[yz][kiμϕ(y)21μ(ψ+akd)21μ(ψ+akd)μ+akd][yz]+[yz][021(ϕ0ϕ(y))21(ϕ0ϕ(y))0][yz]+(ϕ(y)ϕ0)yz[yz]Q[yz]
其中
Q = [ μ ϕ ( y ) − k i − 1 2 μ ( ψ + a − k d ) − 1 2 μ ( ψ + a − k d ) k d − μ − a ( y , z , t ) ] Q=\begin{bmatrix} \mu\phi(y)-k_i & -\frac 12\mu(\psi+a-k_d) \\ -\frac 12\mu(\psi+a-k_d) & k_d-\mu-a(y,z,t) \\ \end{bmatrix} Q=[μϕ(y)ki21μ(ψ+akd)21μ(ψ+akd)kdμa(y,z,t)]
定义
α = 1 2 ( μ ( ψ + a ( y , z , t ) − k d ) ) β = k d − a ( y , z , t ) − μ \begin{aligned} \alpha =& \frac 12(\mu(\psi+a(y,z,t)-k_d)) \\ \beta =& k_d-a(y,z,t)-\mu \end{aligned} α=β=21(μ(ψ+a(y,z,t)kd))kda(y,z,t)μ
根据式(2)的定义和式(3)的结果得到
μ ϕ ( y ) − k i ≥ μ ϕ 0 − k i > 0 ψ 1 − μ ≥ β ≥ ψ 0 − μ > 0 ∣ ψ + a ( y , z , t ) − k d ∣ ≤ L 2 ( μ ϕ ( y ) − k i ) β ≥ ( μ ϕ 0 − k i ) ( ψ 0 − μ ) ≥ 1 4 μ 2 L 2 2 ≥ α 2 \begin{aligned} & \mu\phi(y)-k_i \geq \mu\phi_0-k_i > 0 \\ & \psi_1-\mu \geq \beta \geq \psi_0-\mu > 0 \\ & |\psi+a(y,z,t)-k_d| \leq L_2 \\ & (\mu\phi(y)-k_i)\beta \geq (\mu\phi_0-k_i)(\psi_0-\mu) \geq\frac 14\mu^2L_2^2 \geq\alpha^2 \end{aligned} μϕ(y)kiμϕ0ki>0ψ1μβψ0μ>0ψ+a(y,z,t)kdL2(μϕ(y)ki)β(μϕ0ki)(ψ0μ)41μ2L22α2
于是 Q Q Q 的所有顺序主子式大于0, Q Q Q 正定。

补充说明与仿真


f ( x 1 , x 2 ) = 2 ln ⁡ ( ∣ x 1 ∣ + 1 ) + 3 sin ⁡ x 2 f(x_1,x_2)=2\ln(|x_1|+1)+3\sin x_2 f(x1,x2)=2ln(x1+1)+3sinx2
L 1 = 2 , L 2 = 3 L_1=2,L_2=3 L1=2,L2=3,取 k p = k d = 4 , k i = 0.01 k_p=k_d=4,k_i=0.01 kp=kd=4,ki=0.01,PID参数需要满足式(1)。但不严格满足也大部分情况下能稳定。另外当待跟踪信号 y ∗ y^* y 不是常数时不满足 x ˙ = y \dot x=y x˙=y,证明过程不成立。
在这里插入图片描述
f ( x 1 , x 2 ) = 2 ln ⁡ ( ∣ x 1 ∣ + 1 ) + 3 sin ⁡ x 2 f(x_1,x_2)=2\ln(|x_1|+1)+3\sin x_2 f(x1,x2)=2ln(x1+1)+3sinx2
  simucpp 代码如下。

#include <iostream>
#include <cmath>
#include "simucpp.hpp"
using namespace simucpp;
using namespace zhnmat;
using namespace std;

class PIDcontroller: public PackModule
{
public:
    PIDcontroller() {};
    PIDcontroller(Simulator *sim){
        Initialize(sim);
    };
    virtual PUnitModule Get_InputPort(uint32_t n) const {
        if (n==0) return in1;
        if (n==1) return in2;
        if (n==2) return in3;
        if (n==3) return in4;
        return nullptr;
    };
    virtual PUnitModule Get_OutputPort(uint32_t n) const {
        if (n==0) return sum3;
        return nullptr;
    };
    void Initialize(Simulator *sim){
        SUGain(in1, sim);
        SUGain(in2, sim);
        SUGain(in3, sim);
        SUGain(in4, sim);
        SUIntegrator(interr, sim);
        SUSum(sum1, sim);
        SUSum(sum2, sim);
        SUSum(sum3, sim);
        SUGain(gainKp, sim);
        SUGain(gainKi, sim);
        SUGain(gainKd, sim);
        sim->connectU(in3, sum1);
        sim->connectU(in1, sum1);
        sim->connectU(in4, sum2);
        sim->connectU(in2, sum2);
        sim->connectU(sum1, interr);
        sim->connectU(sum1, gainKp);
        sim->connectU(sum2, gainKd);
        sim->connectU(interr, gainKi);
        sim->connectU(gainKp, sum3);
        sim->connectU(gainKi, sum3);
        sim->connectU(gainKd, sum3);
        sum1->Set_InputGain(-1);
        sum2->Set_InputGain(-1);
        gainKp->Set_Gain(4);
        gainKi->Set_Gain(0.1);
        gainKd->Set_Gain(4);
    }

    UGain *in1=nullptr;  // x1
    UGain *in2=nullptr;  // x2
    UGain *in3=nullptr;  // u
    UGain *in4=nullptr;  // u'
    UIntegrator *interr=nullptr;
    USum *sum1=nullptr;
    USum *sum2=nullptr;
    USum *sum3=nullptr;
    UGain *gainKp=nullptr;
    UGain *gainKi=nullptr;
    UGain *gainKd=nullptr;
};

int main() {
    Simulator sim1;
    FUIntegrator(intx1, &sim1);
    FUIntegrator(intx2, &sim1);
    FUFcnMISO(misof, &sim1);
    FUInput(inv, &sim1);
    FUInput(indotv, &sim1);
    FUOutput(outu, &sim1);
    FUOutput(outv, &sim1);
    FUOutput(outy, &sim1);
    auto *controller = new PIDcontroller(&sim1);
    sim1.connectU(intx2, intx1);
    sim1.connectU(misof, intx2);
    sim1.connectU(intx1, misof);
    sim1.connectU(intx2, misof);
    sim1.connectU(controller, 0, misof);
    sim1.connectU(intx1, controller, 0);
    sim1.connectU(intx2, controller, 1);
    sim1.connectU(inv, controller, 2);
    sim1.connectU(indotv, controller, 3);
    sim1.connectU(controller, 0, outu);
    sim1.connectU(inv, outv);
    sim1.connectU(intx1, outy);
    inv->Set_Function([](double t){
        return 1;
    });
    indotv->Set_Function([](double t){
        return 0;
    });
    misof->Set_Function([](double *u){
        double x1 = u[0];
        double x2 = u[1];
        double uin = u[2];
        return 2*log(abs(x1)+1)+3*sin(x2)+uin;
    });
    outu->Set_EnableStore(false);
    outv->Set_EnableStore(false);
    // sim1.Set_SampleTime(0.1);
    sim1.Set_SimStep(0.01);
    sim1.Initialize();
    sim1.Simulate(10);
    sim1.Plot();
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值