buildMap
Créer une carte d'occupation à partir d'analyses lidar
Depuis R2019b
Description
crée une carte map
= buildMap(scans
,poses
,mapResolution
,maxRange
)occupancyMap
en insérant le lidar scans
au poses
donné. Spécifiez la résolution de la carte résultante, mapResolution
, et la portée maximale du capteur lidar, maxRange
.
Exemples
Créer une carte d'occupation à partir de scans et de poses Lidar
La fonction buildMap
prend en compte les lectures d'analyse lidar et les poses associées pour créer une grille d'occupation en tant qu'objets lidarScan
et les poses [x y theta]
associées pour créer une occupancyMap
.
Analyse de charge et estimations de pose collectées à partir de capteurs sur un robot dans un parking. Les données collectées sont corrélées à l'aide d'un algorithme lidarSLAM
, qui effectue une correspondance de scan pour associer les scans et ajuster les poses sur la trajectoire complète du robot. Vérifiez que les scans et les poses ont la même longueur.
load scansAndPoses.mat
length(scans) == length(poses)
ans = logical
1
Construisez la carte. Spécifiez les scans et les poses dans la fonction buildMap
et incluez la résolution de carte souhaitée (10 cellules par mètre) et la portée maximale du lidar (19,2 mètres). Chaque analyse est ajoutée aux poses associées et les valeurs de probabilité dans la grille d'occupation sont mises à jour.
occMap = buildMap(scans,poses,10,19.2);
figure
show(occMap)
title('Occupancy Map of Garage')
Effectuer un SLAM à l'aide de scans Lidar
Utilisez un objet lidarSLAM
pour ajouter et comparer de manière itérative des analyses lidar et créer un graphique de pose optimisé de la trajectoire du robot. Pour obtenir une carte d'occupation à partir des poses et scans associés, utilisez la fonction buildMap
.
Charger des données et configurer l'algorithme SLAM
Chargez un cell array d'objets lidarScan
. Les scans lidar ont été collectés dans un parking sur un robot Husky® de ClearPath Robotics®. En règle générale, les analyses lidar sont effectuées à haute fréquence et chaque analyse n'est pas nécessaire pour le SLAM. Par conséquent, sous-échantillonnez les analyses en sélectionnant uniquement toutes les 40 analyses.
load garage_fl1_southend.mat scans scans = scans(1:40:end);
Pour configurer l'algorithme SLAM, spécifiez la plage lidar, la résolution de la carte, le seuil de fermeture de boucle et le rayon de recherche. Ajustez ces paramètres pour votre robot et votre environnement spécifiques. Créez l'objet lidarSLAM
avec ces paramètres.
maxRange = 19.2; % meters resolution = 10; % cells per meter slamObj = lidarSLAM(resolution,maxRange); slamObj.LoopClosureThreshold = 360; slamObj.LoopClosureSearchRadius = 8;
Ajouter des analyses de manière itérative
À l'aide d'une boucle for
, ajoutez des analyses à l'objet SLAM. L'objet utilise la correspondance d'analyse pour comparer chaque analyse ajoutée à celles ajoutées précédemment. Pour améliorer la carte, l'objet optimise le graphique de pose chaque fois qu'il détecte une fermeture de boucle. Tous les 10 scans, affichez les poses et les scans stockés.
for i = 1:numel(scans) addScan(slamObj,scans{i}); if rem(i,10) == 0 show(slamObj); end end
Voir la carte d'occupation
Après avoir ajouté tous les scans à l'objet SLAM, créez une carte occupancyMap
en appelant buildMap
avec les scans et les poses. Utilisez la même résolution de carte et la même portée maximale que celles utilisées avec l'objet SLAM.
[scansSLAM,poses] = scansAndPoses(slamObj);
occMap = buildMap(scansSLAM,poses,resolution,maxRange);
figure
show(occMap)
title('Occupancy Map of Garage')
Arguments d'entrée
scans
— Analyses lidar
cell array d'objets lidarScan
Analyses Lidar utilisées pour créer la carte, spécifiées sous la forme d'un cell array d'objets lidarScan
.
poses
— Poses de scans lidar
n-matrice par 3
Poses d'analyses lidar, spécifiées sous la forme d'une matrice n-by-3. Chaque ligne est un vecteur [x y theta]
représentant la xy-position et angle d'orientation d'un scan.
mapResolution
— Résolution de la grille d'occupation
entier positif
Résolution de la carte de sortie occupancyMap
, spécifiée sous la forme d'un entier positif en cellules par mètre.
maxRange
— Portée maximale du capteur lidar
scalaire positif
Portée maximale du capteur lidar, spécifiée sous forme de scalaire positif en mètres. Les points du scans
en dehors de cette plage sont ignorés.
Arguments nom-valeur
Spécifiez des paires d'arguments facultatives sous la forme Name1=Value1,...,NameN=ValueN
, où Name
est le nom de l'argument et Value
est la valeur correspondante. Les arguments nom-valeur doivent apparaître après les autres arguments, mais l'ordre des paires n'a pas d'importance.
Avant R2021a, utilisez des virgules pour séparer chaque nom et valeur, et mettez Name
entre guillemets.
Exemple : ['MapWidth',10]
MapWidth
— Largeur de la grille d'occupation
scalaire positif
Largeur de la grille d'occupation, spécifiée comme une paire séparée par des virgules composée de 'MapWidth'
et d'un scalaire positif. Si cette valeur n'est pas spécifiée, la carte est automatiquement mise à l'échelle pour s'adapter à tous les balayages laser.
MapHeight
— Grille de hauteur d'occupation
scalaire positif
Grille de hauteur d'occupation, spécifiée comme une paire séparée par des virgules composée de 'MapHeight'
et d'un scalaire positif. Si cette valeur n'est pas spécifiée, la carte est automatiquement mise à l'échelle pour s'adapter à tous les balayages laser.
Arguments de sortie
map
— Carte d'occupation
occupancyMap
objet
Carte d'occupation, renvoyée sous forme d'objet occupancyMap
.
Historique des versions
Introduit dans R2019b
Commande MATLAB
Vous avez cliqué sur un lien qui correspond à cette commande MATLAB :
Pour exécuter la commande, saisissez-la dans la fenêtre de commande de MATLAB. Les navigateurs web ne supportent pas les commandes MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)