MATLAB および Simulink の制御チュートリアル (2023)

このチュートリアルで使用される主な MATLAB コマンドは次のとおりです。TFローカスポールゼロzpkフィードバック衝動

関連するチュートリアルのリンク

  • 根軌跡の紹介
  • 根軌跡活動
  • アニメーションの例

関連する外部リンク

コンテンツ

  • システム構成
  • 根軌跡設計
  • PID制御
  • カートの位置はどうなるのでしょうか?

このページでは、根軌跡設計法を用いて倒立振子システムの制御装置を設計します。設計プロセスでは、次の伝達関数で表される単一入力、単一出力のプラントを想定します。特に明記されていない場合は、カートの位置に関係なく振り子の角度を制御しようとします。

(1)MATLAB および Simulink の制御チュートリアル (1)

どこ、

(2)MATLAB および Simulink の制御チュートリアル (2)

より具体的には、カートが 1 ナノ秒の衝撃を受けると、コントローラーは振り子を垂直上向きに維持しようとします。これらの条件下での設計基準は次のとおりです。

  • 整定時間は5秒未満
  • 振り子は垂直から 0.05 ラジアン以上離れてはなりません
(Video) 制御向けSimulink入門

元の問題の設定と上記の伝達関数の導出については、以下を参照してください。倒立振子: システム モデリングページ。

システム構成

この問題のコントローラーの構造は、よく知られている標準的な制御問題とは少し異なります。最初の外乱の後に垂直に戻るはずの振り子の位置を制御しようとしているため、追跡している基準信号はゼロである必要があります。この種の状況は、多くの場合、規制当局の問題と呼ばれます。台車に加わる外力は、衝撃的な外乱と考えることができます。この問題の概略図を以下に示します。

MATLAB および Simulink の制御チュートリアル (3)

最初に回路図を次のように再配置すると、このシステムの分析と設計が容易になることがわかります。

MATLAB および Simulink の制御チュートリアル (4)

結果として得られる伝達関数MATLAB および Simulink の制御チュートリアル (5)力の入力による閉ループシステムの場合MATLAB および Simulink の制御チュートリアル (6)振り子角度の出力へMATLAB および Simulink の制御チュートリアル (7)すると、次のように決定されます。

(3)MATLAB および Simulink の制御チュートリアル (8)

コントローラーの設計を開始する前に、まず MATLAB 内でプラントを定義する必要があります。新しいを作成しますmファイル次のコマンドを入力してプラント モデルを作成します (これらのコマンドの取得の詳細については、主な問題を参照してください)。

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(「さん」);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);

根軌跡設計

ここで、根軌跡設計法を使用してシステムのコントローラーの設計を開始します。 MATLAB コマンドを使用できますローカス根軌跡プロットを生成します。次のコマンドを m ファイルに追加し、MATLAB コマンド ウィンドウで実行すると、以下に示す根軌跡プロットが作成されます。このプロットは、考えられるすべての閉ループ極の位置を単純な比例制御ゲインとして表示します。MATLAB および Simulink の制御チュートリアル (9)は0から無限大まで変化します。根軌跡は乗算ゲインに関係なく同じですMATLAB および Simulink の制御チュートリアル (10)閉ループ システムの順方向パスまたはフィードバック パスにあります。

rlocus(P_pend)title(「植物の根軌跡(比例制御時)」

MATLAB および Simulink の制御チュートリアル (11)

ご覧のとおり、根軌跡の分岐の 1 つは完全に複合体の右半分にあります。s-飛行機。これは、ゲインの選択に関係なく、MATLAB および Simulink の制御チュートリアル (12)、右半分の平面には常に閉ループの極が存在し、システムのインパルス応答が不安定になります。

この問題を解決するには、コントローラーを介して原点に極 (積分器) を追加して、原点のプラント ゼロをキャンセルする必要があります。この追加により、右半平面に 2 つの閉ループ極が生成されます。その後の設計では、コントローラーを変更してこれらの極を左半分の平面に引き込み、それによって閉ループ システムを安定させることができます。次のコマンドを使用して m ファイルを変更し、MATLAB コマンド ウィンドウで再実行すると、以下に示す根軌跡プロットが生成されます。

(Video) 今からはじめるSimulink入門

C = 1/s;rlocus(C*P_pend)title(「積分制御による根軌跡」

MATLAB および Simulink の制御チュートリアル (13)

また、根軌跡の分岐を左半平面に描画する方法を考え始めるために、システムの開ループの極と零点の位置も調べてみましょう。 MATLAB コマンド ウィンドウに次のコマンドを入力すると、次の出力が生成されます。

ゼロ = ゼロ(C*P_pend) 極 = 極(C*P_pend)
ゼロ = 0 極 = 0 5.5651 -5.6041 -0.1428

ご覧のとおり、極は 4 つあり、零点は 1 つだけです。これは、根軌跡には 3 つの漸近線があることを意味します。1 つは負の方向の実軸に沿ったもので、他の 2 つはこれに対して 120 度の角度にあります。

この構成も満足のいくものではありません。なぜなら、完全に右半分の複素平面内にある根軌跡の枝がまだ残っているからです。一般に、システムにゼロを追加することで、根軌跡の枝を複素平面内で左側に引っ張ることができます。コントローラーにゼロを追加すると、漸近線の数が 3 から 2 に減ります。これら 2 つの漸近線は虚軸に平行になり、次の位置で実軸と交差します。s以下の式から算出されます。

(4)MATLAB および Simulink の制御チュートリアル (14)

したがって、これまでに説明したシステムでは、最小位相ゼロ (負) を仮定すると次のようになります。

(5)MATLAB および Simulink の制御チュートリアル (15)

上記に基づいて、複素平面内で漸近線を左に引くことができる最大値は、無視できるほど小さなゼロの場合、約 -0.1 です。 2% の整定時間は次の式から推定できることを思い出してください。

(6)MATLAB および Simulink の制御チュートリアル (16)

したがって、実部が -0.1 に近づく支配的な閉ループ極では、必要な 5 秒の整定時間を満たすのに十分ではありません。

PID制御

上記の議論では、積分コントローラーに 0 を追加すると、根軌跡の枝を複素平面内で左に引き寄せることができることを実証しましたが、支配的な枝を十分に左に引き寄せることはできませんでした。考えられる解決策は、さらにゼロを追加することです。両方のゼロを 2 つのプラントの極間の負の実軸上に配置すると、右半分の平面にある 2 つの分岐が左半分の平面に引き込まれ、これら 2 つのゼロで終了します。具体的に、積分器と -3 と -4 にゼロがあるコントローラーの根軌跡を評価してみましょう。このコントローラーは実際には PID コントローラーであることに注意してください。 MATLAB 内でこのコントローラーを作成するには、zpkシステムの零点、極、ゲインを指定してモデルを作成するコマンド。次のコマンドを使用して m ファイルを変更し、再実行すると、以下に示す根軌跡プロットが生成されます。

z = [-3 -4];p = 0;k = 1;C = zpk(z,p,k);rlocus(C*P_pend)title(「PIDコントローラーによる根軌跡」

MATLAB および Simulink の制御チュートリアル (17)

(Video) 自律ロボティクス開発を支援するMATLABおよびSimulink

上記の根軌跡を調べることは、与えられた要件が満たされるかどうかを判断するのに役立ちます。具体的には、システムの整定時間が 5 秒未満であることが望ましいため、支配的な閉ループ極の実部は約 -4/5 = -0.8 未満である必要があります。言い換えれば、支配的な閉ループ極は複合体内に配置される必要があります。s- 垂直線の左側の平面s= -0.8。上記を検証すると、これが可能であることがわかります。振り子が垂直から 0.05 ラジアンを超えて動かないことが望ましいため、閉ループ システムが十分な減衰を有することも保証したいと考えています。支配的な閉ループ極を実軸の近くに配置すると、システムの減衰が増加します (小さいMATLAB および Simulink の制御チュートリアル (18))。

根軌跡上の特定の点に対応するゲインを見つけるには、次のコマンドを使用できます。rlocfind指図。具体的には、次のコマンドを入力します。[k,poles] = rlocfind(C*P_pend)MATLAB コマンド ウィンドウで。

次に、プロットに移動し、以下に示すように、ループの左側にある根軌跡上の、実軸に近い点を選択します。+マーク。これらの極を選択すると、システムが十分に早く安定し、できれば十分な減衰が確保されます。

MATLAB および Simulink の制御チュートリアル (19)

これを実行すると、MATLAB コマンド ウィンドウに次のような出力が表示されるはずです。

グラフィックス ウィンドウで点を選択します selected_point = -3.5367 + 0.7081i k = 20.2396 極 = 0 -85.1333 -3.5232 + 0.7086i -3.5232 - 0.7086i

MATLAB コマンド ウィンドウに返される値は完全に同じではない可能性がありますが、少なくとも同じ桁である必要があることに注意してください。

次に、閉ループ システムのインパルス応答をチェックして、ゲインの要件が実際に満たされているかどうかを確認できます。MATLAB および Simulink の制御チュートリアル (20)次のコマンドを m ファイルに追加して再実行すると、以下に示すような閉ループ インパルス応答が生成されます。

K = 20;T = フィードバック(P_pend,K*C);インパルス(T)タイトル(「PID制御による振り子角度のインパルス外乱応答」);

MATLAB および Simulink の制御チュートリアル (21)

上記を検討すると、指定された要件がすべて満たされていることを確認できます。

カートの位置はどうなるのでしょうか?

このページの最初に、倒立振子システムのブロック図が示されています。この図は完全には完成していませんでした。カートの位置の応答を表すブロックMATLAB および Simulink の制御チュートリアル (22)その変数は制御されていないため、含まれませんでした。ただし、振り子の角度のコントローラーが配置されているときにカートの位置に何が起こっているかを見るのは興味深いことです。これを確認するには、次の図に示す完全なシステム ブロック図を考慮する必要があります。

MATLAB および Simulink の制御チュートリアル (23)

整理すると、次のブロック図が得られます。

(Video) R2023a リリースハイライト - MATLAB および Simulink

MATLAB および Simulink の制御チュートリアル (24)

上記のブロックでは、MATLAB および Simulink の制御チュートリアル (25)振り子の垂直を維持するために設計されたコントローラーです。閉ループ伝達関数MATLAB および Simulink の制御チュートリアル (26)したがって、カートに加えられる入力力からカート位置の出力までは次のように与えられます。

(7)MATLAB および Simulink の制御チュートリアル (27)

を参照すると、倒立振子: システム モデリングページ、転送関数MATLAB および Simulink の制御チュートリアル (28)は次のように定義されます。

(8)MATLAB および Simulink の制御チュートリアル (29)

どこ、

(9)MATLAB および Simulink の制御チュートリアル (30)

次のコマンドを m ファイルに追加します (仮定すると、MATLAB および Simulink の制御チュートリアル (31)MATLAB および Simulink の制御チュートリアル (32)はまだ定義されています) は、私たちが検討してきたのと同じ衝撃的外乱に対するカートの位置の応答を生成します。

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 = フィードバック(1,P_pend*C) *P_cart;t = 0:0.01:8.5;impulse(T2, t);title(「PID制御によるカート位置のインパルス外乱応答」);

MATLAB および Simulink の制御チュートリアル (33)

ご覧のとおり、この衝撃外乱によってカートの位置が不安定になります。したがって、PID コントローラーは振り子の角度を安定させますが、この設計を実際の物理システムに実装するのは現実的ではありません。


MATLAB® 9.2 で公開

FAQs

Matlabでシミュレーション時間を取得するには? ›

time = getCurrentTime( obj ) は、MATLAB System ブロックの現在のシミュレーション時間を返します。

Simulinkのサンプル時間とは? ›

ブロックのサンプル時間とは、シミュレーション中にブロックが出力を生成する時期、そして必要に応じてその内部状態を更新する時期を示すパラメーターです。 内部状態は、ログが作成される連続状態や離散状態などを含みます。

Simulinkの概要は? ›

Simulink とは,動的なシステムをモデル化,シミュ レーション及び解析を行うモデルベースのシミュレー ションツールである. ブロック線図によりシステムをモ デル化し,そのブロックに基づいてシミュレーションを 行う.

Simulinkで時間を表示するには? ›

Simulink エディターの [モデル化] タブで、[環境] 、 [Simulink 基本設定] を選択します。 [一般] ペインで、[サンプル時間表示が変更されるときにタイミング凡例を開く] をクリアし、[適用] をクリックします。

Simulinkの特徴は? ›

Simulinkは、ブロック線図を描いて時間軸でのシミュレーションが行えるCAEソフトです。 ブロック間の数学的関係を図示しながら解析・可視化できるため、プログラミング言語などを理解していなくても高精度の検証結果が得られます。

Simulink Coderとは何ですか? ›

Simulink Coder は、サードパーティのコンパイラを使用して、Simulink でアドオン製品によってモデル化された組み込みコントローラー、自律システム、および物理システムのリアルタイムおよび非リアルタイム シミュレーションのための実行可能ファイルを生成します。

Simulinkを起動するにはどうすればいいですか? ›

(Simulinkモデル)を作成し,ファイルに保存してあ る場合は,現在のフォルダーウィンドウにて,その ファイルをダブルクリックすれば,Simulinkが起動 して開けます.

Videos

1. MATLABおよびSimulinkによる自律移動ロボット開発
(MATLAB Japan)
2. MATLABとSimulinkの基礎(学生フォーミュラ向け)
(MATLAB Japan)
3. MATLABおよびSimulinkによる自律無人航空機開発
(MATLAB Japan)
4. R2021a リリースハイライト - MATLAB および Simulink
(MATLAB Japan)
5. R2022b リリースハイライト - MATLAB および Simulink
(MATLAB Japan)
6. UAV Toolbox: MATLABおよびSimulinkによる自律無人航空機開発
(MATLAB Japan)

References

Top Articles
Latest Posts
Article information

Author: Fr. Dewey Fisher

Last Updated: 01/10/2023

Views: 5269

Rating: 4.1 / 5 (62 voted)

Reviews: 85% of readers found this page helpful

Author information

Name: Fr. Dewey Fisher

Birthday: 1993-03-26

Address: 917 Hyun Views, Rogahnmouth, KY 91013-8827

Phone: +5938540192553

Job: Administration Developer

Hobby: Embroidery, Horseback riding, Juggling, Urban exploration, Skiing, Cycling, Handball

Introduction: My name is Fr. Dewey Fisher, I am a powerful, open, faithful, combative, spotless, faithful, fair person who loves writing and wants to share my knowledge and understanding with you.