correct

Правильная ошибочная ковариация состояния и состояния

    Описание

    [associations,newLandmark] = correct(slamObj,measurement,measurementCovariance) корректирует состояние и его ковариацию ассоциированной страны на основе measurement и measurementCovariance на шаге текущего времени. correct использует функцию ассоциации данных, заданную в свойстве DataAssociationFcn ekfSLAM объект, slamObj, сопоставлять измерение к ориентирам и извлекать новые ориентиры из измерения.

    correct функционируйте использует эти ассоциации, чтобы откорректировать ковариацию и ассоциированной страны состояния, затем увеличивает состояние с новыми ориентирами.

    пример

    [associations,newLandmark] = correct(slamObj,measurement,measurementCovariance,varargin) передачи все дополнительные аргументы заданы в varargin к базовому свойству DataAssociationFcn slamObj.

    Первые четыре входных параметров к DataAssociationFcn свойство является знаменательным положением, знаменательной ковариацией положения, измерением и ковариацией измерения, сопровождаемой всеми аргументами в varargin.

    Примеры

    свернуть все

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

    load("racetrackDataset.mat","initialState","initialStateCovariance", ...
         "processNoise","controllerInputs","timeStep", ...
         "measurements","measCovar","validationGate");

    Создайте ekfSLAM объект с начальным состоянием, ковариацией начального состояния и шумом процесса.

    ekfSlamObj = ekfSLAM("State",initialState, ...
                         "StateCovariance",initialStateCovariance, ...
                         "ProcessNoise",processNoise);

    Инициализируйте переменную, чтобы сохранить положение.

    storedPose = nan(size(controllerInputs,1)+1,3);
    storedPose(1,:) = ekfSlamObj.State(1:3);

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

    for count = 1:size(controllerInputs,1)
        % Predict the state
        predict(ekfSlamObj,controllerInputs(count,:),timeStep);
     
        % Get the landmarks in the environment
        observedLandmarks = measurements{count};
     
        % Correct the state
        if ~isempty(observedLandmarks)
            correct(ekfSlamObj,observedLandmarks, ...
                    measCovar,validationGate);
        end
      
        % Log the estimated pose
        storedPose(count+1,:) = ekfSlamObj.State(1:3);
    end

    Визуализируйте созданную карту.

    fig = figure;
    figAx = axes(fig);
    axis equal
    grid minor
    hold on
    plot(figAx,storedPose(:,1),storedPose(:,2),"g.-")
    landmarks = reshape(ekfSlamObj.State(4:end),2,[])';
    plot(figAx,landmarks(:,1),landmarks(:,2),"m+")
    plot(figAx,storedPose(1,1),storedPose(1,2),"k*")
    plot(figAx,storedPose(end,1),storedPose(end,2),"rd")
    legend("Robot trajectory","Landmarks","Start","End")

    Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent Robot trajectory, Landmarks, Start, End.

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

    свернуть все

    Объект EKF SLAM в виде ekfSLAM объект.

    Измерения ориентиров в среде в виде N-by-K матрица. K является размерностью измерения. N является количеством измерений.

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

    Ковариация измерений в виде K - вектор элемента или N матрица *K-by-N*K. K является размерностью измерения. N является количеством измерений. Когда задано как вектор, то же значение ковариации используется для всех измерений.

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

    Входной параметр переменной длины перечисляет в виде списка, разделенного запятыми. Этот вход передается непосредственно в свойство DataAssociationFcn slamObj. Когда вы вызываете:

    correct(slamObj,measurement,measurementCovariance,arg1,arg2)

    MATLAB® по существу вызывает dataAssociationFcn как:

    dataAssociationFcn(knownLandmarks,knownLandmarksCovariance, ... 
    measurement,measurementCovariance,arg1,arg2)

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

    свернуть все

    Список ассоциаций ориентиров к измерениям, возвращенным как P-by-2 матрица. P является количеством ассоциаций. Первый столбец матрицы содержит индексы связанных ориентиров, и второй столбец содержит связанные индексы измерения.

    Список индексов измерений, которые квалифицируют как новые ориентиры, возвратился как Q - вектор элемента. Q является количеством измерений, которые квалифицируют как новые ориентиры.

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

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

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

    Объекты

    Функции

    Введенный в R2021b