Main Content

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

binaryOccupancyMap

Créer une grille d'occupation avec des valeurs binaires

Description

Le binaryOccupancyMap crée un objet de carte d'occupation 2D, que vous pouvez utiliser pour représenter et visualiser un espace de travail de robot, y compris les obstacles. L'intégration des données de capteurs et des estimations de position crée une représentation spatiale des emplacements approximatifs des obstacles.

Les grilles d'occupation sont utilisées dans les algorithmes robotiques tels que la planification de chemins. Ils sont également utilisés dans les applications de cartographie, par exemple pour trouver des chemins sans collision, éviter les collisions et calculer la localisation. Vous pouvez modifier votre grille d'occupation pour l'adapter à votre application spécifique.

Chaque cellule de la grille d'occupation a une valeur représentant l'état d'occupation de cette cellule. Un emplacement occupé est représenté par true (1) et un emplacement libre est représenté par false (0).

L'objet garde la trace de trois cadres de référence : monde, local et grille. L'origine du cadre mondial est définie par GridLocationInWorld, qui définit le coin inférieur gauche de la carte par rapport au cadre mondial. La propriété LocalOriginInWorld spécifie l'emplacement de l'origine du frame local par rapport au frame mondial. Le premier emplacement de la grille avec l'index (1,1) commence dans le coin supérieur gauche de la grille.

Remarque

Cet objet était auparavant nommé robotics.BinaryOccupancyGrid.

Création

Description

map = binaryOccupancyMap crée une grille d'occupation binaire 2D d'une largeur et d'une hauteur de 10 m. La résolution de grille par défaut est d'une cellule par mètre.

exemple

map = binaryOccupancyMap(width,height) crée une grille d'occupation binaire 2D représentant un espace de travail de width et height en mètres. La résolution de grille par défaut est d'une cellule par mètre.

exemple

map = binaryOccupancyMap(width,height,resolution) crée une grille avec la propriété Resolution spécifiée en cellules par mètre. La carte est en coordonnées mondiales par défaut.

map = binaryOccupancyMap(rows,cols,resolution,"grid") crée une grille d'occupation binaire 2D de taille (rows, cols).

map = binaryOccupancyMap(p) crée une grille à partir des valeurs de la matrice p. La taille de la grille correspond à la taille de la matrice, chaque valeur de cellule étant interprétée à partir de son emplacement dans la matrice. p contient tout type numérique ou logique avec des zéros (0) et des uns (1).

exemple

map = binaryOccupancyMap(p,resolution) crée une carte à partir d'une matrice avec la propriété Resolution spécifiée en cellules par mètre.

map = binaryOccupancyMap(sourcemap) crée un objet en utilisant les valeurs d'un autre objet binaryOccupancyMap .

map = binaryOccupancyMap(sourcemap,resolution) crée un objet en utilisant les valeurs d'un autre objet binaryOccupancyMap , mais rééchantillonne la matrice pour avoir la résolution spécifiée.

Arguments en entrée

développer tout

Largeur de la carte, spécifiée sous forme de scalaire positif en mètres.

Hauteur de la carte, spécifiée sous forme d'un scalaire positif en mètres.

Valeurs de grille de carte, spécifiées sous forme de matrice.

Objet de carte d'occupation, spécifié comme objet binaryOccupancyMap .

Propriétés

développer tout

Ce propriété est en lecture seule.

Nombre de lignes et de colonnes dans la grille, stockées sous forme de vecteur à deux éléments de la forme [rows cols].

Ce propriété est en lecture seule.

Résolution de la grille, stockée sous forme de scalaire en cellules par mètre.

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 à deux éléments de la forme [min max]. Le cadre local est défini par la propriété LocalOriginInWorld .

Ce propriété est en lecture seule.

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

Ce propriété est en lecture seule.

Valeurs minimales et maximales des coordonnées x dans le cadre mondial, stockées sous la forme d'un vecteur à deux éléments de la forme [min max]. Ces valeurs indiquent la plage mondiale des coordonnées x dans la grille.

Ce propriété est en lecture seule.

Valeurs minimales et maximales des coordonnées y, stockées sous forme de vecteur à deux éléments de la forme [min max]. Ces valeurs indiquent la plage mondiale des coordonnées y dans la grille.

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

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.

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

Valeur par défaut pour les emplacements de carte non spécifiés, y compris les zones en dehors de la carte, spécifiées comme 0 ou 1.

Fonctions d'objet

copyCréer une copie de la carte d'occupation binaire
checkOccupancyVérifiez si les emplacements sont libres ou occupés
getOccupancyObtenez la valeur d'occupation des emplacements
grid2localConvertir les indices de grille en coordonnées locales
grid2worldConvertir les indices de grille en coordonnées mondiales
inflateInflate each occupied location
insertRayInsérer un rayon à partir d'une observation par balayage laser
local2gridConvert local coordinates to grid indices
local2worldConvert local coordinates to world coordinates
moveDéplacer la carte dans le cadre du monde
occupancyMatrixConvertir la grille d'occupation en matrice
raycastCalculer les indices de cellules le long d'un rayon
rayIntersectionTrouver les points d'intersection des rayons et des cellules de carte occupées
setOccupancyDéfinir la valeur d'occupation des emplacements
showAfficher la carte d'occupation binaire
syncWithSynchroniser la carte avec la carte superposée
world2gridConvertir les coordonnées mondiales en indices de grille
world2localConvert world coordinates to local coordinates

Exemples

réduire tout

Créez une carte vide de 10 mx 10 m.

map = binaryOccupancyMap(10,10,10);

Définir l'occupation des emplacements du monde et afficher la carte.

x = [1.2; 2.3; 3.4; 4.5; 5.6];
y = [5.0; 4.0; 3.0; 2.0; 1.0];

setOccupancy(map, [x y], ones(5,1))
figure
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Gonflez les emplacements occupés d’un rayon donné.

inflate(map, 0.5)
figure
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Obtenez les emplacements de la grille à partir des emplacements du monde.

ij = world2grid(map, [x y]);

Définissez les emplacements de la grille sur des emplacements libres.

setOccupancy(map, ij, zeros(5,1), 'grid')
figure
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Cet exemple montre comment convertir une image en grille d'occupation binaire à utiliser avec la cartographie et la planification de chemin.

Importer une image.

image = imread('imageMap.png');

Convertissez en niveaux de gris, puis en image en noir et blanc en fonction de la valeur de seuil donnée.

grayimage = rgb2gray(image);
bwimage = grayimage < 0.5;

Utilisez une image en noir et blanc comme entrée matricielle pour la grille d'occupation binaire.

grid = binaryOccupancyMap(bwimage);

show(grid)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Cet exemple montre comment convertir un fichier .pgm en un objet binaryOccupancyMap à utiliser dans MATLAB.

Importez l'image en utilisant imread. L'image est assez grande et doit être recadrée selon la zone concernée.

image = imread('playpen_map.pgm');
imageCropped = image(750:1250,750:1250);
imshow(imageCropped)

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

Les zones inconnues (grises) doivent être supprimées et traitées comme de l'espace libre. Créez une matrice logique basée sur un seuil. Selon votre image, cette valeur peut être différente. L'espace occupé doit être défini sur 1 (blanc dans l'image).

imageBW = imageCropped < 100;
imshow(imageBW)

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

Créez un objet binaryOccupancyMap en utilisant une image de carte ajustée.

map = binaryOccupancyMap(imageBW);
show(map)

Figure contains an axes object. The axes object with title Binary Occupancy Grid, xlabel X [meters], ylabel Y [meters] contains an object of type image.

Capacités étendues

Historique des versions

Introduit dans R2015a

développer tout