Этот пример показывает, как использовать динамику аппарата постоянный пример готовых узлов радиуса, чтобы анализировать влияние скорости на динамике ответвления автомобиля. А именно, можно исследовать поперечное ускорение, когда вы запускаете маневр с различными скоростями. Для получения информации о подобных маневрах см. стандарты SAE J266_1996011 и ISO 4138:20122.
Во время маневра автомобиль использует прогнозирующую модель драйвера, чтобы поддержать предзаданный радиус поворота в скорости набора.
Для получения дополнительной информации о примере готовых узлов, смотрите Постоянный Маневр Радиуса.
Создайте и откройте рабочую копию постоянного примера готовых узлов радиуса.
Выберите блок Reference Generator. По умолчанию пример готовых узлов использует Прогнозирующий Блок драйверов, чтобы поддержать радиус правого поворота на 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
, равный Ссылочным параметрам блоков Генератора.
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; delete(gcp('nocreate'))
Импортируйте результаты симуляции Инспектору Данных моделирования.
На панели инструментов Simulink Editor нажмите кнопку Simulation 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