predict

Предскажите ошибочную ковариацию состояния и состояния

    Описание

    predict(slamObj,controlInput) предсказывает ошибочную ковариацию состояния и состояния. predict использует свойство StateTransitionFcn ekfSLAM объект, slamObj, и вход controlInput контроллера предсказать состояние.

    пример

    predict(slamObj,controlInput,varargin) передачи все дополнительные аргументы заданы в varargin к базовому свойству StateTransitionFcn slamObj.

    Первый вход к StateTransitionFcn положение от предыдущего временного шага, сопровождаемого всеми пользовательскими аргументами в 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 объект.

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

    Примечание

    Размерность шума процесса должна быть равна числу элементов в controlInput.

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

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

    predict(slamObj,controlInput,arg1,arg2)

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

    stateTransitionFcn(pose(k-1),controlInput,arg1,arg2)

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

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

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

    Объекты

    Функции

    Введенный в R2021b