Этот пример показывает, как использовать динамику аппарата, медленно увеличивающуюся регулирующий пример готовых узлов, чтобы анализировать влияние держащегося угла и скорости на обработке автомобиля. А именно, можно вычислить держащееся усиление, когда вы запускаете маневр с различными сетболами скорости.
На основе постоянной скорости переменная регулирует тест, заданный в SAE J2661, медленно руководящий маневр увеличения помогает охарактеризовать боковую динамику автомобиля. В тесте, драйвере:
Ускоряется, пока автомобиль не врезается в целевую скорость.
Поддерживает целевую скорость.
Линейно увеличивает угол руля от 0 градусов до максимального угла.
Поддерживает угол руля в течение требуемого времени.
Линейно уменьшает угол руля от максимального угла до 0 градусов.
Для получения дополнительной информации о примере готовых узлов, смотрите Медленно Руководящий Маневр Увеличения.
Создайте и откройте рабочую копию увеличения, регулирующего пример готовых узлов.
Откройте блок Slowly Increasing Steer. По умолчанию маневр установлен с этими параметрами:
Longitudinal speed setpoint — 50 миль в час
Handwheel rate — 13,5 градусов
Maximum handwheel angle — 270 градусов
Откройте подсистему Визуализации. По умолчанию 3D Engine установлен с 3D отключенным механизмом визуализации. Для 3D требований платформы механизма визуализации и рекомендаций по аппаратным средствам, смотрите 3D Требования Engine Визуализации.
Запустите маневр с настройками по умолчанию. Когда симуляция запускается, информация об автомобиле представления.
В окне Vehicle Position просмотрите автомобиль продольное расстояние как функцию бокового расстояния.
В подсистеме Визуализации откройте Уровень Отклонения от курса и блок Steer Scope, чтобы отобразить уровень отклонения от курса и держащийся угол по сравнению со временем:
Желтая строка — уровень Отклонения от курса
Синие строки — Держащийся угол
Синяя строка показывает линейно увеличение и уменьшение держащегося угла.
Запустите медленно увеличение, регулирующее угловой пример готовых узлов с тремя различными сетболами скорости.
В медленном увеличении, регулирующем модель ISReferenceApplication
примера готовых узлов, откройте блок Slowly Increasing Steer. Параметры блоков Longitudinal speed set point, xdot_r устанавливают скорость автомобиля. По умолчанию скоростью является 50
mph.
В подсистеме Визуализации включите журналирование сигнала для этих элементов модели. Отключите 3D среду визуализации. Можно использовать редактор Simulink® или, альтернативно, команды MATLAB®. Сохраните модель.
Элемент модели | Редактор Simulink |
---|---|
VehFdbk inport |
|
Блок ISO 15037-1:2006 |
|
3D Блок двигателя |
|
Также используйте эти команды, чтобы включить журналирование сигнала, отключить 3D среду визуализации и сохранить модель.
% Open the model mdl = 'ISReferenceApplication'; open_system(mdl); % Enable signal logging for VehFdbk ph=get_param('ISReferenceApplication/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'); % Disable 3D environment set_param([mdl '/Visualization/3D Engine'],'engine3D','Disabled'); save_system(mdl)
Настройте вектор сетбола скорости, xdot_r
, который вы хотите исследовать. Например, в командной строке, введите:
mdl = 'ISReferenceApplication'; open_system(mdl); % Define the set of parameters to sweep vmax = [40, 50, 60]; 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 '/Slowly Increasing Steer'], '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.
Выберите каждое из выполнений. Для каждого выполнения щелкните правой кнопкой, чтобы переименовать результаты к скорости, которая соответствует симуляции. Запуститесь 1, соответствует симуляции с настройками по умолчанию.
Исследуйте результаты в Инспекторе Данных моделирования. Чтобы охарактеризовать регулирование, просмотрите графики результатов симуляции. Например, постройте продольную скорость, угол руля, поперечное ускорение, продольное положение, X
, и боковое положение, Y
. Результаты подобны этим графикам, которые показывают результаты для выполнений 2, 3, и 4. Результаты показывают, что самое большое поперечное ускорение происходит, когда скоростью автомобиля является 60
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] SAE J266. Установившиеся направленные процедуры контрольного теста для легковых автомобилей и легких грузовиков. Варрендэйл, PA: SAE International, 1996.
Simulink.SimulationInput
| Simulink.SimulationOutput
| polyfit