倒立摆系统(Inverted Pendulum System)是典型的多变量、高阶次、非线性、强耦合的自然不稳定系统。本文的研究对象是一阶倒立摆,其安装在电机驱动车上,倒立摆自身是不稳定的,如果没有合适的控制力作用,它将随时可能向任意方向倾倒,倒立摆的控制目标是在指定位置将摆杆保持垂直。本文将使用 MWORKS 平台对倒立摆系统进行控制律设计并完成系统闭环验证。
图1 倒立摆系统隔离受力图
设计思路
1.系统分析与模型构建:对倒立摆被控对象进行分析,并通过 MWORKS.Sysplorer 进行模型构建。
2.控制律设计:在 MWORKS.Syslab 环境中利用控制系统工具箱(TYControlSystems)进行闭环控制律设计。
3.系统集成与闭环验证:将设计得到的控制律集成至 MWORKS.Sysplorer 中与倒立摆系统物理模型进行闭环集成,验证控制效果。
一、倒立摆系统分析与模型构建
如上图的倒立摆系统,忽略摆杆质量与地面摩擦,考虑其质量集中在摆杆顶端,即摆杆的重心就是摆球的重心。对倒立摆系统进行受力分析:
考虑摆杆重心的水平运动描述为:
摆杆重心的垂直运动描述为:
小车的水平运动描述为:
再考虑摆杆转动,其绕重心(摆球重心)的转动运动可以描述为( I 为摆杆绕其中心的转动惯量):
上述式(1)、(2)、(3)、(4)四个方程联立的非线性方程组可以完全描述一维倒立摆的行为。
为方便后续的控制律设计,考虑由于必须保持倒立摆垂直,可以认为角很小,因此,我们可以进行以下的近似,即
≈
、
≈1;再考虑倒立摆围绕重心的转动惯量很小,可近似认为:I≈0。
考虑上述近似条件,非线性方程组可以被线性化,得到:
将式(5)写成状态空间方程,定义以下状态变量:
联立式(5)、(6)得到:
上式写成矩阵形式:
因此,式(8)为一维倒立摆系统的状态空间方程表达。
以上是数学分析,实际上如前文图示的倒立摆可以在 MWORKS.Sysplorer 中通过 Modelica 多体库 MultiBody 和框图库 Blocks 进行快速、简便的构建。所构建一维倒立摆物理模型如下:
图2 一维倒立摆物理模型
模型参数如下:
基于上述物理模型,设置摆杆的初始摆角=10°,通过模型仿真,关注其仅在重力作用下的动态响应。
图3 无控制作用的倒立摆
下面,我们就要对倒立摆开始控制律设计了!
二、倒立摆控制律设计
基于式(8)推导得到的倒立摆系统状态空间模型,开展控制律设计。定义系统参数为:M=2kg、m=0.1kg、l =0.5m、g=9.8m/s²,控制律的设计目标是让倒立摆系统能够快速地在指定的位置(x)平衡(→0),本章采用状态空间理论中的极点配置法进行控制律设计。
首先在 MWORKS.Syslab 中,创建其状态空间模型并转化为零极点增益模型,实现代码如下:
# 倒立摆系统参数
M = 2 # 小车质量2kg
m = 0.1 # 摆球质量0.1kg
l = 0.5 # 摆杆长度0.5m
g = 9.8 # 重力加速度9.8m/s^2
# 倒立摆系统状态空间矩阵定义
A = [0 1 0 0
(M+m)*g/(M*l) 0 0 0
0 0 0 1
-m*g/M 0 0 0]
B = [0 -1 / (M * l) 0 1 / M]'
C = [0 0 1 0]
D = 0
# 倒立摆系统状态空间模型
G = ss(A, B, C, D)
为控制小车位置,需要建立I型伺服系统。倒立摆系统安装在小车上,没有积分器,因此,把位置信号反馈到输入端,并且把一个积分器插入到前向通路中。因此,整个系统的闭环框图为:
图4 倒立摆控制系统框图
根据上图的系统框架,可以推导闭环系统的方程描述:
将上式合并处理,得到系统动态特性的方程描述:
根据上式对闭环系统的能控性进行判定:
# 系统重构
Ahat = [A zeros(size(A, 1), 1); -C 0]
Bhat = [B; 0]
#判断重构系统的能控性
r = rank([Ahat Bhat])
计算得到 r=5,由于闭环系统为5阶,因此,上述系统的状态是完全可控的,进而可以对系统进行任意极点配置。基于式(10)进行系统极点配置设计,以得到控制律u。实际上就是根据式(10)的状态方程以及目标极点位置,来计算控制律 u 中状态反馈增益 K 及前向积分增益的值,即是图4框图中黄色标记的部分。
我们知道系统闭环极点的位置决定了其时域响应特性,由于闭环系统的阶次为5,需要为其配置5个极点,为保证系统的响应性能,配置其中2个极点为主导极点(方程 s²+2*0.7s+1=0 的共轭复根,即阻尼为0.7的理想二阶环节极点),并使其余3个极点远离主导极点(-10、-15、-20)。
采用控制系统工具箱的 place 函数,计算满足主导极点位置的状态反馈增益及前向积分增益:
# 计算理想主导极点位置并分配系统所有极点位置
idealPoles = roots([1, 2 * 0.7 * 1, 1])
AllPoles = [idealPoles[1], idealPoles[2], -10, -15, -20]
# 极点配置,计算状态增益K
Khat = place(Ahat, Bhat, AllPoles)
# 状态增益值分解
K = reshape(real(Khat[1:4]), 1, 4)
kl = -real(Khat[end])
计算得到状态反馈增益及前向积分增益
分别为:
julia> K
1x4 Matrix{Float64}:
-982.029 -255.995 -494.898 -419.19
julia> kl
-306.1224489795918
将所设计的控制律带入式,得到闭环系统的状态方程为:
系统的输出为小车的平衡位置,即:
在 MWORKS.Syslab 中计算闭环系统的阶跃响应:
# 闭环系统状态方程
AA = [A-B*K B*kl; -C 0]
BB = [0 0 0 0 1]'
CC = [C 0]
DD = 0
Gclose = ss(AA, BB, CC, DD)
# 计算并绘制阶跃响应
y, t, x = step(Gclose, 10)
#绘制阶跃响应图
figure("阶跃响应")
subplot(2, 1, 1)
plot(t, x[1, :], t, x[2, :])
grid("on")
xlabel("time(s)", fontsize = 20)
ylabel(raw"${\theta and \dot \theta}$", fontsize = 20)
title("摆角与角速度响应", fontsize = 25)
legend(["摆角", "角速度"])
subplot(2, 1, 2)
plot(t, x[3, :], t, x[4, :])
grid("on")
xlabel("time(s)", fontsize = 20)
ylabel(raw"${x and \dot x}$", fontsize = 20)
title("位移与速度响应", fontsize = 25)
legend(["位移", "速度"])
图5 系统闭环阶跃响应
通过系统闭环阶跃响应,可见系统稳态误差为0,超调较小且响应快,因此,控制效果较好。
三、倒立摆系统集成与闭环验证
根据上一章节 MWORKS.Syslab 设计的控制律结构,通过 MWORKS.Sysplorer 并将其与倒立摆被控对象物理模型进行集成,形成完整的闭环控制系统如下:
图6 基于状态反馈的倒立摆闭环控制系统模型
基于模型开展仿真试验,系统阶跃响应如下:
图7 系统闭环阶跃响应
可见,在控制律作用下,摆杆摆角在6s 左右调整为0°,小车同样在6s 左右在x=1的位置平衡。
我们再进行一个稍微复杂一点的工况试验,设定摆角初始偏转为20°,分别使小车在不同位置进行平衡,以关注系统的伺服性能。
图8 带初始偏角的系统伺服响应
通过以上仿真结果,验证了本文所设计的针对一维倒立摆系统状态反馈控制律的有效性。
四、总结与思考
本文在针对一维倒立摆系统进行分析与数学建模的基础上,通过 MWORKS.Syslab 软件采用极点配置法对系统进行状态反馈控制律设计,完成控制律设计后,进一步通过 MWORKS.Sysplorer 软件建立了一维倒立摆系统模型,并联合了所设计的控制律进行进一步的仿真验证,以表明所设计控制律的有效性。
思考1:复杂物理模型是否可以直接线性化成状态空间模型?
答案是肯定可以的!2022年底将会发布控制系统工具箱 (TYControlSystems) ,该工具箱可以将 MWORKS.Sysplorer 中构建的复杂物理模型通过底层线性化算法直接得到线性状态空间模型,用于支持下一步的控制律设计。
思考2:状态变量不可观测还能应用状态反馈控制律吗?
经典控制理论中我们常用输出反馈,本文所设计的控制律属于现代控制理论中的状态反馈,但在实际工程系统中,往往难以具备对全部状态进行观测的条件,那状态反馈还能应用吗?答案是肯定可以的,因为我们可以去设计观测器,这里面涉及到现代控制理论中的一些基本概念,能观性、能控性、状态观测器等,在此不赘述,感兴趣的同学可以自行去查阅现代控制理论的相关书籍。