plan
Planifier le chemin entre deux états
Syntaxe
Description
renvoie un path = plan(planner,startState,goalState)path de l'état de départ à l'état final.
[ renvoie également path,solutionInfo] = plan(planner,startState,goalState)solutionInfo qui contient les informations de solution de la planification du chemin.
Exemples
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.](planpathbetweentwostatesexample_01_fr.png)
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.](planpaththrough3doccupancymapusingrrtplannerexample_01_fr.png)
Arguments d'entrée
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
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 champs | Description |
|---|---|
IsPathFound | Indique 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
|
NumNodes | Nombre de nœuds dans l'arborescence de recherche à la fin du planificateur (à l'exclusion du nœud racine). |
NumIterations | Nombre de routines « étendre » exécutées. |
TreeData | Collection 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 Remarque Ce champ s'applique uniquement à l'objet
|
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
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Sélectionner un site web
Choisissez un site web pour accéder au contenu traduit dans votre langue (lorsqu'il est disponible) et voir les événements et les offres locales. D’après votre position, nous vous recommandons de sélectionner la région suivante : .
Vous pouvez également sélectionner un site web dans la liste suivante :
Comment optimiser les performances du site
Pour optimiser les performances du site, sélectionnez la région Chine (en chinois ou en anglais). Les sites de MathWorks pour les autres pays ne sont pas optimisés pour les visites provenant de votre région.
Amériques
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)