Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l'ultima versione in inglese.

occupancyMap3D

Crea una mappa di occupazione 3D

Descrizione

L'oggetto occupancyMap3D memorizza una mappa 3D e informazioni sulla mappa. La mappa viene memorizzata sotto forma di valori probabilistici in una struttura dati octree. La classe gestisce ambienti arbitrari e amplia dinamicamente le sue dimensioni in base agli input di osservazione. È possibile aggiungere osservazioni come nuvole di punti o come posizioni xyz specifiche. Queste osservazioni aggiornano i valori di probabilità. I valori probabilistici rappresentano l'occupazione delle posizioni. La struttura dati octree riduce opportunamente i dati per mantenerli efficienti sia in memoria che su disco.

Creazione

Descrizione

omap = occupancyMap3D crea una mappa di occupazione 3D vuota, senza osservazioni e senza valori di proprietà predefiniti.

omap = occupancyMap3D(res) specifica una risoluzione della mappa in celle/metro e imposta la proprietà Resolution.

esempio

omap = occupancyMap3D(res,Name,Value) specifica le proprietà utilizzando uno o più argomenti nome-valore. Ad esempio, "FreeThreshold",0.25 imposta la soglia per considerare le celle prive di ostacoli come un valore di probabilità pari a 0,25.

Proprietà

espandi tutto

Risoluzione della griglia in celle per metro, specificata come scalare. Specificare la risoluzione in fase di costruzione. L'inserimento di osservazioni con precisioni superiori a questo valore viene arrotondato per difetto e applicato a questa risoluzione.

Soglia per considerare le celle come prive di ostacoli, specificata come uno scalare positivo. I valori di probabilità inferiori a questa soglia sono considerati privi di ostacoli.

Soglia per considerare le celle come occupate, specificata come uno scalare positivo. I valori di probabilità superiori a questa soglia sono considerati occupati.

Limiti di saturazione sui valori di probabilità, specificati come vettore [min max]. I valori superiori o inferiori a questi valori di saturazione vengono impostati sui valori min o max. Questa proprietà riduce la sovrasaturazione delle celle quando si incorporano più osservazioni.

Funzioni oggetto

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
rayIntersectionFind intersection points of rays and occupied map cells
setOccupancySet occupancy probability of locations
showDisplay 3-D occupancy map
updateOccupancyUpdate occupancy probability at locations

Esempi

comprimi tutto

L'oggetto occupancyMap3D memorizza gli ostacoli nello spazio 3D, utilizzando le osservazioni dei sensori per mappare un ambiente. Crea una mappa e aggiungi punti da una nuvola di punti per identificare gli ostacoli. Quindi gonfiare gli ostacoli sulla mappa per garantire uno spazio operativo sicuro attorno agli ostacoli.

Crea un oggetto occupancyMap3D con una risoluzione della mappa di 10 celle/metro.

map3D = occupancyMap3D(10);

Definire un insieme di punti 3D come un'osservazione da una posa [x y z qw qx qy qz] . Questa posa è per il sensore che osserva questi punti ed è centrato sull'origine. Definire due serie di punti per inserire più osservazioni.

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;

Inserire il primo set di punti utilizzando insertPointCloud . La funzione utilizza la posizione del sensore e i punti forniti per inserire osservazioni nella mappa. I colori visualizzati corrispondono all'altezza del punto solo a scopo illustrativo.

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.

Inserire la seconda serie di punti. Il raggio tra la posa del sensore (origine) e questi punti si sovrappone ai punti dell'inserimento precedente. Pertanto, lo spazio libero tra il sensore e i nuovi punti viene aggiornato e contrassegnato come spazio libero.

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.

Gonfiare la mappa per aggiungere una zona cuscinetto per operare in sicurezza attorno agli ostacoli. Definire il raggio del veicolo e la distanza di sicurezza e utilizzare la somma di questi valori per definire il raggio di gonfiaggio della mappa.

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.

Algoritmi

espandi tutto

Riferimenti

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

Funzionalità estese

espandi tutto

Cronologia versioni

Introdotto in R2019b