どのような処理を行っているのか分からないので、教えていただきたいです。
11 views (last 30 days)
Show older comments
NAGATA SOICHIRO
on 1 Dec 2021
Commented: Atsushi Ueno
on 2 Dec 2021
以下のURLのマルチステージの非線形モデル予測制御のコードを読んでいて分からない部分があるので、教えていただきたいです。
理解することができなかったコードは以下の部分です。
file_path = [char(proj.RootFolder), filesep, 'gen_script', filesep, 'calc_Ac.m'];
matlabFunction(Ac, 'File', file_path);
file_path = [char(proj.RootFolder), filesep, 'gen_script', filesep, 'calc_Bc.m'];
matlabFunction(Bc, 'File', file_path);
start_pos = [-1.0, 0.0, -pi];
goal_pos = [14, -2.25, 0];
pthObj = plan_MobileRobotPaths_using_RRT(Ts, path_Tf, start_pos, goal_pos);
0 Comments
Accepted Answer
Atsushi Ueno
on 1 Dec 2021
上記"Nonlinear MPC Controller"(multi stageじゃない方)には、目的について詳細な説明もありました。
file_path = [char(proj.RootFolder), filesep, 'gen_script', filesep, 'calc_Ac.m'];
matlabFunction(Ac, 'File', file_path);
file_path = [char(proj.RootFolder), filesep, 'gen_script', filesep, 'calc_Bc.m'];
matlabFunction(Bc, 'File', file_path);
目的は「車両のモデル化:ヨー角ベースの状態方程式をクオータニオンに置き換えながら、状態空間モデルをSymbolic Math Toolbox™で定式化⇒それをmファイルに保存する」事で、Ac,BcはMPC制御に必要な状態方程式(ヤコビアンモデル)の形との事です。
上記のmatlabFunction関数の実行により'mpc_implementation_example/MPC_imple_PJ/gen_script/calc_Ac.m'等のファイルが出力されます。matlabFunction関数はシンボリック式をmファイルに変換しています。下記に入力の二乗を返す入力例と出力ファイルを示します。システムモデルがこれらの関数(車両の動特性)を取り込むのだと想定します。
syms x
matlabFunction(x^2,'File','myfile');
type myfile.m
start_pos = [-1.0, 0.0, -pi];
goal_pos = [14, -2.25, 0];
pthObj = plan_MobileRobotPaths_using_RRT(Ts, path_Tf, start_pos, goal_pos);
上記は同じmpc_implementation_example/MPC_imple_PJ/Nonlinear/フォルダにあるplan_MobileRobotPaths_using_RRT.mを実行しています。その中ではplan関数が実行されており、入力されたplannerRRTオブジェクト及びスタート・ゴール位置から最適なパスプランの導出及び表示を行っています。
2 Comments
Atsushi Ueno
on 2 Dec 2021
回答に追記致します。
開始時に実行するスクリプトstart_pj_script.mの中で、proj = currentProjectと設定し、後にproj.RootFolderでプロジェクトのルートフォルダパスを取得しています。currentProject関数は現在のプロジェクト情報を取得します。
試しにexampleプロジェクトを開いて、そのプロジェクト情報を取得してみます。
matlab.project.example.timesTable
proj = currentProject
上記のプロジェクト情報からプロジェクトのルートフォルダを抽出し、保存したいフォルダおよびファイル名を連結します。filesepはOS間で異なるファイル区切り文字を得る為の関数です。String型を文字ベクトルに変換するのは他の文字ベクトルと連結する為です。(String型でも連結はできます)
因みに表示されたルートフォルダパスはこのスクリプトを実行しているサーバのものです
file_path = [char(proj.RootFolder), filesep, 'gen_script', filesep, 'calc_Ac.m']
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!