initcvmscekf

Постоянная скорость trackingMSCEKF инициализация

Описание

пример

mscekf = initcvmscekf(detection) инициализирует trackingMSCEKF класс (расширенный Фильтр Калмана для отслеживания в модифицированных сферических координатах) на основе информации, предоставленной в objectDetection объект, detection. Функция принимает целевой диапазон 3e4 модули и ковариация области значений 1e10 модули2.

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

пример

mscekf = initcvmscekf(detection,rangeEstimation) позволяет указывать информацию области значений к фильтру. rangeEstimation переменная является двухэлементным вектором, где первый элемент указывает диапазон цели, и второй элемент задает стандартное отклонение в области значений.

Примеры

свернуть все

Создайте обнаружение только для угла.

detection = objectDetection(0,[30;20],'MeasurementParameters',...
    struct('Frame','Spherical','HasRange',false));

Используйте initcvmscekf создать trackingMSCEKF отфильтруйте инициализированное использование обнаружения только для угла.

filter = initcvmscekf(detection)
filter = 
  trackingMSCEKF with properties:

                          State: [6x1 double]
                StateCovariance: [6x6 double]

             StateTransitionFcn: @constvelmsc
     StateTransitionJacobianFcn: @constvelmscjac
                   ProcessNoise: [3x3 double]
        HasAdditiveProcessNoise: 0
                  ObserverInput: [3x1 double]

                 MeasurementFcn: @cvmeasmsc
         MeasurementJacobianFcn: @cvmeasmscjac
               MeasurementNoise: [2x2 double]
    HasAdditiveMeasurementNoise: 1

Создайте параметры измерения для последующего вращения.

measParamSensorToPlat = struct('Frame','Spherical','HasRange',false,...
'Orientation',rotmat(quaternion([0 0 30],'rotvecd'),'frame'))
measParamSensorToPlat = struct with fields:
          Frame: 'Spherical'
       HasRange: 0
    Orientation: [3x3 double]

measParamPlatToScenario = struct('Frame','Rectangular','HasRange',false,...
'Orientation',rotmat(quaternion([30 0 0],'rotvecd'),'frame'))
measParamPlatToScenario = struct with fields:
          Frame: 'Rectangular'
       HasRange: 0
    Orientation: [3x3 double]

measParam = [measParamSensorToPlat;measParamPlatToScenario];
detection = objectDetection(0,[30;20],'MeasurementParameters',measParam);

Инициализируйте фильтр.

filter = initcvmscekf(detection);

Проверяйте, что измерение фильтра - то же самое как обнаружение.

cvmeasmsc(filter.State,measParam)
ans = 2×1

   30.0000
   20.0000

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

tgtState = [2000;-3;500;-5;0;0];

Задайте начальное состояние наблюдателя с помощью постоянной ускоряющей модели.

observerState = [0;2;0;490;-10;0.2;0;0;0];

Создайте trackerGNN возразите, чтобы использовать с initcvmscekf с некоторой предшествующей информацией об области значений и ковариации области значений.

range = 1000;
rangeStdDev = 1e3;
rangeEstimate = [range rangeStdDev];
tracker = trackerGNN('FilterInitializationFcn',@(det)initcvmscekf(det,rangeEstimate));

Симулируйте синтетические данные при помощи моделей измерения. Получите az и el информация с помощью cvmeas функция.

syntheticParams = struct('Frame','Spherical','HasRange',false,...
    'OriginPosition',observerState(1:3:end));
meas = cvmeas(tgtState,syntheticParams);

Создайте objectDetection только для угла, чтобы симулировать синтетическое обнаружение.

detection = objectDetection(0,meas,'MeasurementParameters',...
    struct('Frame','Spherical','HasRange',false),'MeasurementNoise',0.033*eye(2));

Создайте trackPlotter и platformPlotter, чтобы визуализировать сценарий.

tp = theaterPlot('XLimits',[0 2500],'YLimits',[0 1000]);
targetPlotter = platformPlotter(tp,'DisplayName','Target','MarkerFaceColor','k');
observerPlotter = platformPlotter(tp,'DisplayName', 'Observer','MarkerFaceColor','r');
trkPlotter = trackPlotter(tp,'DisplayName','Track','MarkerFaceColor','g','HistoryDepth',50);
tgtTrajPlotter = trajectoryPlotter(tp,'DisplayName','Target Trajectory','Color','k');
obsTrajPlotter = trajectoryPlotter(tp,'DisplayName','Observer Trajectory','Color','r');

Figure contains an axes object. The axes object contains 6 objects of type line. These objects represent Target, Observer, Track, (history), Target Trajectory, Observer Trajectory.

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

time = 0; dT = 0.1;
tgtPoses = [];
obsPoses = [];
while time < 50
    [confTracks,tentTracks,allTracks] = tracker(detection,time);
    for i = 1:numel(allTracks)
        setTrackFilterProperties(tracker,allTracks(i).TrackID,'ObserverInput',observerState(3:3:end));
    end
    
    % Update synthetic detection.
    observerState = constacc(observerState,dT);
    tgtState = constvel(tgtState,dT);
    syntheticParams.OriginPosition = observerState(1:3:end);
    detection.Measurement = cvmeas(tgtState,syntheticParams);
    time = time + dT;
    detection.Time = time;
    
    % Update plots
    tgtPoses = [tgtPoses;tgtState(1:2:end)']; %#ok
    obsPoses = [obsPoses;observerState(1:3:end)']; %#ok
    targetPlotter.plotPlatform(tgtState(1:2:end)');
    observerPlotter.plotPlatform(observerState(1:3:end)');
    tgtTrajPlotter.plotTrajectory({tgtPoses});
    obsTrajPlotter.plotTrajectory({obsPoses});
    % Plot the first track as there are no false alarms, this should be
    % the target.
    % Get positions from the MSC state of the track.
    cartState = cvmeasmsc(allTracks(i).State,'rectangular') + observerState(1:3:end);
    trkPlotter.plotTrack(cartState');
end

Figure contains an axes object. The axes object contains 6 objects of type line. These objects represent Target, Observer, Track, (history), Target Trajectory, Observer Trajectory.

Входные параметры

свернуть все

Отчет обнаружения в виде objectDetection объект.

Пример: detection = objectDetection(0,[1;4.5;3],'MeasurementNoise', [1.0 0 0; 0 2.0 0; 0 0 1.5])

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

Типы данных: single | double

Выходные аргументы

свернуть все

Постоянная скорость, отслеживающая расширенный Фильтр Калмана в системе координат MSC, возвращенной как trackingMSCEKF объект.

Алгоритмы

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

  • Функция конфигурирует ковариацию состояния в системе координат MSC при помощи линейного преобразования ковариации в Декартовой системе координат.

  • Можно использовать эту функцию в качестве FilterInitializationFcn свойство trackerTOMHT и trackerGNN Системные объекты.

  • Функция инициализирует ObserverInput из trackingMSCEKF класс с нулевым ускорением наблюдателя во всех направлениях. Необходимо использовать setTrackFilterProperties функция средств отслеживания, чтобы обновить ObserverInput.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

Функции

Объекты

Введенный в R2018b