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.

plannerRRT

Cree un planificador RRT para planificación geométrica

Descripción

El objeto plannerRRT crea un planificador de árbol aleatorio de exploración rápida (RRT) 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 muestrea un estado aleatorio xrand en el espacio de estados.

  2. El planificador encuentra un estado xcerca 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 estado) a xrand.

  3. El planificador se expande desde xnear hacia xrand, hasta que se alcanza un estado xnew.

  4. Luego, el nuevo estado xnuevo se agrega 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 validador de estado, stateVal. El espacio de estados de stateVal debe ser el mismo que stateSpace. stateSpace y stateVal también establecen las propiedades StateSpace y StateValidator de planner.

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

ejemplo

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 validadores de estado como validatorOccupancyMap, validatorVehicleCostmap y validatorOccupancyMap3D.

Desde R2023b

Muestreador de espacio de estado utilizado para encontrar muestras de estado en el espacio de entrada, especificado como un objeto stateSamplerUniform, un objeto stateSamplerGaussian, un objeto stateSamplerMPNET o un objeto nav.StateSampler. De forma predeterminada, plannerRRT utiliza un 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, devuelto como true o false.

Para utilizar GoalReachedFcn personalizado en el flujo de trabajo de generación de código, esta propiedad debe configurarse 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. Puedes 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 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 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

expandir todo

Historial de versiones

Introducido en R2019b

expandir todo