For Iterator Subsystemについての質問

3 ビュー (過去 30 日間)
蓮 出越
蓮 出越 2022 年 12 月 30 日
回答済み: Toshinobu Shintai 2023 年 1 月 9 日
For Itertor Subsystemについての質問なのですが、
このブロックは二重for文も対応可能かでしょうか。
また、for文の範囲が「シミュレーションのタイムステップの間」という表記ですが、自分でfor文の範囲を設定することは可能でしょうか。
例えば、現在ヨーレートが-0.52(rad/s)から0.52(rad/s)の範囲でそのヨーレートを保持した場合の2秒後進んだときの評価値をサンプリングタイム0.1(s)ごとに求め、その評価値の合計が一番高い時のヨーレートを決定し、車両制御を行いたいと思っています。以下のように
for Yawlate = Yaw_min:Yaw_sample:Yaw_max
Eval = 0;
for t = 0:Ts:N%Ts = 0.1(s), N = 2(s)
% 次の車両の位置
X = x + v*tcos(Yaw + Yawlate*t);
Y = y + v*tsin(Yaw + Yawlate*t);
% 車両の位置、速度、ヨーレートから評価値を算出するコード(今は適当に書いています)
Eval = A
Eval = Eval + A;
end
A(indent,1) = Eval;
A(indent,2) = Yawlate;
indent = indent +1;
end
% ヨーレートとSoCの格納用配列を昇順に並べ替え
S = sortrows(A);
target_Yawlate = S(1,2);
評価値を求めるモデルがSimulinkで作成していたため、コードで再度作成するのではなく、Simulinkでできると幸いです。
お手数をお掛けしますがよろしくお願いします。

採用された回答

Toshinobu Shintai
Toshinobu Shintai 2023 年 1 月 9 日
まず、内側のループ
for t = 0:Ts:N
end
の箇所は、tという変数を時間変化に見立て、それに応じた計算をしているようですので、このforループの箇所はSimulinkでそのままモデル化できます。なぜなら、Simulinkは時間変化をシミュレーションする環境であるためです。一定の時間刻みでモデルを実行するには、固定ステップソルバーを用います。
そして、外側のループ
for Yawlate = Yaw_min:Yaw_sample:Yaw_max
end
では、Yawlateというパラメーターを変更しています。これは時間に依らない要素ですので、Simulinkでモデル化するよりは、MATLABで行う方が効率的です。この部分はMATLABで記述し、内側ループをSimulinkで記述し、Simulink部分を「sim」コマンドで実行して結果を得て、それをMATLAB側で評価する、という形がおすすめです。
以下リンク先デモモデルで、そのようなことをしています。ご参考までに。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeコード生成 についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!