Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

mapLayer

Créer une couche de carte pour les données dimensionnelles N

Depuis R2021a

Description

L'objet mapLayer crée une carte quadrillée dimensionnelle N, où les deux premières dimensions déterminent l'empreinte de la carte, et toutes les dimensions suivantes dictent la taille et la disposition de la carte. données stockées dans chaque cellule. Pour stocker des valeurs binaires scalaires ou de probabilité pour une carte quadrillée, utilisez plutôt les objets binaryOccupancyMap ou occupancyMap .

Une couche cartographique stocke les données des cellules de grille qui représentent une région discrétisée de l'espace. Pour interroger et mettre à jour des données à l'aide de coordonnées mondiales, locales ou de grille, utilisez les fonctions d'objet getMapData et setMapData . Chaque cellule de la grille de la carte peut stocker des données de n'importe quelle taille, depuis une valeur unique jusqu'à un tableau multidimensionnel. Pour plus d'informations, consultez la propriété DataSize .

Le comportement des calques peut également être personnalisé en fournissant des descripteurs de fonction lors de la création à l'aide des propriétés GetTransformFcn et SetTransformFcn .

Création

Description

map = mapLayer crée un objet cartographique vide occupant 10 mètres sur 10 mètres avec une résolution de 1 cellule par mètre.

map = mapLayer(p) crée une carte à partir des valeurs de la matrice ou du tableau matriciel p. Pour les tableaux matriciels 3D, chaque cellule de la carte est remplie avec le vecteur de valeurs à chaque emplacement de la grille le long de la troisième dimension du tableau. Pour un tableau matriciel N-by- D , chaque cellule contient une matrice (N=4) ou un tableau matriciel (N>4) de données pour cet emplacement de grille.

map = mapLayer(width,height) crée une carte couvrant la largeur et la hauteur spécifiées avec une résolution de 1 cellule par mètre.

map = mapLayer(rows,cols,'grid') crée une carte avec une taille de grille de rows, cols avec une résolution de 1 cellule par mètre.

map = mapLayer(width,height,cellDims) crée la carte où la taille des données stockées dans chaque cellule est définie par le tableau d'entiers cellDims.

map = mapLayer(rows,cols,cellDims,'grid') crée une carte avec une taille de grille de rows cols où la taille des données stockées dans chaque cellule est définie par le tableau d'entiers cellDims.

map = mapLayer(sourceMap) crée un nouvel objet en utilisant les calques copiés à partir d'un autre objet mapLayer .

map = mapLayer(___,Name,Value) spécifie les valeurs de propriété à l'aide de paires nom-valeur.

Par exemple, mapLayer(__,'LocalOriginInWorld',[15 20]) définit l’origine locale sur un emplacement mondial spécifique.

exemple

Propriétés

développer tout

Taille de la matrice de données dimensionnelle N, spécifiée comme vecteur d'entiers. Les deux premières dimensions définissent l'empreinte de la carte et toutes les dimensions suivantes dictent la taille et la disposition des données stockées dans chaque cellule. La valeur par défaut suppose qu'une seule valeur est stockée pour chaque cellule dans une grille de 10 x 10.

Si la carte stocke un vecteur d'éléments n de valeurs dans chaque cellule, cette propriété serait [width height n].

Si la carte stocke une grille de 10 x 10 avec chaque cellule contenant un tableau matriciel de 3 x 3 x 3, la taille des données serait [10 10 3 3 3].

Cette propriété est définie lorsque vous créez l'objet en fonction des dimensions de la matrice d'entrée p ou des entrées width, height et cellDims.

Une fois l'objet créé, cette propriété est en lecture seule.

Types de données : double

Type de données des valeurs stockées dans la carte, spécifiées sous forme de vecteur de caractères.

Cette propriété est définie en fonction du type de données de l'entrée p ou du type de données de DefaultValue. Une fois l'objet créé, cette propriété est en lecture seule.

Types de données : char

Valeur par défaut pour les emplacements de carte non spécifiés, y compris les zones en dehors de la carte, spécifiée sous forme de scalaire numérique.

Si vous spécifiez la propriété GetTransformFcn ou SetTransformFcn lors de la création de l'objet, la valeur par défaut est mise à jour en fonction de cette fonction de transformation. Si vous créez la carte avec une matrice de valeurs p, la fonction de transformation modifie les valeurs avant de les stocker.

Types de données : double

Applique les transformations aux valeurs récupérées par la fonction getMapData , spécifiée comme handle de fonction.

Ce handle de fonction est appelé dans la fonction objet getMapData . Il peut être utilisé pour appliquer une transformation aux valeurs extraites de la couche cartographique. La définition de la fonction doit avoir le format suivant :

modifiedValues = getTransformFcnHandle(map,values,varargin)

La taille de la sortie modifiedValues doit correspondre à la taille de l'entrée values. La fonction fournit toutes les données cartographiques accessibles depuis la fonction objet getMapData vers cette fonction de transformation via les entrées varargin .

Vous pouvez définir cette propriété lorsque vous créez l'objet. Une fois l'objet créé, cette propriété est en lecture seule.

Types de données : function_handle

Emplacement du coin inférieur gauche de la grille en coordonnées mondiales, spécifié comme vecteur à deux éléments, [xWorld yWorld].

Vous pouvez définir cette propriété lorsque vous créez l'objet.

Types de données : double

Emplacement du coin inférieur gauche de la grille en coordonnées locales, spécifié comme vecteur à deux éléments, [xLocal yLocal].

Vous pouvez définir cette propriété lorsque vous créez l'objet.

Types de données : double

Nombre de lignes et de colonnes dans la grille, stocké sous forme de vecteur à valeur réelle 1 x 2 représentant le nombre de lignes et de colonnes, dans cet ordre.

Cette propriété est définie lorsque vous créez l'objet en fonction des deux premières dimensions de la matrice d'entrée p, les entrées width et height, ou les entrées row et col.

Types de données : double

Nom de la couche de carte, spécifié sous forme de vecteur de caractères ou de chaîne scalaire.

Vous pouvez définir cette propriété lorsque vous créez l'objet. Une fois l'objet créé, cette propriété est en lecture seule.

Types de données : double

Emplacement de l'origine du repère local en coordonnées mondiales, spécifié sous la forme d'un vecteur à deux éléments, [xLocal yLocal]. Utilisez la fonction move pour décaler le cadre local à mesure que votre véhicule se déplace.

Vous pouvez définir cette propriété lorsque vous créez l'objet.

Types de données : double

Ce propriété est en lecture seule.

Résolution de la grille, stockée sous forme de scalaire en cellules par mètre représentant le nombre et la taille des emplacements de la grille.

Vous pouvez définir cette propriété lorsque vous créez l'objet. Une fois l'objet créé, cette propriété est en lecture seule.

Types de données : double

Applique les transformations aux valeurs définies par la fonction setMapData , spécifiée comme handle de fonction.

Ce handle de fonction est appelé dans la fonction objet setMapData . Il peut être utilisé pour appliquer une transformation aux valeurs définies dans la couche cartographique. La fonction doit avoir la syntaxe suivante :

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

La taille de la sortie, modifiedValues, doit correspondre à la taille de l'entrée, values. La fonction fournit toutes les données cartographiques spécifiées dans la fonction objet setMapData à cette fonction de transformation. Lors de la création de cet objet sans valeurs de départ, la fonction est appelée sans arguments d'entrée supplémentaires, spécifiez donc une instruction if à renvoyer lorsque le nombre d'éléments dans varagin est nul.

Vous pouvez définir cette propriété lorsque vous créez l'objet. Une fois l'objet créé, cette propriété est en lecture seule.

Types de données : function_handle

Ce propriété est en lecture seule.

Valeurs minimales et maximales des coordonnées x dans le cadre local, stockées sous la forme d'un vecteur horizontal à deux éléments de la forme [min max]. Le cadre local est défini par la propriété LocalOriginInWorld .

Types de données : double

Ce propriété est en lecture seule.

Valeurs minimales et maximales des coordonnées y dans le cadre local, stockées sous la forme d'un vecteur horizontal à deux éléments de la forme [min max]. Le cadre local est défini par la propriété LocalOriginInWorld .

Types de données : double

Ce propriété est en lecture seule.

Valeurs de plage mondiale minimale et maximale des coordonnées x, stockées sous forme de vecteur 1 par 2 représentant les valeurs minimales et maximales, dans cet ordre.

Types de données : double

Ce propriété est en lecture seule.

Valeurs de plage mondiale minimale et maximale des coordonnées y, stockées sous forme de vecteur 1 par 2 représentant les valeurs minimales et maximales, dans cet ordre.

Types de données : double

Fonctions d'objet

getMapDataRécupérer des données de la couche cartographique
grid2localConvertir les indices de grille en coordonnées locales
grid2worldConvertir les indices de grille en coordonnées mondiales
local2gridConvertir les coordonnées locales en indices de grille
local2worldConvertir les coordonnées locales en coordonnées mondiales
moveDéplacer la carte dans le cadre du monde
setMapDataAttribuer des données à la couche de carte
syncWithSynchroniser la carte avec la carte superposée
world2gridConvertir les coordonnées mondiales en indices de grille
world2localConvertir les coordonnées mondiales en coordonnées locales

Exemples

réduire tout

Créez une couche de carte qui stocke deux valeurs par emplacement de grille sous forme de vitesses  xy .

Créez une matrice de valeurs m par n par 2. Le premier élément de la troisième dimension est dx et le second est dy comme vitesses.

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

Créez une couche de carte à partir de la matrice. Spécifiez la résolution et le nom du calque.

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

Obtenez toutes les données cartographiques sous forme de matrice. Obtenez les emplacements xy des valeurs de vitesse en créant des tableaux qui couvrent les limites minimales et maximales du monde  xy  et sont décalés vers les emplacements du centre de la grille. Les emplacements y sont inversés lors de la conversion entre la matrice et les coordonnées mondiales. Visualisez les vitesses correspondant à ces emplacements du centre de la grille à l'aide de la fonction 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.

Définissez le quadrant inférieur gauche sur les nouvelles valeurs mises à jour. Créez les valeurs sous forme de matrice et spécifiez le coin inférieur gauche (0,0) dans les coordonnées de la carte à la fonction 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.

Définissez de nouvelles valeurs pour le quadrant supérieur gauche à l'aide des coordonnées de la grille. Pour les cartes, l'emplacement de la grille en haut à gauche est (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.

L'objet mapLayer vous permet d'appliquer des transformations personnalisées par élément lors de la définition et de l'obtention de données dans la carte. Pour transformer les données que vous définissez ou obtenez à partir de la carte, spécifiez les descripteurs de fonction pour les propriétés GetTransfomFcn et SetTransformFcn . Cet exemple montre comment implémenter une couche de carte probabiliste de log-cotes en créant une lookup table pour les valeurs de probabilité et de log-cotes. Les fonctions de transformation utilisent ces lookup tables pour convertir entre ces valeurs lors de la définition ou de l'obtention de données.

Créer des tables de recherche

Générez une lookup table complète de valeurs qui mappent les valeurs de probabilité aux limites minimale et maximale des valeurs int16 .

Créez un tableau de valeurs int16 de intmin à intmax. Définir les limites de probabilité.

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

Les fonctions exampleHelperProbToLogodds et examplerHelperLogoddsToProb sont secrètes entre les log-cotes et les valeurs de probabilité. Utilisez les fonctions d'assistance pour obtenir les limites des log-cotes et générer le tableau pour rechercher les valeurs des log-odds. Créez une grille interpolée pour l'ensemble de la lookup table.

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

Spécifier les poignées de la fonction de transformation

Les poignées de fonction de transformation utilisent des exemples d'assistants qui définissent comment convertir entre les valeurs entières de log-cotes et les valeurs de probabilité avec une limite de saturation appliquée. Les limites de saturation de probabilité sont [0.001 .999] comme spécifié précédemment. Ce comportement est similaire à l'objet occupancyMap .

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

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

Créer une couche de carte

Générez un objet de couche de carte d'occupation à partir d'une matrice de valeurs de probabilité. Spécifiez les fonctions de transformation get et set.

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

Notez que lorsque vous créez la carte, la valeur par défaut est 0,001 au lieu de 0. Cette différence est due au fait que la fonction SetTransformFcn a été appliquée à la valeur par défaut de 0 lors de la création de l'objet, ce qui sature la valeur à 0,001.

disp(occupancyLayer.DefaultValue)
    0.0010

Obtenir et définir des données cartographiques

Les données cartographiques correspondent à la matrice que vous avez définie lors de la création.

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

Définissez des emplacements de carte spécifiques sur des valeurs :

  • En dehors des limites de saturation des probabilités.

  • Précision supérieure à la résolution des lookup tables.

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

Pour la première localisation, la probabilité est liée aux limites de saturation.

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

Le deuxième emplacement renvoie la valeur la plus proche de la valeur de probabilité dans la lookup table.

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

La couche de carte générée peut désormais être utilisée pour mettre à jour une carte d'occupation de probabilité stockée sous forme de valeurs int16 . Pour combiner cette carte avec d'autres couches ou types de cartes, consultez l'objet multiLayerMap .

Limites

  • Les objets mapLayer ne peuvent appartenir qu'à un seul objet multiLayerMap à la fois.

Capacités étendues

Historique des versions

Introduit dans R2021a