どのような処理を行っ​ているのか分からない​ので、教えていただき​たいです。

조회 수: 3 (최근 30일)
NAGATA SOICHIRO
NAGATA SOICHIRO 2021년 12월 1일
댓글: Atsushi Ueno 2021년 12월 2일
以下の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);

채택된 답변

Atsushi Ueno
Atsushi Ueno 2021년 12월 1일
上記"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
function out1 = myfile(x) %MYFILE % OUT1 = MYFILE(X) % This function was generated by the Symbolic Math Toolbox version 9.0. % 01-Dec-2021 13:12:53 out1 = x.^2;
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
NAGATA SOICHIRO
NAGATA SOICHIRO 2021년 12월 2일
理解することができました。丁寧に説明していただきありがとうございます。
Atsushi Ueno
Atsushi Ueno 2021년 12월 2일
回答に追記致します。
開始時に実行するスクリプトstart_pj_script.mの中で、proj = currentProjectと設定し、後にproj.RootFolderでプロジェクトのルートフォルダパスを取得しています。currentProject関数は現在のプロジェクト情報を取得します。
試しにexampleプロジェクトを開いて、そのプロジェクト情報を取得してみます。
matlab.project.example.timesTable
proj = currentProject
proj =
Project with properties: RootFolder: "/users/mss.system.vN2Epb/Projects/examples/TimesTableApp" Name: "Times Table App" Description: "This example project contains the source code and tests for a simple educational app. ↵↵Use the "Project Shortcuts" toolstrip tab to find ways of getting started with this project." SourceControlIntegration: "Git" TopLevel: 1 ReadOnly: 0 Files: [1×15 matlab.internal.project.api.ProjectFile] StartupFiles: [1×0 string] ShutdownFiles: [1×0 string] ProjectPath: [1×3 matlab.internal.project.api.PathFolder] ProjectReferences: [1×0 matlab.internal.project.api.ProjectReference] Shortcuts: [1×4 matlab.internal.project.api.Shortcut] Categories: [1×1 matlab.internal.project.api.Category] Dependencies: [1×1 digraph] ProjectStartupFolder: "/users/mss.system.vN2Epb/Projects/examples/TimesTableApp" SimulinkCacheFolder: "" SimulinkCodeGenFolder: ""
上記のプロジェクト情報からプロジェクトのルートフォルダを抽出し、保存したいフォルダおよびファイル名を連結します。filesepはOS間で異なるファイル区切り文字を得る為の関数です。String型を文字ベクトルに変換するのは他の文字ベクトルと連結する為です。(String型でも連結はできます)
因みに表示されたルートフォルダパスはこのスクリプトを実行しているサーバのものです
file_path = [char(proj.RootFolder), filesep, 'gen_script', filesep, 'calc_Ac.m']
file_path = '/users/mss.system.vN2Epb/Projects/examples/TimesTableApp/gen_script/calc_Ac.m'

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 デバッグと解析에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!