Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Roadmaps probabilísticos (PRM)

Una hoja de ruta probabilística (PRM) es un gráfico de red de posibles trayectorias en un mapa dado basado en espacios libres y ocupados. La clase genera aleatoriamente nodos y crea conexiones entre estos nodos en función de los parámetros del algoritmo PRM.robotics.PRM Los nodos se conectan en función de las ubicaciones de obstáculos especificadas en y en el especificado.MapConnectionDistance Puede personalizar el número de nodos, para ajustarse a la complejidad del mapa y el deseo de encontrar la ruta más eficiente.NumNodes El algoritmo PRM utiliza la red de nodos conectados para encontrar una ruta libre de obstáculos desde un inicio hasta una ubicación final. Para planear una ruta de acceso a través de un entorno eficazmente, ajuste las propiedades y.NumNodesConnectionDistance

Al crear o actualizar la clase, las ubicaciones de nodo se generan aleatoriamente, lo que puede afectar a la ruta de acceso final entre varias iteraciones.robotics.PRM Esta selección de nodos se produce cuando se especifica inicialmente, se cambian los parámetros o se llama.Mapupdate Para obtener resultados coherentes con la misma ubicación de nodo, utilice para guardar el estado de la generación de números aleatorios.rng Vea un ejemplo usando.Ajuste la distancia de conexiónrng

Ajuste el número de nodos

Utilice la propiedad en el objeto para ajustar el algoritmo. especifica el número de puntos, o nodos, colocados en el mapa, que el algoritmo utiliza para generar una hoja de ruta.NumNodesPRMNumNodes Usando la propiedad como un umbral para la distancia, el algoritmo conecta todos los puntos que no tienen obstáculos bloqueando la ruta directa entre ellos.ConnectionDistance

Aumentar el número de nodos puede aumentar la eficiencia de la ruta de acceso al dar rutas más factibles. Sin embargo, el aumento de la complejidad aumenta el tiempo de cálculo. Para obtener una buena cobertura del mapa, es posible que necesite un gran número de nodos. Debido a la colocación aleatoria de nodos, es posible que algunas áreas del mapa no tengan suficientes nodos para conectarse al resto del mapa. En este ejemplo, se crea un número grande y pequeño de nodos en una hoja de ruta.

Cargue un archivo de mapa como una matriz lógica y cree una cuadrícula de ocupación.simpleMaps

load exampleMaps.mat map = robotics.OccupancyGrid(simpleMap,2);

Cree una hoja de ruta sencilla con 50 nodos.

prmSimple = robotics.PRM(map,50); show(prmSimple)

Cree una hoja de ruta densa con 250 nodos.

prmComplex = robotics.PRM(map,250); show(prmComplex)

Los nodos adicionales aumentan la complejidad, pero producen más opciones para mejorar la ruta. Dados estos dos mapas, puede calcular un trayecto utilizando el algoritmo PRM y ver los efectos.

Calcule un camino simple.

startLocation = [2 1]; endLocation = [12 10]; path = findpath(prmSimple,startLocation,endLocation); show(prmSimple)

Calcule un trayecto complejo.

path = findpath(prmComplex, startLocation, endLocation); show(prmComplex)

El aumento de los nodos permite una trayectoria más directa, pero agrega más tiempo de cálculo para encontrar una trayectoria factible. Debido a la colocación aleatoria de puntos, la ruta no siempre es más directa o eficiente. El uso de un pequeño número de nodos puede hacer que las rutas sean peores que las representadas e incluso restringir la capacidad de encontrar una ruta de acceso completa.

Ajuste la distancia de conexión

Utilice la propiedad en el objeto para ajustar el algoritmo. es un umbral superior para los puntos que están conectados en la hoja de ruta.ConnectionDistancePRMConnectionDistance Cada nodo está conectado a todos los nodos dentro de esta distancia de conexión que no tienen obstáculos entre ellos. Al reducir la distancia de conexión, puede limitar el número de conexiones para reducir el tiempo de cálculo y simplificar el mapa. Sin embargo, una distancia reducida limita el número de trayectos disponibles desde los que encontrar un camino libre de obstáculos completo. Cuando trabaje con mapas simples, puede utilizar una distancia de conexión más alta con un pequeño número de nodos para aumentar la eficiencia. Para mapas complejos con muchos obstáculos, un mayor número de nodos con una distancia de conexión reducida aumenta la posibilidad de encontrar una solución.

Cargue un mapa como una matriz lógica y cree una cuadrícula de ocupación.simpleMap

load exampleMaps.mat map = robotics.OccupancyGrid(simpleMap,2);

Cree una hoja de ruta con 100 nodos y calcule la ruta. El valor predeterminado se establece en INF.ConnectionDistance Guarde los ajustes de generación de números aleatorios utilizando la función RNG. La configuración guardada le permite reproducir los mismos puntos y ver el efecto de cambiar.ConnectionDistance

rngState = rng; prm = robotics.PRM(map,100); startLocation = [2 1]; endLocation = [12 10]; path = findpath(prm,startLocation,endLocation); show(prm)

Recargue la configuración de la generación del número aleatorio para que el PRM utilice los mismos nodos. Inferior a 2 m.ConnectionDistance Mostrar la ruta calculada.

rng(rngState); prm.ConnectionDistance = 2; path = findpath(prm,startLocation,endLocation); show(prm)

Cree o actualice PRM

Cree o actualice su hoja de ruta. Para crear la hoja de ruta, llame o especifique la propiedad en el objeto.prm = robotics.PRM(map,__)MapPRM A continuación, llame a la, o método.updatefindpathshow En este momento, los nodos se generan aleatoriamente y se realizan las conexiones.

Esta hoja de ruta cambia solo si llama a actualizar o cambiar las propiedades en el objeto.PRM Cuando cambian las propiedades, cualquier método (, o) llamado en el objeto desencadena los puntos de la hoja de ruta y las conexiones que se recalculan.updatefindpathshow Dado que el cálculo del mapa puede ser intensivo en computación, puede reutilizar la misma hoja de ruta llamando con diferentes ubicaciones de inicio y finalización.findpath

Cargue el mapa, desde un archivo como una matriz lógica y cree una cuadrícula de ocupación.simpleMap.mat

load('exampleMaps.mat') map = robotics.BinaryOccupancyGrid(simpleMap,2);

Crear una hoja de ruta. Los nodos y las conexiones pueden tener un aspecto diferente debido a la colocación aleatoria de los nodos.

prm = robotics.PRM(map,100); show(prm)

Llame o cambie un parámetro para actualizar los nodos y las conexiones.updatePRM

update(prm) show(prm)

El algoritmo PRM recalcula la ubicación del nodo y genera una nueva red de nodos.

Referencias

[1] Kavraki, L.E., P. Svestka, J.-C. Latombe, and M.H. Overmars. "Probabilistic roadmaps for path planning in high-dimensional configuration spaces," IEEE Transactions on Robotics and Automation. Vol. 12, No. 4, Aug 1996 pp. 566—580.

Consulte también

| | |