さまざまな速度での車両のステアリング ゲイン
この例では、車両運動の徐々に増加するステアリング リファレンス アプリケーションを使用して、車両のハンドリングに対するステアリング角度と速度による影響を解析する方法を示します。具体的には、異なる速度指令値で操作を実行し、ステアリング ゲインを計算できます。徐々に増加するステアリング操作は、SAE J266 で定義されている一定速度での可変ステアリング テストに基づいており、車両の横方向の運動を特徴付けるのに役立ちます。このテストでのドライバーの操作は次のとおりです。
車両がターゲット速度に達するまで加速する。
ターゲット速度を維持する。
ステアリング ホイールの角度を 0 度から最大角度まで線形に増加させる。
ステアリング ホイールの角度を指定の時間にわたって維持する。
ステアリング ホイールの角度を最大角度から 0 度まで線形に減少させる。
リファレンス アプリケーションの詳細については、徐々に増加するステアリング操作を参照してください。
helpersetupsis;
徐々に増加するステアリング操作の実行
1. Slowly Increasing Steer ブロックを開きます。既定では、操作のパラメーターは次のように設定されています。
縦方向速度の設定点 — 50 mph
ハンドホイール レート — 13.5 度
ハンドホイールの最大角 — 270 度
2. Visualization サブシステムで 3D Engine ブロックを開きます。既定では、[3D エンジン] パラメーターは [無効] に設定されています。3D 可視化エンジンのプラットフォームの要件やハードウェアの推奨事項については、Unreal Engine シミュレーション環境の要件と制限を参照してください。
3. 既定の設定で操作を実行します。シミュレーションを実行しながら、車両の情報を確認します。
mdl = 'ISReferenceApplication';
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 0m 4.7948s
[Vehicle Position] ウィンドウで、車両の縦方向の距離を横方向の距離の関数として表示します。黄色の線はヨー レートを表示したものです。青色の線はステアリング角度を示します。
Visualization サブシステムで、Yaw Rate and Steer Scope ブロックを開き、時間に対するヨー レートとステアリング角度を表示します。
速度指令値のスイープ
3 つの異なる速度指令値で、徐々に増加するステアリング角度リファレンス アプリケーションを実行します。
1. 徐々に増加するステアリング リファレンス アプリケーション モデル ISReferenceApplication で、Slowly Increasing Steer ブロックを開きます。車両速度は [縦方向速度の設定点、xdot_r] ブロック パラメーターで設定します。既定では、速度は 50 mph です。
2. 速度、車線、および ISO の各信号の信号ログを有効にします。Simulink® エディターを使用するか、あるいは以下の MATLAB® コマンドを使用できます。モデルを保存します。
Slowly Increasing Steer の Ref 信号出力端子の信号ログを有効にします。
mdl = 'ISReferenceApplication'; ph=get_param('ISReferenceApplication/Slowly Increasing Steer','PortHandles'); set_param(ph.Outport(1),'DataLogging','on');
Passenger Vehicle ブロックの出力端子信号の信号ログを有効にします。
ph=get_param('ISReferenceApplication/Passenger Vehicle','PortHandles'); set_param(ph.Outport(1),'DataLogging','on');
Visualization サブシステムで、ISO ブロックの信号ログを有効にします。
set_param([mdl '/Visualization/ISO 15037-1:2006'],'Measurement','Enable');
3. 調査する速度指令値ベクトル xdot_r
を設定します。たとえば、コマンド ラインで次のように入力します。
vmax = [45, 50, 55]; numExperiments = length(vmax);
4. Slowly Increasing Steer ブロックのパラメーター [縦方向速度の設定点、xdot_r] が xdot_r
と等しくなるように設定するシミュレーション入力の配列を作成します。
for idx = numExperiments:-1:1 in(idx) = Simulink.SimulationInput(mdl); in(idx) = in(idx).setBlockParameter([mdl '/Slowly Increasing Steer'], ... 'xdot_r', num2str(vmax(idx))); end
5. モデルを保存し、シミュレーションを実行します。利用可能な場合は並列計算を使用します。
save_system(mdl) tic; simout = parsim(in,'ShowSimulationManager','on'); toc;
[05-Jan-2023 11:33:33] Checking for availability of parallel pool... [05-Jan-2023 11:33:33] Starting Simulink on parallel workers... [05-Jan-2023 11:33:34] Loading project on parallel workers... [05-Jan-2023 11:33:34] Configuring simulation cache folder on parallel workers... [05-Jan-2023 11:33:34] Loading model on parallel workers... [05-Jan-2023 11:33:51] Running simulations... [05-Jan-2023 11:34:57] Completed 1 of 3 simulation runs [05-Jan-2023 11:34:59] Completed 2 of 3 simulation runs [05-Jan-2023 11:36:44] Completed 3 of 3 simulation runs [05-Jan-2023 11:36:44] Cleaning up parallel workers... Elapsed time is 201.857620 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=['Velocity = ', num2str(vmax(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 msignal(idx)=getSignalsByName(simoutRun(idx), 'xdot_mph'); msignal(idx).LineColor =sigcolor((idx),:); ssignal(idx)=getSignalsByName(simoutRun(idx), 'SteerAngle'); ssignal(idx).LineColor =sigcolor((idx),:); asignal(idx)=getSignalsByName(simoutRun(idx), 'Lateral acceleration'); asignal(idx).LineColor =sigcolor((idx),:); xsignal(idx)=getSignalsByName(simoutRun(idx), 'Passenger Vehicle:1.Body.InertFrm.Cg.Disp.X'); xsignal(idx).LineColor =sigcolor((idx),:); ysignal(idx)=getSignalsByName(simoutRun(idx), 'Passenger Vehicle:1.Body.InertFrm.Cg.Disp.Y'); ysignal(idx).LineColor =sigcolor((idx),:); end Simulink.sdi.view Simulink.sdi.setSubPlotLayout(5,1); for idx = 1:numExperiments % Plot the lateral position, steering angle, and lateral acceleration plotOnSubPlot(msignal(idx),1,1,true); plotOnSubPlot(ssignal(idx),2,1,true); plotOnSubPlot(asignal(idx),3,1,true); plotOnSubPlot(xsignal(idx),4,1,true); plotOnSubPlot(ysignal(idx),5,1,true); end
結果は次のプロットのようになり、車両速度が 45 mph の場合に横方向加速度が最も大きくなることがわかります。
追加の解析
結果をさらに調べるために、次のコマンドを使用して、横方向加速度、ステアリング角度、および車両の軌跡を 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; firstorderfit = polyfit(sa.Data,ay.Data,1); gain(idx)=firstorderfit(1); legend_labels{idx} = [num2str(vmax(idx)), ' mph: Gain = ', ... num2str(gain(idx)), ' m/(deg s^2)']; % 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} = [num2str(vmax(idx)), ' mph']; % 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
参照
[1] SAE J266. Steady-State Directional Control Test Procedures For Passenger Cars and Light Trucks. Warrendale, PA: SAE International, 1996.
参考
Simulink.SimulationInput
| Simulink.SimulationOutput
| polyfit