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.

stateSamplerMPNET

Muestreador de estado de MPNnet para planificación de movimiento basada en muestreo

Desde R2023b

    Descripción

    El objeto stateSamplerMPNET crea un muestreador de estado para la planificación de movimiento mediante el uso de Motion Planning Networks (MPNet). El muestreo del espacio de estados utilizando MPNet es un enfoque basado en el aprendizaje profundo que utiliza conocimientos previos para calcular muestras para planificadores de rutas basados ​​en muestreo. El muestreador de estado utiliza un MPNet previamente entrenado para calcular muestras aprendidas para un número fijo de iteraciones, después de lo cual el muestreador utiliza un enfoque de muestreo uniforme. Como resultado, el muestreador siempre garantiza una solución de ruta, si existe una solución de ruta.

    Creación

    Descripción

    ejemplo

    statesampler = stateSamplerMPNET(statespace,mpnet) crea un objeto de muestra de estado utilizando el espacio de estado especificado y MPNet previamente entrenado. Las entradas statespace y mpnet establecen los valores de las propiedades StateSpace y MotionPlanningNetwork , respectivamente.

    ejemplo

    statesampler = stateSamplerMPNET(___,Name=Value) especifica propiedades utilizando uno o más argumentos de nombre-valor además de los argumentos de entrada en la sintaxis anterior. Puede especificar Environment, StartState, GoalState, MaxLearnedSamples y GoalThreshold propiedades como argumentos de nombre-valor.

    Nota

    Para ejecutar esta función, necesitará el Deep Learning Toolbox™.

    Propiedades

    expandir todo

    Esta propiedad o parámetro es de solo lectura.

    Espacio de estados para muestreo, especificado como un objeto stateSpaceSE2 , un objeto stateSpaceDubins , un objeto stateSpaceReedsShepp o un objeto de una subclase de nav.StateSpace clase.

    Esta propiedad o parámetro es de solo lectura.

    MPNet previamente entrenado, especificado como un objeto mpnetSE2 .

    Entorno de mapa, especificado como un objeto binaryOccupancyMap o occupancyMap .

    Estado inicial, especificado como un vector de tres elementos con el formato [x y θ]. x, y y θ son las variables del espacio de estados.

    Tipos de datos: single

    Estado objetivo, especificado como un vector de tres elementos con la forma [x y θ]. x, y y θ son las variables del espacio de estados.

    Tipos de datos: single | double

    Número máximo de muestras aprendidas, especificadas como un entero positivo. Esta propiedad determina la cantidad de muestras que el muestreador de estado debe calcular utilizando el MPNet previamente entrenado. Esta propiedad establece el número de iteraciones después de las cuales el muestreador de estado calcula muestras utilizando el enfoque de muestreo uniforme.

    Para obtener información sobre cómo esta propiedad afecta los resultados del muestreo, consulte Realice muestreos informados con MPNet.

    Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Umbral de distancia al objetivo, especificado como un escalar positivo.

    Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    Funciones del objeto

    sampleCalcular muestras de estado utilizando el muestreador de estado de MPNnet
    copyCree una copia profunda del objeto de muestra de estado de MPNnet

    Ejemplos

    contraer todo

    Este ejemplo muestra cómo realizar un muestreo informado utilizando un MPNet previamente entrenado. Hasta un cierto número de iteraciones, un muestreador de estado de MPNnet predice muestras utilizando el MPNet previamente entrenado. Las muestras predichas utilizando MPNet están sesgadas hacia un subespacio que contiene una solución de ruta óptima. Después del número especificado de iteraciones, el muestreador cambia al enfoque de muestreo uniforme. Puede cambiar el número de iteraciones especificando la propiedad MaxLearnedSamples del objeto stateSamplerMPNET .

    Cargar MPNet previamente entrenado

    Cargue un archivo de datos que contenga un MPNet previamente entrenado en el espacio de trabajo de MATLAB® . El MPNet ha sido entrenado en varios mapas de laberintos 2-D con anchos y alturas de 10 metros y resoluciones de 2,5 celdas por metro. Cada mapa de laberinto contiene un ancho de paso de 5 celdas de cuadrícula y un espesor de pared de 1 celda de cuadrícula.

    data = load("mazeMapTrainedMPNET.mat")
    data = struct with fields:
          encodingSize: [9 9]
           lossWeights: [100 100 0]
            mazeParams: {[5]  [1]  'MapSize'  [10 10]  'MapResolution'  [2.5000]}
           stateBounds: [3x2 double]
        trainedNetwork: [1x1 dlnetwork]
    
    

    Crear mapa de laberinto para muestreo

    Cree un mapa de laberinto aleatorio para tomar muestras. El tamaño de la cuadrícula (MapSize×MapResolution) debe ser el mismo que el de los mapas utilizados para entrenar el MPNet.

    rng(10,"twister")
    map = mapMaze(5,1,MapSize=[12 12],MapResolution=2.0833);

    Especifique la pose inicial y la pose objetivo.

    start = [2 10 0];
    goal = [5 4 0];

    Visualice el mapa de entrada.

    figure
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    legend(Location="bestoutside")
    hold off

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

    Crear muestra de estado de MPNnet

    Especifique los límites de estado y cree un objeto de espacio de estado SE(2).

    x = map.XWorldLimits;
    y = map.YWorldLimits;
    theta = [-pi pi];
    stateBounds = [x; y; theta];
    stateSpace = stateSpaceSE2(stateBounds);

    Configure el objeto mpnetSE2 para utilizar el MPNet previamente entrenado para predecir muestras de estado en un mapa aleatorio. Establezca los valores de propiedad EncodingSize del objeto mpnetSE2 al valor utilizado para entrenar la red.

    mpnet = mpnetSE2(Network=data.trainedNetwork,StateBounds=stateBounds,EncodingSize=data.encodingSize);

    Cree un muestreador de estado de MPNnet para calcular muestras de estado que se utilizarán en la planificación de movimiento. Especifique el entorno del mapa, la pose inicial y la pose objetivo como entradas al muestreador de estado. El valor predeterminado para MaxLearnedSamples es 50. Esto implica que las primeras 50 muestras devueltas por el muestreador de estado son muestras basadas en el aprendizaje, predichas mediante el MPNet previamente entrenado.

    sampler_orig = stateSamplerMPNET(stateSpace,mpnet,Environment=map,StartState=start,GoalState=goal)
    sampler_orig = 
      stateSamplerMPNET with properties:
    
                   StateSpace: [1x1 stateSpaceSE2]
        MotionPlanningNetwork: [1x1 mpnetSE2]
                  Environment: [1x1 binaryOccupancyMap]
                   StartState: [2 10 0]
                    GoalState: [5 4 0]
            MaxLearnedSamples: 50
                GoalThreshold: 1
    
    

    Espacio de estados de muestra utilizando MPNet State Sampler

    Genere 50 muestras de estado que se encuentran entre la pose inicial y la pose objetivo utilizando el muestreador de estado MPNet. En este caso, el muestreador de estado de MPNnet genera las 50 muestras utilizando el MPNet previamente entrenado.

    states_orig = sample(sampler_orig,50);

    Cree copias de MPNet State Sampler y varíe el máximo de muestras aprendidas

    Cree copias del objeto de muestra de estado predeterminado de MPNet. Modifique la propiedad de muestras máximas aprendidas del muestreador para estudiar su impacto en los resultados del muestreo.

    Establezca la propiedad MaxLearnedSamples en 10. En este caso, el muestreador de estado de MPNnet genera las primeras 10 muestras utilizando el MPNet previamente entrenado y las 40 muestras restantes utilizando el enfoque de muestreo uniforme.

    sampler_2 = copy(sampler_orig);
    sampler_2.MaxLearnedSamples = 10;

    Establezca la propiedad MaxLearnedSamples en 30. En este caso, el muestreador de estado de MPNnet genera las primeras 30 muestras utilizando el MPNet previamente entrenado y las 20 muestras restantes utilizando el enfoque de muestreo uniforme.

    sampler_3 = copy(sampler_orig);
    sampler_3.MaxLearnedSamples = 30;

    Espacio de estado de muestra utilizando el muestreador de estado MPNnet modificado

    Utilice cada uno de los muestreadores de estado de MPNnet modificados para generar la misma cantidad de muestras que el muestreador predeterminado. En este caso, utilícelos cada uno para generar 50 muestras.

    states_2 = sample(sampler_2,50);
    states_3 = sample(sampler_3,50);

    Trazar y comparar resultados de muestreo

    Cree una figura con espacio adecuado para mostrar gráficos para los tres muestreadores estatales.

    fig1 = figure(Position=[0,0,1200,300]);

    Trace la salida del muestreador de estado de MPNnet con el número máximo de muestras aprendidas establecido en 10.

    subplot(1,3,1,Parent=fig1)
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    plot(states_2(:,1),states_2(:,2),plannerLineSpec.state{:})
    title("MaxLearnedSamples = 10")
    hold off

    Trazar la salida del muestreador de estado de MPNnet con el número máximo de muestras aprendidas establecido en 30.

    subplot(1,3,2,Parent=fig1)
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    plot(states_3(:,1),states_3(:,2),plannerLineSpec.state{:})
    title("MaxLearnedSamples = 30")
    hold off

    Trazar la salida del muestreador de estado predeterminado de MPNet. El valor predeterminado para el número máximo de muestras aprendidas es 50. A medida que aumenta la cantidad máxima de muestras aprendidas para que coincida con la cantidad de muestras de estado a generar, las muestras de salida se enfocan más a lo largo de una ruta entre la pose inicial dada y la pose objetivo.

    subplot(1,3,3,Parent=fig1)
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    plot(states_orig(:,1),states_orig(:,2),plannerLineSpec.state{:})
    title("MaxLearnedSamples = 50 (default)")
    hold off

    Figure contains 3 axes objects. Axes object 1 with title MaxLearnedSamples = 10, xlabel X [meters], ylabel Y [meters] contains 4 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, State. Axes object 2 with title MaxLearnedSamples = 30, xlabel X [meters], ylabel Y [meters] contains 4 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, State. Axes object 3 with title MaxLearnedSamples = 50 (default), xlabel X [meters], ylabel Y [meters] contains 4 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, State.

    Exploración adicional

    A partir de los resultados del muestreo, puede inferir que el muestreador de estado de MPNnet devuelve muestras de estado óptimo si el número máximo de muestras aprendidas es igual al número máximo de muestras que se van a calcular. Sin embargo, si MPNet se entrena en un conjunto de datos con menos entornos de mapas o muestras de rutas, la precisión de la predicción de la red disminuye. El muestreador de estado de MPNnet puede devolver una cantidad insuficiente de muestras aprendidas entre la pose inicial y la pose objetivo, y no puede usarlo para la planificación de rutas. En tales casos, el valor de MaxLearnedSamples debe ser menor que el número de muestras requeridas. Esto permite que el muestreador de estado de MPNnet cambie al enfoque de muestreo uniforme después de un número específico de iteraciones, garantizando así una solución de ruta.

    Realice la planificación del movimiento utilizando muestras de espacio de estados predichas por redes de planificación de movimiento (MPNet) previamente entrenadas. Este proceso incluye estos pasos:

    • Configure el objeto mpnetSE2 para el muestreo del espacio de estados mediante un MPNet previamente entrenado.

    • Utilice el objeto stateSamplerMPNET para muestrear un espacio de estados SE(2). El muestreador de estado toma el objeto mpnetSE2 como entrada y utiliza el MPNet previamente entrenado para predecir muestras de estado entre un punto inicial y un punto objetivo.

    • Realice la planificación de rutas utilizando un planificador de rutas RRT*. Utilice muestras de estado predichas por MPNet previamente entrenado como semillas para la planificación de rutas.

    Cargar MPNet previamente entrenado

    Cargue un archivo de datos que contenga un MPNet previamente entrenado en el espacio de trabajo de MATLAB . El MPNet ha sido entrenado en varios mapas de laberintos 2-D con anchos y alturas de 10 metros y resoluciones de 2,5 celdas por metro. Cada mapa de laberinto contiene un ancho de paso de 5 celdas de cuadrícula y un espesor de pared de 1 celda de cuadrícula.

    data = load("mazeMapTrainedMPNET.mat")
    data = struct with fields:
          encodingSize: [9 9]
           lossWeights: [100 100 0]
            mazeParams: {[5]  [1]  'MapSize'  [10 10]  'MapResolution'  [2.5000]}
           stateBounds: [3x2 double]
        trainedNetwork: [1x1 dlnetwork]
    
    

    Cree un mapa de laberinto para la planificación del movimiento

    Crea un mapa de laberinto aleatorio para usarlo en la planificación de movimientos. El tamaño de la cuadrícula (MapSize×MapResolution) debe ser el mismo que el de los mapas utilizados para entrenar el MPNet.

    rng(50,"twister")
    map = mapMaze(5,1,MapSize=[20 20],MapResolution=1.25);

    Especifique la pose inicial y la pose objetivo.

    start = [2 8 0];
    goal = [17 18 0];

    Visualice el mapa de entrada.

    figure
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    legend(Location="bestoutside")
    hold off

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

    Crear muestra de estado de MPNnet

    Especifique los límites de estado y cree un objeto de espacio de estado SE(2).

    stateBounds = [0 20; 0 20; -pi pi];
    stateSpace = stateSpaceSE2(stateBounds);

    Configure el objeto mpnetSE2 para utilizar el MPNet previamente entrenado para predecir muestras de estado en un mapa aleatorio. Establezca los valores de propiedad EncodingSize del objeto mpnetSE2 al valor utilizado para entrenar la red.

    mpnet = mpnetSE2(Network=data.trainedNetwork,StateBounds=stateBounds,EncodingSize=data.encodingSize);

    Cree un muestreador de estado de MPNnet para calcular muestras de estado que se utilizarán en la planificación de movimiento. Especifique el entorno del mapa, la pose inicial y la pose objetivo como entradas al muestreador de estado.

    stateSampler = stateSamplerMPNET(stateSpace,mpnet,Environment=map,StartState=start,GoalState=goal);

    Validar espacio de estados

    Cree un validador de estado para validar las muestras generadas por el muestreador.

    stateValidator = validatorOccupancyMap(stateSpace,Map=map);

    Establezca la distancia de validación en 0,01.

    stateValidator.ValidationDistance = 0.01;

    Calcular la ruta utilizando el método de muestreo MPNet y RRT*

    Calcule una ruta óptima entre la pose inicial y la pose objetivo utilizando un planificador de ruta RRT*. Utilice el muestreador de estado de MPNnet para muestrear el espacio de estado.

    planner_MPNet = plannerRRTStar(stateSpace,stateValidator,StateSampler=stateSampler,MaxConnectionDistance=1);
    [pathObj_MPNet,solutionInfo_MPNet] = plan(planner_MPNet,start,goal)
    pathObj_MPNet = 
      navPath with properties:
    
          StateSpace: [1x1 stateSpaceSE2]
              States: [34x3 double]
           NumStates: 34
        MaxNumStates: Inf
    
    
    solutionInfo_MPNet = struct with fields:
          IsPathFound: 1
             ExitFlag: 1
             NumNodes: 191
        NumIterations: 274
             TreeData: [575x3 double]
            PathCosts: [274x1 double]
    
    

    Representar los resultados

    Trazar los resultados obtenidos utilizando el método de muestreo del espacio de estados de MPNet. Traza los datos del árbol y la ruta entre la pose inicial y la pose objetivo.

    figure
    show(map)
    hold on
    plot(start(1),start(2),plannerLineSpec.start{:})
    plot(goal(1),goal(2),plannerLineSpec.goal{:})
    plot(solutionInfo_MPNet.TreeData(:,1),solutionInfo_MPNet.TreeData(:,2),plannerLineSpec.tree{:})
    plot(pathObj_MPNet.States(:,1),pathObj_MPNet.States(:,2),plannerLineSpec.path{:})
    title("Path Planning Using MPNet State Space Sampling")
    legend(Location="bestoutside")
    hold off

    Figure contains an axes object. The axes object with title Path Planning Using MPNet State Space Sampling, xlabel X [meters], ylabel Y [meters] contains 5 objects of type image, line. One or more of the lines displays its values using only markers These objects represent Start, Goal, Tree, Path.

    Referencias

    [1] Prokudin, Sergey, Christoph Lassner, and Javier Romero. “Efficient Learning on Point Clouds with Basis Point Sets.” In 2019 IEEE/CVF International Conference on Computer Vision Workshop (ICCVW), 3072–81. Seoul, Korea (South): IEEE, 2019. https://doi.org/10.1109/ICCVW.2019.00370.

    [2] Qureshi, Ahmed Hussain, Yinglong Miao, Anthony Simeonov, and Michael C. Yip. “Motion Planning Networks: Bridging the Gap Between Learning-Based and Classical Motion Planners.” IEEE Transactions on Robotics 37, no. 1 (February 2021): 48–66. https://doi.org/10.1109/TRO.2020.3006716.

    Capacidades ampliadas

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

    Historial de versiones

    Introducido en R2023b