Main Content

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

plannerPRM

Créer un planificateur de chemin de feuille de route probabiliste

Depuis R2022a

    Description

    Le planificateur de chemin de feuille de route probabiliste construit une feuille de route sans états de départ ni d'objectif. Utilisez la fonction plan pour trouver un chemin sans obstacle entre les états de départ et d'objectif spécifiés. Si la fonction plan ne trouve pas de chemin connecté entre les états de début et d'objectif, elle renvoie un chemin vide.

    Création

    Description

    exemple

    planner = plannerPRM(stateSpace,stateVal) crée un planificateur PRM à partir d'un objet d'espace d'état, stateSpace, et d'un objet validateur d'état, stateVal. L'espace d'état de stateVal doit être le même que celui de stateSpace. stateSpace et stateVal définissent également les propriétés StateSpace et StateValidator , respectivement, du planificateur.

    planner = plannerPRM(___,Name=Value) définit les propriétés en utilisant un ou plusieurs arguments de paire nom-valeur en plus des arguments d'entrée dans la syntaxe précédente. Vous pouvez spécifier les propriétés StateSampler, MaxNumNodes et MaxConnectionDistance sous forme de paires nom-valeur.

    Propriétés

    développer tout

    Espace d'état pour le planificateur, spécifié comme objet d'espace d'état. Vous pouvez utiliser des objets d'espace d'état tels que stateSpaceSE2, stateSpaceDubins et stateSpaceReedsShepp. Vous pouvez également personnaliser un objet d'espace d'état à l'aide de l'objet nav.StateSpace .

    Validateur d'état pour le planificateur, spécifié en tant qu'objet validateur d'état. Vous pouvez utiliser des objets de validation d'état tels que validatorOccupancyMap et validatorVehicleCostmap. Vous pouvez également personnaliser un objet validateur d'état à l'aide de l'objet nav.StateValidator .

    Depuis R2023b

    Échantillonneur d'espace d'état utilisé pour rechercher des échantillons d'état dans l'espace d'entrée, spécifié comme objet stateSamplerUniform , objet stateSamplerGaussian , objet stateSamplerMPNET ou Objet nav.StateSampler . Par défaut, le plannerPRM utilise un échantillonnage d'état uniforme.

    Nombre maximum de nœuds dans le graphique, spécifié sous forme de scalaire positif. En augmentant cette valeur, les chances de trouver un chemin augmentent tout en augmentant le temps de calcul pour le planificateur de chemin.

    Distance maximale entre deux nœuds connectés, spécifiée sous forme de scalaire positif en mètres. Les nœuds dont la distance est supérieure à cette valeur ne seront pas connectés dans le graphique.

    Fonctions d'objet

    copyCréer une copie complète de l'objet planificateurPRM
    graphDataRécupérer le graphique en tant qu'objet digraphe
    planPlan path between start and goal states on roadmap

    Exemples

    réduire tout

    Créez une carte d'occupation à partir d'un exemple de carte et définissez la résolution de la carte sur 10 cellules/mètre.

    map = load("exampleMaps.mat").simpleMap;
    map = occupancyMap(map,10);

    Créez un espace d'état et mettez à jour les limites de l'espace d'état pour qu'elles soient identiques aux limites de la carte.

    ss = stateSpaceSE2;
    ss.StateBounds = [map.XWorldLimits; map.YWorldLimits; [-pi pi]];

    Créez un validateur d'état avec stateSpaceSE2 en utilisant la carte et définissez la distance de validation.

    sv = validatorOccupancyMap(ss,Map=map);
    sv.ValidationDistance = 0.01;

    Créez un objet plannerPRM .

    planner = plannerPRM(ss,sv);

    Récupérez le graphique en tant qu’objet digraphe.

    graph = graphData(planner);

    Extrayez les nœuds et les arêtes du graphique.

    edges = table2array(graph.Edges);
    nodes = table2array(graph.Nodes);

    Spécifiez les états de départ et d’objectif.

    start = [0.5 0.5 0];
    goal = [2.5 0.2 0];

    Tracer une carte et un graphique.

    show(sv.Map)
    hold on
    plot(nodes(:,1),nodes(:,2),"*","Color","b","LineWidth",2)
    for i = 1:size(edges,1)
        % Samples states at distance 0.02 meters.
        states = interpolate(ss,nodes(edges(i,1),:), ...
                             nodes(edges(i,2),:),0:0.02:1);
        plot(states(:,1),states(:,2),"Color","b")
    end
    plot(start(1),start(2),"*","Color","g","LineWidth",3)
    plot(goal(1),goal(2),"*","Color","r","LineWidth",3)

    Planifiez un chemin avec les paramètres par défaut. Définissez la valeur de départ rng pour la répétabilité.

    rng(100,"twister");
    [pthObj, solnInfo] = plan(planner,start,goal);

    Visualisez les résultats.

    if solnInfo.IsPathFound
        interpolate(pthObj,1000);
        plot(pthObj.States(:,1),pthObj.States(:,2), ...
             "Color",[0.85 0.325 0.098],"LineWidth",2)
    else
        disp("Path not found")
    end
    hold off

    Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 103 objects of type image, line.

    Configurez le générateur de nombres aléatoires pour un résultat reproductible.

    rng(1,"twister");

    Chargez une carte d'occupation 3D d'un pâté de maisons dans l'espace de travail. Spécifiez le seuil pour considérer les cellules 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([0 220;0 220;0 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éé. Attribuez la carte d'occupation à l'objet validateur d'état. Spécifiez l’intervalle de distance d’échantillonnage.

    sv = validatorOccupancyMap3D(ss, ...
         Map = omap, ...
         ValidationDistance = 0.1);

    Créez un planificateur de chemin de feuille de route probabiliste avec une distance de connexion maximale accrue.

    planner = plannerPRM(ss,sv);

    Spécifiez les poses 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 le chemin.

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

    Visualisez le chemin prévu.

    show(omap)
    axis equal
    view([-10 55])
    hold on
    % Start state
    scatter3(start(1,1),start(1,2),start(1,3),"g","filled")
    % Goal state
    scatter3(goal(1,1),goal(1,2),goal(1,3),"r","filled")
    % Path
    plot3(pthObj.States(:,1),pthObj.States(:,2),pthObj.States(:,3), ...
          "r-",LineWidth=2)

    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.

    Références

    [1] L.E. Kavraki, P. Svestka, J.C. Latombe, M.H. Overmars, "Probabilistic roadmaps for path planning in high-dimensional configuration spaces," IEEE Transactions on Robotics and Automation, Vol. 12, No. 4, pp. 566-580, Aug 1996.

    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 R2022a

    développer tout