Contenido principal

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*

Descripción

El objeto planificador de ruta híbrido A* genera una ruta suave en un mapa 2-D determinado para vehículos con restricciones no holonómicas. El enfoque aplica el algoritmo A* al espacio de estados cinemáticos 3D del vehículo con variables de estado (x, y, theta). Además, utiliza la expansión analítica Reed-Shepp para mejorar la velocidad de búsqueda.

Puede modificar el comportamiento de la conexión ajustando propiedades como MinTurningRadius, ForwardCost y ReverseCost. Puede utilizar la propiedad AnalyticExpansionInterval para establecer el ciclo para verificar la conexión Reeds-Shepp.

Nota

El planificador híbrido A* verifica si hay colisiones en el mapa interpolando las primitivas de movimiento y la expansión analítica según 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

planner = plannerHybridAStar(validator) crea un objeto planificador de rutas 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.

ejemplo

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

Propiedades

expandir todo

Validador de estado para planificación, especificado como un objeto validatorOccupancyMap o validatorVehicleCostmap según el espacio de estado SE(2).

Longitud de los primitivos de movimiento que se generarán, especificados 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 basado en '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 tal manera que 'MotionPrimitiveLength' no puede 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, especificadas como el par separado por comas que consta de 'NumMotionPrimitives' y un escalar entero impar positivo mayor o igual a 3.

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

Tipos de datos: double

Multiplicador de costo 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

Costo aditivo para 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 costo 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:

  • El número de nodos a expandir depende del número de primitivos 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 costo 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 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

Crea un binaryOccupancyMap con valores de costo.

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);

Define las posiciones inicial y final del vehículo como vectores [x, y, theta]. x y 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

expandir todo

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

Historial de versiones

Introducido en R2019b

expandir todo