Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

predict

Prédire l'état et la covariance des erreurs d'état

Depuis R2021b

    Description

    predict(slamObj,controlInput) prédit l'état et la covariance des erreurs d'état. predict utilise la propriété StateTransitionFcn de l'objet ekfSLAM , slamObj et l'entrée du contrôleur controlInput pour prédire l'état.

    exemple

    predict(slamObj,controlInput,varargin) transmet tous les arguments supplémentaires spécifiés dans varargin à la propriété StateTransitionFcn sous-jacente de slamObj.

    La première entrée dans StateTransitionFcn est la pose du pas de temps précédent, suivie de tous les arguments définis par l'utilisateur dans varargin.

    Exemples

    réduire tout

    Chargez un ensemble de données de piste de course contenant l'état initial du véhicule, la covariance de l'état initial du véhicule, la covariance du bruit de processus, l'entrée de commande, la taille du pas de temps, la mesure, la covariance de la mesure et les valeurs de la porte de validation.

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

    Créez un objet ekfSLAM avec l'état initial, la covariance de l'état initial et le bruit de processus.

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

    Initialisez une variable pour stocker la pose.

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

    Prédisez l'état à l'aide de l'entrée de contrôle et de la taille du pas de temps pour la fonction de transition d'état. Ensuite, corrigez l’état à l’aide des données des points de repère observés, de la covariance des mesures et de la porte de validation pour la fonction d’association de données.

    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

    Visualisez la carte créée.

    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. One or more of the lines displays its values using only markers These objects represent Robot trajectory, Landmarks, Start, End.

    Arguments d'entrée

    réduire tout

    Objet EKF SLAM, spécifié comme objet ekfSLAM .

    Entrée du contrôleur requise pour propager l'état de la valeur initiale à la valeur finale, spécifiée comme vecteur d'élément N.

    Remarque

    La dimension du bruit de processus doit être égale au nombre d'éléments dans controlInput.

    Types de données : single | double

    Liste d’arguments d’entrée de longueur variable, spécifiée sous forme de liste séparée par des virgules. Cette entrée est transmise directement dans la propriété StateTransitionFcn de slamObj pour faire évoluer l'état. Quand vous appelez:

    predict(slamObj,controlInput,arg1,arg2)

    MATLAB® appelle essentiellement le stateTransitionFcn comme :

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

    Capacités étendues

    Génération de code C/C++
    Générez du code C et C++ avec MATLAB® Coder™.

    Historique des versions

    Introduit dans R2021b