В этом примере показов, как использовать динамику аппарата примера готовых узлов рулевого управления для анализа динамической реакции рулевого управления на входы рулевого управления. В частности, вы можете изучить частотную характеристику транспортного средства и боковое ускорение, когда вы запускаете маневр с различными синусоидальными амплитудами рулевого управления волны.
Стреловидный маневр рулевого управления проверяет частотную характеристику транспортного средства на входы рулевого управления. В тесте драйвер:
Ускоряется до тех пор, пока транспортное средство не достигнет целевой скорости.
Команда синусоидального входа рулевого колеса.
Линейно увеличивайте частоту синусоидальной волны.
Для получения дополнительной информации о примере готовых узлов см. Раздел «Маневр рулевого управления свептом-синусом».
helpersetupsss;
1. Откройте блок Swept Sine Reference Generator. По умолчанию маневр устанавливается с этими параметрами:
Уставка продольной скорости - 30 миль/ч
Амплитуда рулевого управления - 90 o
Конечная частота - 0,7 Гц
2. В Подсистеме визуализации откройте блок 3D Engine. По умолчанию для параметра 3D Engine задано значение Disabled. Требования к платформе механизма 3D визуализации и рекомендации по оборудованию см. в 3D Требования и ограничения Engine визуализации.
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. В модели примера готовых узлов рулевого управления swept-sine откройте блок Swept Sine Reference Generator. Амплитуда управления, theta_hw параметров блоков устанавливает амплитуду. По умолчанию амплитуда составляет 90 o.
2. Включите регистрацию сигналов для сигналов скорости, маршрута и ISO. Можно использовать редактор Simulink ® или, кроме того, эти команды MATLAB ®. Сохраните модель.
Включите регистрацию сигнала для сигнала Outport Lane генератора ссылки смены маршрута.
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. Создайте массив входов симуляции, который устанавливает генератор Ссылки Swept Sine параметров блоков амплитуду рулевого управления 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. После завершения симуляций закройте окна Данных моделирования Inspector.
Используйте Данные моделирования Inspector, чтобы изучить результаты. Можно использовать пользовательский интерфейс или, кроме того, функции командной строки.
1. Откройте Данные моделирования Inspector. На панели инструментов Simulink, на вкладке Simulation, в разделе Review Results, нажмите Data Inspector.
В Данные моделирования Inspector выберите Import.
В диалоговом окне Импорт очистите logsout
. Выберите simout(1)
, simout(2)
, и simout(3)
. Выберите Импорт.
Используйте Данные моделирования Inspector, чтобы изучить результаты.
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