exponenta event banner

Автоматизация тестирования детектора маркера полосы движения

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

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

  • Автоматизация тестирования алгоритма детектора маркера полосы движения и сформированного кода для алгоритма.

В этом примере используется модель детектора маркера полосы движения, представленная в разделе «Проектирование детектора маркера полосы движения с использованием среды моделирования нереального двигателя» и «Создание кода для примеров детектора маркера полосы движения».

Введение

Детектор маркера полосы движения является фундаментальным компонентом восприятия автоматизированного применения вождения. Детектор анализирует изображения дорог, захваченные с помощью датчика монокулярной камеры, и возвращает информацию о кривизне и типе разметки каждой полосы. Можно спроектировать и смоделировать детектор маркера полосы движения с помощью MATLAB ® или Simulink ®, а затем оценить его точность, используя известную достоверность. Можно настроить моделирование для использования сценариев тестирования, основанных на системных требованиях. Можно интегрировать детектор во внешнюю программную среду и развернуть его на транспортном средстве посредством генерации кода C++. Создание кода и проверка модели Simulink обеспечивают функциональную эквивалентность между моделированием и реализацией в реальном времени. Автоматическое выполнение этих имитаций позволяет выполнить регрессионное тестирование для проверки функциональных возможностей на уровне системы.

Сведения о проектировании детектора маркера полосы движения и создании модели для генерации кода C++ см. в разделах Проектирование детектора маркера полосы движения с использованием среды моделирования нереального двигателя и Создание кода для детектора маркера полосы движения соответственно. В этом примере показано, как автоматизировать тестирование детектора маркера полосы движения и моделей генерации кода по нескольким сценариям с использованием Simulink Test™. Сценарии основаны на системных требованиях. В остальном примере поясняются шаги, связанные с автоматическим тестированием модели детектора маркера полосы движения.

  1. Анализ требований: анализ сценариев тестирования и анализ требований, описывающих условия тестирования.

  2. Анализ модели испытательного стенда: анализ модели испытательного стенда детектора маркера полосы движения, содержащей метрические оценки. Эти метрические оценки объединяют модель испытательного стенда с Simulink Test™ для автоматического тестирования.

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

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

  5. Автоматизация тестирования с помощью сгенерированного кода: настройте обнаружение полосы движения, слияние датчиков, логику принятия решений и компоненты управления для генерации кода C++. Запустите автоматическое тестирование созданного кода и проверьте поведение.

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

В этом примере можно включить моделирование на уровне системы путем интеграции с 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_.

  1. scenario_LF_01_Straight_RightLane - Сценарий прямой дороги с эго-транспортным средством в правой полосе.

  2. scenario_LF_02_Straight_LeftLane - Сценарий прямой дороги с эго-транспортным средством в левой полосе.

  3. scenario_LF_03_Curve_LeftLane - Сценарий криволинейной дороги с эго-транспортным средством в левой полосе.

  4. scenario_LF_04_Curve_RightLane - Сценарий криволинейной дороги с эго-транспортным средством в правой полосе.

  5. scenario_LD_01_ThreeVehicles - Сценарий криволинейной дороги с проезжающим транспортным средством в полосе эго.

  6. 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");

Подсистема метрической оценки выводит:

  1. Метрики левой полосы движения: массив, который содержит количество совпадений (истинных срабатываний), промахов (ложных отрицаний) и несовпадений (ложных срабатываний), вычисленных по результатам обнаружения левой полосы движения.

  2. Состояние левой полосы: логический скаляр, возвращенный как true (1) или false (0). Значение true для совпадений в левой полосе и false для промахов и ложных срабатываний в левой полосе.

  3. Расстояние между левыми полосами: скаляр, задающий среднее значение расстояний между обнаруженной разметкой левой полосы и соответствующей истинностью земли.

  4. Метрики правой полосы движения: массив, содержащий количество совпадений (истинных положительных результатов), промахов (ложных отрицательных результатов) и ложных положительных результатов, вычисленных по результатам обнаружения правой полосы движения.

  5. Состояние правой полосы: возвращено как true или false. Значение true для совпадений в правой полосе и false для промахов и ложных срабатываний в правой полосе.

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

Модель регистрирует выходные результаты из подсистемы оценки метрики в базовой переменной рабочей области. 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).

См. также

Блоки

Связанные темы