系列文章目錄
最優(yōu)控制介紹
一級倒立擺控制 —— 系統(tǒng)建模(傳遞函數(shù)模型與狀態(tài)空間方程表示)
一級倒立擺控制 —— 最優(yōu)控制 線性二次型控制(LQR)及 MATLAB 實現(xiàn)
一級倒立擺控制 —— MPC 控制器設計及 MATLAB 實現(xiàn)
一級倒立擺控制 —— ROS2 仿真
一級倒立擺控制 —— LQR 控制器 GAZEBO 仿真
前言
在本頁中,我們將為倒立擺系統(tǒng)設計一個 PID 控制器。在設計過程中,我們將假設一個單輸入、單輸出設備,其傳遞函數(shù)如下。除此以外,我們將嘗試在不考慮小車位置的情況下控制擺的角度。
擺桿傳遞函數(shù)方程:
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)?s3?q(M+m)mgl?s2?qbmgl?sqml?s2?
式中,
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]
更具體地說,當小車受到 1-Nsec 的沖力時,控制器將試圖保持擺錘垂直向上。在這些條件下,設計標準是:
- 穩(wěn)定時間小于 5 秒
- 擺錘偏離垂直方向的幅度不應超過 0.05 弧度
有關原始問題設置和上述傳遞函數(shù)的推導,請查閱倒立擺: 系統(tǒng)建模頁面。
一、系統(tǒng)結構
這個問題的控制器結構與您可能習慣的標準控制問題有些不同。由于我們試圖控制擺的位置,而擺的位置在受到初始擾動后應返回垂直方向,因此我們跟蹤的參考信號應為零。這種情況通常被稱為調(diào)節(jié)器問題。施加在小車上的外力可視為脈沖干擾。該問題的示意圖如下。
如果我們先將原理圖重新排列如下,您可能會發(fā)現(xiàn)分析和設計該系統(tǒng)更加容易。
因此,閉環(huán)系統(tǒng)從力
F
F
F 輸入到擺角
?
\phi
? 輸出的傳遞函數(shù)
T
(
s
)
T(s)
T(s) 確定如下。
T ( s ) = Φ ( s ) U ( s ) = P p e n d ( s ) 1 + C ( s ) P p e n d ( s ) \begin{equation} T(s)=\dfrac{\Phi(s)}{U(s)}=\dfrac{P_{pend}(s)}{1+C(s)P_{pend}(s)} \end{equation} T(s)=U(s)Φ(s)?=1+C(s)Ppend?(s)Ppend?(s)???
在開始設計 PID 控制器之前,我們首先需要在 MATLAB 中定義倒立擺傳遞函數(shù)模型。創(chuàng)建一個新的 .m 文件并鍵入以下命令來創(chuàng)建傳遞函數(shù)模型(有關獲取這些命令的詳細信息,請參閱主問題)。
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_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);
接下來,我們將定義一個 PID 控制器。
二、PID 控制
在 MATLAB 中可以通過將以下代碼復制到 .m 文件末尾來模擬閉環(huán)傳遞函數(shù)(無論您使用的是傳遞函數(shù)形式還是模型的狀態(tài)空間表示形式)。具體來說,我們使用 MATLAB 中的 pid 對象定義控制器。然后,我們使用反饋命令生成閉環(huán)傳遞函數(shù) T ( s ) T(s) T(s),如上圖所示,其中干擾力 F F F 為輸入,擺錘角度與垂直方向的偏差 ? \phi ? 為輸出。
t=0:0.01:10;
impulse(T,t)
title({'Response of Pendulum Position to an Impulse Disturbance';'under PID Control: Kp = 1, Ki = 1, Kd = 1'});
這個響應仍然不穩(wěn)定。讓我們開始通過增加比例增益來修改響應。增加
K
p
K_p
Kp? 變量,看看它對響應有什么影響。如果將 .m 文件修改為
K
p
K_p
Kp? = 100,并在命令窗口中運行,將得到下圖所示的響應圖。
Kp = 100;
Ki = 1;
Kd = 1;
C = pid(Kp,Ki,Kd);
T = feedback(P_pend,C);
t=0:0.01:10;
impulse(T,t)
axis([0, 2.5, -0.2, 0.2]);
title({'Response of Pendulum Position to an Impulse Disturbance';'under PID Control: Kp = 100, Ki = 1, Kd = 1'});
在繪制的曲線圖上單擊右鍵,從菜單中選擇 “特征”,即可確定響應的重要特征。具體來說,響應的穩(wěn)定時間被確定為 1.64 秒,小于 5 秒的要求。由于穩(wěn)態(tài)誤差以足夠快的速度趨近于零,因此不需要額外的積分動作。您可以將積分增益常數(shù)
K
i
K_i
Ki? 設為零,以親自驗證是否需要進行積分控制。不過,峰值響應大于 0.05 弧度的要求?;叵胍幌拢ǔ?梢酝ㄟ^增加導數(shù)控制量來減少過沖。經(jīng)過反復試驗,我們發(fā)現(xiàn)導數(shù)增益
K
d
K_d
Kd? = 20 可以提供令人滿意的響應。對 m 文件作如下修改并重新運行后,將得到下圖所示的響應圖
Kp = 100;
Ki = 1;
Kd = 20;
C = pid(Kp,Ki,Kd);
T = feedback(P_pend,C);
t=0:0.01:10;
impulse(T,t)
axis([0, 2.5, -0.2, 0.2]);
title({'Response of Pendulum Position to an Impulse Disturbance';'under PID Control: Kp = 100, Ki = 1, Kd = 20'});
可以看到,過沖已經(jīng)減小,擺錘偏離垂直方向的幅度不會超過 0.05 弧度。由于所有給定的設計要求都已滿足,因此不需要進一步迭代。
三、小車的位置會發(fā)生什么變化?
本頁開頭給出了倒立擺系統(tǒng)的方框圖。該圖并不完整。代表小車位置 x x x 響應的圖塊沒有包括在內(nèi),因為該變量沒有被控制。但有趣的是,當擺錘角度 ? \phi ? 的控制器就位時,小車的位置會發(fā)生什么變化。要了解這一點,我們需要考慮整個系統(tǒng)框圖,如下圖所示。
重新排列后,我們得到以下框圖。
在上圖中,塊 C ( s ) C(s) C(s) 是為保持擺錘垂直而設計的控制器。因此,從施加到小車的輸入力到小車位置輸出的閉環(huán)傳遞函數(shù) T 2 ( s ) T_2(s) T2?(s) 如下所示。
T ( s ) = X ( s ) F ( s ) = P c a r t ( s ) 1 + C ( s ) P p e n d ( s ) \begin{equation} T(s)=\dfrac{X(s)}{F(s)}=\dfrac{P_{cart}(s)}{1+C(s)P_{pend}(s)} \end{equation} T(s)=F(s)X(s)?=1+C(s)Ppend?(s)Pcart?(s)???
請參考倒立擺: 系統(tǒng)建模頁面, P c a r t ( s ) P_{cart}(s) Pcart?(s) 的傳遞函數(shù)定義如下。
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 \begin{equation} 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} \end{equation} Pcart?(s)=U(s)Φ(s)?=s4+qb(I+ml2)?s3?q(M+m)mgl?s2?qbmgl?sq(I+ml2)s2?mgl????
式中, 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]
在您的 m 文件中添加以下命令(假設 P p e n d ( s ) P_{pend}(s) Ppend?(s) 和 C ( s ) C(s) C(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);
T2 = feedback(1,P_pend*C)*P_cart;
t = 0:0.01:5;
impulse(T2, t);
title({'Response of Cart Position to an Impulse Disturbance';'under PID Control: Kp = 100, Ki = 1, Kd = 20'});
文章來源:http://www.zghlxwxcb.cn/news/detail-773359.html
可以看到,小車以近似恒定的速度向負方向移動。因此,盡管 PID 控制器能穩(wěn)定擺錘的角度,但在實際物理系統(tǒng)中實施這種設計并不可行。文章來源地址http://www.zghlxwxcb.cn/news/detail-773359.html
到了這里,關于一級倒立擺控制 —— PID 控制器設計及 MATLAB 實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!