В этом примере показано, как использовать приложение привязки постоянного радиуса динамики транспортного средства для анализа влияния скорости на боковую динамику транспортного средства. В частности, можно исследовать боковое ускорение при выполнении маневра с разными скоростями. Информацию об аналогичных маневрах см. в стандартах SAE J266_199601 и ISO 4138:2012.
Во время маневра транспортное средство использует прогнозирующую модель водителя для поддержания заданного радиуса поворота на заданной скорости.
Дополнительные сведения о справочном приложении см. в разделе Маневр постоянного радиуса.
helpersetupcr;

1. Откройте блок «Генератор привязок». По умолчанию маневр устанавливается со следующими параметрами:
Манёвр - Constant radius
Использовать специально для маневра водителя, исходное положение и сцену - вкл.
Продольная скорость - 35 миль/ч
Значение радиуса - 100 м
2. Выберите блок «Генератор привязок» 3D вкладке «Двигатель». По умолчанию параметр 3D Engine имеет значение Disabled. Требования к платформе модуля визуализации 3D и рекомендации по аппаратному обеспечению см. в разделе Требования и ограничения модуля визуализации 3D.
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 для отображения угла поворота, скорости и бокового ускорения в зависимости от времени.

Запустите приложение привязки постоянного радиуса с тремя различными скоростями. Прекратить моделирование, если транспортное средство превышает порог бокового ускорения, равный 0,5 g.
1. В медленно увеличивающейся модели эталонного приложения рулевого управления CRRefingApplication откройте блок генератора привязок. Уставка продольной скорости, параметр блока xdot_r задает скорость транспортного средства. По умолчанию скорость составляет 50 миль/ч.
2. Включение регистрации сигналов для сигналов скорости, полосы движения и ISO. Можно также использовать редактор Simulink ® или эти команды MATLAB ®. Сохраните модель.
Выберите параметр моделирования останова блока генератора привязок при пороговом значении бокового ускорения.

set_param([mdl '/Reference Generator'],'cr_ay_stop','on');
Включите регистрацию сигналов для выходного порта опорного генератора Vis.

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

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. Создайте массив входных данных моделирования, которые задают параметр блока генератора привязок «Продольная скорость», 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. Закройте окна инспектора данных моделирования.
Используйте инспектор данных моделирования для проверки результатов. Можно использовать пользовательский интерфейс или, в качестве альтернативы, функции командной строки.
1. Откройте инспектор данных моделирования. На панели инструментов Simulink на вкладке Simulation в разделе Review Results выберите Data Inspector.
В Инспекторе данных моделирования выберите Импорт.

В диалоговом окне «Импорт» снимите флажок «Выход из системы». Выбрать 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=['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. Процедуры испытания легковых автомобилей и грузовых автомобилей малой грузоподъемности в установившемся режиме. Уоррендейл, Пенсильвания: SAE International, 1996.
[2] ISO 4138:2012. Легковые автомобили -- Устойчивое круговое вождение -- Методы испытания с разомкнутым контуром. ИСО (Международная организация по стандартизации), 2012 год.
polyfit | Simulink.SimulationInput | Simulink.SimulationOutput