Contenuto principale

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

occupancyMap

Crea una mappa di occupazione 2D

Descrizione

occupancyMap crea un oggetto mappa con griglia di occupazione 2D. Ogni cella nella griglia di occupazione ha un valore che rappresenta la probabilità che quella cella sia occupata. I valori prossimi a 1 rappresentano un'alta probabilità che la cella contenga un ostacolo. Valori prossimi a 0 rappresentano un'alta probabilità che la cella non sia occupata e libera da ostacoli.

Le mappe di occupazione vengono utilizzate negli algoritmi di navigazione come la pianificazione del percorso (vedere plannerRRT). Vengono inoltre utilizzati nelle applicazioni di mappatura per trovare percorsi privi di collisioni, evitare le collisioni e calcolare la localizzazione (vedere monteCarloLocalization). Puoi modificare la mappa di occupazione per adattarla alla tua applicazione specifica.

Gli oggetti occupancyMap supportano coordinate locali, coordinate mondiali e indici di griglia. La prima posizione della griglia con indice (1,1) inizia nell'angolo in alto a sinistra della griglia.

Utilizza la classe occupancyMap per creare mappe 2D di un ambiente con valori di probabilità che rappresentano diversi ostacoli nel tuo mondo. È possibile specificare valori di probabilità esatti delle celle o includere osservazioni da sensori come gli scanner laser.

I valori di probabilità vengono memorizzati utilizzando un filtro Bayes binario per stimare l'occupazione di ciascuna cella della griglia. Viene utilizzata una rappresentazione logaritmica, con valori memorizzati come int16 per ridurre le dimensioni di archiviazione della mappa e consentire applicazioni in tempo reale.

Creazione

Descrizione

map = occupancyMap(width,height) crea un oggetto mappa di occupazione 2D che rappresenta uno spazio mondiale di width e height in metri. La risoluzione predefinita della griglia è di 1 cella per metro.

map = occupancyMap(width,height,resolution) crea una mappa di occupazione con una risoluzione della griglia specificata in celle per metro. resolution imposta la proprietà Resolution.

esempio

map = occupancyMap(rows,cols,resolution,'grid') crea una mappa di occupazione con il numero specificato di righe e colonne e con la risoluzione in celle per metro. I valori di rows e cols impostano la proprietà GridSize.

map = occupancyMap(p) crea una mappa di occupazione dai valori nella matrice p. La dimensione della griglia corrisponde alla dimensione della matrice e ogni valore di probabilità della cella viene interpretato in base alla posizione della matrice.

map = occupancyMap(p,resolution) crea una mappa di occupazione dalla matrice specificata e dalla risoluzione in celle per metro.

esempio

map = occupancyMap(sourcemap) crea un oggetto utilizzando i valori di un altro oggetto occupancyMap.

map = occupancyMap(sourcemap,resolution) crea un oggetto utilizzando i valori di un altro oggetto occupancyMap, ma ricampiona la matrice per ottenere la risoluzione specificata.

Argomenti di input

espandi tutto

Larghezza della mappa, specificata come uno scalare in metri.

Altezza della mappa, specificata come valore scalare in metri.

Risoluzione della griglia, specificata come uno scalare in celle per metro.

Numero di righe nella griglia, specificato come numero intero scalare positivo.

Numero di colonne nella griglia, specificato come numero intero scalare positivo.

Griglia di occupazione di input, specificata come matrice di valori di probabilità da 0 a 1. La dimensione della griglia corrisponde alla dimensione della matrice. Ogni elemento della matrice corrisponde alla probabilità che la posizione della cella della griglia sia occupata. Valori prossimi a 1 rappresentano un'elevata certezza che la cella contenga un ostacolo. I valori prossimi a 0 rappresentano la certezza che la cella non è occupata e libera da ostacoli.

Oggetto mappa occupazione, specificato come oggetto occupancyMap.

Proprietà

espandi tutto

Soglia al di sotto della quale le celle sono considerate libere da ostacoli, specificata come uno scalare compreso tra 0 e 1 inclusi. Le celle con valori di probabilità inferiori a questa soglia sono considerate prive di ostacoli. Questa proprietà definisce anche le posizioni libere per la pianificazione del percorso quando si utilizzano oggetti come plannerRRT .

Tipi di dati: double

Soglia al di sopra della quale le celle sono considerate occupate, specificata come valore scalare. Le celle con valori di probabilità superiori a questa soglia sono considerate occupate.

Tipi di dati: double

Limiti di saturazione per la probabilità, specificati come un vettore a valori reali 1 per 2 della forma [min max] . I valori di probabilità inferiori al valore min saranno saturati a min e i valori di probabilità superiori al valore max saranno saturati a max. Questa proprietà riduce la sovrasaturazione delle celle quando si incorporano più osservazioni.

Tipi di dati: double

proprietà è di sola lettura.

Numero di righe e colonne nella griglia, memorizzato come vettore reale 1 per 2 che rappresenta il numero di righe e colonne, in quest'ordine.

Tipi di dati: double

proprietà è di sola lettura.

Risoluzione della griglia, memorizzata come uno scalare in celle per metro che rappresenta il numero e la dimensione delle posizioni della griglia.

Tipi di dati: double

proprietà è di sola lettura.

Valori minimo e massimo delle coordinate x nel sistema di riferimento locale, memorizzati come vettore orizzontale a due elementi della forma [min max] . Il frame locale è definito dalla proprietà LocalOriginInWorld.

Tipi di dati: double

proprietà è di sola lettura.

Valori minimo e massimo delle coordinate y nel sistema di riferimento locale, memorizzati come vettore orizzontale a due elementi della forma [min max] . Il frame locale è definito dalla proprietà LocalOriginInWorld.

Tipi di dati: double

proprietà è di sola lettura.

Valori minimi e massimi dell'intervallo mondiale delle coordinate x, memorizzati come vettore 1 per 2 che rappresenta i valori minimo e massimo, in quest'ordine.

Tipi di dati: double

proprietà è di sola lettura.

Valori minimi e massimi dell'intervallo mondiale delle coordinate y, memorizzati come vettore 1 per 2 che rappresenta i valori minimo e massimo, in quest'ordine.

Tipi di dati: double

[x,y] coordinate mondiali dell'angolo inferiore sinistro della griglia, specificate come vettore 1 per 2.

Tipi di dati: double

Posizione dell'origine del sistema di riferimento locale in coordinate mondiali, specificata come vettore a due elementi, [xLocal yLocal] . Utilizzare la funzione move per spostare il frame locale mentre il veicolo si muove.

Tipi di dati: double

Posizione dell'angolo inferiore sinistro della griglia in coordinate locali, specificato come vettore a due elementi, [xLocal yLocal] .

Tipi di dati: double

Valore predefinito per posizioni della mappa non specificate, comprese le aree esterne alla mappa, specificato come uno scalare compreso tra 0 e 1 inclusi.

Tipi di dati: double

Funzioni oggetto

checkOccupancyCheck if locations are free or occupied
copyCreate copy of 2-D occupancy map
getOccupancyGet occupancy probability of locations
grid2localConvert grid indices to local coordinates
grid2worldConvert grid indices to world coordinates
inflateInflate each occupied location
insertRayInsert ray from laser scan observation
local2gridConvert local coordinates to grid indices
local2worldConvert local coordinates to world coordinates
moveMove map in world frame
occupancyMatrixConvert occupancy map to matrix
raycastCompute cell indices along a ray
rayIntersectionFind intersection points of rays and occupied map cells
setOccupancySet occupancy probability of locations
showDisplay 2-D occupancy map
syncWithSync map with overlapping map
updateOccupancyUpdate occupancy probability at locations
world2gridConvert world coordinates to grid indices
world2localConvert world coordinates to local coordinates

Esempi

comprimi tutto

Crea una mappa della griglia di occupazione vuota.

map = occupancyMap(10,10,20);

Specificare la posa del veicolo, le distanze, gli angoli e la portata massima della scansione laser.

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

Crea un oggetto lidarScan con gli intervalli e gli angoli specificati.

scan = lidarScan(ranges,angles);

Inserire i dati della scansione laser nella mappa di occupazione.

insertRay(map,pose,scan,maxrange);

Mostra la mappa per vedere i risultati dell'inserimento della scansione 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.

Controllare l'occupazione del posto direttamente davanti al veicolo.

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

Aggiungi una seconda lettura e visualizza l'aggiornamento dei valori di occupazione. La lettura aggiuntiva aumenta l'affidabilità delle letture. I valori liberi e occupati diventano più distinti.

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

Converti un file PGM (Portable Graymap) contenente una mappa ROS in un file occupancyMap da utilizzare in MATLAB.

Importa l'immagine usando imread . Ritaglia l'immagine nell'area del recinto.

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

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

I valori PGM sono espressi da 0 a 255 come uint8. Normalizzare questi valori convertendo l'immagine ritagliata in double e dividendo ogni cella per 255. Questa immagine mostra gli ostacoli con valori prossimi a 0. Sottrai l'immagine normalizzata da 1 per ottenere i valori di occupazione, dove 1 rappresenta lo spazio occupato.

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

Crea l'oggetto occupancyMap utilizzando un'immagine mappa modificata. La risoluzione della mappa importata è di 20 celle per metro.

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.

Limitazioni

I valori di occupazione hanno una risoluzione limitata di ±0,001. I valori vengono memorizzati come int16 utilizzando una rappresentazione logaritmica. Questo tipo di dati limita la risoluzione, ma consente di risparmiare memoria quando si memorizzano mappe di grandi dimensioni in MATLAB®. Quando si chiama setOccupancy e poi getOccupancy, il valore restituito potrebbe non essere uguale al valore impostato. Per ulteriori informazioni, vedere la sezione sulle rappresentazioni logaritmiche in Occupancy Grids.

Se la dimensione della memoria è un limite, si può prendere in considerazione l'utilizzo di binaryOccupancyMap. La mappa di occupazione binaria utilizza meno memoria con valori binari, ma funziona comunque con gli algoritmi Navigation Toolbox™ e altre applicazioni.

Funzionalità estese

espandi tutto

Cronologia versioni

Introdotto in R2019b