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.

mapLayer

Crear una capa de mapa para datos de dimensión N

Desde R2021a

Descripción

El objeto mapLayer crea un mapa de cuadrícula de N dimensiones, donde las dos primeras dimensiones determinan la huella del mapa y todas las dimensiones subsiguientes dictan el tamaño y el diseño de los datos almacenados en cada celda. Para almacenar valores binarios escalares o de probabilidad para un mapa de cuadrícula, utilice los objetos binaryOccupancyMap o occupancyMap.

Una capa de mapa almacena datos para celdas de cuadrícula que representan una región discretizada del espacio. Para consultar y actualizar datos utilizando coordenadas mundiales, locales o de cuadrícula, utilice las funciones de objeto getMapData y setMapData. Cada celda de la cuadrícula en el mapa puede almacenar datos de cualquier tamaño, desde un solo valor hasta un arreglo multidimensional. Para obtener más información, consulte la propiedad DataSize.

El comportamiento de la capa también se puede personalizar proporcionando identificadores de función durante la creación utilizando las propiedades GetTransformFcn y SetTransformFcn.

Creación

Descripción

map = mapLayer crea un objeto de mapa vacío que ocupa 10 por 10 metros de espacio con una resolución de 1 celda por metro.

map = mapLayer(mapData) crea un mapa a partir de los valores de la matriz o matriz de matrices.

map = mapLayer(width,height) crea un mapa que cubre el ancho y la altura especificados con una resolución de 1 celda por metro.

map = mapLayer(rows,cols,'grid') crea un mapa con un tamaño de cuadrícula de rows,cols con una resolución de 1 celda por metro.

map = mapLayer(width,height,cellDims) crea el mapa donde el tamaño de los datos almacenados en cada celda está definido por la matriz de enteros cellDims.

map = mapLayer(rows,cols,cellDims,'grid') crea un mapa con un tamaño de cuadrícula de rowscols donde el tamaño de los datos almacenados en cada celda está definido por la matriz de enteros cellDims.

map = mapLayer(sourceMap) crea un nuevo objeto utilizando las capas copiadas de otro objeto mapLayer.

map = mapLayer(___,Name=Value) especifica valores de propiedad utilizando argumentos de nombre-valor.

Por ejemplo, mapLayer(__,'LocalOriginInWorld',[15 20]) establece el origen local en una ubicación mundial específica.

ejemplo

Argumentos de entrada

expandir todo

Valores del mapa, especificados como un arreglo o un arreglo multidimensional.

Valores del mapaContenido de las celdas del mapa
Matriz 2-D

Escalar

Por ejemplo, en esta matriz 2-D cada elemento del mapa 2 por 2 almacena un escalar.

p = [1 2; 3 4];
map = mapLayer(p);

Matriz 3D

Vector

Por ejemplo, en esta matriz 3D cada elemento del mapa 2 por 2 almacena un vector de tres elementos.

p = [];
p(:,:,1) = ones(2,2);
p(:,:,2) = ones(2,2);
p(:,:,3) = ones(2,2);
map = mapLayer(p);

Matriz N-D

Matriz 2D, matriz 3D, etc.

Por ejemplo, en esta matriz 4-D cada elemento del mapa 2-x-2 almacena un arreglo 2-x-2.

p = [];
p(1,1,:,:) = ones(2,2);
p(1,2,:,:) = ones(2,2);
p(2,1,:,:) = ones(2,2);
p(2,2,:,:) = ones(2,2);
map = mapLayer(p);

Para obtener más información sobre matrices multidimensionales, consulte Arreglos multidimensionales.

Ancho del mapa, especificado como un escalar numérico positivo. Las unidades están en celdas por metro.

Altura del mapa, especificada como un escalar numérico positivo. Las unidades están en celdas por metro.

Número de filas de la cuadrícula, especificado como un entero numérico positivo.

Número de columnas de la cuadrícula, especificado como un entero numérico positivo.

Dimensiones de los datos de la celda, especificadas como un entero numérico positivo, un vector de N elementos de enteros positivos o una matriz M por N de enteros positivos.

Si cellDims es un entero numérico positivo mayor que 1, entonces cada celda del mapa contiene un vector de escalares numéricos con cellDims número de elementos. De forma predeterminada, el valor cellDims de 1 significa que cada elemento en la capa del mapa almacena un escalar numérico.

Si cellDims es un vector de N elementos de números enteros positivos, entonces cada celda del mapa contiene un vector de tamaño N que contiene escalares numéricos.

Si cellDims es una matriz de M por N de números enteros positivos, entonces cada celda del mapa contiene una matriz de tamaño M por N de escalares numéricos.

Ejemplo: mapLayer(width,height,3) crea una capa de mapa 3D.

Capa de mapa de origen, especificada como un objeto mapLayer.

Propiedades

expandir todo

Tamaño de la matriz de datos de dimensión N, especificada como vector de números enteros. Las dos primeras dimensiones definen la superficie del mapa y todas las dimensiones posteriores dictan el tamaño y el diseño de los datos almacenados en cada celda. El valor predeterminado supone que se almacena un único valor para cada celda en una cuadrícula de 10 por 10.

Si el mapa almacena un vector de valores de elementos n en cada celda, esta propiedad sería [width height n].

Si el mapa almacena una cuadrícula de 10 por 10 y cada celda contiene un arreglo de matrices de 3 por 3 por 3, el tamaño de los datos sería [10 10 3 3 3].

Esta propiedad se establece cuando se crea el objeto en función de las dimensiones de la matriz de entrada p o las entradas width, height y cellDims.

Después de crear el objeto, esta propiedad es de solo lectura.

Tipos de datos: double

Tipo de datos de los valores almacenados en el mapa, especificados como un vector de caracteres.

Esta propiedad se establece en función del tipo de datos de la entrada p o del tipo de datos de DefaultValue. Después de crear el objeto, esta propiedad es de solo lectura.

Tipos de datos: char

Valor predeterminado para ubicaciones de mapa no especificadas, incluidas áreas fuera del mapa, especificado como un escalar numérico.

Si especifica la propiedad GetTransformFcn o SetTransformFcn al crear el objeto, el valor predeterminado se actualiza en función de esa función de transformación. Si crea el mapa con una matriz de valores p, la función de transformación modifica los valores antes de almacenarlos.

Tipos de datos: double

Aplica transformaciones a los valores recuperados por la función getMapData, especificada como un identificador de función.

Este identificador de función se llama dentro de la función del objeto getMapData. Se puede utilizar para aplicar una transformación a los valores recuperados de la capa del mapa. La definición de la función debe tener el siguiente formato:

modifiedValues = getTransformFcnHandle(map,values,varargin)

El tamaño de la salida modifiedValues debe coincidir con el tamaño de la entrada values. La función proporciona todos los datos del mapa a los que se accede desde la función de objeto getMapData a esta función de transformación a través de las entradas varargin.

Puede establecer esta propiedad cuando crea el objeto. Después de crear el objeto, esta propiedad es de solo lectura.

Tipos de datos: function_handle

Ubicación de la esquina inferior izquierda de la cuadrícula en coordenadas mundiales, especificada como un vector de dos elementos, [xWorld yWorld].

Puede establecer esta propiedad cuando crea el objeto.

Tipos de datos: double

Ubicación de la esquina inferior izquierda de la cuadrícula en coordenadas locales, especificada como un vector de dos elementos, [xLocal yLocal].

Puede establecer esta propiedad cuando crea el objeto.

Tipos de datos: double

Número de filas y columnas de la cuadrícula, almacenado como un vector de valor real de 1 por 2 que representa el número de filas y columnas, en ese orden.

Esta propiedad se establece cuando se crea el objeto en función de las dos primeras dimensiones de la matriz de entrada p, las entradas width y height, o las entradas row y col.

Tipos de datos: double

Nombre de la capa del mapa, especificado como un vector de caracteres o un escalar de cadena.

Puede establecer esta propiedad cuando crea el objeto. Después de crear el objeto, esta propiedad es de solo lectura.

Tipos de datos: double

Ubicación del origen del marco local en coordenadas mundiales, especificada como un vector de dos elementos, [xLocal yLocal]. Utilice la función move para desplazar el marco local a medida que su vehículo se mueve.

Puede establecer esta propiedad cuando crea el objeto.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Resolución de la cuadrícula, almacenada como un escalar en celdas por metro que representa el número y el tamaño de las ubicaciones de la cuadrícula.

Puede establecer esta propiedad cuando crea el objeto. Después de crear el objeto, esta propiedad es de solo lectura.

Tipos de datos: double

Aplica transformaciones a los valores establecidos por la función setMapData, especificada como un identificador de función.

Este identificador de función se llama dentro de la función del objeto setMapData. Se puede utilizar para aplicar una transformación a los valores establecidos en la capa del mapa. La función debe tener la siguiente sintaxis:

modifiedValues = setTransformFcnHandle(map,values,varargin)        
        if numel(varargin) == 0
            return; %
        else
          % Custom Code
        end
end

El tamaño de la salida, modifiedValues, debe coincidir con el tamaño de la entrada, values. La función proporciona todos los datos del mapa especificados en la función de objeto setMapData a esta función de transformación. Al crear este objeto sin valores iniciales, la función se llama sin argumentos de entrada adicionales, así que especifique una declaración if para regresar cuando el número de elementos en varargin sea cero.

Puede establecer esta propiedad cuando crea el objeto. Después de crear el objeto, esta propiedad es de solo lectura.

Tipos de datos: function_handle

Esta propiedad o parámetro es de solo lectura.

Valores mínimos y máximos de las coordenadas x en el marco local, almacenados como un vector horizontal de dos elementos con la forma [min max]. El marco local está definido por la propiedad LocalOriginInWorld.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Valores mínimos y máximos de las coordenadas y en el marco local, almacenados como un vector horizontal de dos elementos con la forma [min max]. El marco local está definido por la propiedad LocalOriginInWorld.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Valores mínimos y máximos del rango mundial de coordenadas x, almacenados como un vector de 1 por 2 que representa los valores mínimo y máximo, en ese orden.

Tipos de datos: double

Esta propiedad o parámetro es de solo lectura.

Valores mínimos y máximos del rango mundial de coordenadas y, almacenados como un vector de 1 por 2 que representa los valores mínimo y máximo, en ese orden.

Tipos de datos: double

Funciones del objeto

getMapDataRecuperar datos de la capa del mapa
grid2localConvertir los índices de la cuadrícula en coordenadas locales
grid2worldConvertir los índices de la cuadrícula en coordenadas del mundo real
local2gridConvertir coordenadas locales a índices de cuadrícula
local2worldConvertir coordenadas locales a coordenadas mundiales
moveMover mapa en el marco mundial
setMapDataAsignar datos a la capa del mapa
syncWithSincronizar mapa con mapa superpuesto
world2gridConvertir coordenadas mundiales a índices de cuadrícula
world2localConvertir coordenadas mundiales a coordenadas locales

Ejemplos

contraer todo

Crea una capa de mapa que almacene dos valores por ubicación de cuadrícula como velocidades xy.

Crea una matriz de valores m por n por 2. El primer elemento en la tercera dimensión es d x y el segundo es d y como velocidades.

dXY = reshape(1:200,10,20);
dXY(:,:,2) = dXY;

Cree una capa de mapa a partir de la matriz. Especifique la resolución y el nombre de la capa.

vLayer = mapLayer(dXY,'Resolution',1,'LayerName','dXY');

Obtenga todos los datos del mapa como una matriz. Obtenga las ubicaciones xy de los valores de velocidad creando matrices que cubran los límites mínimo y máximo del mundo xy y se desplacen a las ubicaciones del centro de la cuadrícula. Las ubicaciones y se invierten al convertir entre coordenadas matriciales a coordenadas mundiales. Visualice las velocidades correspondientes a las ubicaciones del centro de la cuadrícula utilizando la función quiver.

v = getMapData(vLayer);

R = 1/(2*vLayer.Resolution);
xLim = vLayer.XWorldLimits;
yLim = vLayer.YWorldLimits;
xLoc = (xLim(1)+R):R*2:(xLim(2)-R);
yLoc = (yLim(2)-R):-R*2:(yLim(1)+R);

quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

Figure contains an axes object. The axes object contains an object of type quiver.

Establezca el cuadrante inferior izquierdo con nuevos valores actualizados. Crea los valores como una matriz y especifica la esquina inferior izquierda (0,0) en coordenadas del mapa para la función setData.

updateValues = repmat(reshape([-50,100],[1 1 2]),5,10);

setMapData(vLayer,[0 0],updateValues)
v = getMapData(vLayer);
quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

Figure contains an axes object. The axes object contains an object of type quiver.

Establezca nuevos valores para el cuadrante superior izquierdo usando coordenadas de cuadrícula. Para los mapas, la ubicación de la cuadrícula superior izquierda es (1,1).

setMapData(vLayer,[1 1],updateValues,'grid')
v = getMapData(vLayer);
quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

Figure contains an axes object. The axes object contains an object of type quiver.

El objeto mapLayer le permite aplicar transformaciones personalizadas elemento por elemento al configurar y obtener datos en el mapa. Para transformar los datos que establece u obtiene del mapa, especifique los identificadores de función para las propiedades GetTransfomFcn y SetTransformFcn. Este ejemplo muestra cómo implementar una capa de mapa probabilístico de probabilidades logarítmicas mediante la creación de una tabla de búsqueda para valores de probabilidad y probabilidades logarítmicas. Las funciones de transformación utilizan estas tablas de búsqueda para convertir entre estos valores al configurar u obtener datos.

Crear tablas de búsqueda

Genere una tabla de búsqueda completa de valores que asignan los valores de probabilidad a los límites mínimo y máximo de los valores int16.

Crea un arreglo de valores int16 desde intmin hasta intmax. Definir los límites de probabilidad.

intType = 'int16';
intLinSpace = intmin(intType):intmax(intType);
numOfPoints = length(intLinSpace);
probLimits = [0.001 0.999];

Las funciones exampleHelperProbToLogodds y examplerHelperLogoddsToProb convierten entre valores de probabilidad y probabilidades logarítmicas. Utilice las funciones auxiliares para obtener los límites de las probabilidades logarítmicas y generar el arreglo para buscar valores de las probabilidades logarítmicas. Cree una cuadrícula interpolada para toda la tabla de búsqueda.

logOddsLimits = exampleHelperProbToLogodds([0.001 0.999]);
logOddsLookup = single(exampleHelperLogoddsToProb(linspace(logOddsLimits(1),logOddsLimits(2),numOfPoints)));
interpTable = griddedInterpolant(logOddsLookup,single(intLinSpace),'nearest');

Especificar identificadores de función de transformación

Los controladores de la función de transformación utilizan ayudas de ejemplo que definen cómo convertir entre valores enteros de probabilidades logarítmicas y los valores de probabilidad con un límite de saturación aplicado. Los límites de saturación de probabilidad son [0.001 .999] como se especificó anteriormente. Este comportamiento es similar al objeto occupancyMap.

getXformFcn = @(obj,logodds,varargin)...
    exampleHelperIntLogoddsToProb(logodds,logOddsLookup(:),intLinSpace);

setXformFcn = @(obj,prob,varargin)...
    exampleHelperProbToIntLogodds(prob,interpTable,logOddsLookup(:),intLinSpace,probLimits);

Crear capa de mapa

Genere un objeto de capa de mapa de ocupación a partir de una matriz de valores de probabilidad. Especifique las funciones de transformación get y set.

occupancyLayer = mapLayer(repmat(0.5,10,10),...
                           'LayerName','Occupancy',...
                           'GetTransformFcn',getXformFcn,...
                           'SetTransformFcn',setXformFcn);

Observe que cuando crea el mapa, el valor predeterminado es 0,001 en lugar de 0. Esta diferencia se debe a que la función SetTransformFcn se ha aplicado al valor predeterminado de 0 cuando se crea el objeto, lo que satura el valor a 0,001.

disp(occupancyLayer.DefaultValue)
    0.0010

Obtener y configurar datos de mapas

Los datos del mapa coinciden con la matriz que configuró al crearlo.

extData = getMapData(occupancyLayer) 
extData = 10×10

    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000

Establezca ubicaciones de mapa específicas en valores que sean:

  • Fuera de los límites de saturación de probabilidad.

  • Mayor precisión que la resolución de las tablas de consulta.

setMapData(occupancyLayer,[0 0],0.00001)
setMapData(occupancyLayer,[5 5],0.25999)

Para la primera ubicación, la probabilidad está limitada a los límites de saturación.

extData = getMapData(occupancyLayer,[0 0])
extData = 
0.0010

La segunda ubicación devuelve el valor más cercano al valor de probabilidad en la tabla de búsqueda.

extData2 = getMapData(occupancyLayer,[5 5])
extData2 = 
0.2600

La capa de mapa generada ahora se puede utilizar para actualizar un mapa de ocupación de probabilidad que se almacena como valores int16. Para combinar este mapa con otras capas o tipos de mapas, consulte el objeto multiLayerMap.

Limitaciones

  • Los objetos mapLayer solo pueden pertenecer a un objeto multiLayerMap a la vez.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2021a