В этом примере показано, как использовать приложение для сравнения динамики и синусоидального рулевого управления транспортного средства для анализа динамической реакции рулевого управления на входные данные рулевого управления. В частности, вы можете исследовать частотную характеристику транспортного средства и боковое ускорение при выполнении маневра с различными амплитудами рулевого управления синусоидальной волны.
Маневр рулевого управления со стреловидным синусоидом проверяет частотную характеристику транспортного средства на входы рулевого управления. В ходе испытания водитель:
Ускоряется до тех пор, пока транспортное средство не достигнет целевой скорости.
Команда ввода синусоидального рулевого колеса.
Линейно увеличивают частоту синусоидальной волны.
Дополнительные сведения о справочном приложении см. в разделе Маневр рулевого управления с синусоидальным смещением.
helpersetupsss;

1. Откройте блок Генератор привязки продольного синуса (Swept Sine Reference Generator). По умолчанию маневр устанавливается со следующими параметрами:
Уставка продольной скорости - 30 миль/ч
Амплитуда рулевого управления - 90 °
Конечная частота - 0,7 Гц
2. В подсистеме визуализации откройте блок 3D Engine. По умолчанию для параметра 3D Engine установлено значение Disabled. Требования к платформе модуля визуализации 3D и рекомендации по аппаратному обеспечению см. в разделе Требования и ограничения модуля визуализации 3D.
3. Выполните маневр с настройками по умолчанию. По мере выполнения моделирования просмотрите информацию о транспортном средстве.
mdl = 'SSSReferenceApplication';
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 2.207s

В окне «Положение транспортного средства» просмотрите продольное расстояние транспортного средства как функцию или боковое расстояние. Желтая линия - это скорость рыскания. Синяя линия - угол поворота.
В подсистеме визуализации откройте блок Yaw Rate и Steer Scope для отображения зависимости скорости и угла поворота от времени.

Запустить эталонное приложение с тремя различными амплитудами рулевого управления синусоидальными волнами.
1. В модели приложения привязки сдвига синусоиды SSSRefedApplication откройте блок Генератор привязки сдвига синуса. Амплитуда рулевого управления, theta_hw параметр блока задает амплитуду. По умолчанию амплитуда равна 90 град.
2. Включение регистрации сигналов для сигналов скорости, полосы движения и ISO. Можно также использовать редактор Simulink ® или эти команды MATLAB ®. Сохраните модель.
Активизируйте регистрацию сигналов для сигнала Outport Lane Generator Change Reference.

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

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;
[17-Dec-2020 15:45:52] Checking for availability of parallel pool... [17-Dec-2020 15:45:52] Starting Simulink on parallel workers... [17-Dec-2020 15:45:53] Loading project on parallel workers... [17-Dec-2020 15:45:53] Configuring simulation cache folder on parallel workers... [17-Dec-2020 15:45:53] Loading model on parallel workers... [17-Dec-2020 15:46:05] Running simulations... [17-Dec-2020 15:47:03] Completed 1 of 3 simulation runs [17-Dec-2020 15:47:04] Completed 2 of 3 simulation runs [17-Dec-2020 15:48:34] Completed 3 of 3 simulation runs [17-Dec-2020 15:48:35] Cleaning up parallel workers... Elapsed time is 174.675488 seconds.
6. После завершения моделирования закройте окна инспектора данных моделирования.
Используйте инспектор данных моделирования для проверки результатов. Можно использовать пользовательский интерфейс или, в качестве альтернативы, функции командной строки.
1. Откройте инспектор данных моделирования. На панели инструментов Simulink на вкладке Simulation в разделе Review Results выберите Data Inspector.
В Инспекторе данных моделирования выберите Импорт.

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

Используйте инспектор данных моделирования для проверки результатов.
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),7); ysignal(idx).LineColor =sigcolor((idx),:); ssignal(idx)=getSignalByIndex(simoutRun(idx),255); ssignal(idx).LineColor =sigcolor((idx),:); asignal(idx)=getSignalByIndex(simoutRun(idx),263); 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

fft | Simulink.SimulationInput | Simulink.SimulationOutput