システムの定義とレイアウト
Simulink® モデルの最上位レイアウトは、多くのエンジニア チームが利用できる共通のコンテキストであり、モデルベース デザイン パラダイムの多くのタスク (解析、設計、テスト、実装) のベースでもあります。構造と個々のコンポーネントを特定することにより、最上位のシステムを定義します。そして、コンポーネントに対応する階層構造によってモデルを整理します。次に、各コンポーネントのインターフェイスと、コンポーネント間の接続を定義します。
このチュートリアルで取り上げるモデルは、家庭用お掃除ロボットに似た、2 つの車輪によって移動や回転が可能な平型ロボットです。このモデルは、ロボットが次の 2 つの方法のいずれかで動くものと仮定します。
直線 — 両輪が同じ方向に向かって、同じ速度で回転し、ロボットは直線運動します。
回転 — 各車輪が反対方向に向かって、同じ速度で回転し、ロボットはその場で回転運動します。
いずれの運動タイプも、休止状態から始まります。休止状態とは、回転および直線運動の速度が 0 である状態です。以上の仮定の下で、直線運動コンポーネントと回転運動コンポーネントを別々にモデル化します。
モデリング目標の決定
モデルを設計する前に、目的と要件を考慮します。目標によって、モデルの構造と、その詳細度が決まります。目標がロボットの速度を求めるだけなら、直線運動をモデル化するだけで事足ります。目標がデバイスが指定された経路をたどるのに必要な入力セットを設計することであれば、回転運動コンポーネントが必要です。目標が障害物を回避することであれば、システムにはセンサーが必要になります。このチュートリアルでは、経路上に障害物を検出するとロボットが停止するようなセンサー パラメーターを設計することを目標として、モデルを作成します。この目標を達成するには、モデルは以下のことを実現できなければなりません。
モーターが停止したとき、ロボットが停止する速度を特定する
ロボットが 2 次元空間を動き回れるよう、直線運動と回転運動のための一連のコマンドを提供する
1 つ目のモデリング目標は、運動を解析して、センサーの設計を可能にします。2 つ目の目標では、設計のテストを可能にします。
システム コンポーネントとインターフェイスの特定
モデル化の要件を理解したら、システムのコンポーネントの特定を開始できます。個々のコンポーネントを特定し、最上位構造内におけるコンポーネント間の関係性を把握することは、複雑になり得るモデルを体系的に作成するのに役立ちます。この手順は、モデルの作成を開始する前に、Simulink 外部で行っておきます。
このタスクには、以下の質問に答えることが含まれます。
システムの構造的コンポーネントおよび機能的コンポーネントは何か。レイアウトが物理的構造および機能的構造を反映していると、システムの理解、構築、通信、およびテストに役立ちます。このことは、設計プロセスのさまざまな段階でシステムの一部分を実装するときに重要になります。
各コンポーネントの入力と出力は何か。コンポーネント間の接続を示す図を描画します。この図は、モデル内の信号フローの可視化、各信号のソースおよびシンクの特定、すべての必要なコンポーネントが存在しているかどうかの判定に役立ちます。
どのくらいの詳細度が必要か。図に主なシステム パラメーターを含めます。システムの図を作成すると、観察すべき動作に不可欠な部分を特定してモデル化するのに役立ちます。モデルには、モデル化の目標に関与する各コンポーネントおよびパラメーターの表現が存在しなければなりませんが、複雑度と可読性はトレードオフの関係にあります。モデル化は、反復的なプロセスになることがあります。詳細情報をあまり持たない上位のモデルから着手し、必要に応じて複雑度を徐々に上げていきます。
多くの場合、次のことを検討すると有益です。
システムのどの部分にテストが必要か。
テスト データと成功条件は何か。
解析タスクと設計タスクに必要な出力はどれか。
ロボットの運動コンポーネントの特定
このチュートリアルのシステムでは、2 つの電動車輪を使って 2 次元的に移動するロボットを定義します。以下が含まれます。
直線運動の特性
回転運動の特性
システムの位置を 2 次元的に特定するための変換
障害物からロボットまでの距離を測定するセンサー
このシステムのモデルは、同一の 2 つの車輪、車輪に働く入力の力、回転のダイナミクス、座標変換、およびセンサーによって構成されます。このモデルでは、各コンポーネントを Subsystem を使って表現します。
新しい Simulink モデルを開きます。新しいモデルを開くを参照してください。
ライブラリ ブラウザーを開きます。Simulink ライブラリ ブラウザーを開くを参照してください。
Subsystem ブロックを追加します。Ports & Subsystems ライブラリから 5 つの Subsystem ブロックを新しいモデルにドラッグします。
サブシステムをクリックします。[書式設定] タブで、[自動] ドロップダウン リストをクリックします。[自動ブロック名の非表示] チェック ボックスをオフにします。
次に示すように、Subsystem ブロックを配置し、名前を変更します。ブロック名を変更するには、ブロック名をダブルクリックしてテキストを編集します。
コンポーネント間のインターフェイスの定義
サブシステム間の入出力の接続を特定します。入力値と出力値はシミュレーション中に動的に変化します。ブロックを結ぶ線はデータ転送を表します。次の表は、各コンポーネントの入力と出力を示しています。
ブロック | 入力 | 出力 | 関連情報 |
---|---|---|---|
Inputs | なし | 右車輪への力 左車輪への力 | 該当なし |
Right Wheel | 右車輪への力 | 右車輪の速度 | 方向を持つ。負は逆方向を意味 |
Left Wheel | 左車輪への力 | 左車輪の速度 | 方向を持つ。負は逆方向を意味 |
Rotation | 右車輪と左車輪の速度差 | 回転角度 | 反時計回りに測定 |
Coordinate Transformation | 通常の速度 回転角度 | X 方向の速度 Y 方向の速度 | 該当なし |
Sensor | X 座標 Y 座標 | なし | モデル化のためのブロックは不要。 |
一部のブロック入力はブロック出力と完全には一致していません。そのため、各コンポーネントのダイナミクスに加えて、以下についてもモデル内で計算しなければなりません。
Rotation への入力 — 2 つの車輪の速度を減算し、2 で割ります。
Coordinate Transformation への入力 — 2 つの車輪の速度の平均を求めます。
Sensor への入力 — Coordinate Transformation の出力を積分します。
車輪の速度の絶対値は常に等しく、その仮定の下において、計算は正確になります。
必要なコンポーネントを追加し、接続を確定します。
各サブシステムに必要な入力端子と出力端子を追加します。Subsystem ブロックをダブルクリックします。
新しい Subsystem ブロックにはそれぞれ 1 つの Inport (In1) ブロックと 1 つの Outport (Out1) ブロックが含まれます。これらのブロックは、モデルの階層構造における次の上位レベルとの信号インターフェイスを定義します。
Inport ブロックはそれぞれ Subsystem ブロックに入力端子を作成し、Outport ブロックはそれぞれ出力端子を作成します。これらのブロックの名前が、モデルにより入力端子/出力端子名として利用されます。入力信号と出力信号にブロックをさらに追加します。Simulink エディターのツール バーで、[親に移動する] ボタン をクリックして最上位レベルに戻ります。
各ブロックについて、次のように Inport ブロックと Outport ブロックを追加し、名前を変更します。
Inport ブロックをコピーして新しいブロックを作成するときは、[貼り付け] (Ctrl+V) オプションを使用します。
左車輪と右車輪の速度から Coordinate Transform および Rotation サブシステムに必要な入力を計算します。
Coordinate Transform サブシステムに入力する直線運動速度を計算します。Math Operations ライブラリから Add ブロックを追加し、2 つの車輪コンポーネントの出力を接続します。Gain ブロックを追加してゲイン パラメーターを
1/2
に設定します。Add ブロックの出力をこの Gain ブロックに接続します。Rotation サブシステムに入力する速度差を計算します。Math Operations ライブラリから Subtract ブロックを追加します。右車輪の速度を [+] 入力に、左車輪の速度を [-] 入力に接続します。2 つの車輪のコンポーネントの出力を接続します。Gain ブロックを追加してゲイン パラメーターを
1/2
に設定します。Subtract ブロックの出力をこの Gain ブロックに接続します。
X と Y の速度から、X 座標と Y 座標を計算します。Continuous ライブラリから Integrator ブロックを 2 つ追加し、Coordinate Transform ブロックの出力を接続します。Integrator ブロックの初期条件を
0
に設定したままにします。システムの接続を完成させます。
パラメーターとデータ
モデルに含まれるパラメーターと、その値を特定します。各値を常に固定にするか、シミュレーションごとに変化させるかは、モデリング目標に基づいて決定します。モデリング目標に関与するパラメーターは、モデル内に明示的に表現する必要があります。以下の表は、各コンポーネントをモデル化するときの詳細度を決定するのに役立ちます。
パラメーター | ブロック | 記号 | 値 | タイプ |
---|---|---|---|---|
質量 | Left Wheel Right Wheel | m | 2.5 kg | 変数 |
転がり抵抗 | Left Wheel Right Wheel | k_drag | 30 Ns2/m | 変数 |
ロボットの半径 | Rotation | r | 0.15 m | 変数 |
初期角度 | Rotation | なし | 0 ラジアン | 固定 |
初期速度 | Left Wheel Right Wheel | なし | 0 m/s 0 m/s | 固定 |
初期 (X, Y) 座標 | 積分器 | なし | (0, 0) m | 固定 |
Simulink は MATLAB® ワークスペースを使用してパラメーターを評価します。MATLAB コマンド ウィンドウで、以下のパラメーターを設定します。
m = 2.5; k_drag = 30; r = 0.15;