В этом примере показано, как автоматизировать тестирование алгоритма детектора маркера полосы движения и сгенерированного кода с помощью Simulink Test™. В этом примере будут выполнены следующие действия:
Оценка поведения алгоритма детектора маркера полосы движения в различных тестовых сценариях с различными требованиями к испытаниям.
Автоматизация тестирования алгоритма детектора маркера полосы движения и сформированного кода для алгоритма.
В этом примере используется модель детектора маркера полосы движения, представленная в разделе «Проектирование детектора маркера полосы движения с использованием среды моделирования нереального двигателя» и «Создание кода для примеров детектора маркера полосы движения».
Детектор маркера полосы движения является фундаментальным компонентом восприятия автоматизированного применения вождения. Детектор анализирует изображения дорог, захваченные с помощью датчика монокулярной камеры, и возвращает информацию о кривизне и типе разметки каждой полосы. Можно спроектировать и смоделировать детектор маркера полосы движения с помощью MATLAB ® или Simulink ®, а затем оценить его точность, используя известную достоверность. Можно настроить моделирование для использования сценариев тестирования, основанных на системных требованиях. Можно интегрировать детектор во внешнюю программную среду и развернуть его на транспортном средстве посредством генерации кода C++. Создание кода и проверка модели Simulink обеспечивают функциональную эквивалентность между моделированием и реализацией в реальном времени. Автоматическое выполнение этих имитаций позволяет выполнить регрессионное тестирование для проверки функциональных возможностей на уровне системы.
Сведения о проектировании детектора маркера полосы движения и создании модели для генерации кода C++ см. в разделах Проектирование детектора маркера полосы движения с использованием среды моделирования нереального двигателя и Создание кода для детектора маркера полосы движения соответственно. В этом примере показано, как автоматизировать тестирование детектора маркера полосы движения и моделей генерации кода по нескольким сценариям с использованием Simulink Test™. Сценарии основаны на системных требованиях. В остальном примере поясняются шаги, связанные с автоматическим тестированием модели детектора маркера полосы движения.
Анализ требований: анализ сценариев тестирования и анализ требований, описывающих условия тестирования.
Анализ модели испытательного стенда: анализ модели испытательного стенда детектора маркера полосы движения, содержащей метрические оценки. Эти метрические оценки объединяют модель испытательного стенда с Simulink Test™ для автоматического тестирования.
Отключить визуализацию во время выполнения: отключить визуализацию во время выполнения, чтобы сократить время выполнения автоматизированного тестирования.
Автоматизация тестирования: настройте диспетчер тестирования для моделирования каждого сценария тестирования, оценки критериев успеха и отчета о результатах. Результаты можно исследовать динамически с помощью диспетчера тестов и экспортировать в PDF для внешних обзоров.
Автоматизация тестирования с помощью сгенерированного кода: настройте обнаружение полосы движения, слияние датчиков, логику принятия решений и компоненты управления для генерации кода C++. Запустите автоматическое тестирование созданного кода и проверьте поведение.
Автоматизация параллельного тестирования: сокращение общего времени выполнения тестов с помощью параллельных вычислений на многоядерном компьютере.
В этом примере можно включить моделирование на уровне системы путем интеграции с Unreal Engine из Epic Games ®. Для среды моделирования 3D требуется 64-разрядная платформа Windows ®.
if ~ispc error("The 3D simulation environment requires a Windows 64-bit platform"); end
Чтобы обеспечить воспроизводимость результатов моделирования, задайте случайное начальное число.
rng(0);
Этот пример содержит шесть тестовых сценариев для анализа модели. Для определения высокоуровневых требований к тестированию для каждого сценария используйте Simulink Requirements™.
Откройте файл требований к тесту.
open('LaneMarkerDetectorTestRequirements.slreqx')
Можно также открыть файл с помощью вкладки Требования (Requirements) приложения Диспетчер требований (Requirements Manager) в Simulink.
На панели отображается информация о тестовых сценариях и требованиях к тестам в текстовом и графическом формате. Для тестирования обнаружения полосы движения в сценариях только с эго-транспортным средством используйте файлы сценариев с префиксом scenario_LF_. Для проверки обнаружения полосы движения на сценариях с другими транспортными средствами на дороге используйте файлы сценариев с префиксом scenario_LD_.
scenario_LF_01_Straight_RightLane - Сценарий прямой дороги с эго-транспортным средством в правой полосе.
scenario_LF_02_Straight_LeftLane - Сценарий прямой дороги с эго-транспортным средством в левой полосе.
scenario_LF_03_Curve_LeftLane - Сценарий криволинейной дороги с эго-транспортным средством в левой полосе.
scenario_LF_04_Curve_RightLane - Сценарий криволинейной дороги с эго-транспортным средством в правой полосе.
scenario_LD_01_ThreeVehicles - Сценарий криволинейной дороги с проезжающим транспортным средством в полосе эго.
scenario_LD_02_SixVehicles - Сценарий кривой дороги с изменением свинцовых транспортных средств в полосе эго.
Эти тестовые сценарии имеют те же имена, что и сценарии, используемые в LaneMarkerDetectorTestBench модель.
В этом примере повторно используется LaneMarkerDetectorTestBench в примере «Создать код для детектора маркера полосы движения».
Откройте модель испытательного стенда.
open_system("LaneMarkerDetectorTestBench");

Эта модель испытательного стенда имеет подсистемы моделирования 3D сценария, детектора маркера полосы движения и оценки показателей.
Для конфигурирования модели испытательного стенда используйте helperSLLaneMarkerDetectorSetup сценарий. Укажите сценарий тестирования в качестве входных данных для сценария установки с помощью scenarioName входной аргумент. Значение для scenarioName должно быть любым из имен сценариев, указанных в тестовых требованиях.
Запустите сценарий установки.
scenarioName = "scenario_LD_02_SixVehicles";
helperSLLaneMarkerDetectorSetup(scenarioName);
Теперь можно моделировать модель и визуализировать результаты. Дополнительные сведения о моделировании и анализе результатов моделирования см. в примере «Проектирование детектора маркера полосы движения с использованием среды моделирования нереального двигателя» и «Создание кода для детектора маркера полосы движения».
Этот пример посвящен автоматизации прогонов моделирования для тестирования детектора маркера полосы движения на различных сценариях вождения с помощью Simulink Test. Подсистема Metrics Assessment интегрирует оценки показателей на уровне системы с Simulink Test с помощью блока Check Static Range (Simulink).
Откройте подсистему оценки метрик.
open_system("LaneMarkerDetectorTestBench/Metrics Assessment");

Подсистема метрической оценки выводит:
Метрики левой полосы движения: массив, который содержит количество совпадений (истинных срабатываний), промахов (ложных отрицаний) и несовпадений (ложных срабатываний), вычисленных по результатам обнаружения левой полосы движения.
Состояние левой полосы: логический скаляр, возвращенный как true (1) или false (0). Значение true для совпадений в левой полосе и false для промахов и ложных срабатываний в левой полосе.
Расстояние между левыми полосами: скаляр, задающий среднее значение расстояний между обнаруженной разметкой левой полосы и соответствующей истинностью земли.
Метрики правой полосы движения: массив, содержащий количество совпадений (истинных положительных результатов), промахов (ложных отрицательных результатов) и ложных положительных результатов, вычисленных по результатам обнаружения правой полосы движения.
Состояние правой полосы: возвращено как true или false. Значение true для совпадений в правой полосе и false для промахов и ложных срабатываний в правой полосе.
Расстояние между правыми полосами: скаляр, задающий среднее значение расстояний между обнаруженными граничными точками правых полос и истинностью земли для правой полосы.
Модель регистрирует выходные результаты из подсистемы оценки метрики в базовой переменной рабочей области. logsout. Можно проверить производительность алгоритма детектора маркера полосы, проверив и выведя на график метрики, вычисленные отдельно для левой и правой полосы.
Отключите визуализацию во время выполнения для подсистемы «Детектор маркеров полос движения».
load_system('LaneMarkerDetector'); blk = 'LaneMarkerDetector/Lane Marker Detector'; set_param(blk,'EnableDisplays','off');
Настройте блок «Simulation 3D Scene Configuration» для запуска Unreal Engine в безголовом режиме, в котором отключено окно моделирования 3D.
blk = ['LaneMarkerDetectorTestBench/Simulation 3D Scenario/', ... 'Simulation 3D Scene Configuration']; set_param(blk,'EnableWindow','off');
Откройте окно LaneMarkerDetectorMetricAssessments.mldatx тестовый файл в диспетчере тестов. Диспетчер тестов настроен для автоматизации тестирования алгоритма детектора маркера полосы движения.
sltestmgr;
sltest.testmanager.load('LaneMarkerDetectorMetricAssessments.mldatx');
Тестовые примеры в Диспетчере тестов связаны с тестовыми требованиями в Редакторе требований. В каждом тестовом случае используется POST-LOAD обратный вызов для запуска сценария установки с соответствующими входами и настройки имени выходного видеофайла. После моделирования тестового случая он вызывает helperGenerateReportForLaneMarkerDetector от CLEAN-UP обратный вызов для создания графиков для результатов обнаружения из подсистемы метрической оценки. Дополнительные сведения об этих графиках см. в разделе Пример создания кода для детектора маркера полосы движения.
Выполните и изучите результаты для одного сценария тестирования:
Для уменьшения количества выходных данных в командном окне отключите сообщения обновления MPC.
mpcverbosity('off');
Тестирование модели системного уровня на scenario_LD_02_SixVehicles сценарий.
testFile = sltest.testmanager.TestFile('LaneMarkerDetectorMetricAssessments.mldatx'); testSuite = getTestSuiteByName(testFile,'Test Scenarios'); testCase = getTestCaseByName(testSuite,'scenario_LD_02_SixVehicles'); resultObj = run(testCase);
Создание протоколов испытаний, полученных после моделирования.
sltest.testmanager.report(resultObj,'Report.pdf',..., 'Title','Lane Marker Detector',... 'IncludeMATLABFigures',true,... 'IncludeErrorMessages',true,... 'IncludeTestResults',0,'LaunchReport',true);
Осмотрите Report.pdf. В разделе Тестовая среда показана платформа, на которой выполняется тест, и версия MATLAB ®, используемая для тестирования. В разделе «Сводка» показаны результаты теста и продолжительность моделирования в секундах. В разделе Результаты (Results) отображаются результаты прохождения или неуспешного завершения на основе критериев оценки и графики, записанные из helperGenerateReportForLaneMarkerDetector функция.
Выполните и изучите результаты для всех сценариев тестирования:
Можно смоделировать систему для выполнения всех тестов с помощью sltest.testmanager.run команда. Можно также нажать кнопку Воспроизведение в приложении Диспетчер тестов.
После завершения моделирования теста результаты всех тестов можно просмотреть на вкладке «Результаты и артефакты» диспетчера тестов. Для каждого тестового случая блоки Check Static Range (Simulink) в модели связаны с диспетчером тестов. Можно визуализировать общие результаты прохождения или отказа.
Созданный отчет можно найти в текущей рабочей папке. Этот отчет содержит подробную сводку статусов прохождения или неуспешного завершения и графики для каждого тестового случая.
Проверьте статус теста в редакторе требований:
Откройте Редактор требований и выберите Показать. Затем выберите Статус проверки, чтобы просмотреть сводку статуса проверки для каждого требования. Зеленая и красная полосы обозначают состояние прохождения и неуспешного завершения моделирования для каждого теста.
LaneMarkerDetectorTestBench модель позволяет протестировать компонент «Детектор маркеров полосы движения». Для выполнения регрессионного тестирования этих компонентов используется проверка программного обеспечения в цикле (SIL). При наличии лицензии Embedded Coder™ Simulink Coder™ можно создать код для компонента детектора маркера полосы движения. Можно проверить, дает ли созданный код результаты, соответствующие требованиям теста.
Установите режим моделирования «Детектор обозначений полос движения» в положение «Программное обеспечение в контуре».
model = 'LaneMarkerDetectorTestBench/Lane Marker Detector'; set_param(model,'SimulationMode','Software-in-the-loop');
Смоделировать систему для всех сценариев тестирования и создать отчет о тестах с помощью команды MATLAB, выполнить sltest.testmanager.run. Созданный отчет используется для просмотра графиков и результатов испытаний.
Снова включите сообщения обновления MPC.
mpcverbosity('on');
При наличии лицензии Parallel Computing Toolbox™ можно настроить диспетчер тестов на параллельное выполнение тестов с использованием параллельного пула. Для параллельного выполнения тестов отключите визуализацию во время выполнения и сохраните модели с помощью save_system('LaneMarkerDetector') и save_system('LaneMarkerDetectorTestBench'). Test Manager использует кластер Parallel Computing Toolbox по умолчанию и выполняет тесты только на локальном компьютере. Выполнение тестов параллельно ускоряет выполнение и уменьшает время, необходимое для тестирования. Дополнительные сведения о параллельной настройке тестов с помощью диспетчера тестов см. в разделе Запуск тестов с помощью параллельного выполнения (Simulink Test).