Main Content

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

occupancyMap3D

Créer une carte d'occupation 3D

Depuis R2019b

Description

L'objet occupancyMap3D stocke une carte 3D et des informations cartographiques. La carte est stockée sous forme de valeurs probabilistes dans un octree data structure. La classe gère des environnements arbitraires et augmente sa taille de manière dynamique en fonction des entrées d'observation. Vous pouvez ajouter des observations sous forme de nuages ​​de points ou d'emplacements xyz spécifiques. Ces observations mettent à jour les valeurs de probabilité. Les valeurs probabilistes représentent l'occupation des emplacements. La structure de données octree coupe les données de manière appropriée pour rester efficace à la fois en mémoire et sur disque.

Création

Description

omap = occupancyMap3D crée une carte d'occupation 3D vide sans observations ni valeurs de propriété par défaut.

exemple

omap = occupancyMap3D(res) spécifie une résolution de carte en cellules/mètre et définit la propriété Resolution .

omap = occupancyMap3D(res,Name,Value) spécifie les propriétés en utilisant un ou plusieurs arguments nom-valeur. Par exemple, "FreeThreshold",0.25 définit le seuil pour considérer les cellules sans obstacle avec une valeur de probabilité de 0,25.

Propriétés

développer tout

Résolution de la grille en cellules par mètre, spécifiée sous forme de scalaire. Spécifiez la résolution sur la construction. L'insertion d'observations avec des précisions supérieures à cette valeur est arrondie et appliquée à cette résolution.

Seuil pour considérer les cellules comme sans obstacle, spécifié sous la forme d'un scalaire positif. Les valeurs de probabilité inférieures à ce seuil sont considérées comme sans obstacle.

Seuil pour considérer les cellules comme occupées, spécifié comme un scalaire positif. Les valeurs de probabilité supérieures à ce seuil sont considérées comme occupées.

Limites de saturation sur les valeurs de probabilité, spécifiées sous la forme d'un vecteur [min max] . Les valeurs supérieures ou inférieures à ces valeurs de saturation sont définies sur les valeurs min ou max . Cette propriété réduit la sursaturation des cellules lors de l’incorporation de plusieurs observations.

Fonctions d'objet

checkOccupancyCheck if locations are free or occupied
getOccupancyGet occupancy probability of locations
inflateInflate each occupied location
insertPointCloudInsert 3-D points or point cloud observation into map
rayIntersectionTrouver les points d'intersection des rayons et des cellules de carte occupées
setOccupancyCoordonnées mondiales, spécifiées sous la forme d'une matriceDéfinir la probabilité d'occupation des emplacements
showAfficher une carte d'occupation en 3D
updateOccupancyMettre à jour la probabilité d'occupation des emplacements

Exemples

réduire tout

L'objet occupancyMap3D stocke les obstacles dans un espace 3D, en utilisant les observations des capteurs pour cartographier un environnement. Créez une carte et ajoutez des points à partir d'un nuage de points pour identifier les obstacles. Gonflez ensuite les obstacles sur la carte pour garantir un espace de fonctionnement sûr autour des obstacles.

Créez un objet occupancyMap3D avec une résolution cartographique de 10 cellules/mètre.

map3D = occupancyMap3D(10);

Définissez un ensemble de points 3D comme une observation à partir d'une pose [x y z qw qx qy qz]. Cette pose est destinée au capteur qui observe ces points et est centrée sur l'origine. Définissez deux ensembles de points pour insérer plusieurs observations.

pose = [ 0 0 0 1 0 0 0];

points = repmat((0:0.25:2)', 1, 3);
points2 = [(0:0.25:2)' (2:-0.25:0)' (0:0.25:2)'];
maxRange = 5;

Insérez le premier ensemble de points en utilisant insertPointCloud. La fonction utilise la pose du capteur et les points donnés pour insérer des observations dans la carte. Les couleurs affichées correspondent à la hauteur du point uniquement à des fins d'illustration.

insertPointCloud(map3D,pose,points,maxRange)
show(map3D)

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

Insérez le deuxième ensemble de points. Le rayon entre la pose du capteur (origine) et ces points chevauche les points de l'insertion précédente. Par conséquent, l'espace libre entre le capteur et les nouveaux points est mis à jour et marqué comme espace libre.

insertPointCloud(map3D,pose,points2,maxRange)
show(map3D)

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

Gonflez la carte pour ajouter une zone tampon pour un fonctionnement sûr autour des obstacles. Définissez le rayon du véhicule et la distance de sécurité et utilisez la somme de ces valeurs pour définir le rayon de gonflage de la carte.

vehicleRadius = 0.2;
safetyRadius = 0.3;
inflationRadius = vehicleRadius + safetyRadius;
inflate(map3D, inflationRadius);

show(map3D)

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

Algorithmes

développer tout

Références

[1] Hornung, Armin, Kai M. Wurm, Maren Bennewitz, Cyrill Stachniss, and Wolfram Burgard. "OctoMap: an efficient probabilistic 3D mapping framework based on octrees." Autonomous Robots 34, no. 3 (April 2013): 189–206. https://doi.org/10.1007/s10514-012-9321-0.

Capacités étendues

Historique des versions

Introduit dans R2019b