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.

copy

Crear una copia profunda del objeto del planificador de rutas de MPNet

Desde R2024a

    Descripción

    plannerCopy = copy(planner) crea una copia profunda del objeto planificador MPNet con las mismas propiedades.

    ejemplo

    Ejemplos

    contraer todo

    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: [3×2 double]
        trainedNetwork: [1×1 dlnetwork]
    
    

    Establezca el valor de semilla para generar resultados repetibles.

    rng(70,"twister")

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

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

    map = mapMaze(5,1,MapSize=[12 12],MapResolution=2.0833);

    Crear validador de estado

    Cree un objeto validador de estado para utilizar en la planificación del movimiento.

    stateSpace = stateSpaceSE2(data.stateBounds);
    stateValidator = validatorOccupancyMap(stateSpace,Map=map);
    stateValidator.ValidationDistance = 0.1;

    Seleccionar estados de inicio y objetivo

    Seleccione un estado inicial y objetivo utilizando la función sampleStartGoal.

    [startStates,goalStates] = sampleStartGoal(stateValidator,500);

    Calcular la distancia entre los estados inicial y objetivo generados.

    stateDistance= distance(stateSpace,startStates,goalStates);

    Seleccione dos estados que estén más alejados entre sí como inicio y objetivo para la planificación del movimiento.

    [dist,index] = max(stateDistance);
    start = startStates(index,:);
    goal = goalStates(index,:);

    Crear un planificador de rutas de MPNet

    Configure el objeto mpnetSE2 para utilizar el MPNet entrenado previamente para la planificación de rutas. Establezca los valores de la propiedad EncodingSize del objeto mpnetSE2 en los valores utilizados para entrenar la red.

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

    Cree un planificador de rutas MPNet utilizando el validador de estado y el MPNet entrenado previamente. Planifique una ruta entre los estados de inicio y destino seleccionados utilizando el planificador de rutas MPNet.

    planner{1} = plannerMPNET(stateValidator,mpnet);
    [pathObj1,solutionInfo1] = plan(planner{1},start,goal)
    pathObj1 = 
      navPath with properties:
    
          StateSpace: [1×1 stateSpaceSE2]
              States: [6×3 double]
           NumStates: 6
        MaxNumStates: Inf
    
    
    solutionInfo1 = struct with fields:
            IsPathFound: 1
          LearnedStates: [50×3 double]
           BeaconStates: [2×3 double]
        ClassicalStates: [20×3 double]
    
    

    Crear una copia del Planificador de rutas de MPNet

    Cree una copia de la primera instancia del planificador de rutas MPNet.

    planner{2} = copy(planner{1});

    Modificar el enfoque clásico de planificación de rutas

    Especifique el planificador RRT bidireccional (Bi-RRT) como el enfoque de planificación de ruta clásico para el planificador de ruta MPNet. Establezca el valor de distancia máxima de conexión en 1.

    classicalPlanner = plannerBiRRT(stateSpace,stateValidator,MaxConnectionDistance=1);
    planner{2}.ClassicalPlannerFcn = @classicalPlanner.plan;

    Planifique una ruta entre los estados de inicio y destino seleccionados utilizando el planificador de rutas MPNet modificado.

    [pathObj2,solutionInfo2] = plan(planner{2},start,goal)
    pathObj2 = 
      navPath with properties:
    
          StateSpace: [1×1 stateSpaceSE2]
              States: [5×3 double]
           NumStates: 5
        MaxNumStates: Inf
    
    
    solutionInfo2 = struct with fields:
            IsPathFound: 1
          LearnedStates: [50×3 double]
           BeaconStates: [2×3 double]
        ClassicalStates: [7×3 double]
    
    

    Visualizar resultados

    Establezca las propiedades de línea y marcador para mostrar los estados de inicio y objetivo utilizando las funciones plannerLineSpec.start y plannerLineSpec.goal, respectivamente.

    sstate = plannerLineSpec.start(DisplayName="Start state",MarkerSize=6);
    gstate = plannerLineSpec.goal(DisplayName="Goal state",MarkerSize=6);

    Establezca las propiedades de línea y marcador para mostrar los resultados calculados mediante la función plannerLineSpec.path.

    ppath1 = plannerLineSpec.path(LineWidth=1,Marker="o",MarkerSize=8,MarkerFaceColor="white",DisplayName="Path computed using RRT* for classical path planning");
    ppath2 = plannerLineSpec.path(LineWidth=1,Marker="o",MarkerSize=8,MarkerFaceColor="red",DisplayName="Path computed using Bi-RRT for classical path planning");

    Grafique las rutas calculadas. Se puede inferir que el planificador de rutas MPNet ofrece mejores resultados cuando se utiliza el planificador de rutas Bi-RRT para la planificación de rutas clásica.

    figure
    show(map)
    hold on
    plot(pathObj1.States(:,1),pathObj1.States(:,2),ppath1{:})
    plot(pathObj2.States(:,1),pathObj2.States(:,2),ppath2{:})
    plot(start(1),start(2),sstate{:})
    plot(goal(1),goal(2),gstate{:})
    legend(Location="southoutside")
    hold off

    Figure contains an axes object. The axes object with title Binary Occupancy Grid, 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 Path computed using RRT* for classical path planning, Path computed using Bi-RRT for classical path planning, Start state, Goal state.

    Argumentos de entrada

    contraer todo

    Planificador de rutas, especificado como un objeto plannerMPNET.

    Argumentos de salida

    contraer todo

    Copia del planificador de rutas, devuelto como un objeto plannerMPNET.

    Capacidades ampliadas

    expandir todo

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

    Historial de versiones

    Introducido en R2024a