В этом примере показано, как использовать динамику аппарата постоянный пример готовых узлов радиуса, чтобы анализировать удар скорости на динамике ответвления транспортного средства. А именно, можно исследовать поперечное ускорение, когда вы запускаете маневр с различными скоростями. Для получения информации о подобных маневрах см. стандарты SAE J266_1996011 и ISO 4138:20122.
Во время маневра транспортное средство использует прогнозирующую модель драйвера, чтобы обеспечить предзаданный радиус поворота при скорости набора.
Для получения дополнительной информации о примере готовых узлов, смотрите Постоянный Маневр Радиуса.
Создайте и откройте рабочую копию постоянного примера готовых узлов радиуса.
Выберите блок Reference Generator. По умолчанию пример готовых узлов использует блок Predictive Driver, чтобы обеспечить радиус правого поворота на 100 м на уровне 30 миль в час.
Maneuver — Constant radius
Use maneuver-specific driver, initial position, and scene — on
Longitudinal velocity — 30 миль в час
Radius value — 100 м
Выберите вкладку 3D Engine блока Reference Generator. По умолчанию 3D параметром Engine является Disabled. Для 3D требований платформы механизма визуализации и рекомендаций по аппаратным средствам, смотрите 3D Требования Engine Визуализации.
Запустите маневр с настройками по умолчанию. Когда симуляция запускается, информация о транспортном средстве представления.
В окне Vehicle Position просмотрите транспортное средство продольное расстояние как функцию бокового расстояния.
В подсистеме Визуализации откройте Регулировать, Скорость, блок Lat Accel Scope, чтобы отобразить держащийся угол, скорость и поперечное ускорение по сравнению со временем.
Запустите постоянное приложение готовых узлов радиуса с тремя различными скоростями. Остановите симуляцию, если транспортное средство превышает порог поперечного ускорения.5 г.
В постоянной модели CRReferenceApplication
примера готовых узлов радиуса, откройте блок Reference Generator. Параметры блоков Longitudinal velocity reference, xdot_r устанавливают скорость транспортного средства. По умолчанию скорость составляет 30 миль в час.
Включите логгирование сигнала. Выберите блок Reference Generator параметр Stop simulation at lateral acceleration threshold. Можно использовать редактор Simulink® или, альтернативно, команды MATLAB®. Сохраните модель.
Элемент модели | Редактор Simulink |
---|---|
Подсистема визуализации — VehFdbk inport |
|
Подсистема визуализации — блок ISO 15037-1:2006 |
|
Ссылочный блок Generator |
|
В качестве альтернативы используйте эти команды, чтобы включить логгирование сигнала и остановить симуляцию, если транспортное средство превышает предел поперечного ускорения. Сохраните модель.
% Open the model mdl = 'CRReferenceApplication'; open_system(mdl); % Enable signal logging for VehFdbk ph=get_param('CRReferenceApplication/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'); % Set parameter to stop simulation at lateral acceleration threshold set_param([mdl '/Reference Generator'],'cr_ay_stop','on'); save_system(mdl)
Настройте вектор сетбола скорости, xdot_r
, то, что вы хотите заняться расследованиями. Например, в командной строке, введите:
mdl = 'CRReferenceApplication'; open_system(mdl); % Define the set of parameters to sweep vmax = [35, 40, 45]; tfinal = [60, 60, 60]; numExperiments = length(vmax);
Создайте массив входных параметров симуляции, которые устанавливают xdot_r
равняйтесь параметрам блоков Reference Generator.
for idx = numExperiments:-1:1 in(idx) = Simulink.SimulationInput(mdl); in(idx) = in(idx).setBlockParameter([mdl '/Reference Generator'], 'xdot_r', num2str(vmax(idx))); in(idx) = in(idx).setModelParameter('StopTime', num2str(tfinal(idx))); end
Сохраните модель и запустите симуляции. При наличии используйте параллельные вычисления.
save_system(mdl); tic; simout = parsim(in,'ShowSimulationManager','on'); toc;
Импортируйте результаты симуляции Инспектору Данных моделирования.
На панели инструментов Simulink Editor нажмите кнопку Data Inspector.
В Инспекторе Данных моделирования выберите Import. В диалоговом окне Import примите значения по умолчанию и выберите Import.
В диалоговом окне Import очистите logsout
. Выберите simout(1)
, simout(2)
, и simout(3)
. Выберите Import.
Выберите каждый из запусков. Для каждого запуска щелкните правой кнопкой, чтобы переименовать результаты к скорости, которая соответствует симуляции.
Исследуйте результаты в Инспекторе Данных моделирования. Чтобы охарактеризовать поперечное ускорение и регулирование, просмотрите графики результатов симуляции. Например, постройте продольную скорость, поперечное ускорение и угол руля. Результаты похожи на эти графики, которые показывают результаты для трех запусков. Результаты показывают, что самое большое поперечное ускорение происходит, когда скоростью транспортного средства является 45
mph.
Чтобы исследовать результаты далее, используйте эти команды, чтобы извлечь поперечное ускорение, регулируя угол и траекторию транспортного средства от 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; 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;
Результаты похожи на этот график.
Извлеките путь к транспортному средству. Отобразите данные на графике.
% Plot vehicle path 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} = [num2str(vmax(idx)), ' mph']; % 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
Результаты похожи на этот график.
[1] J266_199601. Установившиеся направленные процедуры контрольного теста для легковых автомобилей и легких грузовиков. Варрендэйл, PA: SAE International, 1996.
[2] ISO 4138:2012. Легковые автомобили - Установившееся круговое ведущее поведение - методы тестирования Разомкнутого цикла. ISO (Международная организация по стандартизации), 2012.
Simulink.SimulationInput
| Simulink.SimulationOutput
| polyfit