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

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

Введение

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

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

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

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

  • Обычное мультиобъектное средство отслеживания с помощью целевой точкой модели, multiObjectTracker

  • GGIW-доктор-философии (Гэмма Госсиэн Инверс Уишарт PHD) средство отслеживания, trackerPHD с ggiwphd фильтр

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

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

Настройка

Сценарий

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

В этом примере вы симулируете автомобиль, оборудованный датчиком, который имеет 6 радарных датчиков и 2 датчика видения, покрывающие полное поле зрения. Датчики имеют некоторое перекрытие и некоторый разрыв покрытия. Автомобиль, оборудованный датчиком оборудован радарным датчиком дальним и датчиком видения на обоих передняя и задняя часть транспортного средства. Каждая сторона транспортного средства имеет два ближних радарных датчика, каждый покрывающий 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 обеспечьте несколько мер эффективности алгоритма отслеживания. Вы также оцените эффективность на основе Оптимальной Метрики Присвоения SubPattern (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 использует следующие распределения:

\Gamma: Положительное значение, чтобы описать ожидаемое количество обнаружений.

Гауссов: Вектор состояния, чтобы описать кинематическое состояние цели

Обратный Уишарт: положительно-определенная матрица, чтобы описать эллиптическую степень.

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

Средство отслеживания доктора философии требует вычисления обнаружительной способности каждого компонента в плотности. Вычисление обнаружительной способности требует настроек каждого датчика, используемого со средством отслеживания. Вы задаете эти настройки для 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 в функции ниже задают более низкое и верхнее расстояние Mahalanobis между обнаружениями. Это эквивалентно определению, что каждый кластер обнаружения должен быть минимумом 3 разрешений независимо и максимума 5 разрешений друг кроме друга. Функция помощника переносит partitionDetections и не использует измерения уровня области значений для разделения обнаружений от радаров стороны.

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) к отслеживаемым объектам. В отличие от ggiwphd, который использует эллиптическую форму, чтобы отследить степень, gmphd позволяет вам использовать Распределение Гаусса, чтобы задать форму по вашему выбору. Прямоугольная целевая модель задана моделями движения, ctrect и ctrectjac и модели измерения, 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 принимает, что измерения распределяются вокруг степени объекта, которая приводит к центру дорожек на заметных частях транспортного средства. Это может также быть замечено в ошибочных метриках положения для TruthID 2 и 4. Средство отслеживания может оценить размерности объекта приблизительно с 0,3-метровой точностью для транспортных средств вперед и позади автомобиля, оборудованного датчиком. Из-за более высокой уверенности, заданной для размерностей транспортных средств в helperInitGGIWFilter функция, средство отслеживания не сворачивает длину этих транспортных средств, даже когда хорошо-подходящий эллипс имеет очень низкую длину. Когда проходящее мимо транспортное средство (TruthID 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] Granström, Карл, Маркус Баум и Штефан Ройтер. "Расширенное объектное отслеживание: введение, обзор и приложения". Журнал усовершенствований в информационном Fusion. Издание 12, № 2, декабрь 2017.

[2] Granström, Карл, Кристиан Ландкуист и Умут Оргунер. "Отслеживая прямоугольные и эллиптические расширенные цели с помощью лазерных измерений". 14-я Международная конференция по вопросам информационного Fusion. IEEE, 2011.

[3] Granström, Карл. "Расширенное целевое отслеживание с помощью фильтров 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