Contenu principal

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

plan

Trouver un chemin sans obstacle entre deux poses

Description

path = plan(planner,start,goal) calcule un chemin sans obstacle entre les poses de départ et d'objectif, spécifié comme vecteurs [x y theta] , en utilisant l'objet d'entrée plannerHybridAStar .

exemple

[path,directions] = plan(planner,start,goal) renvoie également la direction du mouvement pour chaque pose le long du chemin, directions, sous forme de vecteur colonne. Une valeur de 1 indique le sens avant et une valeur de -1 indique le sens inverse. La fonction renvoie un vecteur colonne vide lorsque le planificateur ne parvient pas à trouver un chemin.

[path,directions,solutionInfo] = plan(planner,start,goal) renvoie également solutionInfo qui contient les informations de solution de la planification du chemin en tant que structure.

[___] = plan(___,"SearchMode",mode) spécifie le mode d'algorithme de recherche mode en plus de toute combinaison d'arguments des syntaxes précédentes.

Exemples

réduire tout

Planifiez un trajet sans collision pour un véhicule dans un parking à l'aide de l'algorithme Hybrid A*.

Créer et attribuer une carte au validateur d'état

Chargez les valeurs de coût des cellules dans la carte des coûts des véhicules d'un parking.

load parkingLotCostVal.mat % costVal

Créez un binaryOccupancyMap avec des valeurs de coût.

resolution = 3;
map = binaryOccupancyMap(costVal,resolution);

Créez un espace d'état.

ss = stateSpaceSE2;

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 un objet validateur d'état pour la vérification des collisions.

sv = validatorOccupancyMap(ss);

Attribuez la carte à l’objet validateur d’état.

sv.Map = map;

Planifier et visualiser le chemin

Initialisez l'objet plannerHybridAStar avec l'objet validateur d'état. Spécifiez les propriétés MinTurningRadius et MotionPrimitiveLength du planificateur.

planner = plannerHybridAStar(sv, ...
                             MinTurningRadius=4, ...
                             MotionPrimitiveLength=6);

Définissez les poses de départ et d'objectif pour le véhicule sous forme de vecteurs [x, y, theta]. x et y précisent la position en mètres, et thêta précise l'angle d'orientation en radians.

startPose = [4 9 pi/2]; % [meters, meters, radians]
goalPose = [30 19 -pi/2];

Planifiez un chemin depuis la pose de départ jusqu'à la pose d'objectif.

refpath = plan(planner,startPose,goalPose,SearchMode='exhaustive');     

Visualisez le chemin à l’aide de la fonction show.

show(planner)

Figure contains an axes object. The axes object with title Hybrid A* Path Planner, xlabel X [meters], ylabel Y [meters] contains 8 objects of type image, line, scatter. These objects represent Reverse Motion Primitives, Forward Motion Primitives, Forward Path, Path Points, Orientation, Start, Goal.

Arguments d'entrée

réduire tout

Planificateur de chemin hybride A*, spécifié comme objet plannerHybridAStar .

Emplacement de départ du chemin, spécifié sous la forme d'un vecteur 1 x 3 sous la forme [x y theta]. x et y spécifient la position en mètres, et theta spécifie l'angle d'orientation en radians.

Exemple : [5 5 pi/2]

Types de données : double

Emplacement final du chemin, spécifié sous la forme d'un vecteur 1 x 3 sous la forme [x y theta]. x et y spécifient la position en mètres, et theta spécifie l'angle d'orientation en radians.

Exemple : [45 45 pi/4]

Types de données : double

Mode d'algorithme de recherche, spécifié comme l'une de ces options :

  • "greedy" — Donnez la priorité à la recherche d'une solution dans les plus brefs délais en moyenne.

  • "exhaustive" — Augmentez le nombre de nœuds dans l'ensemble ouvert pour optimiser la solution.

Exemple : plan(phastar,start,goal,"SearchMode","greedy")

Types de données : string | char

Arguments de sortie

réduire tout

Chemin sans obstacle, renvoyé sous la forme d'un objet navPath .

Direction du mouvement pour chaque pose le long du chemin, renvoyée sous forme de vecteur colonne de 1 s (avant) et –1 s (arrière).

Types de données : double

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.
NumNodesNombre de nœuds dans l'arborescence de recherche à la fin du planificateur (à l'exclusion du nœud racine).
NumIterationsNombre d'itérations de planification exécutées.

Types de données : struct

Capacités étendues

développer tout

Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.

Historique des versions

Introduit dans R2019b

développer tout