Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l'ultima versione in inglese.

plannerHybridAStar

Pianificatore di percorsi Hybrid A*

Descrizione

L'oggetto pianificatore di percorsi Hybrid A* genera un percorso regolare in una data mappa 2D per veicoli con vincoli non olonomi. L'approccio applica l'algoritmo A* allo spazio di stato cinematico 3D del veicolo con variabili di stato (x, y, theta). Inoltre, utilizza l'espansione analitica di Reed-Shepp per migliorare la velocità di ricerca.

È possibile modificare il comportamento della connessione regolando proprietà come MinTurningRadius, ForwardCost e ReverseCost. È possibile utilizzare la proprietà AnalyticExpansionInterval per impostare il ciclo per verificare la connessione Reeds-Shepp.

Nota

Il pianificatore Hybrid A* verifica le collisioni nella mappa interpolando le primitive di movimento e l'espansione analitica in base alla proprietà ValidationDistance dell'oggetto stateValidator. Se la proprietà ValidationDistance è impostata su Inf, l'oggetto esegue l'interpolazione in base alla dimensione della cella della mappa specificata nel validatore di stato. Prima di assegnarla al pianificatore, ampliare la mappa di occupazione per tenere conto delle dimensioni del veicolo.

Creazione

Descrizione

planner = plannerHybridAStar(validator) crea un oggetto pianificatore di percorsi utilizzando l'algoritmo Hybrid A*. Specificare l'input validator come oggetto validatorOccupancyMap o validatorVehicleCostmap. L'input validator imposta il valore della proprietà StateValidator.

esempio

planner = plannerHybridAStar(validator,Name,Value) imposta Proprietà del pianificatore di percorsi utilizzando uno o più argomenti di coppia nome-valore. Racchiudere ciascun nome di proprietà tra virgolette singole (' ').

Proprietà

espandi tutto

Validatore di stato per la pianificazione, specificato come oggetto validatorOccupancyMap o validatorVehicleCostmap in base allo spazio di stato SE(2).

Lunghezza delle primitive di movimento da generare, specificata come coppia separata da virgole composta da 'MotionPrimitiveLength' e uno scalare positivo in metri. Aumentare la lunghezza per mappe di grandi dimensioni o ambienti sparsi. Ridurre la lunghezza in caso di ambienti densi.

Nota

'MotionPrimitiveLength' non può superare un quarto della lunghezza della circonferenza di un cerchio basata su 'MinTurningRadius'.

Tipi di dati: double

Raggio minimo di sterzata del veicolo, specificato come coppia di valori separati da virgole composta da 'MinTurningRadius' e uno scalare positivo in metri.

Nota

Il valore di 'MinTurningRadius' è impostato in modo tale che 'MotionPrimitiveLength' non possa superare un quarto della lunghezza della circonferenza di un cerchio basato su di esso.

Tipi di dati: double

Numero di primitive di movimento da generare, specificato come coppia separata da virgole composta da 'NumMotionPrimitives' e uno scalare intero dispari positivo maggiore o uguale a 3.

Moltiplicatore del costo per viaggiare in avanti, specificato come coppia separata da virgole composta da 'ForwardCost' e uno scalare positivo. Aumentare il valore del costo per penalizzare il movimento in avanti.

Tipi di dati: double

Moltiplicatore del costo per viaggiare in direzione inversa, specificato come coppia separata da virgole composta da 'ReverseCost' e uno scalare positivo. Aumentare il valore del costo per penalizzare il movimento in retromarcia.

Tipi di dati: double

Costo additivo per il cambio di direzione del movimento, specificato come coppia separata da virgole composta da 'DirectionSwitchingCost' e uno scalare positivo. Aumentare il valore del costo per penalizzare il cambio di direzione.

Tipi di dati: double

Intervallo per tentare l'espansione analitica dal nodo con il costo più basso disponibile in quell'istanza, specificato come coppia separata da virgole composta da 'AnalyticExpansionInterval' e uno scalare intero positivo.

Il pianificatore di percorsi Hybrid A* espande le primitive di movimento dai nodi con il costo più basso disponibile in quell'istanza:

  • Il numero di nodi da espandere dipende dal numero di primitive da generare sia nella direzione che nella loro validità; il ciclo si ripete finché non si raggiunge 'AnalyticExpansionInterval'.

  • Il pianificatore tenta quindi un'espansione analitica per raggiungere la posa obiettivo dall'albero utilizzando un modello di Reeds-Shepp. Se il tentativo fallisce, il pianificatore ripete il ciclo.

Migliorare le prestazioni dell'algoritmo riducendo l'intervallo per aumentare il numero di controlli per una connessione Reeds-Shepp all'obiettivo finale.

Distanza tra pose interpolate nel percorso di output, specificata come coppia separata da virgole composta da 'InterpolationDistance' e uno scalare positivo in metri.

Tipi di dati: double

Da R2023b

Funzione di costo di transizione, specificata come funzione handle. Questo valore specifica il costo per la transizione da uno stato all'altro. Per impostazione predefinita, la funzione plannerHybridAStar utilizza la distanza euclidea come funzione di costo di transizione. È anche possibile specificare una funzione di costo di transizione personalizzata per calcolare il costo di transizione. La funzione handle per la funzione di costo personalizzata deve avere almeno un input e restituire un output. L'output può essere uno scalare o un vettore che specifica il costo di transizione per le primitive di movimento in direzione avanti e indietro.

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

Tipi di dati: function_handle

Da R2023b

Costo per l'espansione analitica, specificato come funzione handle. Per impostazione predefinita, la funzione plannerHybridAStar utilizza espansioni analitiche basate sul modello Reeds-Shepp. È anche possibile specificare una funzione di costo personalizzata per l'espansione analitica. La funzione handle per la funzione di costo personalizzata deve avere almeno un input e restituire un output.

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

Tipi di dati: function_handle

Funzioni oggetto

planFind obstacle-free path between two poses
showVisualize the planned path

Esempi

comprimi tutto

Pianifica un percorso privo di collisioni per un veicolo attraverso un parcheggio utilizzando l'algoritmo Hybrid A*.

Crea e assegna la mappa al validatore di stato

Carica i valori dei costi delle celle nella mappa dei costi dei veicoli di un parcheggio.

load parkingLotCostVal.mat % costVal

Crea un binaryOccupancyMap con valori di costo.

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

Creare uno spazio di stato.

ss = stateSpaceSE2;

Aggiornare i limiti dello spazio di stato in modo che siano uguali ai limiti della mappa.

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

Creare un oggetto validatore di stato per il controllo delle collisioni.

sv = validatorOccupancyMap(ss);

Assegna la mappa all'oggetto validatore di stato.

sv.Map = map;

Pianifica e visualizza il percorso

Inizializzare l'oggetto plannerHybridAStar con l'oggetto validatore di stato. Specificare le proprietà MinTurningRadius e MotionPrimitiveLength del planner.

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

Definisci le posizioni di partenza e di arrivo del veicolo come vettori [x, y, theta]. x e y specificano la posizione in metri, mentre theta specifica l'angolo di orientamento in radianti.

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

Pianifica un percorso dalla posa iniziale a quella finale.

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

Visualizza il percorso utilizzando la funzione 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.

Riferimenti

[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.

Funzionalità estese

espandi tutto

Generazione di codice C/C++
Genera codice C e C++ con MATLAB® Coder™.

Cronologia versioni

Introdotto in R2019b

espandi tutto