Main Content

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

plan

Planifier le chemin entre deux états

Depuis R2019b

Description

path = plan(planner,startState,goalState) renvoie un path de l'état de départ à l'état final.

exemple

[path,solutionInfo] = plan(planner,startState,goalState) renvoie également solutionInfo qui contient les informations de solution de la planification du chemin.

Exemples

réduire tout

Créez un espace d'état.

ss = stateSpaceSE2;

Créez un validateur d'état basé sur occupancyMap en utilisant l'espace d'état créé.

sv = validatorOccupancyMap(ss);

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.

load exampleMaps
map = occupancyMap(simpleMap,10);
sv.Map = map;

Définissez la distance de validation pour le validateur.

sv.ValidationDistance = 0.01;

Mettre à jour les limites de l'espace d'état pour qu'elles soient identiques aux limites de la carte.

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

Créez le planificateur de chemin et augmentez la distance de connexion maximale.

planner = plannerRRT(ss,sv,MaxConnectionDistance=0.3);

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

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

Planifiez un chemin avec les paramètres par défaut.

rng(100,'twister'); % for repeatable result
[pthObj,solnInfo] = plan(planner,start,goal);

Visualisez les résultats.

show(map)
hold on
% Tree expansion
plot(solnInfo.TreeData(:,1),solnInfo.TreeData(:,2),'.-')
% Draw path
plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2)

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

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 RRT avec une distance de connexion maximale accrue et un nombre maximal d'itérations réduit. Spécifiez une fonction d'objectif personnalisée qui détermine qu'un chemin atteint l'objectif si la distance euclidienne jusqu'à la cible est inférieure à un seuil de 1 mètre.

planner = plannerRRT(ss,sv, ...
          MaxConnectionDistance = 50, ...
          MaxIterations = 1000, ...
          GoalReachedFcn = @(~,s,g)(norm(s(1:3)-g(1:3))<1), ...
          GoalBias = 0.1);

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];

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

rng(1,"twister");

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.

Arguments d'entrée

réduire tout

Planificateur de chemin, spécifié comme un objet plannerRRT ou un objet plannerRRTStar .

État de départ du chemin, spécifié comme un vecteur à valeur réelle d'élément N. N est la dimension de l'espace d'état.

Exemple : [1 1 pi/6]

Exemple : [40 180 25 0.7 0.2 0 0.1]

Types de données : single | double

État objectif du chemin, spécifié sous la forme d'un vecteur à valeur réelle d'élément N. N est la dimension de l'espace d'état.

Exemple : [2 2 pi/3]

Exemple : [150 33 35 0.3 0 0.1 0.6]

Types de données : single | double

Arguments de sortie

réduire tout

Un objet qui contient les informations de chemin planifié, renvoyées sous la forme d'un objet navPath .

Informations sur la solution, renvoyées sous forme de structure. Les champs de la structure sont :

Champs de solutionInfo

Des champsDescription
IsPathFoundIndique si un chemin est trouvé. Il renvoie sous la forme 1 si un chemin est trouvé. Sinon, il renvoie 0.
ExitFlag

Indique le statut de fin du planificateur, renvoyé sous la forme

  • 1 — si l'objectif est atteint

  • 2 — si le nombre maximum d'itérations est atteint

  • 3 — si le nombre maximum de nœuds est atteint

NumNodesNombre de nœuds dans l'arborescence de recherche à la fin du planificateur (à l'exclusion du nœud racine).
NumIterationsNombre de routines « étendre » exécutées.
TreeDataCollection d'états explorés qui reflète l'état de l'arborescence de recherche à la fin du planificateur. Notez que les valeurs NaN sont insérées comme délimiteurs pour séparer chaque arête individuelle.
PathCosts

Contient le coût du chemin à chaque itération. La valeur des itérations lorsque le chemin n'a pas atteint l'objectif est indiquée par un NaN. La taille du tableau est NumIterations-by-1. Le dernier élément contient le coût du chemin final.

Remarque

Ce champ s'applique uniquement à l'objet plannerRRTStar .

Types de données : structure

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 R2019b

Voir aussi

Objets

Fonctions