Main Content

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

stateSamplerUniform

Échantillonneur d'état uniforme pour la planification de mouvements basée sur l'échantillonnage

Depuis R2023b

    Description

    L'objet stateSamplerUniform génère des échantillons d'état uniformément distribués à l'aide de la fonction d'objet sampleUniform de l'objet espace d'état. Les planificateurs de chemin comme plannerRRT, plannerRRTStar et plannerBiRRT utilisent l'objet stateSamplerUniform comme échantillonneur par défaut.

    Création

    Description

    exemple

    sampler = stateSamplerUniform crée un échantillonneur d'état associé à un objet stateSpaceSE2 avec les paramètres par défaut.

    exemple

    sampler = stateSamplerUniform(stateSpace) crée un échantillonneur d'état associé à l'objet d'espace d'état spécifié. L'échantillonneur prend en charge tous les objets de l'espace d'état dérivés à l'aide de la classe nav.StateSpace .

    Propriétés

    développer tout

    Définition de l'espace d'état, spécifiée comme un objet stateSpaceSE2 ou un objet d'une sous-classe de la classe nav.StateSpace .

    Fonctions d'objet

    sampleExemples d'états à partir d'un échantillonneur d'état uniforme
    copyCréer une copie complète de l'objet échantillonneur d'état uniforme

    Exemples

    réduire tout

    Utiliser l'espace d'état par défaut comme entrée

    Créez un échantillonneur d'état uniforme avec des propriétés par défaut. Par défaut, l'échantillonneur utilise l'espace d'état SE(2) comme espace de configuration pour la planification de mouvement. Les limites des variables d'état [x, y, theta] dans l'espace d'état par défaut sont [-100 100; -100 100; -3.1416 3.1416]. Les valeurs de x et y sont en mètres. theta est en radians.

    sampler = stateSamplerUniform;

    Vérifiez les limites de l'espace d'état d'entrée.

    bounds = sampler.StateSpace.StateBounds
    bounds = 3×2
    
     -100.0000  100.0000
     -100.0000  100.0000
       -3.1416    3.1416
    
    

    Échantillonnez l’espace d’état d’entrée. Définissez le nombre d’échantillons à sélectionner sur 10.

    states = sample(sampler,10);

    Vérifiez les variables d'état échantillonnées.

    disp(states)
       62.9447   81.1584   -2.3437
       82.6752   26.4718   -2.5287
      -44.3004    9.3763    2.8746
       92.9777  -68.4774    2.9568
       91.4334   -2.9249    1.8867
      -71.6227  -15.6477    2.6121
       58.4415   91.8985    0.9785
      -92.8577   69.8259    2.7269
       35.7470   51.5480    1.5276
      -21.5546   31.0956   -2.0660
    

    Utiliser l'espace d'état personnalisé comme entrée

    Définissez un espace d'état SE(2) personnalisé en spécifiant les limites des variables d'état [x, y, theta]. Les valeurs de x et y sont en mètres. theta est en radians.

    ss = stateSpaceSE2([-1 1; -2 2; -pi/2 pi/2]);

    Créez un échantillonneur d'état uniforme avec l'espace d'état personnalisé en entrée.

    sampler = stateSamplerUniform(ss);

    Échantillonnez l’espace d’état d’entrée. Définissez le nombre d’échantillons à sélectionner sur 10.

    states = sample(sampler,10);

    Vérifiez les variables d'état échantillonnées.

    disp(states)
        0.4121   -1.8727   -0.7008
       -0.9077   -1.6115    1.0162
        0.3897   -0.7316    1.4144
       -0.9311   -0.2450   -0.3721
        0.5310    1.1808   -0.9837
       -0.0205   -0.2177    0.4597
        0.4187    1.0187   -0.7036
        0.3594    0.6204   -1.0599
       -0.7620   -0.0065    1.4443
       -0.3192    0.3411   -0.8677
    

    Échantillonnez un espace d'états pour la planification de mouvements à l'aide d'une distribution uniforme, puis utilisez les états échantillonnés pour trouver un chemin optimal entre deux points dans l'espace d'états d'entrée. Utilisez un planificateur de chemin RRT pour calculer un chemin optimal entre les deux points.

    Créer un échantillonneur d'état uniforme

    Chargez une grille de probabilité d'occupation dans l'espace de travail MATLAB®.

    load("exampleMaps.mat","simpleMap");

    Créez une carte d'occupation à partir de la grille d'occupation d'entrée.

    map = occupancyMap(simpleMap);

    Définissez les limites inférieure et supérieure des variables de l'espace d'état x, y et theta à partir de la carte d'occupation.

    x = map.XWorldLimits;
    y =  map.YWorldLimits;
    theta = [-pi pi];

    Créez un objet SE(2) d'espace d'état à l'aide des variables d'état spécifiées.

    stateSpace = stateSpaceSE2([x; y; theta]);

    Créez un échantillonneur d'état uniforme pour échantillonner uniformément l'espace d'état spécifié.

    sampler = stateSamplerUniform(stateSpace); 

    Configurer le planificateur de chemin RRT

    Vérifiez la validité des états dans l'espace d'état d'entrée à l'aide d'un validateur d'état.

    stateValidator = validatorOccupancyMap(stateSpace,Map=map); 

    Configurez le planificateur de chemin RRT. Utilisez l'échantillonneur d'état uniforme pour échantillonner l'espace d'état d'entrée.

    planner = plannerRRT(stateSpace,stateValidator,StateSampler=sampler); 

    Trouver le chemin optimal entre deux états

    Spécifiez le point de départ et le point d'objectif dans l'espace d'état d'entrée.

    start = [5 5 0];
    goal = [20 15 0]; 

    Calculez le chemin optimal entre le point de départ et le point d'arrivée à l'aide du planificateur de chemin RRT.

    [path,info] = plan(planner,start,goal);

    Visualisez les résultats

    Afficher la carte d'occupation.

    figure
    show(map)
    hold on

    Tracez le point de départ et le point d'arrivée. Spécifiez les propriétés de couleur et de ligne par défaut pour tracer les points de départ et d'arrivée en utilisant respectivement les fonctions plannerLineSpec.start et plannerLineSpec.goal .

    plot(start(1),start(2),plannerLineSpec.start{:}); 
    plot(goal(1),goal(2),plannerLineSpec.goal{:}); 

    Tracez l'arbre de recherche pour visualiser les états explorés afin de trouver le chemin optimal. Utilisez la fonction plannerLineSpec.tree pour spécifier les propriétés de couleur et de ligne par défaut pour tracer l'arborescence de recherche.

    plot(info.TreeData(:,1),info.TreeData(:,2),plannerLineSpec.tree{:})

    Si le planificateur a trouvé un chemin optimal entre les états de départ et d'objectif, tracez les résultats. Utilisez la fonction plannerLineSpec.path pour spécifier la couleur par défaut et les propriétés de ligne pour tracer le chemin.

    if info.IsPathFound
        plot(path.States(:,1),path.States(:,2),plannerLineSpec.path{:})
        legend
    else
        disp("Path not found. Try modifying the planner parameters."); 
    end

    Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 5 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, Tree, Path.

    Historique des versions

    Introduit dans R2023b