Частотная характеристика на держащийся угловой вход

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

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

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

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

  • Линейно увеличьте частоту синусоидальной волны.

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

helpersetupsss;

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

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

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

  • Регулирование амплитуды — 90 градусов

  • Итоговая частота — 0,7 Гц

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

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

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

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

Разверните регулирование

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

1. В развернутом синусе, регулирующем модель SSSReferenceApplication примера готовых узлов, откройте блок Swept Sine Reference Generator. Держащаяся амплитуда, theta_hw параметры блоков устанавливает амплитуду. По умолчанию амплитуда составляет 90 градусов.

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

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

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

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

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

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

amp = [60, 90, 120];
numExperiments = length(amp);

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

for idx = numExperiments:-1:1
    in(idx) = Simulink.SimulationInput(mdl);
    in(idx) = in(idx).setBlockParameter([mdl '/Swept Sine Reference Generator'],...
        'theta_hw',num2str(amp(idx)));
end

5. Сохраните модель и запустите симуляции. При наличии используйте параллельные вычисления.

save_system(mdl)
tic;
simout = parsim(in,'ShowSimulationManager','on');
toc;
[24-Feb-2020 11:44:19] Checking for availability of parallel pool...
[24-Feb-2020 11:44:19] Starting Simulink on parallel workers...
[24-Feb-2020 11:44:20] Loading project on parallel workers...
[24-Feb-2020 11:44:20] Configuring simulation cache folder on parallel workers...
[24-Feb-2020 11:44:20] Loading model on parallel workers...
[24-Feb-2020 11:44:28] Running simulations...
[24-Feb-2020 11:46:22] Completed 1 of 3 simulation runs
[24-Feb-2020 11:47:13] Completed 2 of 3 simulation runs
[24-Feb-2020 11:47:15] Completed 3 of 3 simulation runs
[24-Feb-2020 11:47:15] Cleaning up parallel workers...
Elapsed time is 186.481140 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=['Amplitude = ', num2str(amp(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
    ysignal(idx)=getSignalByIndex(simoutRun(idx),23);
    ysignal(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(3,1);
for idx = 1:numExperiments
    % Plot the lateral position, steering angle, and lateral acceleration
    plotOnSubPlot(ysignal(idx),1,1,true);
    plotOnSubPlot(ssignal(idx),2,1,true);
    plotOnSubPlot(asignal(idx),3,1,true);
end

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

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

Чтобы исследовать результаты далее, используйте эти команды, чтобы извлечь поперечное ускорение, регулируя угол и траекторию транспортного средства от 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;
    legend_labels{idx} = ['amplitude = ', num2str(amp(idx)), '^{\circ}'];
    % 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} = ['amplitude = ', num2str(amp(idx)), '^{\circ}'];
    % 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

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

| |

Похожие темы