Автоматизируйте тестирование на магистральный маршрут после контроллера

В этом примере показано, как автоматизировать тестирование маршрута после контроллера и сгенерированного кода для этого компонента при помощи Simulink® Test™. В этом примере, вас:

  • Оцените поведение маршрута после контроллера на различных сценариях тестирования с различными тестовыми требованиями.

  • Автоматизируйте тестирование маршрута после контроллера и сгенерированного кода для образца модели.

Этот пример использует маршрут после контроллера, представленного в Сгенерировать Коде для Хайвея Лейна, Следующего примеру Контроллера.

Введение

Маршрут после контроллера является основным компонентом в магистральном маршруте после приложений. Маршрут после контроллера генерирует держащийся угол и ускоряющие команды управления для автомобиля, оборудованного датчиком при помощи маршрута и информации о транспортном средстве наряду со скоростью набора. Для получения дополнительной информации о том, как спроектировать маршрут после контроллера и сконфигурировать модель для генерации Кода С++, см. Сгенерировать Код для Хайвея Лейна, Следующего примеру Контроллера.

В этом примере показано, как автоматизировать тестирование маршрута после контроллера против нескольких сценариев при помощи Simulink Test. Сценарии основаны на требованиях уровня системы. Это также показывает, как можно проверить программное обеспечение использования сгенерированного кода в цикле (SIL) симуляция. В этом примере, вас:

  1. Рассмотрите требования — требования описывают условия испытания уровня системы. Используйте сценарии тестирования симуляции, чтобы представлять эти условия.

  2. Рассмотрите тестовую модель — модель содержит средства управления, динамику аппарата и метрики, чтобы оценить функциональность. Метрические оценки интегрируют тестовую модель с Simulink Test для автоматизированного тестирования.

  3. Отключите визуализацию во время выполнения — Отключают визуализацию во время выполнения, чтобы уменьшать время выполнения для автоматизированного тестирования.

  4. Автоматизируйте тестирование — Конфигурируют менеджера по тесту, чтобы симулировать каждый сценарий тестирования, оценить критерии успеха и результаты отчета. Исследуйте результаты динамически в менеджере по тесту и экспортируйте их в PDF для внешних рецензентов.

  5. Автоматизируйте тестирование со сгенерированным кодом — Конфигурируют логику решения, и управляет компонентами, чтобы сгенерировать Код С++. Запустите автоматизированное тестирование на сгенерированном коде, чтобы проверить поведение.

  6. Автоматизируйте тестирование параллельно — Уменьшают полное время выполнения для того, чтобы запустить тесты при помощи параллельных вычислений на многоядерном компьютере.

В этом примере вы включаете симуляцию уровня системы посредством интеграции с Нереальным Engine® от Epic Games®. 3D среда симуляции требует Windows® 64-битная платформа.

if ~ispc
    error(['3D simulation is supported only on Microsoft',char(174),' Windows',char(174),'.'])
end

Рассмотрите требования

Чтобы исследовать требования, откройте рабочую копию файлов проекта в качестве примера. MATLAB® копирует файлы в папку в качестве примера так, чтобы можно было отредактировать их.

addpath(fullfile(matlabroot,"toolbox","driving","drivingdemos"))
helperDrivingProjectSetup("HLFController.zip",workDir=pwd)

Simulink Requirements™ включает вас автору, анализируйте и управляйте требованиями в Simulink. Этот пример содержит 12 сценариев тестирования с высокоуровневыми требованиями тестирования, заданными для каждого сценария. Откройте набор требования.

open("HighwayLaneFollowingControllerTestRequirements.slreqx")

В качестве альтернативы можно открыть файл от вкладки Requirements менеджера по Требованиям приложение в Simulink.

Каждая строка в этом файле задает требования тестирования маршрута после компонента контроллера в текстовых и графических форматах. Сценарии с scenario_LF_ префикс позволяет вам протестировать маршрут после алгоритма регулятора без преграды другими транспортными средствами. Сценарии с scenario_ACC_ префикс позволяет вам протестировать поведение адаптивного круиз-контроля (ACC) с другими транспортными средствами на дороге. Сценарии с scenario_LFACC_ префикс позволяет вам протестировать маршрут после и поведение ACC с другими транспортными средствами на дороге.

  • scenario_LF_01_Straight_RightLane — Прямой дорожный сценарий с автомобилем, оборудованным датчиком в правильном маршруте.

  • scenario_LF_02_Straight_LeftLane — Прямой дорожный сценарий с автомобилем, оборудованным датчиком в левом маршруте.

  • scenario_LF_03_Curve_LeftLane — Кривой дорожный сценарий с автомобилем, оборудованным датчиком в левом маршруте.

  • scenario_LF_04_Curve_RightLane — Кривой дорожный сценарий с автомобилем, оборудованным датчиком в правильном маршруте.

  • scenario_ACC_01_Straight_TargetDiscriminationTest — Прямой дорожный сценарий с двумя целевыми транспортными средствами, один в маршруте эго и другом в смежном маршруте. Этот сценарий тестирует способность автомобиля, оборудованного датчиком идентифицировать ведущее транспортное средство, когда существует другое целевое транспортное средство, которое перемещается смежное с ведущим транспортным средством с той же скоростью.

  • scenario_ACC_02_Straight_StopnGo — Прямой дорожный сценарий с замедляющимся ведущим транспортным средством в маршруте эго.

  • scenario_LFACC_01_Curve_DecelTarget — Кривой дорожный сценарий с замедляющимся ведущим транспортным средством в маршруте эго.

  • scenario_LFACC_02_Curve_AutoRetarget — Кривой дорожный сценарий с изменяющимися ведущими транспортными средствами в маршруте эго. Этот сценарий тестирует способность автомобиля, оборудованного датчиком перенастроить к новому ведущему транспортному средству при езде по кривой.

  • scenario_LFACC_03_Curve_StopnGo — Кривой дорожный сценарий с ведущим транспортным средством, замедляющимся в маршруте эго.

  • scenario_LFACC_04_Curve_CutInOut — Кривой дорожный сценарий со стремительным автомобилем в смежном маршруте, который сокращает в маршрут эго, и затем отключает от маршрута эго.

  • scenario_LFACC_05_Curve_CutInOut_TooClose — Кривой дорожный сценарий со стремительным автомобилем в смежном маршруте, который сокращает в маршрут эго и настойчиво отключает от маршрута эго.

  • scenario_LFACC_06_Straight_StopandGoLeadCar — Прямой дорожный сценарий со сломанным транспортным средством в маршруте эго.

Рассмотрите тестовую модель

Откройте тестовую модель.

open_system("HighwayLaneFollowingControllerTestBench")

Тестовая модель содержит эти подсистемы:

  • Simulation 3D Scenario — Задает дорогу, транспортные средства и генератор обнаружения видения, используемый для симуляции.

  • Lane Following Decision Logic — Задает боковую и продольную логику решения и предоставляет информацию о центре маршрута и сопутствующую информацию самого важного объекта (MIO) контроллеру.

  • Lane Following Controller — Задает контроллер следования траектории, который генерирует команды управления, чтобы регулировать автомобиль, оборудованный датчиком.

  • Vehicle Dynamics — Задает динамическую модель для автомобиля, оборудованного датчиком.

  • Metrics Assessment — Оценивает поведение уровня системы.

Simulation 3D Scenario, Lane Following Decision Logic, Lane Following Controller, Vehicle Dynamics, и Metrics Assessment подсистемы основаны на подсистемах, используемых в Сгенерировать Коде для Хайвея Лейна, Следующего примеру Контроллера.

В этом примере особое внимание находится на автоматизации запусков симуляции для этой тестовой модели с помощью Simulink Test для различных сценариев тестирования. Metrics Assessment подсистема включает интегрирование метрических оценок уровня системы с Simulink Test. Эта подсистема использует Проверку Статическая Область значений (Simulink) блоки для этого интегрирования. Откройте Metrics Assessment подсистема.

open_system("HighwayLaneFollowingControllerTestBench/Metrics Assessment")

В этом примере четыре метрики используются, чтобы оценить маршрут после системы.

  • Verify Lateral Deviation — Этот блок проверяет, что боковое отклонение от центральной линии маршрута в предписанных порогах для соответствующего сценария. Задайте пороги, когда вы создадите сценарий тестирования.

  • Verify In Lane — Этот блок проверяет, что автомобиль, оборудованный датчиком следует за одним из маршрутов на дороге в течение симуляции.

  • Verify Time gap — Этот блок проверяет, что разрыв времени между автомобилем, оборудованным датчиком и ведущим транспортным средством составляет больше чем 0,8 секунды. Разрыв времени между этими двумя транспортными средствами задан как отношение расчетного расстояния прогресса до скорости автомобиля, оборудованного датчиком.

  • Verify No Collision — Этот блок проверяет, что автомобиль, оборудованный датчиком не сталкивается с ведущим транспортным средством ни в какой точке во время симуляции.

Отключите визуализацию во время выполнения

Тестовая модель уровня системы открывает Нереальное окно симуляции Engine для визуализации сценария. Это окно не требуется, когда тесты автоматизированы.

Конфигурируйте Моделирование 3D Блок Configuration Сцены, чтобы запустить Нереальный Engine в бездисплейном режиме, где 3D окно симуляции отключено.

blk = "HighwayLaneFollowingControllerTestBench/Simulation 3D Scenario/Simulation 3D Scene Configuration";
set_param(blk,EnableWindow="off");

Автоматизируйте тестирование

Менеджер по Тесту сконфигурирован, чтобы автоматизировать тестирование маршрута после компонента контроллера. Откройте HighwayLaneFollowingControllerMetricAssessments.mldatx тестовый файл в менеджере по Тесту.

sltestmgr
sltest.testmanager.load("HighwayLaneFollowingControllerMetricAssessments.mldatx");

Наблюдайте заполненные тесты, ранее созданные в этом файле. Эти тесты сконфигурированы, чтобы запустить модель.

Каждый тест использует коллбэк POST-LOAD, чтобы запустить скрипт настройки с соответствующими входными параметрами. После симуляции каждого теста менеджер по Тесту запускает скрипт от коллбэка ОЧИСТКИ, чтобы сгенерировать графики результатов.

Запустите и исследуйте результаты для одного сценария тестирования

Выключите сообщения обновления о прогнозирующих объектах управления модели.

mpcverbosity("off");

Протестируйте системную модель с scenario_LFACC_03_Curve_StopnGo сценарий тестирования от Simulink Test.

testFile = sltest.testmanager.load("HighwayLaneFollowingControllerMetricAssessments.mldatx");
testSuite = getTestSuiteByName(testFile,"Test Scenarios");
testCase = getTestCaseByName(testSuite,"scenario_LFACC_03_Curve_StopnGo");
resultObj = run(testCase);

Сгенерируйте отчет после симуляции.

sltest.testmanager.report(resultObj,"Report.pdf", ...
Title="Highway Lane Following Controller", ...
IncludeMATLABFigures=true, ...
IncludeErrorMessages=true, ...
IncludeTestResults=false, ...
LaunchReport=true);

Исследуйте Report.pdf. Заметьте что Test environment разделите показывает платформу, на которой запущен тест, и версия MATLAB используется для тестирования. Summary разделите показывает результат теста и длительность симуляции в секундах. Results разделите показывает передачу или результаты сбоя на основе критериев оценки. Этот раздел также показывает регистрируемые графики от команд коллбэка ОЧИСТКИ.

Если у вас есть лицензия на Simulink Coverage™, можно получить результаты покрытия в сгенерированном Report.pdf путем включения настроек покрытия в менеджере по Тесту файл. Для получения дополнительной информации смотрите раздел Coverage Settings в Specify Test Properties в менеджере по Тесту (Simulink Test). Можно использовать данные о покрытии, чтобы найти разрывы в тестировании, недостающих требованиях или непредусмотренной функциональности.

Запустите и исследуйте результаты для всех сценариев тестирования

Симулируйте систему для всех тестов при помощи run(testFile) команда. В качестве альтернативы можно симулировать систему путем выбора Play в менеджере по Тесту приложение.

Когда тестовые симуляции завершены, можно просмотреть результаты испытаний во вкладке Results и Artifacts менеджера по Тесту. Для каждого теста Проверка Статическая Область значений (Simulink) блоки в модели сопоставлены с менеджером по Тесту. Эта ассоциация позволяет визуализированию полной передачи или результатов сбоя.

Можно найти сгенерированный отчет в текущей рабочей директории. Этот отчет содержит подробные сводные данные передачи или состояний сбоя и графиков для каждого теста.

Проверьте тестовое состояние в редакторе требований

Откройте Редактор Требований и выберите Display. Затем выберите Verification Status, чтобы видеть сводные данные состояния верификации для каждого требования. Зеленые и красные панели указывают на соответствующую передачу или состояние сбоя результатов симуляции для каждого теста.

Автоматизируйте тестирование со сгенерированным кодом

HighwayLaneFollowingControllerTestBench модель позволяет вам проверить сгенерированный код путем выполнения тестирования эквивалентности на Lane Following Decision Logic и Lane Following Controller компоненты в разомкнутом контуре. Чтобы выполнить эквивалентное тестирование этих компонентов, используйте спина к спине тестирование. Компенсационные тесты сравнивают результаты нормальных симуляций с результатами сгенерированного кода программного обеспечения в цикле, процессора в цикле или аппаратно-программного моделирования. Для получения дополнительной информации смотрите sltest.testmanager.createTestForComponent (Simulink Test). Этот пример фокусируется на проверке Lane Following Controller.

Используйте эти шаги, чтобы создать и запустить эквивалентный тест для Lane Following Controller.

1. Выберите сценарий тестирования и запустите скрипт настройки.

helperSLHighwayLaneFollowingControllerSetup(scenarioFcnName="scenario_LFACC_03_Curve_StopnGo");

2. Создайте объект тестового набора.

testSuite = getTestSuiteByName(testFile,"LaneFollowingControllerEquivalenceTest");
if isempty(testSuite)
    testSuite = sltest.testmanager.TestSuite(testFile,"LaneFollowingControllerEquivalenceTest");
end

3. Создайте эквивалентный тест для компонента.

testCase = sltest.testmanager.createTestForComponent("TestFile",testSuite, ...
    "Component","HighwayLaneFollowingControllerTestBench/Lane Following Controller", ...
    TestType="equivalence",Simulation1Mode="Normal", ...
    Simulation2Mode="Software-in-the-Loop (SIL)",UseComponentInputs=false, ...
    HarnessOptions={"LogOutputs",true});

Тестовая обвязка создается по умолчанию на предыдущем шаге. Найдите и откройте тестовую обвязку.

harnessList = sltest.harness.find("HighwayLaneFollowingControllerTestBench/Lane Following Controller");
sltest.harness.open("HighwayLaneFollowingControllerTestBench/Lane Following Controller",harnessList(end).name);

4. Установите погрешность для эквивалентного теста.

Получите эквивалентные критерии.

eq = captureEquivalenceCriteria(testCase);

Установите эквивалентную погрешность критериев для выходных сигналов.

sc = getSignalCriteria(eq);
for i=1:size(sc,2)
    if (strcmp(sc(i).Name,"steering_angle") || strcmp(sc(i).Name,"ego_acceleration"))
        sc(i).AbsTol = sqrt(eps("double"));
    else
        sc(i).Enabled = false;
    end
end

5. Запустите эквивалентную тестовую симуляцию.

run(testCase);

6. Просмотрите результаты испытаний после того, как симуляция завершится. Выберите вкладку Results и Artifacts менеджера по Тесту или введите эту команду.

sltest.testmanager.view;

Вкладка показывает передачу или результаты сбоя на основе критериев оценки. Можно использовать этот процесс, чтобы создать эквивалентные тесты для других сценариев тестирования также.

Этот процесс показал вам, как создать и запустить эквивалентный тест программно. Можно также сделать это графически путем выполнения шагов, объясненных в Создавании и Запущенных Компенсационный Тест (Simulink Test) пример.

HighwayLaneFollowingControllerTestBench модель также включает интегрированное тестирование Lane Following Decision Logic и Lane Following Controller компоненты с Vehicle Dynamics в с обратной связью. Регрессионное тестирование этих компонентов посредством верификации SIL позволяет вам идентифицировать любые проблемы в уровне системы. Этот рабочий процесс позволяет вам проверить, что сгенерированный код производит ожидаемые результаты, которые совпадают с требованиями уровня системы в течение симуляции.

Установите Lane Following Decision Logic запускаться в программном обеспечении в режиме цикла.

model = "HighwayLaneFollowingControllerTestBench/Lane Following Decision Logic";
set_param(model,SimulationMode="Software-in-the-loop")

Установите Lane Following Controller запускаться в программном обеспечении в режиме цикла.

model = "HighwayLaneFollowingControllerTestBench/Lane Following Controller";
set_param(model,SimulationMode="Software-in-the-loop")

Используйте run(testFile) команда, чтобы симулировать систему для всех сценариев тестирования. После того, как тесты завершены, рассматривают графики и результаты в сгенерированном отчете. Если у вас есть лицензия на Simulink Coverage, можно также получить анализ покрытия кода для сгенерированного кода в сгенерированном отчете путем включения настроек покрытия в менеджере по Тесту файл.

Можно визуализировать результаты покрытия для отдельных тестов, а также агрегированные результаты покрытия.

Повторно включите сообщения обновления MPC.

mpcverbosity("on");

Автоматизируйте тестирование параллельно

Если у вас есть лицензия Parallel Computing Toolbox™, то можно сконфигурировать менеджера по Тесту, чтобы выполнить тесты в параллели с помощью параллельного пула. Чтобы запустить тесты параллельно, сохраните модели после отключения визуализации во время выполнения с помощью save_system("HighwayLaneFollowingControllerTestBench"). Протестируйте менеджера, использует кластер Parallel Computing Toolbox по умолчанию и выполняет тесты только на локальной машине. Запущение тестов параллельно может ускорить выполнение и уменьшить количество времени, которое это занимает, чтобы получить результаты испытаний. Для получения дополнительной информации о том, как сконфигурировать тесты параллельно от менеджера по Тесту, смотрите, что Тесты Запуска Используют Параллельное Выполнение (Simulink Test).

Похожие темы