В этом примере показано, как запустить маневр изменения двойного маршрута динамики аппарата на различных дорожных покрытиях, анализируйте устойчивость отклонения от курса транспортного средства и определите успех маневра.
ISO 3888-2 задает маневр изменения двойного маршрута, чтобы проверить производительность предотвращения препятствия транспортного средства. В тесте, драйвере:
Ускоряется, пока транспортное средство не врезается в целевую скорость
Отпускает педаль акселератора
Руль поворотов, чтобы следовать за путем в левый маршрут
Руль поворотов, чтобы следовать за путем назад в правильный маршрут
Как правило, конусы отмечают контуры маршрута. Если транспортное средство и драйвер могут согласовать маневр, не врезаясь в конус, транспортное средство проходит тест.
Для получения дополнительной информации о примере готовых узлов, смотрите Маневр Изменения Двойного Маршрута.
helpersetupdlc;
1. Откройте блок Lane Change Reference Generator. По умолчанию маневр установлен этими параметрами:
Продольное скоростное заданное значение входа — 35 миль в час
Ширина транспортного средства — 2 м
Боковые ссылочные точки останова положения и Боковые справочные данные — Значения, которые задают боковую ссылочную траекторию как функцию продольного расстояния
2. В подсистеме Визуализации откройте 3D Блок двигателя. По умолчанию 3D параметр Engine устанавливается на Отключенный. Для 3D требований платформы механизма визуализации и рекомендаций по аппаратным средствам, смотрите 3D Требования Engine Визуализации и Ограничения.
3. Запустите маневр. Когда симуляция запускается, просмотрите информацию о транспортном средстве.
В окне Vehicle Position просмотрите транспортное средство продольное расстояние как функцию или боковое расстояние.
В подсистеме Визуализации откройте блок Lane Change scope, чтобы отобразить боковое смещение как функцию времени. Красная линия отмечает конический контур. Синяя линия отмечает ссылочную траекторию, и зеленая линия отмечает фактическую траекторию. Зеленая линия действительно близко подходит к красной линии, которая отмечает конусы.
В подсистеме Визуализации, если вы включаете 3D среду визуализации Блока двигателя, можно просмотреть ответ транспортного средства в AutoVrtlEnv
окно.
Запустите приложение готовых узлов на трех дорожных покрытиях с различными масштабными коэффициентами трения. Используйте результаты анализировать устойчивость отклонения от курса, и справка определяют успех маневра.
1. В двойном маршруте изменяют модель DLCReferenceApplication примера готовых узлов, открывают подсистему Среды. Постоянное значение параметров блоков Трения задает масштабный коэффициент трения. По умолчанию масштабным коэффициентом трения является 1.0
. Пример готовых узлов использует коэффициент, чтобы настроить трение на каждом временном шаге.
2. Включите логгирование сигнала для скорости, маршрута и сигналов ISO. Можно использовать редактор Simulink® или, альтернативно, эти команды MATLAB®. Сохраните модель.
Включите логгирование сигнала для Дорожного знака выходного порта Генератора Ссылки Изменения Маршрута.
mdl = 'DLCReferenceApplication'; open_system(mdl); 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;
[24-Feb-2020 11:19:31] Checking for availability of parallel pool... Starting parallel pool (parpool) using the 'local' profile ... Preserving jobs with IDs: 13 because they contain crash dump files. You can use 'delete(myCluster.Jobs)' to remove all jobs created with profile local. To create 'myCluster' use 'myCluster = parcluster('local')'. Connected to the parallel pool (number of workers: 6). [24-Feb-2020 11:20:17] Starting Simulink on parallel workers... [24-Feb-2020 11:20:44] Loading project on parallel workers... [24-Feb-2020 11:20:44] Configuring simulation cache folder on parallel workers... [24-Feb-2020 11:20:52] Loading model on parallel workers... [24-Feb-2020 11:21:20] Running simulations... [24-Feb-2020 11:23:19] Completed 1 of 3 simulation runs [24-Feb-2020 11:23:20] Completed 2 of 3 simulation runs [24-Feb-2020 11:23:20] Completed 3 of 3 simulation runs [24-Feb-2020 11:23:20] Cleaning up parallel workers... Elapsed time is 245.716798 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
Результаты похожи на эти графики, которые указывают, что транспортное средство имеет уровень отклонения от курса приблизительно .64
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. Легковые автомобили — Испытательная площадка для серьезного маневра изменения маршрута.