ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

システムのモデル化と検証

システム構造内の各コンポーネントをモデル化して、そのコンポーネントの物理的または機能的な動作を表現します。コンポーネントの基本的な動作を検証するには、テスト データを使用してシミュレーションします。

全システム レイアウトの全体像を把握することは、個々のコンポーネントをモデル化するときに役立ちます。まず、以下のようにレイアウト モデルを読み込みます。

open_system(fullfile(matlabroot,...
'help', 'toolbox', 'simulink', 'examples', 'system_layout'))

コンポーネントのモデル化

コンポーネントの Simulink® モデルは、次のような複数のスタート地点に基づきます。

  • 物理的コンポーネントの入力と出力の間にある明示的な数学的関係 — 代数的計算と微分方程式の積によって、直接的または間接的に、入力からコンポーネントの出力を計算できます。たとえば、与えられた流入速度から、タンクの水位を計算するのは、明示的な関係です。各 Simulink ブロックは、その入力から出力への計算の定義に基づいて実行されます。

  • 物理的コンポーネントのモデル変数間の間にある暗黙的な数学的関係 — 変数は相互に依存しているため、コンポーネントに入力と出力を割り当てるのは単純ではありません。たとえば、ある回路のモーターのプラス端子の電圧とマイナス端子の電圧の間には、暗黙的な関係があります。Simulink でこのような関係にある変数をモデル化するには、Simscape™ などの物理的モデリング ツールを使用するか、入力/出力を定義可能な大きめのコンポーネントの一部としてモデル化します。場合によっては、モデリング目標とコンポーネント定義をじっくりと確認することが、入力/出力の関係を定義するのに役立ちます。

  • 実際のシステムから得られたデータ — 実際のコンポーネントから入力/出力データを測定したが、完全に定義された数学的関係は存在していない場合です。多くのデバイスに、この説明に当てはまる、モデル化されていないコンポーネントが存在します。テレビから発せられる熱などは、その一例です。System Identification Toolbox™ を使用すると、このようなシステムの入力/出力の関係を定義することができます。

  • 明示的な機能的定義 — 機能的コンポーネントの出力を、入力をもとに代数演算や論理演算を使用して定義します。サーモスタットのスイッチング ロジックは、その一例です。ほとんどの機能的関係は、Simulink ブロックおよびサブシステムとしてモデル化できます。

このチュートリアルでは、明示的な入力/出力関係をもつ物理的コンポーネントおよび機能的コンポーネントをモデル化します。

  1. システム方程式を使用して Simulink モデルを作成します。

  2. Simulink エディターで Simulink ブロックを追加します。ブロックは方程式の係数と変数を表します。ブロックを接続します。

  3. 各コンポーネントのモデルを個別に作成します。システムのモデルを最も効果的に作成する方法は、各コンポーネントを個別に考慮することです。

  4. システムの近似を使用した簡単なモデルの作成から開始します。モデルの精度に影響を与える可能性がある仮定を特定します。複雑度のレベルがモデル化と精度の要件を満たすまで詳細を追加する作業を繰り返します。

物理的コンポーネントのモデル化

たとえばデータ、エネルギー、力の伝達などのコンポーネント間の関係を記述します。Simulink でシステム方程式を使用して、システムのグラフィカル モデルを作成します。

コンポーネントをモデル化する前に次のような質問を検討します。

  • 各コンポーネントの定数およびユーザーが変更しない限り変更されない値とは

  • 各コンポーネントで使用する変数および時間と共に変化する値とは

  • コンポーネントがもつ状態変数の数は

科学的法則を利用して、各コンポーネントの方程式を導き出します。多くのシステム方程式は、次の 3 つのカテゴリに分けられます。

  • 連続システムの場合、微分方程式は変数の変化率をすべての時間の値に対して定義された方程式を使用して記述します。たとえば、2 階微分方程式によって、車の速度が次のように求められます。

  • 離散システムの場合、差分方程式は変数の変化率を記述しますが、方程式は特定の時間に対してのみ定義されます。たとえば、次の差分方程式によって、離散比例 - 微分制御による制御信号が求められます。

  • 導関数を使用しない方程式は代数方程式です。たとえば、代数方程式によって、2 つのコンポーネントを使用した並列回路の全電流が次のように求められます。

車輪と直線運動-  1 つの車輪に対して、次の 2 つの力が働きます。

  • モーターに働く力 — この力 F は、速度変更方向に沿って働く力で、その車輪のサブシステムの入力です。

  • 抗力 — この力 Fdrag は、速度変更方向と逆向きに働く力で、速度自体の関数です。

    Fdrag=kdragV|V|

加速度は、これらの力の合計に比例します。

ここで、kdrag は抵抗係数で、m はロボットの質量です。この質量の半分がそれぞれの車輪に乗っています。

車輪のモデルを作成するには、以下のようにします。

  1. レイアウト モデルで、Right Wheel サブシステムをダブルクリックし、空のサブシステムを表示します。Inport ブロックと Outport ブロック間の接続を削除します。

  2. 速度と加速度をモデル化します。Integrator ブロックを追加します。初期条件は 0 のままにします。このブロックの出力は速度 V で、入力は加速度 Vdot です。

  3. 抗力をモデル化します。User-Defined Functions ライブラリから Fcn ブロックを追加します。式を k_drag*u*abs(u) に設定します。ブロックのサイズを変更すると、この式がアイコン上に表示されたのを見ることができます。Fcn ブロックを使用することで、1 つの入力変数 u の単純な数式を素早く入力できます。

  4. Subtract ブロックでモーター力から抗力を減算し、Gain ブロックのパラメーターを 1/(2*m) として、力 - 加速度の方程式を完成させます。

  5. Fcn ブロックの向きを反転させるため、ブロックを右クリックして [回転と反転]、[ブロックの反転] を選択します。以下に示すように、ブロック間を接続します。

  6. モデルの最上位レベルを表示します。[親に移動] ボタン をクリックします。両輪のダイナミクスは共通のため、モデル化が完了したサブシステムのコピーを作成します。

回転運動-  2 つの車輪がそれぞれ反対の方向に回転するとき、すなわち、各車輪の速度の方向が逆になるとき、車輪は半径 r の円を描くように動き、回転運動が起こります。両輪が同じ方向に回転するときは、回転は起こりません。したがって、車輪の速度の絶対値が常に同じであるという仮定の下においては、回転運動が 2 つの速度 VRVL の差に依存するものとして、次のようにモデル化すると実用的です。

θ˙=VRVL2r

回転ダイナミクスのモデルを作成するには、以下のようにします。

  1. レイアウト モデルで、Rotation サブシステムをダブルクリックし、空のサブシステムを表示します。Inport と Outport 間の接続を削除します。

  2. 角速度と角度をモデル化するには、以下のようにします。Integrator ブロックを追加します。初期条件は 0 のままにします。このブロックの出力は角度 theta で、入力は角速度 theta_dot です。

  3. 接線速度から角速度を計算します。Gain を追加し、パラメーターを 1/(2*r) にします。

  4. ブロック間を以下のように接続します。

  5. 最上位レベルを表示します。[親に移動] ボタン をクリックします。

機能的コンポーネントのモデル化

関数の入力から出力への関数を記述します。この記述には、代数方程式と論理構文を含めることができ、これらを使用して、Simulink でシステムのグラフィカル モデルを作成できます。

座標変換-  X 座標および Y 座標におけるロボットの速度、Vx および Vy は、直線運動速度 Vn および角度と次のような関係にあります。

VX=VNcos(θ)VY=VNsin(θ)

座標変換のモデルを作成するには、以下のようにします。

  1. レイアウト モデルで、Coordinate Transform サブシステムをダブルクリックし、空のサブシステムを表示します。

  2. 三角関数をモデル化します。Math Operations ライブラリから SinCos ブロックを追加します。

  3. 乗算をモデル化します。Math Operations ライブラリから Product ブロックを 2 つ追加します。

  4. ブロック間を以下のように接続します。

  5. 最上位レベルを表示します。[親に移動] ボタン をクリックします。

モデル パラメーターの設定

モデル パラメーター値のソースとして、以下を使用できます。

  • 標準のプロパティ テーブルや、メーカーのデータ シートなどの明文化された仕様書

  • 既存システムの直接測定値

  • システムの入力/出力を使用した推定値

このモデルは、以下のパラメーターを使用します。

パラメーター記号値/単位
質量m2.5 kg
転がり抵抗k_drag30 Ns2/m
ロボットの半径r0.15 m

Simulink は、MATLAB® ワークスペースを使用してパラメーターを評価します。MATLAB コマンド ウィンドウで、以下のパラメーターを設定します。

m = 2.5;
k_drag = 30;
r = 0.15;

シミュレーションを使用したコンポーネントの検証

入力を指定して、出力を観察することで、コンポーネントを検証します。このようなシンプルな検証でも、モデルを改良するための即効性のある方法を指し示すことが可能です。この例では、次の動作を検証します。

  • 車輪に力が継続的に加えられたとき、速度は定常状態の速度に達するまで上昇する。

  • 車輪が反対方向に回転しているとき、角度は一定の割合で増加する。

車輪のコンポーネントの検証

車輪のコンポーネントのテスト モデルを作成し、実行します。

  1. モデルを作成します。 をクリックし、Right Wheel ブロックを新しいモデルにコピーします。

  2. 新しいモデルでテスト入力を作成します。Sources ライブラリから Step ブロックを追加します。それを Right Wheel ブロックの入力に接続します。

  3. 出力にビューアーを追加します。Right Wheel ブロックの出力端子を右クリックし、[ビューアーの作成と接続]、[Simulink]、[スコープ] を選択します。

  4. シミュレーションを実行します。 をクリックします。

シミュレーション結果は、一般的に予想される動作を示しています。ステップ時間に力が加えられるまで、運動はありません。力が加えられると、速度は上昇を始め、加えられた力と抗力が平衡状態に達すると、一定の値で落ち着きます。検証だけでなく、このシミュレーションにより、指定した力における車輪の最高速度について情報が得られます。

回転のコンポーネントの検証

回転のコンポーネントのテスト モデルを作成し、実行します。

  1. モデルを作成します。 をクリックし、Rotation ブロックを新しいモデルにコピーします。

  2. 新しいモデルでテスト入力を作成します。Sources ライブラリから Step ブロックを追加します。それを Rotation ブロックの入力に接続します。この入力は、車輪が回転する方向が反対のとき、車輪速度の差を表します。

  3. 出力にビューアーを追加します。Rotation ブロックの出力端子を右クリックし、[ビューアーの作成と接続]、[Simulink]、[スコープ] を選択します。

  4. シミュレーションを実行します。 をクリックします。

このシミュレーションは、各車輪が同じ速度で反対方向に回転しているとき、角度が一定の割合で増加することを示しています。モデルを少し改良すると、たとえば、角度の出力を解釈しやすくすることができます。

  • ラジアン単位の出力を、度単位に変換できます。Gain ブロックを追加し、ゲインを 180/pi にします。

  • 360 度サイクルの度単位の出力を表示できます。Math Function ブロックを追加し、関数 mod を設定します。

MATLAB 三角関数はラジアン単位で入力を受け取ります。

モデルの検証

各コンポーネントの検証を行った後、完成したモデルについて同様の検証を行うことができます。この例では、次の動作を検証します。

  • 両輪に対して同じ方向に同じ力が加えられた場合、車両は直線移動をします。

  • 両輪に対して同じ方向に同じ力が加えられた場合、車両は回転運動をします。

  1. レイアウト モデルで、Inputs サブシステムをダブルクリックし、空のサブシステムを表示します。

  2. Step ブロックを追加して、テスト入力を作成します。それを両方の Outport ブロックに接続します。

  3. 次のように、モデルの最上位レベルで、両方の出力信号を同じビューアーに追加します。

  4. モデルを実行します。

    この図で、黄色の線は X 方向、青色の線は Y 方向です。角度は 0 で変化していないため、車両は想定通り、X 方向にのみ移動します。

  5. Inputs サブシステムをダブルクリックし、ソースと 2 番目の出力の間に Gain ブロックを追加し、パラメーターを -1 にします。これで、左車輪の方向が反転します。

  6. 角度出力にスコープを追加します。

  7. モデルを実行します。

    1 つ目のビューは、X-Y 平面に一切の運動が生じていないことを示しています。2 つ目のビューは、一定のペースの回転運動が生じていることを示しています。

この最終モデルを使用し、入力を変化させることで、モデルに関する多くの質問に答えることができます。その例は次のとおりです。

  • 初期角度が 0 でないときどうなるか。

  • 力が 0 になってから運動が停止するまでにどのくらいの時間がかかるか。

  • ロボットがもっと重いときはどうなるか。

  • ロボットがもっと滑らかな表面、すなわち抵抗係数の低い表面を移動する場合はどうなるか。

関連するトピック