В этом примере показано, как запустить маневр изменения двойного маршрута динамики аппарата на различных дорожных покрытиях, анализируйте устойчивость рыскания транспортного средства и определите успех маневра.
ISO 3888-2 задает маневр изменения двойного маршрута, чтобы проверить производительность предотвращения препятствия транспортного средства. В тесте, драйвере:
Ускоряется, пока транспортное средство не врезается в целевую скорость
Отпускает педаль акселератора
Руль поворотов, чтобы следовать за путем в левый маршрут
Руль поворотов, чтобы следовать за путем назад в правильный маршрут
Как правило, конусы отмечают контуры маршрута. Если транспортное средство и драйвер могут согласовать маневр, не врезаясь в конус, транспортное средство проходит тест.
Для получения дополнительной информации о примере готовых узлов, смотрите Маневр Изменения Двойного Маршрута.
helpersetupdlc;
1. Откройте блок Lane Change Reference Generator. По умолчанию маневр установлен этими параметрами:
Продольное скоростное заданное значение входа — 35 миль в час
Ширина транспортного средства — 2 м
Боковые ссылочные точки останова положения и Боковые справочные данные — Значения, которые задают боковую ссылочную траекторию в зависимости от продольного расстояния
2. В подсистеме Визуализации откройте 3D Блок двигателя. По умолчанию 3D параметр Engine устанавливается на Отключенный. Для 3D требований платформы механизма визуализации и рекомендаций по аппаратным средствам, смотрите Нереальные Требования Среды симуляции Engine и Ограничения.
3. Запустите маневр. Когда симуляция запускается, просмотрите информацию о транспортном средстве.
mdl = 'DLCReferenceApplication';
sim(mdl);
### Starting serial model reference simulation build ### 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 5m 23.197s
В окне Vehicle Position просмотрите транспортное средство продольное расстояние как функцию или боковое расстояние.
В подсистеме Визуализации откройте блок Lane Change scope, чтобы отобразить боковое смещение в зависимости от времени. Красные и оранжевые линии отмечают конические контуры. Синяя линия отмечает ссылочную траекторию, и зеленая линия отмечает фактическую траекторию. Зеленая линия действительно близко подходит к красной линии, которая отмечает конусы.
В подсистеме Визуализации, если вы включаете 3D среду визуализации Блока двигателя, можно просмотреть ответ транспортного средства в AutoVrtlEnv
окно.
Запустите приложение готовых узлов на трех дорожных покрытиях с различными масштабными коэффициентами трения. Используйте результаты анализировать устойчивость рыскания, и справка определяют успех маневра.
1. В двойном маршруте изменяют модель DLCReferenceApplication примера готовых узлов, открывают подсистему Среды. Постоянное значение параметров блоков Трения задает масштабный коэффициент трения. По умолчанию масштабным коэффициентом трения является 1.0
. Пример готовых узлов использует коэффициент, чтобы настроить трение на каждом временном шаге.
2. Включите логгирование сигнала для скорости, маршрута и сигналов ISO. Можно использовать редактор Simulink® или, альтернативно, эти команды MATLAB®. Сохраните модель.
Включите логгирование сигнала для Дорожного знака выходного порта Генератора Ссылки Изменения Маршрута.
mdl = 'DLCReferenceApplication'; ph=get_param('DLCReferenceApplication/Lane Change Reference Generator','PortHandles'); set_param(ph.Outport(1),'DataLogging','on');
Включите логгирование сигнала для сигнала выходного порта блока Passenger Vehicle.
ph=get_param('DLCReferenceApplication/Passenger Vehicle','PortHandles'); set_param(ph.Outport(1),'DataLogging','on');
В подсистеме Визуализации включите логгирование сигнала для блока ISO.
set_param([mdl '/Visualization/ISO 15037-1:2006'],'Measurement','Enable');
3. Настройте вектор с масштабными коэффициентами трения, lambdamu
, то, что вы хотите заняться расследованиями. Например, чтобы исследовать масштабные коэффициенты трения равняются 0.9
, 0.95, и
1.0
, в командной строке войдите:
lambdamu = [0.9, 0.95, 1.0]; numExperiments = length(lambdamu);
4. Создайте массив входных параметров симуляции, который устанавливает lambdamu
равняйтесь Трению постоянным параметрам блоков.
for idx = numExperiments:-1:1 in(idx) = Simulink.SimulationInput(mdl); in(idx) = in(idx).setBlockParameter([mdl '/Environment/Friction'],... 'Value',['ones(4,1).*',num2str(lambdamu(idx))]); end
5. Установите время остановки симуляции в 25 с. Сохраните модель и запустите симуляции. При наличии используйте параллельные вычисления.
set_param(mdl,'StopTime','25') save_system(mdl) tic; simout = parsim(in,'ShowSimulationManager','on'); toc;
[08-Jul-2021 10:11:51] Checking for availability of parallel pool... [08-Jul-2021 10:11:51] Starting Simulink on parallel workers... [08-Jul-2021 10:11:53] Loading project on parallel workers... [08-Jul-2021 10:11:53] Configuring simulation cache folder on parallel workers... [08-Jul-2021 10:11:53] Loading model on parallel workers... [08-Jul-2021 10:12:13] Running simulations... [08-Jul-2021 10:12:41] Completed 1 of 3 simulation runs [08-Jul-2021 10:12:42] Completed 2 of 3 simulation runs [08-Jul-2021 10:14:12] Completed 3 of 3 simulation runs [08-Jul-2021 10:14:13] Cleaning up parallel workers... Elapsed time is 151.636393 seconds.
6. После завершенных симуляций закройте окна Simulation Data Inspector.
Используйте Инспектора Данных моделирования, чтобы исследовать результаты. Можно использовать пользовательский интерфейс или, альтернативно, функции командной строки.
1. Откройте Инспектора Данных моделирования. На Панели инструментов Simulink, на вкладке Simulation, рассматриваемых Результатах, нажимают Data Inspector.
В Инспекторе Данных моделирования выберите Import.
В диалоговом окне Import очистите logsout
. Выберите simout(1)
, simout(2)
, и simout(3)
. Выберите Import.
Используйте Инспектора Данных моделирования, чтобы исследовать результаты.
2. В качестве альтернативы используйте эти команды MATLAB, чтобы создать 6 графиков. Первые три графика отмечают верхний контур маршрута, UB
, более низкий контур маршрута, LB
, и боковое расстояние транспортного средства, Y
, для каждого запуска.
Следующие три графика обеспечивают поперечное ускорение, ay
, боковое расстояние транспортного средства, Y
, и уровень рыскания, r
, для каждого запуска.
for idx = 1:numExperiments % Create sdi run object simoutRun(idx)=Simulink.sdi.Run.create; simoutRun(idx).Name=['lambdamu = ', num2str(lambdamu(idx))]; add(simoutRun(idx),'vars',simout(idx)); end sigcolor=[1 0 0]; for idx = 1:numExperiments % Extract the maneuver upper and lower lane boundaries ubsignal(idx)=getSignalByIndex(simoutRun(idx),1); ubsignal(idx).LineColor = sigcolor; lbsignal(idx)=getSignalByIndex(simoutRun(idx),2); lbsignal(idx).LineColor = sigcolor; end sigcolor=[0 1 0;0 0 1;1 0 1]; for idx = 1:numExperiments % Extract the lateral acceleration, position, and yaw rate ysignal(idx)=getSignalByIndex(simoutRun(idx),27); ysignal(idx).LineColor =sigcolor((idx),:); rsignal(idx)=getSignalByIndex(simoutRun(idx),77); rsignal(idx).LineColor =sigcolor((idx),:); asignal(idx)=getSignalByIndex(simoutRun(idx),79); asignal(idx).LineColor =sigcolor((idx),:); end Simulink.sdi.view Simulink.sdi.setSubPlotLayout(numExperiments,2); for idx = 1:numExperiments % Plot the lateral position and lane boundaries plotOnSubPlot(ubsignal(idx),(idx),1,true); plotOnSubPlot(lbsignal(idx),(idx),1,true); plotOnSubPlot(ysignal(idx),(idx),1,true); end for idx = 1:numExperiments % Plot the lateral acceleration, position, and yaw rate plotOnSubPlot(asignal(idx),1,2,true); plotOnSubPlot(ysignal(idx),2,2,true); plotOnSubPlot(rsignal(idx),3,2,true); end
Результаты похожи на эти графики, которые указывают, что транспортное средство имеет уровень рыскания приблизительно .6
rad/s, когда масштабный коэффициент трения равен 1
.
Чтобы исследовать результаты далее, используйте эти команды, чтобы извлечь поперечное ускорение, регулируя угол и траекторию транспортного средства от simout
объект.
1. Извлеките поперечное ускорение и держащийся угол. Отобразите данные на графике. Результаты похожи на этот график. Они указывают, что самое большое поперечное ускорение происходит, когда масштабным коэффициентом трения является 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; legend_labels{idx} = ['lambdamu = ', num2str(lambdamu(idx))]; % 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. Извлеките путь к транспортному средству. Отобразите данные на графике. Результаты похожи на этот график. Они указывают, что самое большое боковое положение транспортного средства происходит, когда масштабным коэффициентом трения является 0.9
.
figure for idx = 1:numExperiments % Extract Data log = get(simout(idx),'logsout'); x = log{3}.Values.Body.InertFrm.Cg.Disp.X.Data; y = log{3}.Values.Body.InertFrm.Cg.Disp.Y.Data; legend_labels{idx} = ['lambdamu = ', num2str(lambdamu(idx))]; % Plot vehicle location 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
Simulink.SimulationInput
| Simulink.SimulationOutput
[1] ISO 3888-2: 2011. Легковые автомобили — Испытательная площадка для серьезного маневра изменения маршрута.