Main Content

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

occupancyMap

Créer une carte d'occupation 2D

Depuis R2019b

Description

occupancyMap crée un objet de carte de grille d'occupation 2D. Chaque cellule de la grille d'occupation a une valeur représentant la probabilité d'occupation de cette cellule. Les valeurs proches de 1 représentent une forte probabilité que la cellule contienne un obstacle. Les valeurs proches de 0 représentent une forte probabilité que la cellule ne soit pas occupée et sans obstacle.

Les cartes d'occupation sont utilisées dans les algorithmes de navigation tels que la planification de chemins (voir plannerRRT). Ils sont également utilisés dans les applications de cartographie pour trouver des chemins sans collision, éviter les collisions et calculer la localisation (voir monteCarloLocalization). Vous pouvez modifier votre carte d'occupation pour l'adapter à votre application spécifique.

Les objets occupancyMap prennent en charge les coordonnées locales, les coordonnées mondiales et les indices de grille. Le premier emplacement de la grille avec l'index (1,1) commence dans le coin supérieur gauche de la grille.

Utilisez la classe occupancyMap pour créer des cartes 2D d'un environnement avec des valeurs de probabilité représentant différents obstacles dans votre monde. Vous pouvez spécifier les valeurs de probabilité exactes des cellules ou inclure des observations provenant de capteurs tels que des scanners laser.

Les valeurs de probabilité sont stockées à l'aide d'un filtre Bayes binaire pour estimer l'occupation de chaque cellule de la grille. Une représentation de log-cotes est utilisée, avec des valeurs stockées sous la forme int16 pour réduire la taille de stockage de la carte et permettre des applications en temps réel.

Création

Description

map = occupancyMap(width,height) crée un objet de carte d'occupation 2D représentant un espace mondial de width et height en mètres. La résolution de grille par défaut est de 1 cellule par mètre.

exemple

map = occupancyMap(width,height,resolution) crée une carte d'occupation avec une résolution de grille spécifiée en cellules par mètre. resolution définit la propriété Resolution .

map = occupancyMap(rows,cols,resolution,'grid') crée une carte d'occupation avec le nombre spécifié de lignes et de colonnes et avec la résolution en cellules par mètre. Les valeurs de rows et cols définissent la propriété GridSize .

map = occupancyMap(p) crée une carte d'occupation à partir des valeurs de la matrice p. La taille de la grille correspond à la taille de la matrice, chaque valeur de probabilité de cellule étant interprétée à partir de l'emplacement de la matrice.

exemple

map = occupancyMap(p,resolution) crée une carte d'occupation à partir de la matrice spécifiée et de la résolution en cellules par mètre.

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

map = occupancyMap(sourcemap,resolution) crée un objet en utilisant les valeurs d'un autre objet occupancyMap , 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 en mètres.

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

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

Nombre de lignes dans la grille, spécifié sous forme d'entier scalaire positif.

Nombre de colonnes dans la grille, spécifié sous forme d'entier scalaire positif.

Grille d'occupation d'entrée, spécifiée sous la forme d'une matrice de valeurs de probabilité allant de 0 à 1. La taille de la grille correspond à la taille de la matrice. Chaque élément de la matrice correspond à la probabilité que l'emplacement de la cellule de la grille soit occupé. Les valeurs proches de 1 représentent une grande certitude que la cellule contient un obstacle. Les valeurs proches de 0 représentent la certitude que la cellule n'est pas occupée et sans obstacle.

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

Propriétés

développer tout

Seuil en dessous duquel les cellules sont considérées comme sans obstacle, spécifié comme un scalaire compris entre 0 et 1 inclus. Les cellules dont les valeurs de probabilité sont inférieures à ce seuil sont considérées comme sans obstacle. Cette propriété définit également les emplacements libres pour la planification du chemin lors de l'utilisation d'objets comme plannerRRT.

Types de données : double

Seuil au-dessus duquel les cellules sont considérées comme occupées, spécifié sous forme de scalaire. Les cellules dont les valeurs de probabilité sont supérieures à ce seuil sont considérées comme occupées.

Types de données : double

Limites de saturation pour la probabilité, spécifiées sous la forme d'un vecteur à valeur réelle 1 x 2 de la forme [min max]. Les valeurs de probabilité inférieures à la valeur min seront saturées à min et les valeurs de probabilité supérieures à la valeur max seront saturées à max. Cette propriété réduit la sursaturation des cellules lors de l’incorporation de plusieurs observations.

Types de données : double

Ce propriété est en lecture seule.

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.

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.

Types de données : double

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

[x, y] coordonnées mondiales du coin inférieur gauche de la grille, spécifiées sous forme de vecteur 1 x 2.

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.

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].

Types de données : double

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 la forme d'un scalaire compris entre 0 et 1 inclus.

Types de données : double

Fonctions d'objet

checkOccupancyVérifiez si les emplacements sont libres ou occupés
copyCreate copy of 2-D occupancy map
getOccupancyObtenez la probabilité d'occupation des emplacements
grid2localConvertir les indices de grille en coordonnées locales
grid2worldConvertir les indices de grille en coordonnées mondiales
inflateGonflez chaque emplacement occupé
insertRayInsérer un rayon à partir d'une observation par balayage laser
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
occupancyMatrixConvert occupancy map to matrix
raycastCalculer les indices de cellules le long d'un rayon
rayIntersectionFind intersection points of rays and occupied map cells
setOccupancySet occupancy probability of locations
showAfficher la carte d'occupation 2D
syncWithSynchroniser la carte avec la carte superposée
updateOccupancyUpdate occupancy probability at locations
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 carte de grille d'occupation vide.

map = occupancyMap(10,10,20);

Spécifiez la pose du véhicule, les portées, les angles et la portée maximale du balayage laser.

pose = [5,5,0];
ranges = 3*ones(100,1);
angles = linspace(-pi/2,pi/2,100);
maxrange = 20;

Créez un objet lidarScan avec les plages et les angles spécifiés.

scan = lidarScan(ranges,angles);

Insérez les données du scanner laser dans la carte d'occupation.

insertRay(map,pose,scan,maxrange);

Affichez la carte pour voir les résultats de l’insertion du balayage laser.

show(map)

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

Vérifiez l'occupation de l'emplacement directement devant le véhicule.

getOccupancy(map,[8 5])
ans = 0.7000

Ajoutez une deuxième lecture et affichez la mise à jour des valeurs d'occupation. La lecture supplémentaire augmente la confiance dans les lectures. Les valeurs libre et occupé deviennent plus distinctes.

insertRay(map,pose,scan,maxrange);
show(map)

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

getOccupancy(map,[8 5])
ans = 0.8448

Convertissez un fichier de carte grise portable (PGM) contenant une carte ROS en un occupancyMap pour une utilisation dans MATLAB.

Importez l'image en utilisant imread. Recadrez l'image dans la zone du parc.

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 valeurs PGM sont exprimées de 0 à 255 sous la forme uint8. Normalisez ces valeurs en convertissant l'image recadrée en double et en divisant chaque cellule par 255. Cette image montre les obstacles avec des valeurs proches de 0. Soustrayez l'image normalisée de 1 pour obtenir les valeurs d'occupation, 1 représentant l'espace occupé.

imageNorm = double(imageCropped)/255;
imageOccupancy = 1 - imageNorm;

Créez l'objet occupancyMap à l'aide d'une image de carte ajustée. La résolution de la carte importée est de 20 cellules par mètre.

map = occupancyMap(imageOccupancy,20);
show(map)

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

Limites

Les valeurs d'occupation ont une résolution limitée de ±0,001. Les valeurs sont stockées sous la forme int16 en utilisant une représentation de log-cotes. Ce type de données limite la résolution, mais économise de la mémoire lors du stockage de grandes cartes dans MATLAB®. Lors de l'appel de setOccupancy puis de getOccupancy, la valeur renvoyée peut ne pas être égale à la valeur que vous avez définie. Pour plus d'informations, consultez la section sur les représentations des log-cotes dans Occupancy Grids.

Si la taille de la mémoire est une limitation, envisagez plutôt d'utiliser binaryOccupancyMap . La carte d'occupation binaire utilise moins de mémoire avec des valeurs binaires, mais fonctionne toujours avec les algorithmes Navigation Toolbox™ et d'autres applications.

Capacités étendues

Historique des versions

Introduit dans R2019b