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.

navPath

Ruta planificada

Desde R2019b

Descripción

El objeto navPath almacena rutas que normalmente crean los planificadores de rutas geométricas. Los waypoints se almacenan como estados en un espacio de estados asociado.

Creación

Descripción

path = navPath crea un objeto de ruta, path, utilizando el espacio de estado SE(2) con la configuración predeterminada.

ejemplo

path = navPath(space) crea un objeto de ruta con el espacio de estado especificado por space. La entrada space también establece el valor de la propiedad StateSpace .

path = navPath(space,states) le permite inicializar la ruta con muestras de estado dadas por states. Especifique states como matriz de muestras de estado. Los estados que están fuera del objeto StateBounds del estado space se reducen a los límites. La entrada states también establece el valor de la propiedad States .

path = navPath(space,states,maxNumStates) crea un objeto de ruta con el número máximo especificado de estados permitidos en la ruta maxNumStates. La entrada maxNumStates también establece el valor de la propiedad MaxNumStates .

Propiedades

expandir todo

Espacio de estados para la ruta, especificado como un objeto de espacio de estados. Cada estado en la ruta es una muestra del espacio de estados especificado. Puede utilizar objetos como stateSpaceSE2, stateSpaceDubins, stateSpaceReedsShepp o stateSpaceSE3 como espacio de estado. objeto. También puede personalizar un objeto de espacio de estado utilizando el objeto nav.StateSpace .

Estados de la ruta, especificados como una matriz M-por- N de valor real. M es el número de estados en la ruta y N es la dimensión de cada estado. Solo puede establecer esta propiedad durante la creación del objeto o usando la función append .

Ejemplo: [0 0 0; 1 1 0; 2 2 0]

Ejemplo: [0 0 0 1 0 0 0; 1 1 1 1 0 0 0; 2 2 1 1 0 0 0]

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Número de muestras de estado en la ruta, especificadas como un entero no negativo. El número es el mismo que el número de filas de la matriz de estado especificada en la propiedad States .

Tipos de datos: double

Número máximo de estados permitidos en la ruta, especificados como un entero escalar positivo.

Cuando se especifica como inf, la ruta se puede cambiar de tamaño explícitamente. Para la generación de código, DynamicMemoryAllocation debe establecerse en 'On'.

Cuando se especifica como un entero escalar positivo, el número máximo de estados en el objeto se limita al valor especificado. Utilice esto para crear una ruta de tamaño variable cuando no se permite habilitar DynamicMemoryAllocation durante la generación de código.

Tipos de datos: double

Funciones del objeto

appendAgregar estados al final de la ruta
copyCrear copia del objeto de ruta
interpolateInterpolar puntos a lo largo de la ruta
pathLengthlongitud de la ruta

Ejemplos

contraer todo

Cree un objeto navPath basado en múltiples puntos de referencia en un espacio Dubins.

dubinsSpace = stateSpaceDubins([0 25; 0 25; -pi pi])
dubinsSpace = 
  stateSpaceDubins with properties:

   SE2 Properties
                 Name: 'SE2 Dubins'
          StateBounds: [3x2 double]
    NumStateVariables: 3

   Dubins Vehicle Properties
     MinTurningRadius: 1

pathobj = navPath(dubinsSpace)
pathobj = 
  navPath with properties:

      StateSpace: [1x1 stateSpaceDubins]
          States: [0x3 double]
       NumStates: 0
    MaxNumStates: Inf

waypoints = [8 10 pi/2;
             7 14 pi/4;
             10 17 pi/2;
             10 10 -pi];
append(pathobj,waypoints)

Interpola esa ruta para que contenga exactamente 250 puntos.

interpolate(pathobj,250)

Visualice la ruta interpolada y los puntos de referencia originales.

figure
grid on
axis equal
hold on
plot(pathobj.States(:,1),pathobj.States(:,2),".b")
plot(waypoints(:,1),waypoints(:,2),"*r","MarkerSize",10)

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

Calcular la longitud de la ruta.

len = pathLength(pathobj);
disp("Path length = " + num2str(len))
Path length = 19.4722

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 objeto navPath basado en múltiples puntos de referencia en un espacio de estado SE(3).

path = navPath(ss);
waypoints = [40 180 15 0.7 0.2 0 0.1;
             55 120 20 0.6 0.2 0 0.1;
             100 100 25 0.5 0.2 0 0.1;
             130 90 30 0.4 0 0.1 0.6;
             150 33 35 0.3 0 0.1 0.6];
append(path,waypoints)

Interpola esa ruta para que contenga exactamente 250 puntos.

interpolate(path,250)

Visualice la ruta interpolada y los puntos de referencia originales.

show(omap)
axis equal
view([-10 55])
hold on
% Start state
scatter3(waypoints(1,1),waypoints(1,2),waypoints(1,3),"g","filled")
% Goal state
scatter3(waypoints(end,1),waypoints(end,2),waypoints(end,3),"r","filled")
% Intermediate waypoints
scatter3(waypoints(2:end-1,1),waypoints(2:end-1,2), ...
         waypoints(2:end-1,3),"y","filled")
% Path
plot3(path.States(:,1),path.States(:,2),path.States(:,3), ...
      "r-",LineWidth=2)

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

Calcular la longitud de la ruta.

len = pathLength(path);
disp("Path length = " + num2str(len))
Path length = 204.1797

Capacidades ampliadas

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

Historial de versiones

Introducido en R2019b