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.

plannerRRT

Cree un planificador RRT para planificación geométrica

Desde R2019b

Descripción

El objeto plannerRRT crea un planificador de árbol aleatorio (RRT) de exploración rápida para resolver problemas de planificación geométrica. RRT es un planificador de movimiento basado en árboles que construye un árbol de búsqueda de forma incremental a partir de muestras extraídas aleatoriamente de un espacio de estado determinado. El árbol finalmente abarca el espacio de búsqueda y conecta el estado inicial con el estado objetivo. El proceso general de crecimiento de los árboles es el siguiente:

  1. El planificador toma muestras de un estado aleatorio x rand en el espacio de estados.

  2. El planificador encuentra un estado x cerca que ya está en el árbol de búsqueda y es el más cercano (según la definición de distancia en el espacio de estados) a x rand.

  3. El planificador se expande desde x cerca hacia x rand, hasta alcanzar un estado x nuevo.

  4. Luego se agrega el nuevo estado x nuevo al árbol de búsqueda.

Para RRT geométrica, la expansión y conexión entre dos estados se puede encontrar analíticamente sin infringir las restricciones especificadas en el espacio de estados del objeto planificador.

Creación

Descripción

planner = plannerRRT(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.

ejemplo

planner = plannerRRT(___,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, 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 plannerRRT utiliza muestreo de estado uniforme.

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 evaluar si se alcanzó 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 plannerRRT .

  • 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
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 el planificador de rutas y aumente la distancia máxima de conexión.

planner = plannerRRT(ss,sv,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'); % for repeatable result
[pthObj,solnInfo] = plan(planner,start,goal);

Visualiza los resultados.

show(map)
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 3-D 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 rutas 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 = plannerRRT(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.

Referencias

[1] S.M. Lavalle and J.J. Kuffner. "Randomized Kinodynamic Planning." The International Journal of Robotics Research. Vol. 20, Number 5, 2001, pp. 378 – 400.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b

expandir todo