系统模型
一阶倒立摆是控制理论学习中常见的被控对象,本文使用它的近似线性模型,状态方程为
其中,是小车的位移,是摆杆与垂直线的夹角。当时摆杆是垂直的,所以系统平衡点(系统状态等于零)即为目标位置,这种设置更方便。假设传感器测量位移和夹角,而且系统输出由这两个量构成,则该系统在MATLAB中的表示代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| M = 0.5; m = 0.2; b = 0.1; I = 0.006; g = 9.8; l = 0.3; den = I*(M+m)+M*m*l^2; A = [0, 1, 0, 0; 0, -(I+m*l^2)*b/den, -(m^2*g*l^2)/den, 0; 0, 0, 0, 1; 0, (m*l*b)/den, m*g*l*(M+m)/den, 0]; B = [ 0; (I+m*l^2)/den; 0; -m*l/den]; C = [1, 0, 0, 0; 0, 0, 1, 0]; D = [0; 0]; sys_open = ss(A, B, C, D);
|
开环系统的极点即为矩阵的特征值,可以通过运行eig(A)命令得到,可知开环系统是不稳定的。运行如下命令可得系统能控矩阵的秩为4,所以系统是能控的。
1 2
| co = ctrb(sys_open); rank(co);
|
状态反馈控制
假设系统输入信号为,采用如下状态反馈控制律
常用的反馈控制律则是零输入时的特殊情况。可得到闭环系统的状态方程为
由于系统是能控的,所以闭环极点(矩阵的特征值)能够配置到任意位置。如下命令求解出状态反馈矩阵,将闭环系统极点配置到指定位置。
1 2
| poles = [-5; -10; -5+10j; -5-10j]; K = place(A, B, poles);
|
如果输入是定值,即时,根据式可知系统状态的稳态值满足
由此可得
如果,则有
在经典控制理论中,系统是单输入单输出的,输入通常作为系统的给定值,将输出与输入比较得到误差,根据误差计算控制量使输出跟踪输入。但从上面的分析可看出,在状态空间法中,输入和控制量的维数相同,大部分情况下无法完整表示状态或输出的目标值,也就无法通过那种形式的控制律达到跟踪控制的效果。
本文讨论的倒立摆模型中,是个标量(施加在小车上的力),而且可计算得到矩阵的值为
1 2 3 4
| >> -C*inv(A-B*K)*B ans = -0.0071 0.0000
|
因此,可以结合式选取决定位移的稳态值,但角度会趋于零,无法控制到任意给定值。下面的代码将闭环系统模型表示出来,通过lsim函数得到系统输出。
1 2 3 4 5 6 7 8 9 10
| Ac = A-B*K; Bc = B; Cc = C; Dc = D; sys_closed = ss(Ac, Bc, Cc, Dc); t = 0:0.01:1.5;
rss = 0.1/(-0.0071); r = rss*ones(size(t)); x0 = [-0.2; 0; 0.1; 0]; y = lsim(sys_closed, r, t, x0); plot(t, y(:, 1:2), 'LineWidth', 1.5); grid on
|
将上面所有代码按顺序贴到同一个文件中运行,得到的输出变化曲线如下图所示,可以看到小车位移的稳态值为0.1,与预期值相符。
小车位置和摆杆角度变化曲线
参考资料
- Inverted
Pendulum: State-Space Methods for Controller Design
- 现代控制工程
- Controller
Design in Sate-Space - Engineering LibreTexts