Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

さまざまな速度での車両のステアリング ゲイン

この例では、車両運動の徐々に増加するステアリング リファレンス アプリケーションを使用して、車両のハンドリングに対するステアリング角度と速度による影響を解析する方法を示します。具体的には、異なる速度指令値で操作を実行し、ステアリング ゲインを計算できます。徐々に増加するステアリング操作は、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);
Warning: Unable to resolve the name
'CloneDetector.ExclusionEditorUIService.getInstance'. 
### Starting serial model reference simulation build.
### Successfully updated the model reference simulation target for: Driveline
### Successfully updated the model reference simulation target for: PassVeh14DOF
### Successfully updated the model reference simulation target for: SiMappedEngineV

Build Summary

Simulation targets built:

Model            Action                        Rebuild Reason                              
===========================================================================================
Driveline        Code generated and compiled.  Driveline_msf.mexw64 does not exist.        
PassVeh14DOF     Code generated and compiled.  PassVeh14DOF_msf.mexw64 does not exist.     
SiMappedEngineV  Code generated and compiled.  SiMappedEngineV_msf.mexw64 does not exist.  

3 of 3 models built (0 models already up to date)
Build duration: 0h 3m 33.9s

  • [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;
Warning: Unable to resolve the name
'CloneDetector.ExclusionEditorUIService.getInstance'. 
[06-Jul-2023 10:26:19] Checking for availability of parallel pool...
Starting parallel pool (parpool) using the 'Processes' profile ...
Connected to parallel pool with 6 workers.
[06-Jul-2023 10:27:05] Starting Simulink on parallel workers...
[06-Jul-2023 10:27:28] Loading project on parallel workers...
[06-Jul-2023 10:27:28] Configuring simulation cache folder on parallel workers...
[06-Jul-2023 10:27:40] Loading model on parallel workers...
[06-Jul-2023 10:28:18] Running simulations...
[06-Jul-2023 10:31:07] Completed 1 of 3 simulation runs
[06-Jul-2023 10:31:08] Completed 2 of 3 simulation runs
[06-Jul-2023 10:31:09] Completed 3 of 3 simulation runs
[06-Jul-2023 10:31:09] Cleaning up parallel workers...
Elapsed time is 312.934938 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.

参考

| |

関連するトピック