[Stateflow 入門] タスク 7. 掃除ロボットを構築する

Matlab2021a の Stateflow のタスク 7Project-Robotic Vacuum に基づいて掃除ロボットの構築を開始します

ロボット真空監視制御

ロボット掃除機


自律型のロボット掃除機には、通常、掃除機かけや充電などの特定の動作モードがいくつかあります。このプロジェクトでは、オフ、掃除機かけ、ドッキング、充電という 4 つのモードを持つロボット掃除機をモデル化します。
お掃除ロボットの4つのモード
。ただし、最初にドッキングしないと掃除機から充電に移行することはできません
(特定のルールにより、ロボットがこれらのモード間をどのように移動するかが制御されます。たとえば、掃除機をかけながら電源を切ることはできますが、最初にドッキングしないと掃除機から充電に移行することはできません)。最初に接続しないと、掃除機から充電に進むことができません。)

これらのモードとモード間を移動するためのルールは、ステート マシンを使用してモデル化できます。このプロジェクトでは、あなたがロボット掃除機の監視ロジックを設計する任務を負った制御エンジニアであると想像してください。次に、この Stateflow チャートをプラント モデリング チームによって提供される Simulink サブシステムは、タスクを実行するロボットのダイナミクスを記述します (
これらのパターンとパターン間を移動するルールは、ステート マシンを使用してモデル化できます。このプロジェクトでは、ユーザーが制御エンジニアは、ロボットの掃除機の監視ロジックの設計を担当します。その後、この状態フロー図を、タスクを実行するロボットのダイナミクスを記述する工場モデリング チームが提供する Simulink サブシステムに接続します)。

設計要件

ロボット掃除機の設計要件は次のとおりです。

・オフ、バキューム中、ドッキング、充電中の4つの状態になります(オフ、バキューム中、ドッキング、充電中の4つの状態になります)。

·ユーザーはロボットを手動でオフ、バキューム、またはドッキングに設定できます (ユーザーはロボットを手動でオフ、バキューム、またはドッキングに設定できます)。

・ドッキングが完了するとすぐに充電が開始されます(ドッキングが完了するとすぐに充電が開始されます)。

・ロボット充電後電源オフ(ロボット充電後電源オフ)

·ロボットが移動しているとき(バキュームまたはドッキング状態)、バッテリーは常に一定の割合で消耗し、充電状態では別の割合で充電されます。一定の割合で消費され、充電中に別の割合で再充電されます。)

・お掃除中にバッテリー残量が30%を下回った場合、または掃除が完了した場合、バッテリー残量が30%を下回った場合、または掃除が完了した場合の2つの条件で、ロボットは掃除機からドッキングに自動的に移行します。

・バッテリー残量が少ない場合はバキュームモードを要求できません(バッテリー残量が少ない場合はバキュームモードを要求できません)。

次に構築を開始します

TASK1 (タスク1)

モデル4 つの状態(オフ真空シークドック充電)を追加しますオフデフォルト状態です

注: このモデルを実行または送信すると、シミュレートされた部屋のロボットとドックの位置を示す MATLAB Figure ウィンドウが表示されます。最後のタスクで Stateflow と Simulink を接続すると、この Figure がアニメーション化され、シミュレートされたロボット掃除機の動きが表示されます。 .
(注: このモデルを実行または送信すると、シミュレーション ルーム内のロボットとドックの位置を示す MATLAB グラフィック ウィンドウが表示されます。前のタスクで Stateflow と Simulink を接続した後、この図はアニメーション表示され、シミュレーションされた様子が表示されます。ロボット掃除機の動き。)
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

TASK2 (タスク2)


ユーザーがロボットをオフ、バキューム、またはドックに設定すると、これは数値信号 requestMode として処理されます。requestMode には対応する値が表示されます。requestMode が

-1 – オフ
1 – ドック
2 – 真空

ユーザーは、
Vacuum または SeekDock から Off を要求すること、
Off から Vacuum または SeekDock のいずれかを要求すること、および
Vacuum から SeekDock を要求することができます。SeekDock を要求する)

適切な遷移作成し、ユーザー入力基づいてOff 、 Vacuum 、およびSeekDock状態の間で遷移する方法を記述する条件追加します。 )

たとえば、requestMode == 2の場合、マシンはOffからVacuum移行する必要があります。

[シンボル ペイン] を使用して未定義のシンボルを解決し、requestMode を入力データとして定義します。

ここに画像の説明を挿入します

TASK3 (タスク3)

ユーザー入力は requestMode として保存されます。ただし、ダイナミクスを記述する Simulink サブシステムには現在の動作モードが必要です (たとえば、バッテリー残量が低すぎて掃除機をかけ続けることができない場合、現在のモードはユーザー要求と異なる場合があります)。状態エントリ アクションを使用して、出力データ シンボルの値を設定します
(ユーザー入力は requestMode として保存されます。ただし、ダイナミクスを記述する Simulink サブシステムには、現在の動作モードが必要です。 (たとえば、バッテリー残量が低すぎて掃除機をかけ続けることができない場合)現在のモードはユーザーの要求と異なる場合があります。) したがって、状態入力操作を使用して出力データ シンボルの値を設定します。)

以下で説明するように、各状態状態エントリ アクションを追加して、シンボルdriveModeを設定します。

オフ/充電driveMode = 0;
SeekDockドライブモード = 1;
バキュームドライブモード = 2;

driveMode を出力データとして定義します。
ここに画像の説明を挿入します

TASK4 (タスク4)

ユーザーが要求したモードに加えて、指定されたタスクが完了すると、ロボットは自動的にモードを変更します。ロボットの物理モデルが掃除機をかけ終わったとき、またはドックが見つかったときに、Simulink は「完了」フラグを送信します。さらに、ロボットは自動的にモードを変更します。
特定のタスクが完了するとモードを変更します。ロボットの物理モデルが掃除機をかけるかドックの検索を完了すると、Simulink は「完了」フラグを送信します。)

Vacuumから。Dock新しい遷移を追加する必要がありますCharge遷移するChargeSeekDock、およびSeekDockます )

Completeを入力データとして定義します

ここに画像の説明を挿入します

TASK5 (タスク5)

ロボットが駆動しているときは必ずバッテリーが消耗します。これには、真空状態とシークドック状態が含まれます。充電状態では、バッテリーが充電されます
。、バッテリーを充電しています。)


このプロジェクトでは、線形バッテリーの消耗と充電の単純なモデルを使用し、ローカル データ (充電状​​態 (SOC) を記述するローカル データ) を使用して充電状態 (SOC) を計算し

バッテリー状態をモデル化するために、アクション中に以下を適切な状態に追加します

バッテリ消耗: SOC = SOC - 1e-5; (バッテリ充電: SOC=SOC-1e-5;)
バッテリ充電: SOC = SOC + 2e-5; (バッテリ充電: SOC=SOC+2e-5;)

SOC をローカル データとして定義し、初期値 100 (パーセント) を割り当てます

ここに画像の説明を挿入します

TASK6 (タスク6)

バッテリーの状態もロボットの動作に影響します

まず、掃除機をかけているときにバッテリーの充電量が 30% を下回ると、ロボットは自動的にドックを探し始めます


次に、バッテリーが 97% 満充電になったときに充電が完了したとみなされ、充電が完了するとロボットの電源がオフになります

次の条件を適切なトランジションに追加します (新しいトランジションの作成と既存のトランジションの変更の両方が必要になります)

バッテリー残量が 30% 未満: SOC
< 30。充電が完了: SOC >= 97。 (充電が完了: SOC >= 97。)
ここに画像の説明を挿入します

TASK7 (タスク7)

最後のステップは、ロジックをロボット動作の Simulink モデルと統合することです

Simulink モデルに移動し、信号を適切なポートに接続します

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/J_WangJiang/article/details/129688515