Main Content

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

validatorOccupancyMap3D

Validateur d'état basé sur une carte quadrillée 3D

Depuis R2020b

    Description

    L'objet validatorOccupancyMap3D valide les états et les mouvements discrétisés en fonction des valeurs d'occupation dans une carte d'occupation 3D. L'objet interprète les emplacements de carte sans obstacle comme des états valides. L'objet interprète les emplacements de carte occupés et inconnus comme des états non valides.

    Création

    Description

    validator = validatorOccupancyMap3D crée un validateur de carte d'occupation 3D associé à un espace d'état SE(3) avec des paramètres par défaut.

    validator = validatorOccupancyMap3D(stateSpace) crée un validateur dans l'espace d'état spécifié. L'entrée stateSpace définit la valeur de la propriété StateSpace .

    exemple

    validator = validatorOccupancyMap3D(stateSpace,Name,Value) définit Propriétés en utilisant une ou plusieurs paires nom-valeur. Les propriétés non spécifiées ont des valeurs par défaut. Mettez chaque nom de propriété entre guillemets.

    Par exemple, validatorOccupancyMap3D('ValidationDistance',0.1) crée un validateur de carte d'occupation 3D avec un intervalle d'échantillonnage de 0,1.

    Propriétés

    développer tout

    Ce propriété est en lecture seule.

    Espace d'états pour valider les états, spécifié comme sous-classe de nav.StateSpace. Voici les objets de l'espace d'état prédéfinis :

    Exemple : validatorOccupancyMap3D(stateSpaceSE3)

    Carte utilisée pour valider les états, spécifiée comme objet occupancyMap3D .

    Exemple : validator.Map = occupancyMap3D(10)

    Intervalle d'échantillonnage entre les états et de vérification de la validité de l'état, spécifié sous la forme d'un scalaire numérique positif.

    Exemple : validator.ValidationDistance = 0.1

    Types de données : double

    Mappage de variables d'état pour les coordonnées xyz dans le vecteur d'état, spécifié comme un vecteur à trois éléments de forme [xIdx yIdx zIdx].

    Types de données : double

    Fonctions d'objet

    copyCréer une copie complète de l'objet validateur d'état
    isMotionValidVérifiez si le chemin entre les états est valide
    isStateValidVérifiez si l'état est valide

    Exemples

    réduire tout

    Créez une carte d'occupation 3D et un validateur d'état associé. Planifiez, validez et visualisez un chemin à travers la carte d'occupation.

    Charger et attribuer une carte au validateur d'état

    Chargez une carte d'occupation 3D d'un pâté de maisons dans l'espace de travail. Spécifiez un seuil pour lequel les cellules doivent être considérées comme sans obstacle.

    mapData = load('dMapCityBlock.mat');
    omap = mapData.omap;
    omap.FreeThreshold = 0.5;

    Gonflez la carte d'occupation pour ajouter une zone tampon pour un fonctionnement sûr autour des obstacles.

    inflate(omap,1)

    Créez un objet d'espace d'état SE(3) avec des limites pour les variables d'état.

    ss = stateSpaceSE3([-20 220;
        -20 220;
        -10 100;
        inf inf;
        inf inf;
        inf inf;
        inf inf]);

    Créez un validateur d'état de carte d'occupation 3D à l'aide de l'espace d'état créé.

    sv = validatorOccupancyMap3D(ss);

    Attribuez la carte d'occupation à l'objet validateur d'état. Spécifiez l’intervalle de distance d’échantillonnage.

    sv.Map = omap;
    sv.ValidationDistance = 0.1;

    Planifier et visualiser le chemin

    Créez un planificateur de chemin avec une distance de connexion maximale augmentée. Réduisez le nombre maximum d’itérations.

    planner = plannerRRT(ss,sv);
    planner.MaxConnectionDistance = 50;
    planner.MaxIterations = 1000;

    Créez une fonction d'évaluation définie par l'utilisateur pour déterminer si le chemin atteint l'objectif. Spécifiez la probabilité de choisir l’état objectif lors de l’échantillonnage.

    planner.GoalReachedFcn = @(~,x,y)(norm(x(1:3)-y(1:3))<5);
    planner.GoalBias = 0.1;

    Définissez les états de départ et d’objectif.

    start = [40 180 25 0.7 0.2 0 0.1];
    goal = [150 33 35 0.3 0 0.1 0.6];

    Planifiez un chemin en utilisant le début, l'objectif et le planificateur spécifiés.

    [pthObj,solnInfo] = plan(planner,start,goal);

    Vérifiez que les points du chemin sont des états valides.

    isValid = isStateValid(sv,pthObj.States)
    isValid = 7x1 logical array
    
       1
       1
       1
       1
       1
       1
       1
    
    

    Vérifiez que le mouvement entre chaque état de chemin séquentiel est valide.

    isPathValid = zeros(size(pthObj.States,1)-1,1,'logical');
    for i = 1:size(pthObj.States,1)-1
        [isPathValid(i),~] = isMotionValid(sv,pthObj.States(i,:),...
            pthObj.States(i+1,:));
    end
    isPathValid
    isPathValid = 6x1 logical array
    
       1
       1
       1
       1
       1
       1
    
    

    Visualisez les résultats.

    show(omap)
    hold on
    scatter3(start(1,1),start(1,2),start(1,3),'g','filled') % draw start state
    scatter3(goal(1,1),goal(1,2),goal(1,3),'r','filled')    % draw goal state
    plot3(pthObj.States(:,1),pthObj.States(:,2),pthObj.States(:,3),...
        'r-','LineWidth',2) % draw path

    Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 4 objects of type patch, scatter, line.

    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 R2020b