一级倒立摆控制 —— 动力学系统建模

系列文章目录

最优控制介绍
一级倒立摆控制 —— PID 控制器设计及 MATLAB 实现
一级倒立摆控制 —— LQR 控制器设计及 MATLAB 实现
一级倒立摆控制 —— MPC 控制器设计及 MATLAB 实现
一级倒立摆控制 —— ROS2 仿真
一级倒立摆控制 —— LQR 控制器 GAZEBO 仿真



一、倒立摆系统的特点、目标及原理

特点:非线性、高阶次、多变量、强耦合;
目标:通过给小车底座加力 F F F(控制量),使小车停留在预定的位置,并使摆杆不倒下,即不超过预先定义的竖直偏离角度范围。
原理:小车位置编码器将小车的位移和速度信号反馈给运动控制卡,角度编码器将摆角的角度、角速度信号反馈给运动控制卡。计算机从运动控制卡中读取实时反馈数据,确定小车向哪个方向移动、移动速度、加速度等,产生相应的控制量 F F F


二、倒立摆系统建模

pendulum

2.1 系统变量表:

参数符号数值
小车质量 M M M0.5 kg
摆杆质量 m m m0.2 kg
小车摩擦系数 b b b0.1 N/m/sec
到摆杆质心的长度 l l l0.3 m
摆杆转动惯量 I I I0.006 kg*m²
施加在小车上的力 F F F
小车位置坐标 x x x
摆杆偏离竖直方向的角度 θ \theta θ

2.2 系统受力分析

根据所取变量的方式,目前主要有两种建模方式:
如图所示,一种取钝角 θ \theta θ 为变量建立系统方程组,另一种以锐角 ϕ \phi ϕ 为变量建立系统方程组。下面分别分析。
受力分析

2.2.1 以锐角 ϕ \phi ϕ 为变量建立系统模型

注意:这里的 ϕ \phi ϕ π − θ \pi-\theta πθ,与下面以钝角 θ \theta θ 为变量建立系统模型中的 ϕ \phi ϕ 并不相同。

2.2.1.1 取顺时针为正方向

注意:刚体绕定轴转动动力学方程需要实现规定正方向,一般取逆时针方向为正方向。(其实我觉得下面的不太正确,但是几本书上是这么写的)
根据刚体绕固定轴转动的动力学方程,转动惯量与加速度乘积等于作用于刚体主动力对该轴力矩的代数和,则
摆杆绕其重心的转动方程为
J ϕ ¨ = F y l sin ⁡ ϕ − F x l cos ⁡ ϕ J\ddot{\phi}=F_yl\sin\phi-F_xl\cos\phi Jϕ¨=FylsinϕFxlcosϕ
摆杆重心的水平运动可以描述为
F x = m d 2 d t 2 ( x + l sin ⁡ ϕ ) F_x=m\frac{d^2}{dt^2}(x+l\sin\phi) Fx=mdt2d2(x+lsinϕ)
摆杆重心在竖直方向上的运动可描述为
F y − m g = m d 2 d t 2 ( l cos ⁡ ϕ ) F_y-mg=m\frac{d^2}{dt^2}(l\cos\phi) Fymg=mdt2d2(lcosϕ)
小车水平方向的运动可描述为
F − F x − b x ˙ = M d 2 x d t 2 F-F_x-b\dot{x}=M\frac{d^2x}{dt^2} FFxbx˙=Mdt2d2x
由式(2)和式(4)得
( M + m ) x ¨ + b x ˙ + m l ϕ ¨ cos ⁡ ϕ − m l ϕ ˙ 2 sin ⁡ ϕ = F (M+m)\ddot{x}+b\dot{x}+ml\ddot{\phi}\cos\phi-ml\dot\phi^2\sin\phi=F (M+m)x¨+bx˙+mlϕ¨cosϕmlϕ˙2sinϕ=F
由式(1)和式(3)得
( J + m l 2 ) ϕ ¨ + m l cos ⁡ ϕ ⋅ x ¨ = m l g ⋅ sin ⁡ ϕ (J+ml^2)\ddot{\phi}+ml\cos\phi\cdot\ddot{x}=mlg\cdot\sin\phi (J+ml2)ϕ¨+mlcosϕx¨=mlgsinϕ


2.2.1.2 取逆时针为正方向

根据刚体绕固定轴转动的动力学方程,转动惯量与加速度乘积等于作用于刚体主动力对该轴力矩的代数和,则
摆杆绕其重心的转动方程为
J ϕ ¨ = F x l cos ⁡ ϕ − F y l sin ⁡ ϕ J\ddot{\phi}=F_xl\cos\phi-F_yl\sin\phi Jϕ¨=FxlcosϕFylsinϕ
摆杆重心的水平运动可以描述为
F x = m d 2 d t 2 ( x + l sin ⁡ ϕ ) F_x=m\frac{d^2}{dt^2}(x+l\sin\phi) Fx=mdt2d2(x+lsinϕ)
摆杆重心在竖直方向上的运动可描述为
F y − m g = m d 2 d t 2 ( l cos ⁡ ϕ ) F_y-mg=m\frac{d^2}{dt^2}(l\cos\phi) Fymg=mdt2d2(lcosϕ)
小车水平方向的运动可描述为
F − F x − b x ˙ = M d 2 x d t 2 F-F_x-b\dot{x}=M\frac{d^2x}{dt^2} FFxbx˙=Mdt2d2x
由式(2)和式(4)得
( M + m ) x ¨ + b x ˙ + m l ϕ ¨ cos ⁡ ϕ − m l ϕ ˙ 2 sin ⁡ ϕ = F (M+m)\ddot{x}+b\dot{x}+ml\ddot{\phi}\cos\phi-ml\dot\phi^2\sin\phi=F (M+m)x¨+bx˙+mlϕ¨cosϕmlϕ˙2sinϕ=F
由式(1)和式(3)得
( m l 2 − J ) ϕ ¨ + m l cos ⁡ ϕ ⋅ x ¨ = m l g ⋅ sin ⁡ ϕ (ml^2-J)\ddot{\phi}+ml\cos\phi\cdot\ddot{x}=mlg\cdot\sin\phi (ml2J)ϕ¨+mlcosϕx¨=mlgsinϕ


2.2.1 以钝角 θ \theta θ 为变量建立系统模型

注意: θ \theta θ 为钝角, cos ⁡ θ \cos\theta cosθ 为负,即乘以 cos ⁡ θ \cos\theta cosθ 后方向会改变为反方向。

小车水平方向上的受力方程
M x ¨ + b x ˙ + N = F M\ddot{x}+b\dot{x}+N=F Mx¨+bx˙+N=F
摆杆水平方向上的受力方程
N = m x ¨ + m l θ ¨ cos ⁡ θ − m l θ ˙ 2 sin ⁡ θ N=m\ddot{x}+ml\ddot{\theta}\cos\theta-ml\dot{\theta}^2\sin\theta N=mx¨+mlθ¨cosθmlθ˙2sinθ
垂直于摆杆方向上的受力方程
P sin ⁡ θ + N cos ⁡ θ − m g sin ⁡ θ = m l θ ¨ + m x ¨ cos ⁡ θ P\sin\theta+N\cos\theta-mg\sin\theta=ml\ddot{\theta}+m\ddot{x}\cos\theta Psinθ+Ncosθmgsinθ=mlθ¨+mx¨cosθ
其中, m l θ ¨ ml\ddot{\theta} mlθ¨ 为摆杆所受向心力, m x ¨ cos ⁡ θ m\ddot{x}\cos\theta mx¨cosθ 为摆杆沿 x x x 方向加速度在垂直摆杆方向的分量。
根据刚体绕定轴转动的动力学公式,摆杆转动动力学方程
− P l sin ⁡ θ − N l cos ⁡ θ = I θ ¨ -Pl\sin\theta-Nl\cos\theta=I\ddot{\theta} PlsinθNlcosθ=Iθ¨
由式(7)和(8)得
( M + m ) x ¨ + b x ˙ + m l θ ¨ cos ⁡ θ − m l θ ˙ 2 sin ⁡ θ = F (M+m)\ddot{x}+b\dot{x}+ml\ddot{\theta}\cos\theta-ml\dot{\theta}^2\sin\theta=F (M+m)x¨+bx˙+mlθ¨cosθmlθ˙2sinθ=F
由式(9)和式(10)得
( I + m l 2 ) θ ¨ + m g l sin ⁡ θ = − m l x ¨ cos ⁡ θ (I+ml^2)\ddot{\theta}+mgl\sin\theta=-ml\ddot{x}\cos\theta (I+ml2)θ¨+mglsinθ=mlx¨cosθ
整理得系统动力学方程组
{ ( M + m ) x ¨ + b x ˙ + m l θ ¨ cos ⁡ θ − m l θ ˙ 2 sin ⁡ θ = F ( I + m l 2 ) θ ¨ + m g l sin ⁡ θ = − m l x ¨ cos ⁡ θ \begin{cases} (M+m)\ddot{x}+b\dot{x}+ml\ddot{\theta}\cos\theta-ml\dot{\theta}^2\sin\theta=F \\ (I+ml^2)\ddot{\theta}+mgl\sin\theta=-ml\ddot{x}\cos\theta \end{cases} {(M+m)x¨+bx˙+mlθ¨cosθmlθ˙2sinθ=F(I+ml2)θ¨+mglsinθ=mlx¨cosθ
使用不同的变量所得模型不同,但是并不影响后续的控制,因此以后采用以钝角为变量建模所得方程。


三、动力学方程雅可比线性化

雅可比线性化可参考:
将系统在平衡位置的方程组线性化,系统的平衡点为 θ = π \theta=\pi θ=π,取 θ = π + ϕ \theta=\pi+\phi θ=π+ϕ,则可对非线性方程组作以下小角度近似

注意:这里的 ϕ \phi ϕ 为摆杆向左偏离竖直方向的角度,与上面摆杆向右偏离竖直方向的角度并不是同一个角度。

{ cos ⁡ θ = cos ⁡ ( π + ϕ ) ≈ − 1 sin ⁡ θ = sin ⁡ ( π + ϕ ) ≈ − ϕ θ ˙ 2 = ϕ ˙ 2 ≈ 0 \begin{cases} \cos\theta=\cos(\pi+\phi)\approx-1 \\ \sin\theta=\sin(\pi+\phi)\approx-\phi \\ \dot{\theta}^2=\dot{\phi}^2\approx0 \end{cases} cosθ=cos(π+ϕ)1sinθ=sin(π+ϕ)ϕθ˙2=ϕ˙20
将上述近似代入非线性动力学方程组中得线性化动力学方程组
{ ( M + m ) x ¨ + b x ˙ − m l ϕ ¨ = u ( I + m l 2 ) ϕ ¨ − m g l ϕ = m l x ¨ \begin{cases} (M+m)\ddot{x}+b\dot{x}-ml\ddot{\phi}=u \\ (I+ml^2)\ddot{\phi}-mgl\phi=ml\ddot{x} \end{cases} {(M+m)x¨+bx˙mlϕ¨=u(I+ml2)ϕ¨mg=mlx¨


四、传递函数

对初始条件为零的系统动力学方程(15)进行拉普拉斯变换
{ ( M + m ) X ( s ) s 2 + b X ( s ) s − m l Φ ( s ) s 2 = U ( s ) ( I + m l 2 ) Φ ( s ) s 2 − m g l Φ ( s ) s = m l X ( s ) s 2 \begin{cases} (M+m)X(s)s^2+bX(s)s-ml\Phi(s)s^2=U(s) \\ (I+ml^2)\Phi(s)s^2-mgl\Phi(s)s=mlX(s)s^2 \end{cases} {(M+m)X(s)s2+bX(s)smlΦ(s)s2=U(s)(I+ml2)Φ(s)s2mglΦ(s)s=mlX(s)s2
整理得摆杆传递函数方程
P p e n d ( s ) = Φ ( s ) U ( s ) = m l q s 2 s 4 + b ( I + m l 2 ) q s 3 − ( M + m ) m g l q s 2 − b m g l q s P_{pend}(s)=\dfrac{\Phi(s)}{U(s)}=\dfrac{\dfrac{ml}{q}s^2}{s^4+\dfrac{b(I+ml^2)}{q}s^3-\dfrac{(M+m)mgl}{q}s^2-\dfrac{bmgl}{q}s} Ppend(s)=U(s)Φ(s)=s4+qb(I+ml2)s3q(M+m)mgls2qbmglsqmls2
式中, q = [ ( M + m ) ( I + m l 2 ) − ( m l ) 2 ] q=[(M+m)(I+ml^2)-(ml)^2] q=[(M+m)(I+ml2)(ml)2]
由式(17)可以看出,传递函数在原点既有一个极点,也有一个零点,约去得
P p e n d ( s ) = Φ ( s ) U ( s ) = m l q s s 3 + b ( I + m l 2 ) q s 2 − ( M + m ) m g l q s − b m g l q P_{pend}(s)=\dfrac{\Phi(s)}{U(s)}=\dfrac{\dfrac{ml}{q}s}{s^3+\dfrac{b(I+ml^2)}{q}s^2-\dfrac{(M+m)mgl}{q}s-\dfrac{bmgl}{q}} Ppend(s)=U(s)Φ(s)=s3+qb(I+ml2)s2q(M+m)mglsqbmglqmls
类似的,小车的传递函数也可以得到
P c a r t ( s ) = Φ ( s ) U ( s ) = ( I + m l 2 ) s 2 − m g l q s 4 + b ( I + m l 2 ) q s 3 − ( M + m ) m g l q s 2 − b m g l q s P_{cart}(s)=\dfrac{\Phi(s)}{U(s)}=\dfrac{\dfrac{(I+ml^2)s^2-mgl}{q}}{s^4+\dfrac{b(I+ml^2)}{q}s^3-\dfrac{(M+m)mgl}{q}s^2-\dfrac{bmgl}{q}s} Pcart(s)=U(s)Φ(s)=s4+qb(I+ml2)s3q(M+m)mgls2qbmglsq(I+ml2)s2mgl


五、状态空间表示

将动力学方程组(15)写为一阶微分方程组的形式,用矩阵表示为
[ x ˙ x ¨ ϕ ˙ ϕ ¨ ] = [ 0 1 0 0 0 − ( I + m l 2 ) b I ( M + m ) + M m l 2 m 2 g l 2 I ( M + m ) + M m l 2 0 0 0 0 1 0 − m l b I ( M + m ) + M m l 2 m g l ( M + m ) I ( M + m ) + M m l 2 0 ] [ x x ˙ ϕ ϕ ˙ ] + [ 0 I + m l 2 I ( M + m ) + M m l 2 0 m l I ( M + m ) + M m l 2 ] u \begin{bmatrix}\dot{x} \\ \ddot{x} \\ \dot{\phi} \\ \ddot{\phi} \end{bmatrix}= \begin{bmatrix} 0 &1& 0& 0 \\ 0&\dfrac{-(I+ml^2)b}{I(M+m)+Mml^2} &\dfrac{m^2gl^2}{I(M+m)+Mml^2} &0 \\ 0&0&0&1 \\ 0&\dfrac{-mlb}{I(M+m)+Mml^2}&\dfrac{mgl(M+m)}{I(M+m)+Mml^2}&0 \end{bmatrix} \begin{bmatrix}x \\ \dot{x} \\ \phi \\ \dot{\phi} \end{bmatrix}+ \begin{bmatrix}0 \\ \dfrac{I+ml^2}{I(M+m)+Mml^2} \\ 0 \\ \dfrac{ml}{I(M+m)+Mml^2} \end{bmatrix}u x˙x¨ϕ˙ϕ¨ = 00001I(M+m)+Mml2(I+ml2)b0I(M+m)+Mml2mlb0I(M+m)+Mml2m2gl20I(M+m)+Mml2mgl(M+m)0010 xx˙ϕϕ˙ + 0I(M+m)+Mml2I+ml20I(M+m)+Mml2ml u
y = [ 1 0 0 0 0 0 1 0 ] [ x ˙ x ¨ ϕ ˙ ϕ ¨ ] + [ 0 0 ] u \bm{y}=\begin{bmatrix}1&0&0&0 \\ 0&0&1&0 \end{bmatrix}\begin{bmatrix}\dot{x} \\ \ddot{x} \\ \dot{\phi} \\ \ddot{\phi} \end{bmatrix}+\begin{bmatrix}0 \\ 0 \end{bmatrix}u y=[10000100] x˙x¨ϕ˙ϕ¨ +[00]u


六、MATLAB 表示

6.1 传递函数

代码为

M = 0.5;
m = 0.2;
b = 0.1;
I = 0.006;
g = 9.8;
l = 0.3;
q = (M+m)*(I+m*l^2)-(m*l)^2;
s = tf('s');

P_cart = (((I+m*l^2)/q)*s^2 - (m*g*l/q))/(s^4 + (b*(I + m*l^2))*s^3/q - ((M + m)*m*g*l)*s^2/q - b*m*g*l*s/q);

P_pend = (m*l*s/q)/(s^3 + (b*(I + m*l^2))*s^2/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

输出为

sys_tf =
 
  从输入 "u" 到输出...
                       4.182e-06 s^2 - 0.0001025
   x:  ---------------------------------------------------------
       2.3e-06 s^4 + 4.182e-07 s^3 - 7.172e-05 s^2 - 1.025e-05 s
 
                              1.045e-05 s
   phi:  -----------------------------------------------------
         2.3e-06 s^3 + 4.182e-07 s^2 - 7.172e-05 s - 1.025e-05
 
Continuous-time transfer function.

6.2 状态空间

代码为

M = .5;
m = 0.2;
b = 0.1;
I = 0.006;
g = 9.8;
l = 0.3;

p = I*(M+m)+M*m*l^2; %denominator for the A and B matrices

A = [0      1              0           0;
     0 -(I+m*l^2)*b/p  (m^2*g*l^2)/p   0;
     0      0              0           1;
     0 -(m*l*b)/p       m*g*l*(M+m)/p  0];
B = [     0;
     (I+m*l^2)/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)

输出为

sys_ss =
 
  A = 
                  x    x_dot      phi  phi_dot
   x              0        1        0        0
   x_dot          0  -0.1818    2.673        0
   phi            0        0        0        1
   phi_dot        0  -0.4545    31.18        0
 
  B = 
                u
   x            0
   x_dot    1.818
   phi          0
   phi_dot  4.545
 
  C = 
              x    x_dot      phi  phi_dot
   x          1        0        0        0
   phi        0        0        1        0
 
  D = 
        u
   x    0
   phi  0
 
连续时间状态空间模型。

  • 9
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值