Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

plannerHybridAStar

Planificador de rutas híbrido A*

Desde R2019b

Descripción

El objeto planificador de ruta Hybrid A* genera una ruta suave en un espacio 2D determinado para vehículos con restricciones no holonómicas.

El objeto plannerHybridAStar utiliza la conexión Reeds-Shepp para encontrar una ruta libre de obstáculos. Puede modificar el comportamiento de la conexión ajustando propiedades como MinTurningRadius, ForwardCost y ReverseCost. Puede usar la propiedad AnalyticExpansionInterval para configurar el ciclo para verificar la conexión Reeds-Shepp.

Nota

El planificador híbrido A* comprueba las colisiones en el mapa interpolando las primitivas de movimiento y la expansión analítica basada en la propiedad ValidationDistance del objeto stateValidator . Si la propiedad ValidationDistance se establece en Inf, el objeto interpola según el tamaño de celda del mapa especificado en el validador de estado. Infle el mapa de ocupación antes de asignarlo al planificador para tener en cuenta el tamaño del vehículo.

Creación

Descripción

ejemplo

planner = plannerHybridAStar(validator) crea un objeto planificador de ruta utilizando el algoritmo híbrido A*. Especifique la entrada validator como un objeto validatorOccupancyMap o validatorVehicleCostmap . La entrada validator establece el valor de la propiedad StateValidator .

planner = plannerHybridAStar(validator,Name,Value) establece Propiedades del planificador de ruta utilizando uno o más argumentos de par nombre-valor. Encierre cada nombre de propiedad entre comillas simples (' ').

Propiedades

expandir todo

Validador de estado para planificación, especificado como objeto validatorOccupancyMap o validatorVehicleCostmap basado en el espacio de estados SE(2).

Longitud de las primitivas de movimiento que se generarán, especificadas como el par separado por comas que consta de 'MotionPrimitiveLength' y un escalar positivo en metros. Aumente la longitud para mapas grandes o entornos dispersos. Disminuya la longitud para ambientes densos.

Nota

'MotionPrimitiveLength' no puede exceder un cuarto de la longitud de la circunferencia de un círculo según el 'MinTurningRadius'.

Tipos de datos: double

Radio de giro mínimo del vehículo, especificado como el par separado por comas que consta de 'MinTurningRadius' y un escalar positivo en metros.

Nota

El valor de 'MinTurningRadius' se establece de modo que 'MotionPrimitiveLength' no pueda exceder un cuarto de la longitud de la circunferencia de un círculo basado en él.

Tipos de datos: double

Número de primitivas de movimiento que se generarán, especificado como el par separado por comas que consta de 'NumMotionPrimitives' y un escalar entero impar positivo mayor o igual a 3.

Multiplicador de coste para viajar en dirección de avance, especificado como el par separado por comas que consta de 'ForwardCost' y un escalar positivo. Incrementar el valor del coste para penalizar el avance.

Tipos de datos: double

Multiplicador de coste para viajar en dirección inversa, especificado como el par separado por comas que consta de 'ReverseCost' y un escalar positivo. Incrementar el valor del coste para penalizar el movimiento inverso.

Tipos de datos: double

Coste adicional por cambiar la dirección del movimiento, especificado como el par separado por comas que consta de 'DirectionSwitchingCost' y un escalar positivo. Incrementar el valor del coste para penalizar el cambio de dirección.

Tipos de datos: double

Intervalo para intentar la expansión analítica desde el nodo de menor coste disponible en esa instancia, especificado como el par separado por comas que consta de 'AnalyticExpansionInterval' y un escalar entero positivo.

El planificador de ruta Híbrido A* expande las primitivas de movimiento de los nodos con el coste más bajo disponible en esa instancia:

  • La cantidad de nodos a expandir depende de la cantidad de primitivas a generar tanto en la dirección como en su validez, el ciclo se repite hasta alcanzar 'AnalyticExpansionInterval' .

  • Luego, el planificador intenta una expansión analítica para alcanzar la pose objetivo del árbol utilizando un modelo de Reeds-Shepp. Si el intento falla, el planificador repite el ciclo.

Mejore el rendimiento del algoritmo reduciendo el intervalo para aumentar el número de comprobaciones de una conexión Reeds-Shepp hasta el objetivo final.

Distancia entre poses interpoladas en la ruta de salida, especificada como el par separado por comas que consta de 'InterpolationDistance' y un escalar positivo en metros.

Tipos de datos: double

Desde R2023b

Función de coste de transición, especificada como identificador de función. Este valor especifica el coste de la transición de un estado a otro. De forma predeterminada, la función plannerHybridAStar utiliza la distancia euclidiana como función de coste de transición. También puede especificar una función de coste de transición personalizada para calcular el coste de transición. El identificador de función para la función de coste personalizada debe tener al menos una entrada y devolver una salida. La salida puede ser un escalar o un vector que especifica el coste de transición para las primitivas de movimiento en dirección directa e inversa.

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

Tipos de datos: function_handle

Desde R2023b

Coste de la expansión analítica, especificado como identificador de función. De forma predeterminada, la función plannerHybridAStar utiliza expansiones analíticas basadas en el modelo de Reeds-Shepp. También puede especificar una función de costes personalizada para la expansión analítica. El identificador de función para la función de coste personalizada debe tener al menos una entrada y devolver una salida.

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

Tipos de datos: function_handle

Funciones del objeto

planEncuentra una ruta libre de obstáculos entre dos poses.
showVisualiza la ruta planificada

Ejemplos

contraer todo

Planifique una ruta libre de colisiones para un vehículo a través de un estacionamiento utilizando el algoritmo Hybrid A*.

Crear y asignar mapa al validador de estado

Cargue los valores de costes de las celdas en el mapa de costes de vehículos de un estacionamiento.

load parkingLotCostVal.mat % costVal

Cree un binaryOccupancyMap con valores de coste.

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

Crea un espacio de estados.

ss = stateSpaceSE2;

Actualice los límites del espacio de estados para que sean los mismos que los límites del mapa.

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

Cree un objeto de validación de estado para verificar colisiones.

sv = validatorOccupancyMap(ss);

Asigne el mapa al objeto del validador de estado.

sv.Map = map;

Planificar y visualizar la ruta

Inicialice el objeto plannerHybridAStar con el objeto validador de estado. Especifique las propiedades MinTurningRadius y MotionPrimitiveLength del planificador.

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

Defina las poses de inicio y meta para el vehículo como vectores [x, y, theta]. x e y especifican la posición en metros, y theta especifica el ángulo de orientación en radianes.

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

Planifica una ruta desde la pose inicial hasta la pose objetivo.

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

Visualice la ruta usando la función 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.

Referencias

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

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2019b

expandir todo