В этом примере показано, как использовать развернутый синус динамики аппарата, регулирующий пример готовых узлов, чтобы анализировать динамический руководящий ответ на регулирование входных параметров. А именно, можно исследовать частотную характеристику транспортного средства и поперечное ускорение, когда вы запускаете маневр с различными синусоидальными руководящими амплитудами волны.
Развернутый синус, регулирующий маневр, тестирует частотную характеристику транспортного средства на регулирование входных параметров. В тесте, драйвере:
Ускоряется, пока транспортное средство не врезается в целевую скорость.
Управляет синусоидальным входом руля.
Линейно увеличьте частоту синусоидальной волны.
Для получения дополнительной информации о примере готовых узлов, смотрите, что Развернутый Синус Регулирует Маневр.
Создайте и откройте рабочую копию увеличения, регулирующего пример готовых узлов.
Откройте блок Swept Sine Reference Generator. По умолчанию маневр установлен этими параметрами:
Longitudinal velocity setpoint — 30 миль в час
Steering amplitude — 90 градусов
Final frequency — 0,7 Гц
Откройте подсистему Визуализации. По умолчанию 3D Engine установлен с 3D отключенным механизмом визуализации. Для 3D требований платформы механизма визуализации и рекомендаций по аппаратным средствам, смотрите 3D Требования Engine Визуализации.
Запустите маневр с настройками по умолчанию. Когда симуляция запускается, информация о транспортном средстве представления.
В окне Vehicle Position просмотрите транспортное средство продольное расстояние как функцию бокового расстояния.
В подсистеме Визуализации откройте блок Yaw Rate и Steer Scope, чтобы отобразить уровень отклонения от курса и держащийся угол по сравнению со временем:
Желтая линия — уровень Отклонения от курса
Синие линии — Держащийся угол
Синяя линия показывает 90
амплитуда градуса синусоидальный руководящий угол с увеличивающейся частотой.
Запустите приложение готовых узлов с тремя различными синусоидальными руководящими амплитудами волны.
В развернутом синусе, регулирующем модель SSSReferenceApplication
примера готовых узлов, откройте блок Swept Sine Reference Generator. Параметры блоков Steering amplitude, theta_hw устанавливают амплитуду. По умолчанию амплитудой является
90
градус.
В подсистеме Визуализации включите логгирование сигнала для этих элементов модели. Отключите 3D среду визуализации. Можно использовать редактор Simulink® или, альтернативно, команды MATLAB®. Сохраните модель.
Элемент модели | Редактор Simulink |
---|---|
VehFdbk inport |
|
Блок ISO 15037-1:2006 |
|
3D Блок двигателя |
|
В качестве альтернативы используйте эти команды, чтобы включить логгирование сигнала, отключить 3D среду визуализации и сохранить модель.
% Open the model mdl = 'SSSReferenceApplication'; open_system(mdl); % Enable signal logging for VehFdbk ph=get_param('SSSReferenceApplication/Visualization/VehFdbk','PortHandles'); set_param(ph.Outport,'DataLogging','on'); % Enable signal logging for ISO block set_param([mdl '/Visualization/ISO 15037-1:2006'],'Measurement','Enable'); % Disable 3D environment set_param([mdl '/Visualization/3D Engine'],'engine3D','Disabled'); save_system(mdl)
Настройте держащийся амплитудный вектор, amp
, то, что вы хотите заняться расследованиями. Например, в командной строке, введите:
mdl = 'SSSReferenceApplication'; open_system(mdl); % Define the set of amplitudes to sweep amp = [60, 90, 120]; numExperiments = length(amp);
Создайте массив входных параметров симуляции, которые устанавливают параметры блоков Swept Sine Reference Generator, Steering amplitude, 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
Сохраните модель и запустите симуляции. При наличии используйте параллельные вычисления.
tic; simout = parsim(in,'ShowSimulationManager','on'); toc;
Импортируйте результаты симуляции Инспектору Данных моделирования.
На панели инструментов Simulink Editor нажмите кнопку Data Inspector.
В Инспекторе Данных моделирования выберите Import. В диалоговом окне Import примите значения по умолчанию и выберите Import.
В диалоговом окне Import очистите logsout
. Выберите simout(1)
, simout(2)
, и simout(3)
. Выберите Import.
Выберите каждый из запусков. Для каждого запуска щелкните правой кнопкой, чтобы переименовать результаты к амплитуде, которая соответствует симуляции. Запуститесь 1, соответствует симуляции с настройками по умолчанию.
Исследуйте результаты в Инспекторе Данных моделирования. Чтобы охарактеризовать регулирование, просмотрите графики результатов симуляции. Например, постройте боковое положение, Y
, угол руля и поперечное ускорение. Результаты похожи на эти графики, которые показывают результаты для запусков 2, 3, и 4. Результаты показывают, что самое большое поперечное ускорение происходит, когда держащейся амплитудой является 120
градус.
Чтобы исследовать результаты далее, используйте эти команды, чтобы извлечь поперечное ускорение, регулируя угол и траекторию транспортного средства от simout
объект.
Извлеките поперечное ускорение и держащийся угол. Отобразите данные на графике.
% Plot results from simout object: lateral acceleration vs steering angle figure for idx = 1:numExperiments % Extract Data log = simout(idx).get('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
Результаты похожи на этот график.
Извлеките путь к транспортному средству. Отобразите данные на графике.
% Plot results from simout object figure for idx = 1:numExperiments % Extract Data log = simout(idx).get('logsout'); VehFdbk = log.get('VehFdbk'); x = VehFdbk.Values.Body.X; y = VehFdbk.Values.Body.Y; legend_labels{idx} = ['amplitude = ', num2str(amp(idx)), '^{\circ}']; % Plot vehicle location axis('equal') plot(y.Data,x.Data) 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
Результаты похожи на этот график.
Для следующих шагов используйте быстрое преобразование Фурье (FFT), чтобы исследовать держащийся ответ в частотном диапазоне.
Simulink.SimulationInput
| Simulink.SimulationOutput
| fft