В этом примере показано, как использовать пример готовых узлов постоянного радиуса динамики аппарата для анализа влияния скорости на боковую динамику транспортного средства. В частности, вы можете изучить боковое ускорение, когда запускаете маневр с различными скоростями. Информацию об аналогичных маневрах см. в стандартах SAE J266_199601 и ISO 4138:2012.
Во время маневра транспортное средство использует прогнозирующую модель драйвера, чтобы поддерживать заданный радиус поворота на установленной скорости.
Для получения дополнительной информации о примере готовых узлов см. Раздел «Маневр константы радиуса».
helpersetupcr;
1. Откройте блок Reference Generator. По умолчанию маневр устанавливается с этими параметрами:
Маневр - Constant radius
Используйте специфичный для маневра драйвер, начальное положение и сцену - on
Продольная скорость - 35 миль/ч
Значение радиуса - 100 м
2. Выберите блок Reference Generator 3D вкладке Engine. По умолчанию параметр 3D Engine отключен. Требования к платформе механизма 3D визуализации и рекомендации по оборудованию см. в 3D Требования и ограничения Engine визуализации.
3. Запустите маневр с настройками по умолчанию. Когда будет выполняться симуляция, просмотрите информацию о транспортном средстве.
mdl = 'CRReferenceApplication';
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 3m 55.12s
В окне Положение транспортном средстве просмотрите продольное расстояние транспортного средства как функцию или боковое расстояние. Желтая линия отображает скорость рыскания. На синей линии показан угол поворота руля.
В Подсистеме Визуализации откройте блок Steer, Velocity, Lat Accel Scope, чтобы отобразить угол поворота, скорость и боковое ускорение от времени.
Запустите пример готовых узлов радиуса с тремя различными скоростями. Остановите симуляцию, если транспортное средство превысит порог бокового ускорения в 5 г.
1. В медленно увеличивающемся рулевом примере готовых узлов моделируйте CRReferenceApplication, откройте блок Ссылки Generator. Набор продольных скоростей точки, xdot_r параметров блоков устанавливает скорость транспортного средства. По умолчанию скорость составляет 50 миль/ч.
2. Включите регистрацию сигналов для сигналов скорости, маршрута и ISO. Можно использовать редактор Simulink ® или, кроме того, эти команды MATLAB ®. Сохраните модель.
Выберите блок Ссылки Generator Stop симуляции при боковом ускорении порога параметра.
set_param([mdl '/Reference Generator'],'cr_ay_stop','on');
Включите регистрацию сигнала для выходного порта сигнала ссылки Vis.
ph=get_param('CRReferenceApplication/Reference Generator','PortHandles'); set_param(ph.Outport(1),'DataLogging','on');
Включите регистрацию сигнала для сигнала вывода блока Passenger Vehicle.
ph=get_param('CRReferenceApplication/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 = [35, 40, 45]; numExperiments = length(vmax);
4. Создайте массив входных параметров симуляции, которые задают блочный параметр Reference Generator Longitudinal xdot_r равный xdot_r
.
for idx = numExperiments:-1:1 in(idx) = Simulink.SimulationInput(mdl); in(idx) = in(idx).setBlockParameter([mdl '/Reference Generator'], ... 'xdot_r', num2str(vmax(idx))); end
5. Сохраните модель и запустите симуляции. При наличии используйте параллельные вычисления.
save_system(mdl) tic; simout = parsim(in,'ShowSimulationManager','on'); toc;
[17-Dec-2020 14:19:27] Checking for availability of parallel pool... [17-Dec-2020 14:19:27] Starting Simulink on parallel workers... [17-Dec-2020 14:19:28] Loading project on parallel workers... [17-Dec-2020 14:19:28] Configuring simulation cache folder on parallel workers... [17-Dec-2020 14:19:28] Loading model on parallel workers... [17-Dec-2020 14:19:44] Running simulations... [17-Dec-2020 14:20:29] Completed 1 of 3 simulation runs [17-Dec-2020 14:20:55] Completed 2 of 3 simulation runs [17-Dec-2020 14:21:24] Completed 3 of 3 simulation runs [17-Dec-2020 14:21:25] Cleaning up parallel workers... Elapsed time is 130.512151 seconds.
6. Закройте окна Данных моделирования Inspector.
Используйте Данные моделирования Inspector, чтобы изучить результаты. Можно использовать пользовательский интерфейс или, кроме того, функции командной строки.
1. Откройте Данные моделирования Inspector. На панели инструментов Simulink, на вкладке Simulation, в разделе Review Results, нажмите Data Inspector.
В Данные моделирования Inspector выберите Import.
В диалоговом окне Import очистите логзаут. Выберите 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=['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 msignal(idx)=getSignalByIndex(simoutRun(idx),265); msignal(idx).LineColor =sigcolor((idx),:); ssignal(idx)=getSignalByIndex(simoutRun(idx),252); ssignal(idx).LineColor =sigcolor((idx),:); asignal(idx)=getSignalByIndex(simoutRun(idx),249); 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(ssignal(idx),1,1,true); plotOnSubPlot(msignal(idx),2,1,true); plotOnSubPlot(asignal(idx),3,1,true); end
Результаты аналогичны этим графикам, которые показывают, что наибольшее боковое ускорение происходит, когда скорость транспортного средства составляет 45 миль/ч.
Чтобы исследовать результаты далее, используйте эти команды, чтобы извлечь боковое ускорение, угол поворота руля и траекторию транспортного средства из 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] J266_199601. Установившиеся Процедуры тестирования управления направлением для легковых и легких автомобилей. Warrendale, PA: SAE International, 1996.
[2] ISO 4138:2012. Легковые автомобили -- статическое круговое поведение -- Разомкнутый контур методы испытаний. ISO (Международная организация по стандартизации), 2012 год.
polyfit
| Simulink.SimulationInput
| Simulink.SimulationOutput