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

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

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

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

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

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

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

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

Для получения дополнительной информации о примере готовых узлов см. Раздел «Маневр смены маршрута»

helpersetupdlc;

Запуск маневра смены маршрута

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

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

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

  • Боковые опорные точки останова и боковые опорные данные - Значения, которые задают боковую опорную траекторию как функцию от продольного расстояния

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

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. В двухполосном режиме изменения примера готовых узлов модели DLCReferenceApplication откройте подсистему Окружения. Коэффициент трения параметров блоков константы значения задает коэффициент трения. По умолчанию коэффициент масштабирования трения 1.0. Для регулировки трения в каждом временном шаге примера готовых узлов использует коэффициент.

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

  • Включите регистрацию сигнала для сигнала Outport Lane генератора ссылки смены маршрута.

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

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. После завершения симуляций закройте окна Данных моделирования Inspector.

Используйте Данные Моделирования Inspector для анализа результатов

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

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

  • В Данные моделирования Inspector выберите Import.

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

  • Используйте Данные моделирования Inspector, чтобы изучить результаты.

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. Легковые автомобили - Тестовый трек для тяжелого маневра с изменением маршрута.

Похожие примеры

Подробнее о