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.

plannerBiRRT

Cree un planificador RRT bidireccional para planificación geométrica

Desde R2021a

    Descripción

    El objeto plannerBiRRT es un planificador de consulta única que utiliza el algoritmo de árbol aleatorio (RRT) de exploración rápida bidireccional con una heurística de conexión opcional para aumentar la velocidad.

    El planificador RRT bidireccional crea un árbol con un nodo raíz en el estado inicial especificado y otro árbol con un nodo raíz en el estado objetivo especificado. Para extender cada árbol, el planificador genera un estado aleatorio y, si es válido, da un paso desde el nodo más cercano según la propiedad MaxConnectionDistance . Los árboles de inicio y meta alternan este proceso de extensión hasta que ambos árboles estén conectados. Si la propiedad EnableConnectHeuristic está habilitada, el proceso de extensión ignora la propiedad MaxConnectionDistance . Los estados no válidos o las conexiones que chocan con el entorno no se agregan al árbol.

    Creación

    Descripción

    planner = plannerBiRRT(stateSpace,stateVal) crea un planificador RRT bidireccional 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. Los argumentos stateSpace y stateVal también establecen las propiedades StateSpace y StateValidator , respectivamente, del planificador. .

    ejemplo

    planner = plannerBiRRT(___,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 las MaxConnectionDistance, MaxIterations, MaxNumTreeNodes y EnableConnectHeuristic 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 estados utilizando la clase 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 plannerBiRRT utiliza muestreo de estado uniforme.

    Longitud máxima entre configuraciones planificadas, especificada como un escalar positivo.

    Si la propiedad EnableConnectHeuristic se establece en true, el objeto ignora esta distancia al conectar los dos árboles durante la etapa de conexión.

    Ejemplo: MaxConnectionDistance=0.3

    Tipos de datos: single | double

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

    Ejemplo: MaxIterations=2500

    Tipos de datos: single | double

    Número máximo de nodos en el árbol de búsqueda, especificado como un entero positivo.

    Ejemplo: MaxNumTreeNodes=2500

    Tipos de datos: single | double

    Únase directamente a los árboles durante la fase de conexión del planificador, especificado como un 0 (false) o 1 (true).

    Establecer esta propiedad en true hace que el objeto ignore la propiedad MaxConnectionDistance al intentar conectar los dos árboles.

    Ejemplo: EnableConnectHeuristic=true

    Tipos de datos: logical

    Funciones del objeto

    planPlanificar ruta entre dos estados
    copyCrear una copia profunda del objeto del planificador

    Ejemplos

    contraer todo

    Utilice el objeto plannerBiRRT para planificar una ruta entre dos estados en un entorno con obstáculos. Visualice la ruta planificada con estados interpolados.

    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 por metro.

    load exampleMaps
    map = occupancyMap(ternaryMap,10);

    Asigne el mapa de ocupación al objeto validador de estado. Especifique el intervalo de distancia de muestreo.

    sv.Map = map;
    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 = plannerBiRRT(ss,sv);
    planner.MaxConnectionDistance = 0.3;

    Especifique los estados de inicio y objetivo.

    start = [20 10 0];
    goal = [40 40 0];

    Planifica una ruta. Debido a la aleatoriedad del algoritmo RRT, establezca la semilla rng para la repetibilidad.

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

    Muestra el número de iteraciones necesarias para que el árbol converja.

    fprintf("Number of iterations: %d\n",solnInfo.NumIterations)
    Number of iterations: 346
    

    Visualiza los resultados.

    show(map)
    hold on
    % Plot start pose and goal pose
    plot(start(1), start(2),plannerLineSpec.start{:});
    plot(goal(1), goal(2), plannerLineSpec.goal{:});
    % Start tree expansion
    plot(solnInfo.StartTreeData(:,1),solnInfo.StartTreeData(:,2), ...
        plannerLineSpec.tree{:})
    % Goal tree expansion
    plot(solnInfo.GoalTreeData(:,1),solnInfo.GoalTreeData(:,2), ...
        plannerLineSpec.goalTree{:})
    % Draw path
    plot(pthObj.States(:,1),pthObj.States(:,2),plannerLineSpec.path{:})
    legend
    hold off

    Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 6 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, Tree, Goal Tree, Path.

    Vuelva a planificar la ruta con la propiedad EnableConnectHeuristic establecida en verdadero.

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

    Muestra el número de iteraciones necesarias para que el árbol converja. Observe que el planificador requiere significativamente menos iteraciones en comparación con cuando la propiedad EnableConnectHeuristic se establece en falso.

    fprintf("Number of iterations: %d\n",solnInfo.NumIterations)
    Number of iterations: 192
    

    Visualiza los resultados.

    figure
    show(map)
    hold on
    % Start tree expansion
    % Plot start pose and goal pose
    plot(start(1), start(2),plannerLineSpec.start{:});
    plot(goal(1), goal(2), plannerLineSpec.goal{:});
    plot(solnInfo.StartTreeData(:,1),solnInfo.StartTreeData(:,2), ...
        plannerLineSpec.tree{:})
    % Goal tree expansion
    plot(solnInfo.GoalTreeData(:,1),solnInfo.GoalTreeData(:,2), ...
       plannerLineSpec.goalTree{:})
    % Draw path
    plot(pthObj.States(:,1),pthObj.States(:,2),plannerLineSpec.path{:})
    legend
    hold off

    Figure contains an axes object. The axes object with title Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains 6 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, Tree, Goal Tree, Path.

    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 bidireccional con una distancia máxima de conexión aumentada y un número máximo reducido de iteraciones. Establezca la propiedad EnableConnectHeuristic en verdadero.

    planner = plannerBiRRT(ss,sv, ...
              MaxConnectionDistance = 50, ...
              MaxIterations = 1000, ...
              EnableConnectHeuristic = true);

    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")
    % Start tree expansion
    plot3(solnInfo.StartTreeData(:,1),solnInfo.StartTreeData(:,2), ...
          solnInfo.StartTreeData(:,3),".-",Color="g")
    % Goal state
    scatter3(goal(1,1),goal(1,2),goal(1,3),"y","filled")
    % Goal tree expansion
    plot3(solnInfo.GoalTreeData(:,1),solnInfo.GoalTreeData(:,2), ...
          solnInfo.GoalTreeData(:,3),".-",Color="y")
    % Path
    plot3(pthObj.States(:,1),pthObj.States(:,2),pthObj.States(:,3), ...
          "m-",LineWidth=2)

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

    Referencias

    [1] Kuffner, J. J., and S. M. LaValle. “RRT-Connect: An Efficient Approach to Single-Query Path Planning.” In Proceedings 2000 ICRA. Millennium Conference. IEEE International Conference on Robotics and Automation. Symposia Proceedings (Cat. No.00CH37065), 2:995–1001. San Francisco, CA, USA: IEEE, 2000. https://doi:10.1109/ROBOT.2000.844730.

    Capacidades ampliadas

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

    Historial de versiones

    Introducido en R2021a

    expandir todo