Отслеживайте транспортные средства, используя данные Лидара в Simulink

В этом примере показано, как отслеживать транспортные средства с помощью измерений с датчика лидара, установленного на верхнюю часть автомобиля , оборудованного датчиком. Из-за возможностей высокого разрешения датчика лидара каждый скан с датчика содержит большое число точек, обычно известных как облако точек. Пример иллюстрирует рабочий процесс в Simulink для обработки облака точек и отслеживания объектов. Данные лидары, используемые в этом примере, записываются из сценария движения по шоссе. Вы используете записанные данные для отслеживания транспортных средств с помощью совместного вероятностного трекера (JPDA) и взаимодействия нескольких моделей (IMM). Пример внимательно следует примеру Track Vehicles Using Lidar: From Point Cloud to Track List MATLAB ®.

Setup

Данные лидара, используемые в этом примере, доступны по следующей ссылке: https://ssd.mathworks.com/supportfiles/lidar/data/TrackVehiclesUsingLidarExampleData.zip

Загрузите файлы данных в текущую рабочую папку. Если вы хотите поместить файлы в другую папку, измените имя директории в последующих инструкциях.

% Load the data if unavailable.
if ~exist('lidarData_1.mat','file')
    dataUrl = 'https://ssd.mathworks.com/supportfiles/lidar/data/TrackVehiclesUsingLidarExampleData.zip';
    datasetFolder = fullfile(pwd);
    unzip(dataUrl,datasetFolder);
end

Обзор модели

load_system('TrackVehiclesSimulinkExample');
set_param('TrackVehiclesSimulinkExample','SimulationCommand','update');
open_system('TrackVehiclesSimulinkExample');

Лидар и считыватель данных

Блоки Lidar Data Reader и Image Data Reader реализованы с помощью блока MATLAB System (Simulink). Код для блоков определяется классами helper, HelperLidarDataReader и HelperImageDataReader соответственно. Считыватели изображений и лидарных данных считывают записанные данные из файлов MAT и выводят эталонное изображение и местоположения точек в облаке точек соответственно.

Детектор ограничивающих коробок

Как описано ранее, необработанные данные с датчика содержат большое число точек. Эти необработанные данные должны быть предварительно обработаны для извлечения интересующих объектов, таких как автомобили, велосипедисты и пешеходы. Предварительная обработка выполняется с помощью блока «Детектор ограничивающего прямоугольника». Детектор ограничивающих прямоугольников также реализован как System™ блок MATLAB, заданный классом helper, HelperBoundingBoxDetectorBlock. Он принимает местоположения облака точек как вход и выводит обнаружение ограничивающего прямоугольника, соответствующее препятствиям. Схема показывает процессы, участвующие в модели детектора ограничивающих коробок и функциях Computer Vision Toolbox™, используемых для реализации каждого процесса. Он также показывает параметры блока, которые управляют каждым процессом.

Блок выводит информацию о обнаружениях и сегментации как Simulink.Bus (Simulink) объект с именем detectionBus и segmentationBus. Эти шины создаются в базовом рабочем пространстве с помощью функции helper helperCreateDetectorBus заданный в PreLoadFcn коллбэк. Смотрите Model Callbacks (Simulink) для получения дополнительной информации о функциях обратного вызова.

Алгоритм отслеживания

Алгоритм слежения реализован с помощью совместного вероятностного трекера ассоциации данных (JPDA), который использует подход взаимодействующей множественной модели (IMM) для отслеживания целей. IMM-фильтр реализован helperInitIMMFilter, который задается как параметр «Filter initialization function» блока. В этом примере фильтр IMM сконфигурирован, чтобы использовать две модели, кубоидную модель постоянной скорости и кубоидную модель постоянной скорости поворота. Модели определяют размерности кубоида как константы во время перехода состояния и их оценки эволюционируют во времени во время каскадов коррекции фильтра. Анимация ниже показывает эффект смешения моделей постоянной скорости и постоянной скорости поворота с различными вероятностями во время этапов предсказания фильтра.

IMM-фильтр автоматически вычисляет вероятность каждой модели, когда фильтр исправлен с обнаружениями. Анимация ниже показывает предполагаемую траекторию и вероятность моделей во время события изменения маршрута.

Подробное описание моделей перехода и измерения состояния смотрите в разделе «Целевое состояние и модель измерения датчика» примера MATLAB.

Блок трекера устанавливает флажки «Enable all tracks output» и «Enable detectable track IDs input», чтобы вывести все дорожки из трекера и вычислить их вероятность обнаружения как функцию их состояния.

Вычислите обнаруживаемость

Блок Calculate Detectability реализован с помощью блока Функция MATLAB (Simulink). Блок вычисляет вход Detectable TrackIDs для трекера и выводит его как массив с 2 столбцами. Первый столбец представляет TrackID дорожек, а второй - их вероятность обнаружения датчиком и детектором ограничивающих прямоугольников.

Визуализация

Блок Visualization также реализован с помощью блока MATLAB System и определяется с помощью HelperLidarExampleDisplayBlock. Блок использует RunTimeObject параметр блоков для отображения их выходов. Смотрите Доступ к Блочным Данным во Время Симуляции (Simulink) для получения дополнительной информации о том, как получить доступ к выходам блоков во время симуляции.

Обнаружения и отслеживание объектов шины

Как описано ранее, входы и выходы различных блоков являются объектами шины. Визуализировать структуру каждой шины можно с помощью редактора шин (Simulink). Следующие изображения показывают структуру шины для обнаружений и дорожек.

Обнаружения

The detectionBus выводит вложенный объект шины с 2 элементами, NumDetections и Detections.

Первый элемент, NumDetections, представляет количество обнаружений. Второй элемент Detections является объектом шины фиксированного размера, представляющим все обнаружения. Первый NumDetections элементы объекта шины представляют текущий набор обнаружений. Заметьте, что структура шины аналогична objectDetection класс.

Следы

Магистральная шина аналогична шине обнаружения. Это вложенная шина, где NumTracks определяет количество путей в шине и Tracks задайте фиксированный размер дорожек. Размер дорожек определяется параметрами блоков «Максимальное количество дорожек».

Второй элемент Tracks является объектом шины, заданным как trackBusTracks. Эта шина автоматически создается блоком трекера при помощи имени шины, заданного в качестве префикса. Заметьте, что структура шины аналогична objectTrack класс.

Результаты

Алгоритм детектора и трекера сконфигурирован в точности как пример Track Vehicles Using Lidar: From Point Cloud to Track List MATLAB. После запуска модели можно визуализировать результаты на рисунке. В анимации ниже показаны результаты от 0 до 4 секунд. Дорожки представлены зелеными ограничивающими рамками. Обнаружение ограничивающих прямоугольников представлено оранжевыми ограничивающими прямоугольниками. Обнаружения также имеют оранжевые точки внутри них, представляющие облако точек, сегментированное как препятствия. Сегментированный грунт показан фиолетовым цветом. Обрезанное или сброшенное облако точек показано синим цветом. Заметьте, что отслеживаемые объекты способны поддерживать свою форму и кинематический центр путем позиционирования обнаружений на видимых фрагментах транспортных средств. Это иллюстрирует эффект смещения и усадки, смоделированный в функциях измерения.

close_system('TrackVehiclesSimulinkExample');

Сводные данные

Этот пример показал, как использовать JPDA-трекер с IMM-фильтром для отслеживания объектов с помощью датчика лидара. Вы узнали, как необработанное облако точек может быть предварительно обработано, чтобы сгенерировать обнаружения для обычных трекеров, которые предполагают одно обнаружение на объект в каждом скане датчика. Вы также научились использовать кубоидную модель для описания расширенных объектов, отслеживаемых трекером JPDA.