このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ステアリング角度の入力に対する周波数応答
この例では、車両運動スイープ正弦波ステアリング リファレンス アプリケーションを使用して、ステアリング入力に対する動的なステアリング応答を解析する方法を示します。具体的には、異なる正弦波ステアリング振幅で操作を実行し、車両の周波数応答と横方向加速度を調べることができます。
スイープ正弦波ステアリング操作では、ステアリング入力に対する車両の周波数応答をテストします。このテストでのドライバーの操作は次のとおりです。
車両がターゲット速度に達するまで加速する。
正弦波ステアリング ホイール入力を指示する。
正弦波の周波数を線形に増加させる。
リファレンス アプリケーションの詳細については、スイープ正弦波ステアリング操作を参照してください。
helpersetupsss;
スイープ正弦波ステアリング操作の実行
1. Swept Sine Reference Generator ブロックを開きます。既定では、操作のパラメーターは次のように設定されています。
縦方向速度の設定点 — 30 mph
ステアリング振幅 — 90 度
最終周波数 — 0.7 Hz
2. Visualization サブシステムで 3D Engine ブロックを開きます。既定では、[3D エンジン] パラメーターは [無効] に設定されています。3D 可視化エンジンのプラットフォームの要件やハードウェアの推奨事項については、Unreal Engine シミュレーション環境の要件と制限を参照してください。
3. 既定の設定で操作を実行します。シミュレーションを実行しながら、車両の情報を確認します。
mdl = 'SSSReferenceApplication';
sim(mdl);
### Starting serial model reference simulation build. ### Model reference simulation target for Driveline is up to date. ### Model reference simulation target for PassVeh14DOF is up to date. ### Model reference simulation target for SiMappedEngineV is up to date. Build Summary 0 of 3 models built (3 models already up to date) Build duration: 0h 1m 31.723s
[Vehicle Position] ウィンドウで、車両の縦方向の距離を横方向の距離の関数として表示します。黄色の線はヨー レートです。青色の線はステアリング角度です。
Visualization サブシステムで、Yaw Rate and Steer Scope ブロックを開き、時間に対するヨー レートとステアリング角度を表示します。
ステアリングのスイープ
3 つの異なる正弦波ステアリング振幅でリファレンス アプリケーションを実行します。
1. スイープ正弦波ステアリング リファレンス アプリケーション モデル SSSReferenceApplication で、Swept Sine Reference Generator ブロックを開きます。振幅は [ステアリング振幅、theta_hw] ブロック パラメーターで設定します。既定では、振幅は 90 度です。
2. 速度、車線、および ISO の各信号の信号ログを有効にします。Simulink® エディターを使用するか、あるいは以下の MATLAB® コマンドを使用できます。モデルを保存します。
Lane Change Reference Generator の Lane 出力端子信号の信号ログを有効にします。
mdl = 'SSSReferenceApplication'; open_system(mdl); ph=get_param('SSSReferenceApplication/Swept Sine Reference Generator','PortHandles'); set_param(ph.Outport(1),'DataLogging','on');
Passenger Vehicle ブロックの出力端子信号の信号ログを有効にします。
ph=get_param('SSSReferenceApplication/Passenger Vehicle','PortHandles'); set_param(ph.Outport(1),'DataLogging','on');
Visualization サブシステムで、ISO ブロックの信号ログを有効にします。
set_param([mdl '/Visualization/ISO 15037-1:2006'],'Measurement','Enable');
3. 調査するステアリング振幅ベクトル amp
を設定します。たとえば、コマンド ラインで次のように入力します。
amp = [60, 90, 120]; numExperiments = length(amp);
4. Swept Sine Reference Generator ブロックのパラメーター [ステアリング振幅、theta_hw] が amp
と等しくなるように設定するシミュレーション入力の配列を作成します。
for idx = numExperiments:-1:1 in(idx) = Simulink.SimulationInput(mdl); in(idx) = in(idx).setBlockParameter([mdl '/Swept Sine Reference Generator'],... 'theta_hw',num2str(amp(idx))); end
5. モデルを保存し、シミュレーションを実行します。利用可能な場合は並列計算を使用します。
save_system(mdl) tic; simout = parsim(in,'ShowSimulationManager','on'); toc;
[03-Mar-2023 13:41:52] Checking for availability of parallel pool... Starting parallel pool (parpool) using the 'Processes' profile ... Connected to parallel pool with 6 workers. [03-Mar-2023 13:42:57] Starting Simulink on parallel workers... [03-Mar-2023 13:43:23] Loading project on parallel workers... [03-Mar-2023 13:43:23] Configuring simulation cache folder on parallel workers... [03-Mar-2023 13:43:37] Loading model on parallel workers... [03-Mar-2023 13:44:21] Running simulations... [03-Mar-2023 13:48:03] Completed 1 of 3 simulation runs [03-Mar-2023 13:48:04] Completed 2 of 3 simulation runs [03-Mar-2023 13:48:04] Completed 3 of 3 simulation runs [03-Mar-2023 13:48:04] Cleaning up parallel workers... Elapsed time is 396.449678 seconds.
6. シミュレーションが完了したら、シミュレーション データ インスペクターのウィンドウを閉じます。
シミュレーション データ インスペクターを使用した結果の解析
シミュレーション データ インスペクターを使用して結果を調べます。UI を使用するか、あるいはコマンド ライン関数を使用できます。
1. シミュレーション データ インスペクターを開きます。Simulink ツールストリップで、[シミュレーション] タブの [結果の確認] にある [データ インスペクター] をクリックします。
シミュレーション データ インスペクターで [インポート] を選択します。
[インポート] ダイアログ ボックスで
logsout
をクリアします。simout(1)
、simout(2)
、およびsimout(3)
を選択します。[インポート] を選択します。
シミュレーション データ インスペクターを使用して結果を調べます。
2. あるいは、次の MATLAB コマンドを使用して各実行のデータをプロットします。たとえば、横方向の位置、ステアリング ホイールの角度、および横方向加速度をプロットするには次のコマンドを使用します。結果は次のプロットのようになり、各実行についての結果が表示されます。
for idx = 1:numExperiments % Create sdi run object simoutRun(idx)=Simulink.sdi.Run.create; simoutRun(idx).Name=['Amplitude = ', num2str(amp(idx))]; add(simoutRun(idx),'vars',simout(idx)); end sigcolor=[0 1 0;0 0 1;1 0 1]; for idx = 1:numExperiments % Extract the lateral acceleration, position, and steering ysignal(idx)=getSignalsByName(simoutRun(idx), 'Passenger Vehicle:1.Body.InertFrm.Cg.Disp.Y'); ysignal(idx).LineColor =sigcolor((idx),:); ssignal(idx)=getSignalsByName(simoutRun(idx), 'Steering-wheel angle'); ssignal(idx).LineColor =sigcolor((idx),:); asignal(idx)=getSignalsByName(simoutRun(idx), 'Lateral acceleration'); asignal(idx).LineColor =sigcolor((idx),:); end Simulink.sdi.view Simulink.sdi.setSubPlotLayout(3,1); for idx = 1:numExperiments % Plot the lateral position, steering angle, and lateral acceleration plotOnSubPlot(ysignal(idx),1,1,true); plotOnSubPlot(ssignal(idx),2,1,true); plotOnSubPlot(asignal(idx),3,1,true); end
結果は次のプロットのようになり、ステアリング振幅が 120
度の場合に横方向加速度が最も大きくなることがわかります。
追加の解析
結果をさらに調べるために、次のコマンドを使用して、横方向加速度、ステアリング角度、および車両の軌跡を simout
オブジェクトから抽出します。
1. 横方向加速度とステアリング角度を抽出します。データをプロットします。結果は次のプロットのようになります。
figure for idx = 1:numExperiments % Extract Data log = get(simout(idx),'logsout'); sa=log.get('Steering-wheel angle').Values; ay=log.get('Lateral acceleration').Values; legend_labels{idx} = ['amplitude = ', num2str(amp(idx)), '^{\circ}']; % Plot steering angle vs. lateral acceleration plot(sa.Data,ay.Data) hold on end % Add labels to the plots legend(legend_labels, 'Location', 'best'); title('Lateral Acceleration') xlabel('Steering Angle [deg]') ylabel('Acceleration [m/s^2]') grid on
2. 車両の経路を抽出します。データをプロットします。結果は次のプロットのようになります。
figure for idx = 1:numExperiments % Extract Data log = get(simout(idx),'logsout'); xValues = getSignalsByName(simoutRun(idx), 'Passenger Vehicle:1.Body.InertFrm.Cg.Disp.X').Values; yValues = getSignalsByName(simoutRun(idx), 'Passenger Vehicle:1.Body.InertFrm.Cg.Disp.Y').Values; x = xValues.Data; y = yValues.Data; legend_labels{idx} = ['amplitude = ', num2str(amp(idx)), '^{\circ}']; % Plot vehicle location axis('equal') plot(y,x) hold on end % Add labels to the plots legend(legend_labels, 'Location', 'best'); title('Vehicle Path') xlabel('Y Position [m]') ylabel('X Position [m]') grid on
参考
Simulink.SimulationInput
| Simulink.SimulationOutput
| fft