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.

plannerPRM

Cree un planificador de rutas de hojas de ruta probabilísticas

Desde R2022a

    Descripción

    El planificador de ruta probabilístico construye una hoja de ruta sin estados de inicio ni de objetivo. Utilice la función plan para encontrar una ruta libre de obstáculos entre los estados de inicio y objetivo especificados. Si la función plan no encuentra una ruta conectada entre los estados inicial y objetivo, devuelve una ruta vacía.

    Creación

    Descripción

    ejemplo

    planner = plannerPRM(stateSpace,stateVal) crea un planificador PRM 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 , respectivamente, del planificador.

    planner = plannerPRM(___,Name=Value) establece propiedades usando uno o más argumentos de par nombre-valor además de los argumentos de entrada en la sintaxis anterior. Puede especificar las propiedades StateSampler, MaxNumNodes y MaxConnectionDistance como pares 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 estado como stateSpaceSE2, stateSpaceDubins y stateSpaceReedsShepp. 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 y validatorVehicleCostmap. También puede personalizar un objeto de validador de estado utilizando el objeto nav.StateValidator .

    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 plannerPRM utiliza muestreo de estado uniforme.

    Número máximo de nodos en el gráfico, especificado como un escalar positivo. Al aumentar este valor, aumentan las posibilidades de encontrar una ruta y al mismo tiempo aumenta el tiempo de cálculo para el planificador de rutas.

    Distancia máxima entre dos nodos conectados, especificada como escalar positivo en metros. Los nodos con una distancia mayor que este valor no se conectarán en el gráfico.

    Funciones del objeto

    copyCrear una copia profunda del objeto PlannerPRM
    graphDataRecuperar gráfico como objeto dígrafo
    planPlanifique la ruta entre los estados inicial y objetivo en la hoja de ruta

    Ejemplos

    contraer todo

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

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

    Cree un espacio de estados y actualice los límites del espacio de estados para que sean los mismos que los límites del mapa.

    ss = stateSpaceSE2;
    ss.StateBounds = [map.XWorldLimits; map.YWorldLimits; [-pi pi]];

    Cree un validador de estado con stateSpaceSE2 usando el mapa y establezca la distancia de validación.

    sv = validatorOccupancyMap(ss,Map=map);
    sv.ValidationDistance = 0.01;

    Cree un objeto plannerPRM .

    planner = plannerPRM(ss,sv);

    Recuperar gráfico como un objeto dígrafo.

    graph = graphData(planner);

    Extraiga nodos y aristas del gráfico.

    edges = table2array(graph.Edges);
    nodes = table2array(graph.Nodes);

    Especifique los estados de inicio y objetivo.

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

    Trazar mapa y gráfica.

    show(sv.Map)
    hold on
    plot(nodes(:,1),nodes(:,2),"*","Color","b","LineWidth",2)
    for i = 1:size(edges,1)
        % Samples states at distance 0.02 meters.
        states = interpolate(ss,nodes(edges(i,1),:), ...
                             nodes(edges(i,2),:),0:0.02:1);
        plot(states(:,1),states(:,2),"Color","b")
    end
    plot(start(1),start(2),"*","Color","g","LineWidth",3)
    plot(goal(1),goal(2),"*","Color","r","LineWidth",3)

    Planifique una ruta con la configuración predeterminada. Configure la semilla rng para repetibilidad.

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

    Visualiza los resultados.

    if solnInfo.IsPathFound
        interpolate(pthObj,1000);
        plot(pthObj.States(:,1),pthObj.States(:,2), ...
             "Color",[0.85 0.325 0.098],"LineWidth",2)
    else
        disp("Path not found")
    end
    hold off

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

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

    rng(1,"twister");

    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 ruta de hoja de ruta probabilístico con una distancia máxima de conexión aumentada.

    planner = plannerPRM(ss,sv);

    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];

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

    Capacidades ampliadas

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

    Historial de versiones

    Introducido en R2022a

    expandir todo