このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
投影ベースの平衡化オプティマイザーを使用した定常状態のシミュレーション
この例では、関数 findop
で投影ベースのオプティマイザーを使用して、Simscape™ Multibody™ モデルの定常状態の操作点を検出する方法を説明します。
投影ベースのオプティマイザーでは、目的関数または非線形制約関数の評価ごとにモデルの初期条件の一貫性を強制的に適用し、Simscape モデルの平衡化の結果を改善できます。投影ベースの平衡化オプティマイザーを使用するには Optimization Toolbox™ ソフトウェアが必要です。
モデルを開く
この例のモデルは、Simscape Multibody でモデル化されたバックホー システムです。
Simulink® モデルを開きます。
mdl = 'scdbackhoeTRIM';
open_system(mdl)
操作点の仕様の定義
操作点の仕様を定義するには、最初に仕様オブジェクトを作成します。ops
の入力、出力、および状態の値はモデルの初期条件に一致します。
opspec = operspec(mdl);
モデルの出力が平衡化の既知の値であることを指定します。
opspec.Outputs(1).Known = true(10,1);
バックホー システムの角度についての既知の値を指定します。
opspec.Outputs(1).y(1) = 0; % Bucket angle opspec.Outputs(1).y(3) = 50; % Upper angle opspec.Outputs(1).y(5) = -50; % Lower angle opspec.Outputs(1).y(7) = 0; % Base angle opspec.Outputs(1).y(9) = -45; % Support angle
対応する角速度の既知の値はゼロであり、opspec
のモデルの初期条件に一致します。
モデルの平衡化
平衡化のオプション セットを作成し、OptimizerType
オプションを使用してオプティマイザーのタイプを指定します。この例では、投影ベースの勾配降下ソルバーを使用します。平衡化の進捗の更新をコマンド ウィンドウで反復形式で表示するには、DisplayReport
オプションを 'iter'
に設定します。
opt = findopOptions('OptimizerType','graddescent-proj',... 'DisplayReport','iter');
最適化のための関数評価の最大回数を指定します。
opt.OptimizationOptions.MaxFunEvals = 20000;
opspec
の仕様を満たす定常状態の操作点を検出します。この操作には数分かかります。
op = findop(mdl,opspec,opt);
Optimizing to solve for all desired dx/dt=0, x(k+1)-x(k)=0, and y=ydes. (Maximum Error) Block --------------------------------------------------------- (4.50000e+01) scdbackhoeTRIM/Out1 (3.54436e+00) scdbackhoeTRIM/Out1 (2.29690e-01) scdbackhoeTRIM/Out1 (3.84952e-02) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Right/Revolute Joint Arm (9.31982e-03) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Right/Revolute Joint Arm (7.25858e-04) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Left/Revolute Joint Arm (6.61695e-04) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Left/Revolute Joint Arm (8.93151e-05) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Left/Revolute Joint Arm (1.41277e-05) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Left/Revolute Joint Arm (9.73397e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate (1.02002e-06) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support Arm Right/Revolute Joint Arm (1.04851e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate (1.04851e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate Operating point specifications were successfully met.
モデルのシミュレーション
計算された操作点 op
をモデルの初期条件として使用するようにモデルを構成します。
set_param(mdl,'LoadExternalInput','on') set_param(mdl,'ExternalInput','getinputstruct(op)') set_param(mdl,'LoadInitialState','on') set_param(mdl,'InitialState','getstatestruct(op)')
モデルのシミュレーションを実行します。
sim(mdl);
ジョイントの角度の軌跡を表示します。
open_system([mdl, '/Joint Angle Trajectories'])
シミュレーションの結果を見ると、5 つの角度がそれぞれの期待値に平衡化されています。ただし、数値的なノイズと不安定性のため、軌跡は時間とともに若干ずれていく可能性があります。フィードバック コントローラーを使用して、角度を安定させることができます。