Main Content

投影ベースの平衡化オプティマイザーを使用した定常状態のシミュレーション

この例では、関数 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.25867e-04) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Left/Revolute Joint  Arm
(6.61700e-04) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Left/Revolute Joint  Arm
(8.93138e-05) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Left/Revolute Joint  Arm
(1.41327e-05) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Left/Revolute Joint  Arm
(9.72968e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate
(1.02408e-06) scdbackhoeTRIM/Plant/Mounting Assembly/Mounting Base and Support Arms/Support  Arm Right/Revolute Joint  Arm
(1.05012e-06) scdbackhoeTRIM/Plant/Cylinder Base to Mounting Plate
(1.05012e-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 つの角度がそれぞれの期待値に平衡化されています。ただし、数値的なノイズと不安定性のため、軌跡は時間とともに若干ずれていく可能性があります。フィードバック コントローラーを使用して、角度を安定させることができます。

参考

関数

関連するトピック