В этом примере показано, как запустить динамику аппарата с двумя полосами маневра на различных дорожных поверхностях, анализировать устойчивость рыскания транспортного средства и определить успех маневра.
ISO 3888-2 задает маневр двухполосного изменения для проверки производительности транспортного средства по предотвращению препятствий. В тесте драйвер:
Ускоряется, пока транспортное средство не достигнет целевой скорости
Отпускает педаль акселератора
Поворачивает руль, чтобы следовать по пути в левую полосу
Поворачивает руль, чтобы следовать по пути назад в правую полосу
Как правило, конусы помечают контуры маршрута. Если транспортное средство и драйвер могут договориться о маневре, не задев конус, транспортное средство проходит тест.
Для получения дополнительной информации о примере готовых узлов см. Раздел «Маневр смены маршрута»
helpersetupdlc;
1. Откройте блок «Генератор ссылок на изменение маршрута». По умолчанию маневр устанавливается с этими параметрами:
Уставка скорости продольного входа - 35 миль/ч
Ширина транспортного средства - 2 м
Боковые опорные точки останова и боковые опорные данные - Значения, которые задают боковую опорную траекторию как функцию от продольного расстояния
2. В Подсистеме визуализации откройте блок 3D Engine. По умолчанию для параметра 3D Engine задано значение Disabled. Требования к платформе механизма 3D визуализации и рекомендации по оборудованию см. в 3D Требования и ограничения Engine визуализации.
3. Запустите маневр. Когда будет выполняться симуляция, просмотрите информацию о транспортном средстве.
mdl = 'DLCReferenceApplication';
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 4m 10.411s
В окне Положение транспортном средстве просмотрите продольное расстояние транспортного средства как функцию или боковое расстояние.
В Подсистеме визуализации откройте блок возможностей маршрута, чтобы отобразить боковое перемещение как функцию времени. Красные и оранжевые линии помечают контуры конуса. Синяя линия помечает ссылку траекторию, а зеленая - фактическую траекторию. Зеленая линия приближается к красной линии, которая помечает конусы.
В Подсистеме Визуализации, если вы включите окружение визуализации блоков 3D Engine, можно просмотреть ответ транспортного средства в AutoVrtlEnv
окно.
Запустите пример готовых узлов на трех дорожных поверхностях с различными коэффициентами трения. Используйте результаты, чтобы проанализировать устойчивость рыскания и помочь определить успех маневра.
1. В двухполосном режиме изменения примера готовых узлов модели DLCReferenceApplication откройте подсистему Окружения. Коэффициент трения параметров блоков константы значения задает коэффициент трения. По умолчанию коэффициент масштабирования трения 1.0
. Для регулировки трения в каждом временном шаге примера готовых узлов использует коэффициент.
2. Включите регистрацию сигналов для сигналов скорости, маршрута и ISO. Можно использовать редактор Simulink ® или, кроме того, эти команды MATLAB ®. Сохраните модель.
Включите регистрацию сигнала для сигнала Outport Lane генератора ссылки смены маршрута.
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;
[17-Dec-2020 13:57:24] Checking for availability of parallel pool... [17-Dec-2020 13:57:24] Starting Simulink on parallel workers... [17-Dec-2020 13:57:25] Loading project on parallel workers... [17-Dec-2020 13:57:25] Configuring simulation cache folder on parallel workers... [17-Dec-2020 13:57:25] Loading model on parallel workers... [17-Dec-2020 13:57:45] Running simulations... [17-Dec-2020 13:58:19] Completed 1 of 3 simulation runs [17-Dec-2020 13:58:20] Completed 2 of 3 simulation runs [17-Dec-2020 13:59:11] Completed 3 of 3 simulation runs [17-Dec-2020 13:59:11] Cleaning up parallel workers... Elapsed time is 120.449498 seconds.
6. После завершения симуляций закройте окна Данных моделирования Inspector.
Используйте Данные моделирования Inspector, чтобы изучить результаты. Можно использовать пользовательский интерфейс или, кроме того, функции командной строки.
1. Откройте Данные моделирования Inspector. На панели инструментов Simulink, на вкладке Simulation, в разделе Review Results, нажмите Data Inspector.
В Данные моделирования Inspector выберите Import.
В диалоговом окне Импорт очистите logsout
. Выберите simout(1)
, simout(2)
, и simout(3)
. Выберите Импорт.
Используйте Данные моделирования Inspector, чтобы изучить результаты.
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
Результаты аналогичны этим графикам, которые указывают, что скорость рыскания транспортного средства составляет около .66
рад/с, когда коэффициент масштабирования трения равен 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. Легковые автомобили - Тестовый трек для тяжелого маневра с изменением маршрута.