Simulink におけるシステムの設計
モデルベース デザインのパラダイムの中核にあるのが、物理コンポーネントのモデルと、設計、テスト、および実装作業のベースとなるシステムのモデルです。このチュートリアルでは、設計したコンポーネントを既存のシステム モデルに追加します。
システム モデルを開く
そのモデルは、家庭用お掃除ロボットに似た、2 つの車輪によって移動や回転が可能な平型ロボットです。MATLAB® コマンド ラインに次のように入力してモデルを開きます。
open_system('system_model.slx')
このチュートリアルは、このシステムを解析し、機能を追加します。
設計したコンポーネントと設計目標の特定
設計目標を定めることは、設計タスクに欠かせない最初のステップです。どんなに単純なシステムでも、複数の、場合によっては競合する設計目標が考えられます。モデル例では、以下の目標について検討します。
車輪を希望する速度で回転させるため、力の入力を変化させるコントローラーを設計する。
装置を既定の経路で移動させるための入力を設計する。
装置を線に追従させるためのセンサーとコントローラーを設計する。
障害物をよけながら最短経路を使用して装置を特定のポイントに到達させるための計画アルゴリズムを設計する。
障害物をよけながら特定のエリアを装置に動き回らせるためのセンサーとアルゴリズムを設計する。
このチュートリアルでは、アラート システムを設計します。障害物からの距離を測定するセンサーに必要なパラメーターを特定します。完全なセンサーは、障害物からの距離を正確に測定します。アラート システムは出力が常にセンサー測定値の 0.05 m 以内になるようにセンサー測定値を一定の間隔でサンプリングします。ロボットが障害物に衝突する前に停止可能なタイミングでアラートを生成します。
シミュレーションを使用したシステムの動作の解析
この新しいコンポーネントを設計するには、ロボットの直線運動を解析して、次のことを特定する必要があります。
最高速度時に車輪への電力が遮断された場合に、ロボットが移動できる距離
ロボットの最高速度
運動を開始する力の入力信号を使用してモデルをシミュレートし、ロボットが一定の速度に達するまで待ってから、力を 0 に設定します。
モデルで
Inputs
という名前のサブシステムをダブルクリックします。既存のステップ入力を削除し、Pulse Generator ブロックを追加します。
Pulse Generator ブロックに、次のパラメーターを設定します。
振幅:
1
周期:
20
パルス幅:
15
このパラメーターは、最高速度に達したことを確認するよう設計されます。パラメーターを変更すると、その効果を確認できます。
モデルを 20 秒間シミュレートします。
シミュレーション結果を解析するには、モデル内のフローティング スコープに接続されている信号を表示します。
最初のスコープでは、シミュレーション時間
3
秒に入力の力を表すパルスが 0 に低下した後にロボットの速度が急速に低下していることが示されています。速度は漸近的に 0 に近づくものの、0 に達することはありません。外力なしで低速のダイナミクスについて正確にモデル化するには、システムのはるかに複雑な表現が必要になります。しかし、今回の目的としては、システムのこの近似表現で十分です。2 番目のスコープでは、シミュレーション中のロボットの位置が示されています。はじめは、位置がより急速に変化しています。シミュレーション時間約
3
秒に、ロボットの速度の低下に伴って位置の変化が遅くなります。
ロボットの位置を示すスコープ プロットにズームインします。時間 3
におけるロボットの位置は約 0.55
m です。シミュレーションの終了時におけるロボットの位置は約 0.7
m です。ロボットの速度はシミュレーションの終了時にほぼ 0 であるため、外力が 0 に低下した後にロボットが移動する距離は 0.16
足らずであると結果で示されています。
最高速度を特定するには、次の手順を行います。
時間 1 秒~ 3 秒の間で、速度の信号がフラットである領域にズームインします。
ズーム ボタンを再度クリックして、ズーム モードを終了します。
[カーソルの測定] をクリックします。
2 つ目のカーソルを速度曲線がフラットになっている領域に配置します。
[カーソルの測定] パネルの [値] 列は、ロボットの最高速度が 0.183
m/s であることを示しています。ロボットが 0.05 m 移動するのにかかる時間を計算するには、0.183 m/s で 0.05 m を除算します。結果として 0.27 秒が得られます。
コンポーネントの設計と設計の検証
センサーの設計は、次のコンポーネントで構成されます。
ロボットと障害物の間の距離の測定値 — この例では、測定値は正確であるものと仮定します。
アラート システムが行う各距離測定間の時間間隔 — 測定誤差を 0.05 m 未満に保つには、サンプリング間隔を 0.27 秒より短くしなければなりません。0.25 秒を使用します。
センサーがアラートを発生させる距離 — 解析の結果、減速はロボットが障害物から約 0.16 m の位置になる時点までに開始しなければならないことが分かります。実際のアラート距離には離散測定の誤差 0.05 m も考慮しなければなりません。
設計したコンポーネントの追加
センサーを作成します。
4 つの入力端子と 1 つの出力端子をもつサブシステムを作成します。サブシステムはロボットの x および y 座標の入力と障害物の x および y 座標の入力を受け取ります。センサーによって生成されたアラート信号は出力端子に接続されます。
距離測定サブシステムを作成します。
Sensor model
という名前のサブシステムで、Subtract ブロック、関数magnitude^2
をもつ Math Function ブロック、Sum ブロック、および Sqrt ブロックを使用して距離の計算を実装します。サブシステム内で、入力端子の配列が Subsystem ブロック インターフェイスの端子の配列に一致している必要がないことに注意してください。サンプリングをモデル化するために、Discrete ライブラリから Zero-Order Hold ブロックをサブシステムに追加し、ブロックの [サンプル時間] パラメーターを
0.25
に設定します。距離の計算結果を Zero-Order Hold ブロックの入力に接続します。
アラート ロジックをモデル化するために、Logic and Bit Operations ライブラリから Compare to Constant ブロックを追加し、次のブロック パラメーターを設定します。
演算子:
<=
定数値:
0.21
出力データ型:
boolean
これらのパラメーター値では、入力値が
0.21
以下の場合、ブロックの出力値は1
になります。Zero-Order Hold ブロックの出力を Compare to Constant ブロックの入力に接続します。
最後に、Compare to Constant ブロックの出力を
Alert
という名前の Outport ブロックに接続します。
設計の検証
Constant ブロックを Sensor model サブシステムへの入力とし、障害物の位置が X = 0.65, Y = 0 であるものとして設計をテストします。このテストは、X 方向の設計機能を検証します。異なる経路について同様のテストを作成することができます。このモデルは、アラートを発生させるだけです。ロボットは制御しません。
障害物の位置を設定します。Sources ライブラリから Constant ブロックを 2 つ追加し、その定数値を
0.65
と0
に設定します。ロボットの位置出力をセンサーの入力に接続します。アラート出力にスコープを追加します。
モデルをシミュレートします。
スコープ内のロボット位置のプロットは、前の実行と同じに見えます。
アラート信号に接続されているスコープでは、ロボットが障害物の位置から 0.21
m 以内になると、アラート信号値が 1
になっており、このコンポーネントの設計要件が満たされていることが示されています。
複雑なコンポーネントおよび形式的要件を伴う実際のシステムに対応するため、Simulink® 製品ファミリには、設計プロセスを改善および自動化するための追加のツールが用意されています。Requirements Toolbox™ は、要件を形式的に定義し、その要件をモデル コンポーネントとリンクします。Simulink Control Design™ は、このロボットのコントローラーを構築するような場合に、設計を支援します。Simulink Verification and Validation™ 製品は、コンポーネントおよびシステムをテストするための形式的フレームワークを定義します。