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.

plannerRRTStar

Cree un planificador de ruta RRT óptimo (RRT*)

Desde R2019b

Descripción

El objeto plannerRRTStar crea un planificador RRT asintóticamente óptimo, RRT*. El algoritmo RRT* converge a una solución óptima en términos de la distancia del espacio de estados. Además, su tiempo de ejecución es un factor constante del tiempo de ejecución del algoritmo RRT. RRT* se utiliza para resolver problemas de planificación geométrica. Un problema de planificación geométrica requiere que dos estados aleatorios cualesquiera extraídos del espacio de estados puedan conectarse.

Creación

Descripción

planner = plannerRRTStar(stateSpace,stateVal) crea un planificador RRT* a partir de un objeto de espacio de estado, stateSpace, y un objeto de validador de estado, stateVal. El espacio de estado de stateVal debe ser el mismo que stateSpace. stateSpace y stateVal también establece las propiedades StateSpace y StateValidator del planner objeto.

ejemplo

planner = plannerRRTStar(___,Name=Value) establece propiedades usando uno o más argumentos de nombre-valor además de los argumentos de entrada en la sintaxis anterior. Puede especificar StateSampler, BallRadiusConstant, ContinueAfterGoalReached, MaxNumTreeNodes, MaxIterations, MaxConnectionDistance, GoalReachedFcn y GoalBias propiedades como argumentos de nombre-valor.

Propiedades

expandir todo

Espacio de estados para el planificador, especificado como un objeto de espacio de estados. Puede utilizar objetos de espacio de estados como stateSpaceSE2, stateSpaceDubins, stateSpaceReedsShepp y stateSpaceSE3. También puede personalizar un objeto de espacio de estado utilizando el objeto nav.StateSpace .

Validador de estado para el planificador, especificado como objeto de validador de estado. Puede utilizar objetos de validación de estado como validatorOccupancyMap, validatorVehicleCostmap y validatorOccupancyMap3D.

Desde R2023b

Muestra de espacio de estados utilizada para encontrar muestras de estados en el espacio de entrada, especificada como un objeto stateSamplerUniform , objeto stateSamplerGaussian , objeto stateSamplerMPNET , o nav.StateSampler objeto. De forma predeterminada, el plannerRRTStar utiliza muestreo de estado uniforme.

Constante utilizada para estimar el radio de búsqueda de vecinos cercanos, especificado como un escalar positivo. El radio se estima de la siguiente manera:

r=min(γ(log(n)n)1d,η)

donde:

  • γ — El valor de la propiedad BallRadiusConstant

  • n — Número actual de nodos en el árbol

  • d — Dimensión del espacio de estados

  • η — El valor de la propiedad MaxConnectionDistance

γ se define de la siguiente manera:

γ=2d(1+1d)(VFreeVBall)

donde:

  • VFree — Volumen libre aproximado en el espacio de búsqueda

  • VBall — Volumen de la bola unitaria en dimensiones d

Las fórmulas anteriores definen un BallRadiusConstant de tamaño "apropiado" para un espacio determinado, lo que significa que a medida que crece el número de nodos que llenan el espacio y se reduce el radio, el número esperado de vecinos crece logarítmicamente. Los valores más altos darán como resultado un número promedio más alto de vecinos dentro de la bola d por iteración, lo que generará más candidatos para recableado. Sin embargo, valores por debajo de este mínimo sugerido podrían dar lugar a un único vecino cercano, lo que no produce resultados asintóticamente óptimos.

Ejemplo: BallRadiusConstant=80

Tipos de datos: single | double

Decida si el planificador continúa optimizando después de alcanzar el objetivo, especificado como false o true. El planificador también finaliza independientemente del valor de esta propiedad si se alcanza el número máximo de iteraciones o el número máximo de nodos del árbol.

Ejemplo: ContinueAfterGoalReached=true

Tipos de datos: logical

Número máximo de nodos en el árbol de búsqueda (excluido el nodo raíz), especificado como un entero positivo.

Ejemplo: MaxNumTreeNodes=2500

Tipos de datos: single | double

Número máximo de iteraciones, especificado como un entero positivo.

Ejemplo: MaxIterations=2500

Tipos de datos: single | double

Longitud máxima de un movimiento permitida en el árbol, especificada como escalar.

Ejemplo: MaxConnectionDistance=0.3

Tipos de datos: single | double

Función de callback para determinar si se alcanza el objetivo, especificada como un identificador de función. Puede crear su propia función de objetivo alcanzado. La función debe seguir esta sintaxis:

 function isReached = myGoalReachedFcn(planner,currentState,goalState)

donde:

  • planner : el objeto planificador creado, especificado como objeto plannerRRTStar .

  • currentState — El estado actual, especificado como un vector real de tres elementos.

  • goalState — El estado objetivo, especificado como un vector real de tres elementos.

  • isReached : una variable booleana para indicar si el estado actual ha alcanzado el estado objetivo, devuelta como true o false.

Para utilizar GoalReachedFcn personalizado en el flujo de trabajo de generación de código, esta propiedad debe establecerse en un identificador de función personalizado antes de llamar a la función del plan y no se puede cambiar después de la inicialización.

Tipos de datos: function handle

Probabilidad de elegir el estado objetivo durante el muestreo de estados, especificado como un escalar real en el rango [0,1]. La propiedad define la probabilidad de elegir el estado objetivo real durante el proceso de selección aleatoria de estados del espacio de estados. Puede comenzar estableciendo la probabilidad en un valor pequeño como 0.05.

Ejemplo: GoalBias=0.1

Tipos de datos: single | double

Funciones del objeto

planPlanificar ruta entre dos estados
copyCrear copia del objeto del planificador

Ejemplos

contraer todo

Crea un espacio de estados.

ss = stateSpaceSE2;

Cree un validador de estado basado en occupancyMap utilizando el espacio de estado creado.

sv = validatorOccupancyMap(ss);

Cree un mapa de ocupación a partir de un mapa de ejemplo y establezca la resolución del mapa en 10 celdas/metro.

load exampleMaps.mat
map = occupancyMap(simpleMap,10);
sv.Map = map;

Establezca la distancia de validación para el validador.

sv.ValidationDistance = 0.01;

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 planificador de rutas RRT* y permita una mayor optimización una vez alcanzado el objetivo. Reduzca las iteraciones máximas y aumente la distancia máxima de conexión.

planner = plannerRRTStar(ss,sv, ...
          ContinueAfterGoalReached=true, ...
          MaxIterations=2500, ...
          MaxConnectionDistance=0.3);

Establezca los estados de inicio y objetivo.

start = [0.5 0.5 0];
goal = [2.5 0.2 0];

Planifique una ruta con la configuración predeterminada.

rng(100,'twister') % repeatable result
[pthObj,solnInfo] = plan(planner,start,goal);

Visualiza los resultados.

map.show
hold on
% Tree expansion
plot(solnInfo.TreeData(:,1),solnInfo.TreeData(:,2),'.-')
% Draw path
plot(pthObj.States(:,1),pthObj.States(:,2),'r-','LineWidth',2)

Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 3 objects of type image, line.

Cargue un mapa de ocupación tridimensional de una manzana de la ciudad en el espacio de trabajo. Especifique el umbral para considerar las celdas libres de obstáculos.

mapData = load("dMapCityBlock.mat");
omap = mapData.omap;
omap.FreeThreshold = 0.5;

Infle el mapa de ocupación para agregar una zona de amortiguamiento para una operación segura alrededor de los obstáculos.

inflate(omap,1)

Cree un objeto de espacio de estados SE(3) con límites para las variables de estado.

ss = stateSpaceSE3([0 220;0 220;0 100;inf inf;inf inf;inf inf;inf inf]);

Cree un validador de estado de mapa de ocupación 3D utilizando el espacio de estado creado. Asigne el mapa de ocupación al objeto validador de estado. Especifique el intervalo de distancia de muestreo.

sv = validatorOccupancyMap3D(ss, ...
     Map = omap, ...
     ValidationDistance = 0.1);

Cree un planificador de ruta en estrella RRT con una distancia máxima de conexión aumentada y un número máximo reducido de iteraciones. Especifique una función de objetivo personalizada que determine que una ruta alcanza el objetivo si la distancia euclidiana al objetivo está por debajo de un umbral de 1 metro.

planner = plannerRRTStar(ss,sv, ...
          MaxConnectionDistance = 50, ...
          MaxIterations = 1000, ...
          GoalReachedFcn = @(~,s,g)(norm(s(1:3)-g(1:3))<1), ...
          GoalBias = 0.1);

Especifique las poses de inicio y objetivo.

start = [40 180 25 0.7 0.2 0 0.1];
goal = [150 33 35 0.3 0 0.1 0.6];

Configure el generador de números aleatorios para obtener resultados repetibles.

rng(1,"twister");

Planifique la ruta.

[pthObj,solnInfo] = plan(planner,start,goal);

Visualice la ruta planificada.

show(omap)
axis equal
view([-10 55])
hold on
% Start state
scatter3(start(1,1),start(1,2),start(1,3),"g","filled")
% Goal state
scatter3(goal(1,1),goal(1,2),goal(1,3),"r","filled")
% Path
plot3(pthObj.States(:,1),pthObj.States(:,2),pthObj.States(:,3), ...
      "r-",LineWidth=2)

Figure contains an axes object. The axes object with title Occupancy Map, xlabel X [meters], ylabel Y [meters] contains 4 objects of type patch, scatter, line.

Más acerca de

expandir todo

Referencias

[1] Karaman, S. and E. Frazzoli. "Sampling-Based Algorithms for Optimal Motion Planning." The International Journal of Robotics Research. Vol. 30, Number 7, 2011, pp 846 – 894.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b

expandir todo