Руководящее усиление транспортного средства на различных скоростях

В этом примере показано, как использовать динамику аппарата, медленно увеличивающуюся регулирующий пример готовых узлов, чтобы анализировать удар держащегося угла и скорости на обработке транспортного средства. А именно, можно вычислить держащееся усиление, когда вы запускаете маневр с различными сетболами скорости. На основе постоянной скорости переменная регулирует тест, заданный в SAE J266, медленно руководящий маневр увеличения помогает охарактеризовать боковую динамику транспортного средства. В тесте, драйвере: Ускоряется, пока транспортное средство не врезается в целевую скорость.

  • Обеспечивает целевую скорость.

  • Линейно увеличивает угол руля от 0 градусов до максимального угла.

  • Обеспечивает угол руля в течение требуемого времени.

  • Линейно уменьшает угол руля от максимального угла до 0 градусов.

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

helpersetupsis;

Запустите медленно руководящий маневр увеличения

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

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

  • Уровень Handwheel — 13,5 градусов

  • Максимум handwheel угол — 270 градусов

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

3. Запустите маневр с настройками по умолчанию. Когда симуляция запускается, просмотрите информацию о транспортном средстве.

  • В окне Vehicle Position просмотрите транспортное средство продольное расстояние как функцию или боковое расстояние. Желтая линия отображает уровень отклонения от курса. Синяя линия показывает держащийся угол.

  • В подсистеме Визуализации откройте Уровень Отклонения от курса и блок Steer Scope, чтобы отобразить уровень отклонения от курса и держащийся угол по сравнению со временем.

Разверните сетболы скорости

Запустите медленно увеличение, регулирующее угловой пример готовых узлов с тремя различными сетболами скорости.

1. В медленном увеличении, регулирующем модель ISReferenceApplication примера готовых узлов, откройте блок Slowly Increasing Steer. Продольный сетбол скорости, xdot_r параметры блоков устанавливает скорость транспортного средства. По умолчанию скорость составляет 50 миль в час.

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

  • Включите логгирование сигнала для медленного Увеличения, Держатся Касательно выходного порта сигнала.

mdl = 'ISReferenceApplication';
open_system(mdl);
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');
  • В подсистеме Визуализации включите логгирование сигнала для блока ISO.

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

3. Настройте вектор сетбола скорости, xdot_r, то, что вы хотите заняться расследованиями. Например, в командной строке, введите:

vmax = [40, 50, 60];
numExperiments = length(vmax);

4. Создайте массив входных параметров симуляции, которые устанавливают Развернутую Руководящую амплитуду параметров блоков Генератора Ссылки Синуса, theta_hw равный amp.

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;
[25-Jun-2020 23:09:21] Checking for availability of parallel pool...
Starting parallel pool (parpool) using the 'local' profile ...
Preserving jobs with IDs: 13 because they contain crash dump files.
You can use 'delete(myCluster.Jobs)' to remove all jobs created with profile local. To create 'myCluster' use 'myCluster = parcluster('local')'.
Connected to the parallel pool (number of workers: 6).
[25-Jun-2020 23:10:17] Starting Simulink on parallel workers...
[25-Jun-2020 23:10:52] Loading project on parallel workers...
[25-Jun-2020 23:10:52] Configuring simulation cache folder on parallel workers...
[25-Jun-2020 23:11:02] Loading model on parallel workers...
[25-Jun-2020 23:11:36] Running simulations...
[25-Jun-2020 23:16:52] Completed 1 of 3 simulation runs
[25-Jun-2020 23:16:52] Completed 2 of 3 simulation runs
[25-Jun-2020 23:17:03] Completed 3 of 3 simulation runs
[25-Jun-2020 23:17:03] Cleaning up parallel workers...
Elapsed time is 486.198657 seconds.

6. После завершенных симуляций закройте окна Simulation Data Inspector.

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

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

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

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

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

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

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
    xsignal(idx)=getSignalByIndex(simoutRun(idx),22);
    xsignal(idx).LineColor =sigcolor((idx),:);
    ysignal(idx)=getSignalByIndex(simoutRun(idx),23);
    ysignal(idx).LineColor =sigcolor((idx),:);
    msignal(idx)=getSignalByIndex(simoutRun(idx),255);
    msignal(idx).LineColor =sigcolor((idx),:);
    ssignal(idx)=getSignalByIndex(simoutRun(idx),251);
    ssignal(idx).LineColor =sigcolor((idx),:);
    asignal(idx)=getSignalByIndex(simoutRun(idx),259);
    asignal(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

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

Последующий анализ

Чтобы исследовать результаты далее, используйте эти команды, чтобы извлечь поперечное ускорение, регулируя угол и траекторию транспортного средства от 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');
    x = log{1}.Values.Body.InertFrm.Cg.Disp.X.Data;
    y = log{1}.Values.Body.InertFrm.Cg.Disp.Y.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. Установившиеся направленные процедуры контрольного теста для легковых автомобилей и легких грузовиков. Варрендэйл, PA: SAE International, 1996.

Смотрите также

| |

Похожие темы