exponenta event banner

Расширенное отслеживание объектов автотранспортных средств с помощью радара и камеры

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

Введение

В обычных подходах отслеживания, таких как глобальный ближайший сосед (multiObjectTracker, trackerGNN), совместная вероятностная ассоциация данных (trackerJPDA) и отслеживание нескольких гипотез (trackerTOMHT), предполагается, что отслеживаемые объекты возвращают по одному обнаружению на сканирование датчика. С развитием датчиков, которые имеют лучшее разрешение, таких как радар высокого разрешения, датчики обычно возвращают более одного обнаружения объекта. Например, изображение ниже изображает множество обнаружений для одного транспортного средства, которое охватывает множество ячеек разрешения радара. В таких случаях метод, используемый для отслеживания объектов, известен как расширенное отслеживание объектов [1].

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

Расширенные объекты представляют новые проблемы для обычных трекеров, поскольку эти трекеры предполагают одиночное обнаружение на объект на датчик. В некоторых случаях можно сгруппировать данные датчика для обеспечения обычных трекеров одним обнаружением для каждого объекта. Однако при этом преимущество использования датчика высокого разрешения может быть утрачено.

Напротив, расширенные средства отслеживания объектов могут обрабатывать несколько обнаружений на объект. Кроме того, эти трекеры могут оценивать не только кинематические состояния, такие как положение и скорость объекта, но также размеры и ориентацию объекта. В этом примере отслеживаются транспортные средства вокруг эго-транспортного средства с помощью следующих трекеров:

  • Обычный многообъектный трекер, использующий модель «точка-цель», multiObjectTracker

  • GGIW-PHD (гамма-гауссовский обратный PHD) трекер, trackerPHD с ggiwphd фильтр

  • трекер GM-PHD (гауссова смесь PHD), trackerPHD с gmphd фильтр с использованием прямоугольной целевой модели

Вы оцените результаты отслеживания всех трекеров с помощью trackErrorMetrics и trackAssignmentMetrics, которые обеспечивают множественные показатели эффективности трекера. Вы также оцените результаты, используя метрику оптимального назначения субпоследовательности (OSPA), trackOSPAMetric, которая направлена на оценку производительности трекера с использованием комбинированной оценки.

Установка

Сценарий

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

В этом примере моделируется эго-транспортное средство с 6 радиолокационными датчиками и 2 датчиками зрения, охватывающими 360-градусное поле зрения. Датчики имеют некоторое перекрытие и некоторый промежуток покрытия. Эго-транспортное средство оснащено дальнобойным радиолокационным датчиком и датчиком зрения как спереди, так и сзади транспортного средства. Каждая сторона транспортного средства имеет два радиолокационных датчика ближнего радиуса действия, каждый из которых охватывает 90 градусов. Один датчик с каждой стороны закрывает от середины транспортного средства к спине. Другой датчик с каждой стороны закрывается от середины транспортного средства вперед.

% Create the scenario
exPath = fullfile(matlabroot,'examples','driving_fusion','main');
addpath(exPath)
[scenario, egoVehicle, sensors] = helperCreateScenario;

% Create the display object
display = helperExtendedTargetTrackingDisplay;

% Create the Animation writer to record each frame of the figure for
% animation writing. Set 'RecordGIF' to true to enable GIF writing.
gifWriter = helperGIFWriter('Figure',display.Figure,...
    'RecordGIF',false);

Метрики

В этом примере используются некоторые ключевые метрики для оценки производительности отслеживания каждого трекера. В частности, вы оцениваете трекеры на основе их точности в оценке положений, скоростей, размеров (длины и ширины) и ориентаций объектов. Эти метрики могут быть оценены с помощью trackErrorMetrics класс. Чтобы определить ошибку отслеживаемой цели по ее истинности, в этом примере используется «пользовательская» функция ошибки, helperExtendedTargetError, перечисленных в конце этого примера.

Вы также оцените производительность на основе таких показателей, как количество ложных дорожек или избыточных дорожек. Эти метрики могут быть рассчитаны с помощью trackAssignmentMetrics класс. Чтобы определить расстояние между отслеживаемой целью и объектом истинности, в этом примере используется «пользовательская» функция ошибки, helperExtendedTargetDistance, перечисленных в конце этого примера. Функция определяет метрику расстояния как сумму расстояний по положению, скорости, размеру и рысканию.

trackErrorMetrics и trackAssignmentMetrics обеспечение множества показателей эффективности алгоритма слежения. Вы также оцените производительность, основываясь на метрике оптимального назначения подшаблонов (OSPA), которая предоставляет единственное значение оценки для алгоритма отслеживания на каждом шаге времени. Эта метрика может быть вычислена с помощью trackOSPAMetric класс. «Пользовательская» функция расстояния, определенная для OSPA, совпадает с метрикой назначения.

% Function to return the errors given track and truth.
errorFcn = @(track,truth)helperExtendedTargetError(track,truth);

% Function to return the distance between track and truth
distFcn = @(track,truth)helperExtendedTargetDistance(track,truth);

% Function to return the IDs from the ground truth. The default
% identifier assumes that the truth is identified with PlatformID. In
% drivingScenario, truth is identified with an ActorID.
truthIdFcn = @(x)[x.ActorID];

% Create metrics object.
tem = trackErrorMetrics(...
    'ErrorFunctionFormat','custom',...
    'EstimationErrorLabels',{'PositionError','VelocityError','DimensionsError','YawError'},...
    'EstimationErrorFcn',errorFcn,...
    'TruthIdentifierFcn',truthIdFcn);

tam = trackAssignmentMetrics(...
    'DistanceFunctionFormat','custom',...
    'AssignmentDistanceFcn',distFcn,...
    'DivergenceDistanceFcn',distFcn,...
    'TruthIdentifierFcn',truthIdFcn,...
    'AssignmentThreshold',30,...
    'DivergenceThreshold',35);

% Create ospa metric object
tom = trackOSPAMetric(...
    'Distance','custom',...
    'DistanceFcn',distFcn,...
    'TruthIdentifierFcn',truthIdFcn);

Отслеживание объектов точек

multiObjectTracker Система object™ предполагает одно обнаружение на объект на датчик и использует подход глобального ближайшего соседа для связывания обнаружений с дорожками. Предполагается, что каждый объект может быть обнаружен сенсором при сканировании максимум один раз. В этом случае моделируемые радиолокационные датчики имеют достаточно высокое разрешение, чтобы генерировать множество обнаружений на объект. Если эти обнаружения не кластеризованы, трекер генерирует несколько дорожек на объект. Кластеризация возвращает одно обнаружение на кластер, за счет большей ковариации неопределенности и потери информации о истинных измерениях объекта. Кластеризация также затрудняет различение двух объектов, когда они находятся близко друг к другу, например, когда одно транспортное средство проходит другое транспортное средство.

trackerRunTimes = zeros(0,3);
ospaMetric = zeros(0,3);

% Create a multiObjectTracker
tracker = multiObjectTracker(...
    'FilterInitializationFcn', @helperInitPointFilter, ...
    'AssignmentThreshold', 30, ...
    'ConfirmationThreshold', [4 5], ...
    'DeletionThreshold', 3);

% Reset the random number generator for repeatable results
seed = 2018;
S = rng(seed);
timeStep = 1;

% For multiObjectTracker, the radar reports in Ego Cartesian frame and does
% not report velocity. This allows us to cluster detections from multiple
% sensors.
for i = 1:6
    sensors{i}.HasRangeRate = false;
    sensors{i}.DetectionCoordinates = 'Body';
end

Выполнение сценария

while advance(scenario) && ishghandle(display.Figure)
    % Get the scenario time
    time = scenario.SimulationTime;

    % Collect detections from the ego vehicle sensors
    [detections,isValidTime] = helperDetect(sensors, egoVehicle, time);

    % Update the tracker if there are new detections
    if any(isValidTime)
        % Detections must be clustered first for the point tracker
        detectionClusters = helperClusterRadarDetections(detections);

        % Update the tracker
        tic
        % confirmedTracks are in scenario coordinates
        confirmedTracks = updateTracks(tracker, detectionClusters, time);
        t = toc;

        % Update the metrics
        % a. Obtain ground truth
        groundTruth = scenario.Actors(2:end); % All except Ego

        % b. Update assignment metrics
        tam(confirmedTracks,groundTruth);
        [trackIDs,truthIDs] = currentAssignment(tam);

        % c. Update error metrics
        tem(confirmedTracks,trackIDs,groundTruth,truthIDs);

        % d. Update ospa metric
        ospaMetric(timeStep,1) = tom(confirmedTracks, groundTruth);

        % Update bird's-eye-plot
        % Convert tracks to ego coordinates for display
        confirmedTracksEgo = helperConvertToEgoCoordinates(egoVehicle, confirmedTracks);
        display(egoVehicle, sensors, detections, confirmedTracksEgo, detectionClusters);
        drawnow;

        % Record tracker run times
        trackerRunTimes(timeStep,1) = t;
        timeStep = timeStep + 1;

        % Capture frames for animation
        gifWriter();
    end
end

% Capture the cumulative track metrics. The error metrics show the averaged
% value of the error over the simulation.
assignmentMetricsMOT = tam.trackMetricsTable;
errorMetricsMOT = tem.cumulativeTruthMetrics;

% Write GIF if requested
writeAnimation(gifWriter,'multiObjectTracking');

Эти результаты показывают, что при кластеризации трекер может отслеживать объекты в сцене. Однако это также показывает, что трасса, связанная с обгоняющим транспортным средством (желтая), перемещается от передней части транспортного средства в начале сценария к задней части транспортного средства в конце. В начале сценария обгоняющее транспортное средство находится позади эго-транспортного средства (синего цвета), поэтому с его передней стороны производятся радиолокационные и визуальные детекторы. Когда обгоняющее транспортное средство проходит мимо эго-транспортного средства, производится радиолокационное обнаружение со стороны обгоняющего транспортного средства, а затем с его задней стороны, и трасса перемещается в заднюю часть транспортного средства.

Также видно, что кластеризация не идеальна. Когда проезжающее транспортное средство проходит мимо транспортного средства, которое находится за эго-транспортным средством (фиолетовым), обе дорожки слегка смещаются влево из-за несовершенной кластеризации. Резервная дорожка создается на дорожке первоначально из-за множества кластеров, созданных при пропуске части боковой кромки. Кроме того, избыточная дорожка появляется на проезжающем транспортном средстве во время конца, потому что расстояния между ее обнаружениями увеличиваются.

Расширенный объектный трекер GGIW-PHD

В этом разделе используется трекер GGIW-PHD (trackerPHD с ggiwphd) для отслеживания объектов. В отличие от этого, multiObjectTracker, который использует один фильтр на дорожку, GGIW-PHD является многоцелевым фильтром, который описывает плотность вероятностной гипотезы (PHD) сценария. Для моделирования расширенного целевого объекта GGIW-PHD использует следующие распределения:

Гамма: Положительное значение для описания ожидаемого количества обнаружений.

Гауссов: Вектор состояния для описания кинематического состояния цели

Инверсно-Вишарт: Положительно-определенная матрица для описания эллиптической степени.

Модель предполагает, что каждое распределение не зависит друг от друга. Таким образом, плотность гипотезы вероятности (PHD) в GGIW-PHD фильтре описывается взвешенной суммой функций плотности вероятности нескольких GGIW компонентов.

PHD-трекер требует вычисления обнаруживаемости каждого компонента в плотности. Расчет обнаруживаемости требует конфигурации каждого датчика, используемого с трекером. Эти конфигурации определяются для trackerPHD с использованием trackingSensorConfiguration класс. Просмотрите helperCreateSensorConfigurations чтобы увидеть, как свойства датчика могут быть использованы для определения конфигураций датчика для трекера.

% Set up sensor configurations
%
sensorConfigurations = helperCreateSensorConfigurations(sensors,egoVehicle);

% The transform function and filter initialization functions are state and
% filter dependent. Therefore, they are not set in the helper function.
for i = 1:numel(sensorConfigurations)
    % You can use a different technique to initialize a filter for each
    % sensor by using a different function for each configuration.
    sensorConfigurations{i}.FilterInitializationFcn = @helperInitGGIWFilter;

    % Tracks are defined in constant turn-rate state-space in the scenario
    % coordinates. The MeasurementFcn for constant turn-rate model can be
    % used as the transform function.
    sensorConfigurations{i}.SensorTransformFcn = @ctmeas;
end

Определите трекер.

В отличие от трекера точечных объектов, который обычно учитывает один раздел (кластер) обнаружений, trackerPHD создает несколько возможных разделов набора обнаружений и оценивает его по текущим компонентам в PHD-фильтре. 3 и 5 в функции ниже определяет нижнее и верхнее расстояние Махаланобиса между обнаружениями. Это эквивалентно определению того, что каждый кластер обнаружения должен быть как минимум на 3 разрешения друг от друга и как максимум на 5 разрешений друг от друга. Вспомогательная функция обтекает элемент Detections и не использует измерения дальности для разбиения обнаружений с боковых радаров.

partFcn = @(x)helperPartitioningFcn(x,3,5);

tracker = trackerPHD('SensorConfigurations', sensorConfigurations,...
    'PartitioningFcn',partFcn,...
    'AssignmentThreshold',450,...% Minimum negative log-likelihood of a detection cell (multiple detections per cell) to add birth components.
    'ExtractionThreshold',0.75,...% Weight threshold of a filter component to be declared a track
    'ConfirmationThreshold',0.85,...% Weight threshold of a filter component to be declared a confirmed track
    'MergingThreshold',50,...% Threshold to merge components
    'HasSensorConfigurationsInput',true... % Tracking is performed in scenario frame and hence sensor configurations change with time
    );

Запустите моделирование.

% Release and restart all objects.
restart(scenario);
release(tem);
release(tam);
% No penality for trackerPHD
tam.AssignmentThreshold = tam.AssignmentThreshold - 2;
release(display);
display.PlotClusteredDetection = false;
gifWriter.pFrames = {};
for i = 1:numel(sensors)
    release(sensors{i});
    if i <= 6
        sensors{i}.HasRangeRate = true;
        sensors{i}.DetectionCoordinates = 'Sensor spherical';
    end
end

% Restore random seed.
rng(seed)

% First time step
timeStep = 1;
% Run the scenario
while advance(scenario) && ishghandle(display.Figure)
    % Get the scenario time
    time = scenario.SimulationTime;

    % Get the poses of the other vehicles in ego vehicle coordinates
    ta = targetPoses(egoVehicle);

    % Collect detections from the ego vehicle sensors
    [detections, isValidTime, configurations] = helperDetect(sensors, egoVehicle, time, sensorConfigurations);

    % Update the tracker with all the detections. Note that there is no
    % need to cluster the detections before passing them to the tracker.
    % Also, the sensor configurations are passed as an input to the
    % tracker.
    tic
    % confirmedTracks are in scenario coordinates
    confirmedTracks = tracker(detections,configurations,time);
    t = toc;

    % Update the metrics
    % a. Obtain ground truth
    groundTruth = scenario.Actors(2:end); % All except Ego

    % b. Update assignment metrics
    tam(confirmedTracks,groundTruth);
    [trackIDs,truthIDs] = currentAssignment(tam);

    % c. Update error metrics
    tem(confirmedTracks,trackIDs,groundTruth,truthIDs);

    % d. Update ospa metric
    ospaMetric(timeStep,2) = tom(confirmedTracks, groundTruth);

    % Update the bird's-eye plot
    % Convert tracks to ego coordinates for display
    confirmedTracksEgo = helperConvertToEgoCoordinates(egoVehicle, confirmedTracks);
    display(egoVehicle, sensors, detections, confirmedTracksEgo);
    drawnow;

    % Record tracker run times
    trackerRunTimes(timeStep,2) = t;
    timeStep = timeStep + 1;

    % Capture frames for GIF
    gifWriter();
end

% Capture the truth and track metrics tables
assignmentMetricsGGIWPHD = tam.trackMetricsTable;
errorMetricsGGIWPHD = tem.cumulativeTruthMetrics;

% Write GIF if requested
writeAnimation(gifWriter,'ggiwphdTracking');

Эти результаты показывают, что GGIW-PHD может обрабатывать несколько обнаружений на объект на сенсор, без необходимости кластеризации этих обнаружений в первую очередь. Кроме того, используя множество обнаружений, трекер оценивает положение, скорость, размеры и ориентацию каждого объекта. Пунктирная эллиптическая форма на рисунке демонстрирует ожидаемую протяженность мишени. Функция инициализации фильтра определяет несколько возможных размеров и их относительные веса с использованием нескольких компонентов. Список можно расширить, чтобы добавить дополнительные размеры с добавленной вычислительной сложностью. Напротив, можно также инициализировать один компонент для каждого обнаружения с более высокой неопределенностью размеров. Это позволит трекеру автоматически оценивать размеры объектов. Тем не менее, точность оценки будет зависеть от наблюдаемости целевых размеров и подвержена усадке и увеличению путевых размеров, когда цели перемещаются вокруг эго-транспортного средства.

Фильтр GGIW-PHD предполагает, что обнаружения распределены по эллиптическому центру цели. Поэтому дорожки имеют тенденцию следовать за наблюдаемыми частями транспортного средства. Такие наблюдаемые части включают в себя заднюю поверхность транспортного средства, которая находится непосредственно перед эго-транспортным средством или переднюю поверхность транспортного средства, например, непосредственно позади эго-транспортного средства, заднюю и переднюю поверхности транспортного средства, соответственно, впереди и позади эго-транспортного средства. Напротив, длина и ширина проезжающего транспортного средства полностью наблюдались во время моделирования. Поэтому его предполагаемый эллипс имеет лучшее перекрытие с фактической формой.

GM-PHD Прямоугольный объектный трекер

В этом разделе используется трекер GM-PHD (trackerPHD с gmphd) и прямоугольную целевую модель (initctrectgmphd (Sensor Fusion and Tracking Toolbox)) для отслеживания объектов. В отличие от этого, ggiwphd, которая использует эллиптическую форму для отслеживания протяженности, gmphd позволяет использовать распределение по Гауссу для определения формы выбора. Прямоугольная целевая модель определяется моделями движения. ctrect(панель инструментов слияния и отслеживания датчиков) и ctrectjac (Sensor Fusion and Tracking Toolbox) и модели измерений, ctrectmeas(панель инструментов слияния и отслеживания датчиков) и ctrectmeasjac(Панель инструментов слияния и отслеживания датчиков).

Конфигурации датчиков, определенные для trackerPHD ранее, остаются прежними, за исключением определения SensorTransformFcn и FilterInitializationFcn.

for i = 1:numel(sensorConfigurations)
    sensorConfigurations{i}.FilterInitializationFcn = @helperInitRectangularFilter; % Initialize a rectangular target gmphd
    sensorConfigurations{i}.SensorTransformFcn = @ctrectcorners; % Use corners to calculate detection probability
end

% Define tracker using new sensor configurations
tracker = trackerPHD('SensorConfigurations', sensorConfigurations,...
    'PartitioningFcn',partFcn,...
    'AssignmentThreshold',600,...% Minimum negative log-likelihood of a detection cell to add birth components
    'ExtractionThreshold',0.85,...% Weight threshold of a filter component to be declared a track
    'ConfirmationThreshold',0.95,...% Weight threshold of a filter component to be declared a confirmed track
    'MergingThreshold',50,...% Threshold to merge components
    'HasSensorConfigurationsInput',true... % Tracking is performed in scenario frame and hence sensor configurations change with time
    );

% Release and restart all objects.
restart(scenario);
for i = 1:numel(sensors)
    release(sensors{i});
end
release(tem);
release(tam);
release(display);
display.PlotClusteredDetection = false;
gifWriter.pFrames = {};

% Restore random seed.
rng(seed)

% First time step
timeStep = 1;

% Run the scenario
while advance(scenario) && ishghandle(display.Figure)
    % Get the scenario time
    time = scenario.SimulationTime;

    % Get the poses of the other vehicles in ego vehicle coordinates
    ta = targetPoses(egoVehicle);

    % Collect detections from the ego vehicle sensors
    [detections, isValidTime, configurations] = helperDetect(sensors, egoVehicle, time, sensorConfigurations);

    % Update the tracker with all the detections. Note that there is no
    % need to cluster the detections before passing them to the tracker.
    % Also, the sensor configurations are passed as an input to the
    % tracker.
    tic
    % confirmedTracks are in scenario coordinates
    confirmedTracks = tracker(detections,configurations,time);
    t = toc;

    % Update the metrics
    % a. Obtain ground truth
    groundTruth = scenario.Actors(2:end); % All except Ego

    % b. Update assignment metrics
    tam(confirmedTracks,groundTruth);
    [trackIDs,truthIDs] = currentAssignment(tam);

    % c. Update error metrics
    tem(confirmedTracks,trackIDs,groundTruth,truthIDs);

    % d. Update ospa metric
    ospaMetric(timeStep,3) = tom(confirmedTracks, groundTruth);

    % Update the bird's-eye plot
    % Convert tracks to ego coordinates for display
    confirmedTracksEgo = helperConvertToEgoCoordinates(egoVehicle, confirmedTracks);
    display(egoVehicle, sensors, detections, confirmedTracksEgo);
    drawnow;

    % Record tracker run times
    trackerRunTimes(timeStep,3) = t;
    timeStep = timeStep + 1;

    % Capture frames for GIF
    gifWriter();
end

% Capture the truth and track metrics tables
assignmentMetricsGMPHD = tam.trackMetricsTable;
errorMetricsGMPHD = tem.cumulativeTruthMetrics;

% Write GIF if requested
writeAnimation(gifWriter,'gmphdTracking');

% Return the random number generator to its previous state
rng(S)
rmpath(exPath)

Эти результаты показывают, что GM-PHD также может обрабатывать несколько обнаружений на объект на сенсор. Подобно GGIW-PHD, он также оценивает размер и ориентацию объекта. Функция инициализации фильтра использует подход, аналогичный GGIW-PHD-трекеру, и инициализирует несколько компонентов для различных размеров.

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

Оценка производительности отслеживания

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

Метрики назначения

helperPlotAssignmentMetrics(assignmentMetricsMOT, assignmentMetricsGGIWPHD, assignmentMetricsGMPHD);

Метрики назначения показывают, что избыточные и ложные дорожки были инициализированы и подтверждены трекером точечных объектов. Эти треки являются результатом несовершенной кластеризации, где обнаружения, принадлежащие одной цели, были сгруппированы в несколько кластеризованных обнаружений. Напротив, GGIW-PHD трекер и GM-PHD трекер поддерживают дорожки на всех четырех целевых объектах и не создают ложных или избыточных дорожек. Эти метрики показывают, что оба расширенных трекера объектов правильно разбивают обнаруженные объекты и связывают их с правильными дорожками.

Метрики ошибок

helperPlotErrorMetrics(errorMetricsMOT, errorMetricsGGIWPHD, errorMetricsGMPHD);

График показывает средние ошибки оценки для трех типов трекеров, используемых в этом примере. Поскольку трекер точечных объектов не оценивает рыскание и размеры объектов, они теперь отображаются на графиках. Трекер точечных объектов способен оценивать кинематику объектов с разумной точностью. Погрешность положения транспортного средства позади эго-транспортного средства выше, поскольку оно было потянуто влево, когда проезжающее транспортное средство обгоняет это транспортное средство. Это также артефакт несовершенной кластеризации, когда объекты находятся близко друг к другу.

Как описано выше, трекер GGIW-PHD предполагает, что измерения распределены по протяженности объекта, что приводит к центру дорожек на наблюдаемых частях транспортного средства. Это также можно видеть в метриках ошибки положения для ИДС 2 и 4. Трекер способен оценить размеры объекта с точностью около 0,3 метра для транспортных средств впереди и позади эго-транспортного средства. Ввиду более высокой определенности, определенной для габаритов транспортных средств в helperInitGGIWFilter функция, трекер не сворачивает длину этих транспортных средств, даже когда наиболее подходящий эллипс имеет очень низкую длину. Поскольку проходящее транспортное средство (РID 3) наблюдалось по всем размерам, его размеры измерялись более точно, чем у других транспортных средств. Однако, когда проходящее транспортное средство маневрирует относительно эго-транспортного средства, погрешность оценки рыскания выше.

GM-PHD в этом примере использует целевую модель прямоугольной формы и использует полученные измерения для оценки ожидаемых измерений на границе цели. Эта модель помогает трекеру точнее оценивать форму и ориентацию. Однако процесс оценки ожидаемых измерений на краях прямоугольной мишени является более дорогостоящим в вычислительном отношении.

Метрика OSPA

Как описано выше, метрика OSPA предназначена для описания производительности алгоритма отслеживания с использованием одной оценки. Обратите внимание, что OSPA в достаточной степени фиксирует производительность алгоритма слежения, который уменьшается от GM-PHD к GGIW-PHD до точечного трекера, как описано с использованием метрик ошибки и назначения.

ospaFig = figure;
plot(ospaMetric,'LineWidth',2);
legend('Point Target Tracker','GGIW-PHD Tracker','Rectangular GM-PHD Tracker');
xlabel('Time step (k)');
ylabel('OSPA');

Сравнение производительности по времени

Ранее вы узнали о различных методах, предположениях, которые они делают о целевых моделях, и результирующей производительности отслеживания. Теперь сравните время работы трекеров. Обратите внимание, что фильтр GGIW-PHD предлагает значительные вычислительные преимущества по сравнению с GM-PHD, что приводит к снижению производительности отслеживания.

runTimeFig = figure;
h = plot(trackerRunTimes(3:end,:)./trackerRunTimes(3:end,1),'LineWidth',2);
legend('Point Target Tracker','GGIW-PHD Tracker','Rectangular GM-PHD Tracker');
xlabel('Time step (k)');
ylabel('$$\frac{t_{tracker}}{t_{multiObjectTracker}}$$','interpreter','latex','fontsize',14);
ylim([0 max([h.YData]) + 1]);

Резюме

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

Ссылки

[1] Гранстрём, Карл, Маркус Баум и Стефан Рейтер. «Расширенное отслеживание объектов: введение, обзор и приложения». Журнал достижений в области слияния информации. т. 12, № 2, декабрь 2017 года.

[2] Гранстрём, Карл, Кристиан Лундквист и Умут Оргунер. 14-я Международная конференция по слиянию информации. IEEE, 2011.

[3] Гранстрём, Карл. «Расширенное отслеживание цели с помощью PHD-фильтров». 2012

Вспомогательные функции

helperExtendedTargetError

Функция для определения ошибки между отслеживаемой целью и соответствующей истинностью грунта.

function [posError,velError,dimError,yawError] = helperExtendedTargetError(track,truth)
% Errors as a function of target track and associated truth.

% Get true information from the ground truth.
truePos = truth.Position(1:2)';
% Position is at the rear axle for all vehicles. We would like to compute
% the error from the center of the vehicle
rot = [cosd(truth.Yaw) -sind(truth.Yaw);sind(truth.Yaw) cosd(truth.Yaw)];
truePos = truePos + rot*[truth.Wheelbase/2;0];

trueVel = truth.Velocity(1:2);
trueYaw = truth.Yaw(:);
trueDims = [truth.Length;truth.Width];

% Get estimated value from track. 
% GGIW-PHD tracker outputs a struct field 'Extent' and 'SourceIndex' 
% GM-PHD tracker outputs struct with but not 'Extent'
% multiObjectTracker outputs objectTrack

if isa(track,'objectTrack')
    estPos = track.State([1 3]);
    estVel = track.State([2 4]);
    % No yaw or dimension information in multiObjectTracker.
    estYaw = nan;
    estDims = [nan;nan];
elseif isfield(track,'Extent') % trackerPHD with GGIWPHD
    estPos = track.State([1 3]);
    estVel = track.State([2 4]);
    estYaw = atan2d(estVel(2),estVel(1));
    d = eig(track.Extent);
    dims = 2*sqrt(d);
    estDims = [max(dims);min(dims)];
else % trackerPHD with GMPHD
    estPos = track.State(1:2);
    estYaw = track.State(4);
    estVel = [track.State(3)*cosd(estYaw);track.State(3)*sind(estYaw)];
    estDims = track.State(6:7);
end

% Compute 2-norm of error for each attribute.
posError = norm(truePos(:) - estPos(:));
velError = norm(trueVel(:) - estVel(:));
dimError = norm(trueDims(:) - estDims(:));
yawError = norm(trueYaw(:) - estYaw(:));
end

helperExtendedTargetDistance

Функция для определения расстояния между дорожкой и истинной землей.

function dist = helperExtendedTargetDistance(track,truth)
% This function computes the distance between track and a truth.

% Copyright 2019-2020 The MathWorks, Inc.

% Errors in each aspect
[posError,velError,dimError,yawError] =  helperExtendedTargetError(track,truth);

% For multiObjectTracker, add a constant penalty for not estimating yaw
% and dimensions
if isnan(dimError)
    dimError = 1;
end
if isnan(yawError)
    yawError = 1;
end

% Distance is the sum of errors
dist = posError + velError + dimError + yawError;


end

helperInitGGIWFilter

Функция для создания фильтра ggiwphd из ячейки обнаружения.

function phd = helperInitGGIWFilter(varargin)
% helperInitGGIWFilter A function to initialize the GGIW-PHD filter for the
% Extended Object Tracking example

% Create a ggiwphd filter using 5 states and the constant turn-rate models.
phd = ggiwphd(zeros(5,1),eye(5),...
    'StateTransitionFcn',@constturn,...
    'StateTransitionJacobianFcn',@constturnjac,...
    'MeasurementFcn',@ctmeas,...
    'MeasurementJacobianFcn',@ctmeasjac,...
    'HasAdditiveMeasurementNoise',true,...
    'HasAdditiveProcessNoise',false,...
    'ProcessNoise',diag([1 1 3]),...
    'MaxNumComponents',1000,...
    'ExtentRotationFcn',@extentRotFcn,...
    'PositionIndex',[1 3]);

% If the function is called with no inputs i.e. the predictive portion of
% the birth density, no components are added to the mixture.
if nargin == 0
    % Nullify to return 0 components.
    nullify(phd);
else
    % When called with detections input, add two components to the filter,
    % one for car and one for truck, More components can be added based on
    % prior knowledge of the scenario, example, pedestrian or motorcycle.
    % This is a "multi-model" type approach. Another approach can be to add
    % only 1 component with a higher covariance in the dimensions. The
    % later is computationally less demanding, but has a tendency to track
    % observable dimensions of the object. For example, if only the back is
    % visible, the measurement noise may cause the length of the object to
    % shrink.
    
    % Detections
    detections = varargin{1};
    
    % Enable elevation measurements to create a 3-D filter using
    % initctggiwphd
    if detections{1}.SensorIndex < 7
        for i = 1:numel(detections)
            detections{i}.Measurement = [detections{i}.Measurement(1);0;detections{i}.Measurement(2:end)];
            detections{i}.MeasurementNoise = blkdiag(detections{i}.MeasurementNoise(1,1),0.4,detections{i}.MeasurementNoise(2:end,2:end));
            detections{i}.MeasurementParameters(1).HasElevation = true;
        end
    end
    phd3d = initctggiwphd(detections);
    
    % Set states of the 2-D filter using 3-D filter
    phd.States = phd3d.States(1:5);
    phd.StateCovariances = phd3d.StateCovariances(1:5,1:5);
    
    phd.DegreesOfFreedom = 1000;
    phd.ScaleMatrices = (1000-4)*diag([4.7/2 1.8/2].^2);
    
    % Add truck dimensions as second component
    append(phd,phd);
    phd.ScaleMatrices(:,:,2) = (1000-4)*diag([8.1/2 2.45/2].^2);
    phd.GammaForgettingFactors = [1.03 1.03];
    
    % Relative weights of the components. Can be treated as probability of
    % existence of a car vs a truck on road.
    phd.Weights = [0.7 0.3];
end
end

function R = extentRotFcn(x,dT)
    % Rotation of the extent during prediction.
    w = x(5);
    theta = w*dT;
    R = [cosd(theta) -sind(theta);sind(theta) cosd(theta)]; 
end

helperInitRectangularFilter

Функция для создания прямоугольного целевого фильтра gmphd из ячейки обнаружения

function filter = helperInitRectangularFilter(varargin)
% helperInitRectangularFilter A function to initialize the rectangular
% target PHD filter for the Extended Object Tracking example

% Copyright 2019 The MathWorks, Inc.

if nargin == 0
    % If called with no inputs, simply use the initctrectgmphd function to
    % create a PHD filter with no components.
    filter = initctrectgmphd;
    % Set process noise
    filter.ProcessNoise = diag([1 3]);
else
    % When called with detections input, add two components to the filter,
    % one for car and one for truck, More components can be added based on
    % prior knowledge of the scenario, example, pedestrian or motorcycle.
    % This is a "multi-model" type approach. Another approach can be to add
    % only 1 component with a higher covariance in the dimensions. The
    % later is computationally less demanding, but has a tendency to track
    % observable dimensions of the object. For example, if only the back is
    % visible, the measurement noise may cause the length of the object to
    % shrink.
    
    % Detections
    detections = varargin{1};
    
    % Create a GM-PHD filter with rectangular model
    filter = initctrectgmphd(detections);
    
    % Length width of a passenger car
    filter.States(6:7,1) = [4.7;1.8];
    
    % High certainty in dimensions
    lCov = 1e-4;
    wCov = 1e-4;
    lwCorr = 0.5;
    lwCov = sqrt(lCov*wCov)*lwCorr;
    filter.StateCovariances(6:7,6:7,1) = [lCov lwCov;lwCov wCov];
    
    % Add one more component by appending the filter with itself.
    append(filter,filter);
    
    % Set length and width to a truck dimensions
    filter.States(6:7,2) = [8.1;2.45];
    
    % Relative weights of each component
    filter.Weights = [0.7 0.3];
end

end



См. также

| | (панель инструментов слияния и отслеживания датчиков) | (Панель инструментов слияния и отслеживания датчиков) | (Панель инструментов слияния и отслеживания датчиков)

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