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

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

ISO 3888-2 задает маневр изменения двойного маршрута, чтобы проверить производительность предотвращения препятствия транспортного средства. В тесте, драйвере:

  • Ускоряется, пока транспортное средство не врезается в целевую скорость

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

  • Руль поворотов, чтобы следовать за путем в левый маршрут

  • Руль поворотов, чтобы следовать за путем назад в правильный маршрут

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

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

helpersetupdlc;

Запустите маневр изменения Двойного Маршрута

1. Откройте блок Lane Change Reference Generator. По умолчанию маневр установлен этими параметрами:

  • Продольное скоростное заданное значение входа — 35 миль в час

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

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

2. В подсистеме Визуализации откройте 3D Блок двигателя. По умолчанию 3D параметр Engine устанавливается на Отключенный. Для 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

  • В окне Vehicle Position просмотрите транспортное средство продольное расстояние как функцию или боковое расстояние.

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

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

Разверните поверхностное трение

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

1. В двойном маршруте изменяют модель DLCReferenceApplication примера готовых узлов, открывают подсистему Среды. Постоянное значение параметров блоков Трения задает масштабный коэффициент трения. По умолчанию масштабным коэффициентом трения является 1.0. Пример готовых узлов использует коэффициент, чтобы настроить трение на каждом временном шаге.

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

  • Включите логгирование сигнала для Дорожного знака выходного порта Генератора Ссылки Изменения Маршрута.

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

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

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

1. Откройте Инспектора Данных моделирования. На Панели инструментов Simulink, на вкладке Simulation, рассматриваемых Результатах, нажимают Data Inspector.

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

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

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

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 rad/s, когда масштабный коэффициент трения равен 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. Легковые автомобили — Испытательная площадка для серьезного маневра изменения маршрута.

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

Больше о