このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
さまざまな速度での車両の横方向加速度
この例では、車両運動の一定半径リファレンス アプリケーションを使用して、車両の横方向の運動に対する速度による影響を解析する方法を示します。具体的には、異なる速度で操作を実行し、横方向加速度を調べることができます。類似の操作の詳細については、SAE J266_199601 規格および ISO 4138:2012 規格を参照してください。
この操作では、車両は予測ドライバー モデルを使用して、事前に指定された旋回半径を設定速度で維持します。
リファレンス アプリケーションの詳細については、一定半径旋回操作を参照してください。
helpersetupcr;
一定半径旋回操作の実行
1. Reference Generator ブロックを開きます。既定では、操作のパラメーターは次のように設定されています。
操縦 —
Constant radius
操縦固有のドライバー、初期位置、およびシーンを使用 — オン
縦方向速度の基準 — 35 mph
半径値 — 100 m
2. Reference Generator ブロックの [3D エンジン] タブを選択します。既定では、[3D エンジン] パラメーターは [無効] になっています。3D 可視化エンジンのプラットフォームの要件やハードウェアの推奨事項については、Unreal Engine シミュレーション環境の要件と制限を参照してください。
3. 既定の設定で操作を実行します。シミュレーションを実行しながら、車両の情報を確認します。
mdl = 'CRReferenceApplication';
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 8.0764s
[Vehicle Position] ウィンドウで、車両の縦方向の距離を横方向の距離の関数として表示します。黄色の線はヨー レートを表示したものです。青色の線はステアリング角度を示します。
Visualization サブシステムで、Steer, Velocity, Lat Accel Scope ブロックを開き、時間に対するステアリング角度、速度、および横方向加速度を表示します。
速度のスイープ
3 つの異なる速度で一定半径リファレンス アプリケーションを実行します。車両が横方向加速度のしきい値 0.5 g を超えたらシミュレーションを停止します。
1. 一定半径リファレンス アプリケーション モデル CRReferenceApplication で、Reference Generator ブロックを開きます。車両速度は [縦方向速度の設定点、xdot_r] ブロック パラメーターで設定します。既定では、速度は 50 mph です。
2. 速度、車線、および ISO の各信号の信号ログを有効にします。Simulink® エディターを使用するか、あるいは以下の MATLAB® コマンドを使用できます。モデルを保存します。
Reference Generator ブロックの [横方向加速度のしきい値においてシミュレーションを停止] パラメーターを選択します。
set_param([mdl '/Reference Generator'],'cr_ay_stop','on');
Reference Generator の Vis 信号出力端子の信号ログを有効にします。
ph=get_param('CRReferenceApplication/Reference Generator','PortHandles'); set_param(ph.Outport(1),'DataLogging','on');
Passenger Vehicle ブロックの出力端子信号の信号ログを有効にします。
ph=get_param('CRReferenceApplication/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 = [35, 40, 45]; numExperiments = length(vmax);
4. Reference Generator ブロックのパラメーター [縦方向速度の基準、xdot_r] が xdot_r
と等しくなるように設定するシミュレーション入力の配列を作成します。
for idx = numExperiments:-1:1 in(idx) = Simulink.SimulationInput(mdl); in(idx) = in(idx).setBlockParameter([mdl '/Reference Generator'], ... 'xdot_r', num2str(vmax(idx))); end
5. モデルを保存し、シミュレーションを実行します。
save_system(mdl) tic; simout = parsim(in,'ShowSimulationManager','on'); toc;
[03-Mar-2023 15:24:05] Checking for availability of parallel pool... [03-Mar-2023 15:24:05] Starting Simulink on parallel workers... [03-Mar-2023 15:24:07] Loading project on parallel workers... [03-Mar-2023 15:24:07] Configuring simulation cache folder on parallel workers... [03-Mar-2023 15:24:07] Loading model on parallel workers... [03-Mar-2023 15:24:38] Running simulations... [03-Mar-2023 15:26:13] Completed 1 of 3 simulation runs [03-Mar-2023 15:26:14] Completed 2 of 3 simulation runs [03-Mar-2023 15:27:10] Completed 3 of 3 simulation runs [03-Mar-2023 15:27:10] Cleaning up parallel workers... Elapsed time is 195.836564 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), 'ay'); 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(msignal(idx),1,1,true); plotOnSubPlot(ssignal(idx),2,1,true); plotOnSubPlot(asignal(idx),3,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] J266_199601. Steady-State Directional Control Test Procedures for Passenger Cars and Light Trucks. Warrendale, PA: SAE International, 1996.
[2] ISO 4138:2012. Passenger cars -- Steady-state circular driving behaviour -- Open-loop test methods. ISO (International Organization for Standardization), 2012.
参考
Simulink.SimulationInput
| Simulink.SimulationOutput
| polyfit