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.

mapLayer

Crear capa de mapa para N-datos dimensionales

Desde R2021a

Descripción

El objeto mapLayer crea un mapa de cuadrícula dimensional N, donde las dos primeras dimensiones determinan la superficie del mapa, y todas las dimensiones posteriores dictan el tamaño y el diseño del 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 usando coordenadas mundiales, locales o de cuadrícula, use 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 controladores 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(p) crea un mapa a partir de los valores de la matriz o arreglo matricial p. Para arreglos matriciales 3D, cada celda del mapa se llena con el vector de valores en cada ubicación de la cuadrícula a lo largo de la tercera dimensión del arreglo. Para un arreglo matricial N por D , cada celda contiene una matriz ( N=4) o un arreglo matricial (N>4) de datos para esa ubicación de la cuadrícula.

map = mapLayer(width,height) crea un mapa que cubre el ancho y alto 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 el arreglo de números enteros cellDims.

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

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

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

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

ejemplo

Propiedades

expandir todo

Tamaño de la matriz de datos dimensional 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 3 por 3 por 3, el tamaño de los datos sería [10 10 3 3 3].

Esta propiedad se establece cuando 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 el 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 identificador de función.

Este identificador de función se llama dentro de la función de 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 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 una cadena escalar.

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 cambiar 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 identificador de función.

Este identificador de función se llama dentro de la función de 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, por lo tanto, especifique una declaración if para devolver cuando el número de elementos en varagin 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 x-coordenadas en el marco local, almacenados como un vector horizontal de dos elementos de 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 y-coordenadas en el marco local, almacenados como un vector horizontal de dos elementos de 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 de rango mundial mínimo y máximo de x-coordenadas, 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 de rango mundial mínimo y máximo de y-coordenadas, 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

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

Cree una matriz de valores m-por-n-por-2. El primer elemento en la tercera dimensión es dx y el segundo es dy 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 arreglos 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 matrices y coordenadas mundiales. Visualice las velocidades correspondientes a esas ubicaciones del centro de la cuadrícula usando 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. Cree los valores como una matriz y especifique la esquina inferior izquierda (0,0) en las 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 de elementos al configurar y obtener datos en el mapa. Para transformar los datos que establece u obtiene del mapa, especifique 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 de 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 asigne los valores de probabilidad a los límites mínimo y máximo de los valores int16 .

Cree un arreglo de valores int16 desde intmin a intmax. Defina los límites de probabilidad.

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

Las funciones exampleHelperProbToLogodds y examplerHelperLogoddsToProb encubren entre los valores logarítmicos de probabilidades y de probabilidad. 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 .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 creas 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 usar para actualizar un mapa de probabilidad de ocupación 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

Historial de versiones

Introducido en R2021a