exponenta event banner

Устойчивость при рыскании на различных дорожных поверхностях

В этом примере показано, как выполнять маневр изменения динамики транспортного средства на двух полосах на различных дорожных поверхностях, анализировать устойчивость транспортного средства к рысканию и определять успех маневра.

ISO 3888-2 определяет двухполосный маневр изменения для проверки эффективности предотвращения препятствий транспортного средства. В ходе испытания водитель:

  • Ускоряется до тех пор, пока транспортное средство не достигнет целевой скорости

  • Отпускает педаль акселератора

  • Разворот руля для следования по пути в левую полосу

  • Поворачивает руль, чтобы вернуться в правую полосу

Как правило, конусы обозначают границы полосы движения. Если транспортное средство и водитель могут согласовать маневр без удара о конус, то транспортное средство проходит испытание.

Дополнительные сведения о справочном приложении см. в разделе Двухполосный маневр изменения.

helpersetupdlc;

Выполнить двухполосный маневр смены

1. Откройте блок «Генератор привязок изменения полосы движения». По умолчанию маневр устанавливается со следующими параметрами:

  • Уставка продольной входной скорости - 35 миль/ч

  • Ширина транспортного средства - 2 м

  • Контрольные точки поперечной привязки и опорные данные поперечной привязки - значения, определяющие траекторию поперечной привязки в зависимости от продольного расстояния

2. В подсистеме визуализации откройте блок 3D Engine. По умолчанию для параметра 3D Engine установлено значение Disabled. Требования к платформе модуля визуализации 3D и рекомендации по аппаратному обеспечению см. в разделе Требования и ограничения модуля визуализации 3D.

3. Проведи маневр. По мере выполнения моделирования просмотрите информацию о транспортном средстве.

mdl = 'DLCReferenceApplication';
sim(mdl);
### Starting serial model reference simulation build
Warning: method not found. 
### 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 4m 10.411s

  • В окне «Положение транспортного средства» просмотрите продольное расстояние транспортного средства как функцию или боковое расстояние.

  • В подсистеме визуализации откройте блок области изменения полосы движения, чтобы отобразить боковое смещение как функцию времени. Красные и оранжевые линии обозначают границы конуса. Синяя линия обозначает траекторию привязки, а зеленая - фактическую траекторию. Зеленая линия действительно приближается к красной линии, которая отмечает конусы.

  • В подсистеме визуализации, если включена среда визуализации блока 3D Engine, можно просмотреть ответ транспортного средства в AutoVrtlEnv окно.

Трение поверхности сдвига

Запустите приложение привязки на трех дорожных поверхностях с различными коэффициентами масштабирования трения. Используйте результаты для анализа устойчивости рыскания и определения успешности маневра.

1. В двухполосной модели приложения изменения DLCRefedApplication откройте подсистему Environment. Значение параметра блока трения «Константа» определяет коэффициент масштабирования трения. По умолчанию коэффициент масштабирования трения равен 1.0. Эталонное приложение использует коэффициент для регулировки трения на каждом шаге времени.

2. Включение регистрации сигналов для сигналов скорости, полосы движения и ISO. Можно также использовать редактор Simulink ® или эти команды MATLAB ®. Сохраните модель.

  • Активизируйте регистрацию сигналов для сигнала Outport Lane Generator Change Reference.

mdl = 'DLCReferenceApplication';
ph=get_param('DLCReferenceApplication/Lane Change Reference Generator','PortHandles');
set_param(ph.Outport(1),'DataLogging','on');
  • Включить регистрацию сигналов для выходного сигнала блока пассажирского транспортного средства.

ph=get_param('DLCReferenceApplication/Passenger Vehicle','PortHandles');
set_param(ph.Outport(1),'DataLogging','on');
  • В подсистеме визуализации включите регистрацию сигналов для блока ISO.

set_param([mdl '/Visualization/ISO 15037-1:2006'],'Measurement','Enable');

3. Настройте вектор с коэффициентами масштабирования трения, lambdamu, что вы хотите расследовать. Например, для изучения коэффициентов масштабирования трения, равных 0.9, 0.95, и 1.0, в командной строке введите:

lambdamu = [0.9, 0.95, 1.0];
numExperiments = length(lambdamu);

4. Создание массива входных данных моделирования, который задает lambdamu равно параметру блока постоянной трения.

for idx = numExperiments:-1:1
    in(idx) = Simulink.SimulationInput(mdl);
    in(idx) = in(idx).setBlockParameter([mdl '/Environment/Friction'],...
        'Value',['ones(4,1).*',num2str(lambdamu(idx))]);
end

5. Установите время остановки моделирования на 25 с. Сохраните модель и запустите моделирование. Если доступно, используйте параллельные вычисления.

set_param(mdl,'StopTime','25')
save_system(mdl)
tic;
simout = parsim(in,'ShowSimulationManager','on');
toc;
[17-Dec-2020 13:57:24] Checking for availability of parallel pool...
[17-Dec-2020 13:57:24] Starting Simulink on parallel workers...
[17-Dec-2020 13:57:25] Loading project on parallel workers...
[17-Dec-2020 13:57:25] Configuring simulation cache folder on parallel workers...
[17-Dec-2020 13:57:25] Loading model on parallel workers...
[17-Dec-2020 13:57:45] Running simulations...
[17-Dec-2020 13:58:19] Completed 1 of 3 simulation runs
[17-Dec-2020 13:58:20] Completed 2 of 3 simulation runs
[17-Dec-2020 13:59:11] Completed 3 of 3 simulation runs
[17-Dec-2020 13:59:11] Cleaning up parallel workers...
Elapsed time is 120.449498 seconds.

6. После завершения моделирования закройте окна инспектора данных моделирования.

Использование инспектора данных моделирования для анализа результатов

Используйте инспектор данных моделирования для проверки результатов. Можно использовать пользовательский интерфейс или, в качестве альтернативы, функции командной строки.

1. Откройте инспектор данных моделирования. На панели инструментов Simulink на вкладке Simulation в разделе Review Results выберите Data Inspector.

  • В Инспекторе данных моделирования выберите Импорт.

  • В диалоговом окне «Импорт» снимите флажок logsout. Выбрать simout(1), simout(2), и simout(3). Выберите Импорт.

  • Используйте инспектор данных моделирования для проверки результатов.

2. Можно также использовать эти команды MATLAB для создания 6 графиков. Первые три графика обозначают верхнюю границу полосы движения, UB, нижняя граница полосы движения, LBи боковое расстояние между транспортными средствами, Y, для каждого прогона.

Следующие три графика обеспечивают боковое ускорение, ay, боковое расстояние между транспортными средствами, Yи скорость рыскания, r, для каждого прогона.

for idx = 1:numExperiments
    % Create sdi run object
    simoutRun(idx)=Simulink.sdi.Run.create;
    simoutRun(idx).Name=['lambdamu = ', num2str(lambdamu(idx))];
    add(simoutRun(idx),'vars',simout(idx));
end
sigcolor=[1 0 0];
for idx = 1:numExperiments
    % Extract the maneuver upper and lower lane boundaries
    ubsignal(idx)=getSignalByIndex(simoutRun(idx),1);
    ubsignal(idx).LineColor = sigcolor;
    lbsignal(idx)=getSignalByIndex(simoutRun(idx),2);
    lbsignal(idx).LineColor = sigcolor;
end
sigcolor=[0 1 0;0 0 1;1 0 1];
for idx = 1:numExperiments
    % Extract the lateral acceleration, position, and yaw rate
    ysignal(idx)=getSignalByIndex(simoutRun(idx),27);
    ysignal(idx).LineColor =sigcolor((idx),:);
    rsignal(idx)=getSignalByIndex(simoutRun(idx),77);
    rsignal(idx).LineColor =sigcolor((idx),:);
    asignal(idx)=getSignalByIndex(simoutRun(idx),79);
    asignal(idx).LineColor =sigcolor((idx),:);
end
Simulink.sdi.view
Simulink.sdi.setSubPlotLayout(numExperiments,2);
for idx = 1:numExperiments
    %  Plot the lateral position and lane boundaries
    plotOnSubPlot(ubsignal(idx),(idx),1,true);
    plotOnSubPlot(lbsignal(idx),(idx),1,true);
    plotOnSubPlot(ysignal(idx),(idx),1,true);
end
for idx = 1:numExperiments
    % Plot the lateral acceleration, position, and yaw rate
    plotOnSubPlot(asignal(idx),1,2,true);
    plotOnSubPlot(ysignal(idx),2,2,true);
    plotOnSubPlot(rsignal(idx),3,2,true);
end

Результаты аналогичны этим графикам, которые показывают, что транспортное средство имеет скорость рыскания около .66 рад/с, когда коэффициент фрикционного масштабирования равен 1.

Дальнейший анализ

Для дальнейшего изучения результатов используйте эти команды для извлечения бокового ускорения, угла поворота и траектории транспортного средства из simout объект.

1. Извлеките боковое ускорение и угол поворота. Постройте график данных. Результаты аналогичны этому графику. Они указывают, что наибольшее боковое ускорение происходит, когда коэффициент масштабирования трения равен 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} = ['lambdamu = ', num2str(lambdamu(idx))];
    % 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. Извлеките траекторию движения транспортного средства. Постройте график данных. Результаты аналогичны этому графику. Они указывают на то, что наибольшее боковое положение транспортного средства имеет место, когда коэффициент масштабирования трения равен 0.9.

figure
for idx = 1:numExperiments
    % Extract Data
    log = get(simout(idx),'logsout');
    x = log{3}.Values.Body.InertFrm.Cg.Disp.X.Data;
    y = log{3}.Values.Body.InertFrm.Cg.Disp.Y.Data;
    legend_labels{idx} = ['lambdamu = ', num2str(lambdamu(idx))];
    % Plot vehicle location
    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] ISO 3888-2: 2011. Легковые автомобили - испытательный трек для серьезного маневра по изменению полосы движения.

Связанные примеры

Подробнее