For Iterator Subsystemについての質問

3 views (last 30 days)
蓮 出越
蓮 出越 on 30 Dec 2022
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でできると幸いです。
お手数をお掛けしますがよろしくお願いします。

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 9 Jan 2023
まず、内側のループ
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側で評価する、という形がおすすめです。
以下リンク先デモモデルで、そのようなことをしています。ご参考までに。

More Answers (0)

Categories

Find more on コード生成 in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!