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.

multiLayerMap

Administrar múltiples capas de mapas

Desde R2021a

Descripción

Los grupos de objetos multiLayerMap agrupan y almacenan múltiples capas de mapas como objetos mapLayer, occupancyMap o binaryOccupancyMap.

Una vez agregadas a este objeto, las capas del mapa se pueden modificar utilizando las funciones del objeto multiLayerMap o realizando acciones en capas del mapa individuales utilizando sus funciones de objeto o el nombre de la capa como entrada. Cualquier modificación a las propiedades comunes del objeto multiLayerMap se refleja en todas las capas asociadas.

Creación

Descripción

map = multiLayerMap 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 = multiLayerMap(maps) crea un mapa multicapa a partir de un arreglo de celdas de objetos mapLayer, occupancyMap o binaryOccupancyMap. Los objetos combinados en un mapa multicapa deben definirse con la misma resolución y cubrir la misma región en el espacio, pero pueden representar diferentes categorías de información en la región compartida.

ejemplo

map = multiLayerMap(names,mapData) crea un mapa multicapa a partir del arreglo de celdas de nombres de capas y el arreglo de celdas asociado de matrices de mapas. Las matrices deben tener las mismas dos primeras dimensiones para cubrir la misma región compartida. La resolución predeterminada es 1 celda por metro.

map = multiLayerMap(names,width,height) crea un mapa multicapa con el arreglo de celdas de nombres de capas que cubren el ancho y la altura especificados como escalares en metros.

map = multiLayerMap(names,width,height,cellDims) crea un mapa multicapa donde el tamaño de los datos almacenados en cada celda del mapa está definido por la matriz de números enteros, cellDims. Para capas múltiples, cellDims es un arreglo de celdas de arreglos de enteros.

map = multiLayerMap(names,rows,cols,'grid') especifica el ancho y la altura del mapa como un tamaño de cuadrícula especificado en las entradas rows y cols.

map = multiLayerMap(names,rows,cols,cellDims,'grid') crea un mapa con un tamaño de cuadrícula especificado y el tamaño de los datos almacenados en cada celda está definido por el arreglo de enteros o el arreglo de celdas de arreglos de enteros cellDims.

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

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

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

Argumentos de entrada

expandir todo

Capas de mapa, especificadas como un arreglo de celdas de N elementos de objetos mapLayer.

Nombre de cada capa, especificada como un arreglo de celdas de cadenas escalares. El orden de estos nombres está asociado con el orden de otros argumentos que son arreglos de celdas.

Tipos de datos: cell | string

Datos de mapas de capas de mapas, especificados como un arreglo de celdas de matrices. Cada matriz debe tener las mismas dimensiones.

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 celdas en capas de mapas, 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.

Capas del mapa de origen, especificadas como un objeto multiLayerMap.

Propiedades

expandir todo

Tamaño de los datos en cada arreglo de datos de la capa del mapa, especificado como un arreglo de celdas de vectores enteros. En cada vector, las dos primeras dimensiones definen la superficie de la capa del mapa y todas las dimensiones posteriores dictan el tamaño y el diseño de los datos almacenados en cada celda.

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

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

Tipos de datos: cell | double

Tipo de datos de los valores almacenados en cada capa, especificados como una arreglo de celdas de vectores de caracteres.

Cuando crea este objeto, las capas de mapa especificadas determinan cada tipo de datos. Después de crear el objeto, esta propiedad es de solo lectura.

Tipos de datos: cell | char

Valor predeterminado para ubicaciones de mapa no especificadas para cada capa, especificado como un arreglo de celdas de escalares numéricos. Este valor predeterminado también se devuelve para áreas fuera del mapa.

Tipos de datos: cell | double

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

Esta propiedad o parámetro es de solo lectura.

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.

Tipos de datos: double

Nombre de cada capa, especificada como un arreglo de celdas de cadenas escalares. El orden de estos nombres está asociado con el orden de otras propiedades que son arreglos de celdas.

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

Tipos de datos: cell | string

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.

Número de capas del mapa, almacenadas como un entero positivo.

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

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

getLayerDevolver capas individuales de un mapa multicapa
getMapDataRecuperar datos de capas de mapas
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 capas de mapa
syncWithSincronizar mapa con mapa superpuesto
world2gridConvertir coordenadas mundiales a índices de cuadrícula
world2localConvertir coordenadas mundiales a coordenadas locales

Ejemplos

contraer todo

El objeto multiLayerMap le permite agrupar múltiples capas de mapas y definir el comportamiento de esas capas al configurar y obtener datos. Al utilizar capas de mapas independientes, puede almacenar varios datos de mapas y especificar diferentes comportamientos para cada uno. También puede definir los identificadores de función SetTransformFcn y GetTransformFcn para una capa de mapa de modo que se creen dependencias entre capas. Este ejemplo muestra cómo almacenar datos en una capa de mapa e implementar detectores de eventos que actualizan otros mapas. Estos mapas almacenan cuántas veces se actualizan o se accede a los datos.

Capas dependientes

Crea dos capas de mapa independientes.

mapAccessed = mapLayer(zeros(10,10),"LayerName","GetListener");
mapModified = mapLayer(zeros(10,10),"LayerName","SetListener");

Especifique controladores de función para las funciones de transformación get y set utilizadas en la capa del mapa principal. Estas funciones incrementan el valor de una ubicación de cuadrícula cuando obtiene o establece datos de mapa en el mapa de entrada mainMap. Consulte Identificadores de función de escucha para ver la implementación de la función.

getHookFcn = @(mainMap,values,varargin)exampleHelperGetHookFcn(mapAccessed,mainMap,values,varargin{:});
setHookFcn = @(mainMap,values,varargin)exampleHelperSetHookFcn(mapModified,mainMap,values,varargin{:});

Cree la capa del mapa principal con valores predeterminados de 0,5. Especifique los identificadores de función para crear las dependencias de capa.

map = mapLayer(repmat(0.5,10,10), ...
                'GetTransformFcn',getHookFcn, ...
                'SetTransformFcn',setHookFcn);

Agrega todos los mapas al mismo objeto multiLayerMap.

multiMapLayers = multiLayerMap({map,mapAccessed,mapModified})
multiMapLayers = 
  multiLayerMap with properties:

   Map Properties
              NumLayers: 3
               GridSize: [10 10]
             Resolution: 1
    GridLocationInWorld: [0 0]
      GridOriginInLocal: [0 0]
     LocalOriginInWorld: [0 0]
           XLocalLimits: [0 10]
           YLocalLimits: [0 10]
           XWorldLimits: [0 10]
           YWorldLimits: [0 10]

   Layer Properties
             LayerNames: {'mapLayer'  'GetListener'  'SetListener'}
               DataSize: {[10 10]  [10 10]  [10 10]}
               DataType: ["double"    "double"    "double"]
           DefaultValue: {[0]  [0]  [0]}

Establezca la ubicación del mapa (0,0) con un valor de cero utilizando la función de objeto setMapData del objeto multiLayerMap.

setMapData(multiMapLayers,"mapLayer",[0 0],0)

Verifique que la capa de mapa SetListener incrementó su valor.

getMapData(multiMapLayers,"SetListener",[0 0])
ans = 
1

Obtenga los datos que acaba de configurar en la capa del mapa principal. Se devuelve el valor esperado de cero.

getMapData(multiMapLayers,"mapLayer",[0 0])
ans = 
0

Verifique que la capa de mapa GetListener incrementó su valor.

getMapData(multiMapLayers,"GetListener",[0 0])
ans = 
1

Actualiza todo el mapa con una matriz de valores. Accede a los datos también.

setMapData(multiMapLayers,"mapLayer",rand(10,10))
getMapData(multiMapLayers,"mapLayer")
ans = 10×10

    0.8147    0.1576    0.6557    0.7060    0.4387    0.2760    0.7513    0.8407    0.3517    0.0759
    0.9058    0.9706    0.0357    0.0318    0.3816    0.6797    0.2551    0.2543    0.8308    0.0540
    0.1270    0.9572    0.8491    0.2769    0.7655    0.6551    0.5060    0.8143    0.5853    0.5308
    0.9134    0.4854    0.9340    0.0462    0.7952    0.1626    0.6991    0.2435    0.5497    0.7792
    0.6324    0.8003    0.6787    0.0971    0.1869    0.1190    0.8909    0.9293    0.9172    0.9340
    0.0975    0.1419    0.7577    0.8235    0.4898    0.4984    0.9593    0.3500    0.2858    0.1299
    0.2785    0.4218    0.7431    0.6948    0.4456    0.9597    0.5472    0.1966    0.7572    0.5688
    0.5469    0.9157    0.3922    0.3171    0.6463    0.3404    0.1386    0.2511    0.7537    0.4694
    0.9575    0.7922    0.6555    0.9502    0.7094    0.5853    0.1493    0.6160    0.3804    0.0119
    0.9649    0.9595    0.1712    0.0344    0.7547    0.2238    0.2575    0.4733    0.5678    0.3371

Compruebe que las capas de mapa GetListener y SetListener incrementaron sus valores.

getMapData(multiMapLayers,"SetListener")
ans = 10×10

     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     2     1     1     1     1     1     1     1     1     1

getMapData(multiMapLayers,"GetListener")
ans = 10×10

     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     2     1     1     1     1     1     1     1     1     1

La ubicación inferior izquierda devuelve dos y todos los demás valores son uno. Esto confirma que las funciones del oyente funcionan según lo previsto.

Controladores de función de escucha

Estas funciones implementan las funciones auxiliares de ejemplo get y set que actualizan las otras capas del mapa.

function valuesOut = exampleHelperSetHookFcn(modifiedMap,sourceLayer,valueIn,varargin)
    % Pass output through
    valuesOut = valueIn;
    
    % If no additional inputs are passed, return immediately.
    if numel(varargin) == 0
        return;
    else
        % Otherwise, increment the value in the modifiedMap.
        if numel(varargin) == 1
            currentValue = getMapData(modifiedMap);
            setMapData(modifiedMap,currentValue+1);
        else        
            currentValue = getMapData(modifiedMap,varargin{1},varargin{3:end});
            % setMapData syntax <<<<>>>>
            setMapData(modifiedMap,varargin{1},currentValue+1,varargin{3:end});
        end
    end
end

function data = exampleHelperGetHookFcn(accessedMap,sourceLayer,valuesIn,varargin)
    
    data = valuesIn;

    % If no additional inputs are passed, check if the values in
    if numel(varargin) == 0
        if isequal(size(valuesIn),sourceLayer.DataSize)
            % Increment the dependent map.
            currentValue = getMapData(accessedMap);
            setMapData(accessedMap,currentValue+1);
        end
    else
        currentValue = getMapData(accessedMap,varargin{:});
        setMapData(accessedMap,varargin{1},currentValue+1,varargin{3:end});
    end
end

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2021a