Main Content

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

plannerHybridAStar

Planificateur de chemin hybride A*

Depuis R2019b

Description

L'objet de planification de chemin Hybrid A* génère un chemin fluide dans un espace 2D donné pour les véhicules avec des contraintes non holonomiques.

L'objet plannerHybridAStar utilise la connexion Reeds-Shepp pour trouver un chemin sans obstacle. Vous pouvez modifier le comportement de la connexion en réglant des propriétés telles que MinTurningRadius, ForwardCost et ReverseCost. Vous pouvez utiliser la propriété AnalyticExpansionInterval pour définir le cycle afin de vérifier la connexion Reeds-Shepp.

Remarque

Le planificateur Hybrid A* vérifie les collisions dans la carte en interpolant les primitives de mouvement et l'expansion analytique basée sur la propriété ValidationDistance de l'objet stateValidator . Si la propriété ValidationDistance est définie sur Inf, l'objet interpole en fonction de la taille de cellule de la carte spécifiée dans le validateur d'état. Gonflez la carte d'occupation avant de l'attribuer au planificateur pour tenir compte de la taille du véhicule.

Création

Description

exemple

planner = plannerHybridAStar(validator) crée un objet planificateur de chemin à l'aide de l'algorithme Hybrid A*. Spécifiez l'entrée validator en tant qu'objet validatorOccupancyMap ou validatorVehicleCostmap . L'entrée validator définit la valeur de la propriété StateValidator .

planner = plannerHybridAStar(validator,Name,Value) définit Propriétés du planificateur de chemin en utilisant un ou plusieurs arguments de paire nom-valeur. Placez chaque nom de propriété entre guillemets simples (' ').

Propriétés

développer tout

Validateur d'état pour la planification, spécifié soit comme un validatorOccupancyMap ou validatorVehicleCostmap basé sur l'espace d'état SE(2).

Primitives de longueur de mouvement à générer, spécifiées comme une paire séparée par des virgules composée de 'MotionPrimitiveLength' et d'un scalaire positif en mètres. Augmentez la longueur pour les grandes cartes ou les environnements clairsemés. Diminuez la longueur pour les environnements denses.

Remarque

'MotionPrimitiveLength' ne peut pas dépasser le quart de la longueur de la circonférence d'un cercle basé sur le 'MinTurningRadius'.

Types de données : double

Rayon de braquage minimum du véhicule, spécifié comme la paire séparée par des virgules composée de 'MinTurningRadius' et d'un scalaire positif en mètres.

Remarque

La valeur de 'MinTurningRadius' est définie de telle sorte que le 'MotionPrimitiveLength' ne peut pas dépasser le quart de la longueur de la circonférence d'un cercle basé sur celui-ci.

Types de données : double

Nombre de primitives de mouvement à générer, spécifié sous la forme d'une paire séparée par des virgules composée de 'NumMotionPrimitives' et d'un scalaire entier impair positif supérieur ou égal à 3.

Multiplicateur de coût pour voyager vers l'avant, spécifié comme une paire séparée par des virgules composée de 'ForwardCost' et d'un scalaire positif. Augmentez la valeur du coût pour pénaliser le mouvement vers l’avant.

Types de données : double

Multiplicateur de coût pour voyager dans le sens inverse, spécifié comme une paire séparée par des virgules composée de 'ReverseCost' et d'un scalaire positif. Augmentez la valeur du coût pour pénaliser le mouvement inverse.

Types de données : double

Coût additif pour changer de direction de mouvement, spécifié comme la paire séparée par des virgules composée de 'DirectionSwitchingCost' et d'un scalaire positif. Augmentez la valeur du coût pour pénaliser les changements de direction.

Types de données : double

Intervalle pour tenter une expansion analytique à partir du nœud le moins coûteux disponible à cette instance, spécifié comme la paire séparée par des virgules composée de 'AnalyticExpansionInterval' et d'un scalaire entier positif.

Le planificateur de chemin Hybrid A* étend les primitives de mouvement à partir des nœuds ayant le coût le plus bas disponible à cette instance :

  • Le nombre de nœuds à développer dépend du nombre de primitives à générer à la fois dans la direction et dans leur validité, le cycle se répète jusqu'à ce que 'AnalyticExpansionInterval' soit atteint.

  • Le planificateur tente ensuite une expansion analytique pour atteindre la pose d'objectif à partir de l'arbre en utilisant un modèle Reeds-Shepp. Si la tentative échoue, le planificateur répète le cycle.

Améliorez les performances de l'algorithme en réduisant l'intervalle pour augmenter le nombre de vérifications d'une connexion Reeds-Shepp vers l'objectif final.

Distance entre les poses interpolées dans le chemin de sortie, spécifiée comme la paire séparée par des virgules composée de 'InterpolationDistance' et d'un scalaire positif en mètres.

Types de données : double

Depuis R2023b

Fonction de coût de transition, spécifiée comme descripteur de fonction. Cette valeur spécifie le coût de transition d'un état à un autre état. Par défaut, la fonction plannerHybridAStar utilise la distance euclidienne comme fonction de coût de transition. Vous pouvez également spécifier une fonction de coût de transition personnalisée pour calculer le coût de transition. Le handle de fonction de la fonction de coût personnalisée doit avoir au moins une entrée et renvoyer une sortie. La sortie peut être un scalaire ou un vecteur spécifiant le coût de transition pour les primitives de mouvement dans le sens avant et arrière.

Exemple : planner = plannerHybridAStar(validator,TransitionCostFcn=@(param1)customFcnName(param1));

Types de données : function_handle

Depuis R2023b

Coût de l’expansion analytique, spécifié sous forme de descripteur de fonction. Par défaut, la fonction plannerHybridAStar utilise des extensions analytiques basées sur le modèle Reeds-Shepp. Vous pouvez également spécifier une fonction de coût personnalisée pour le développement analytique. Le handle de fonction de la fonction de coût personnalisée doit avoir au moins une entrée et renvoyer une sortie.

Exemple : planner = plannerHybridAStar(validator,AnalyticalExpansionCostFcn=@(param1)customFcnName(param1));

Types de données : function_handle

Fonctions d'objet

planTrouver un chemin sans obstacle entre deux poses
showVisualisez le chemin prévu

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.

Références

[1] Dolgov, Dmitri, Sebastian Thrun, Michael Montemerlo, and James Diebel. Practical Search Techniques in Path Planning for Autonomous Driving. American Association for Artificial Intelligence, 2008.

[2] Petereit, Janko, Thomas Emter, Christian W. Frey, Thomas Kopfstedt, and Andreas Beutel. "Application of Hybrid A* to an Autonomous Mobile Robot for Path Planning in Unstructured Outdoor Environments." ROBOTIK 2012: 7th German Conference on Robotics. 2012, pp. 1-6.

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

développer tout