Hauptinhalt

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

occupancyMap

Erstellen Sie eine 2D-Belegungskarte

Beschreibung

occupancyMap erstellt ein zweidimensionales Belegungsraster-Kartenobjekt. Jede Zelle im Belegungsraster hat einen Wert, der die Wahrscheinlichkeit der Belegung dieser Zelle darstellt. Werte nahe 1 stellen eine hohe Wahrscheinlichkeit dar, dass die Zelle ein Hindernis enthält. Werte nahe 0 stellen eine hohe Wahrscheinlichkeit dar, dass die Zelle nicht besetzt und frei von Hindernissen ist.

Belegungskarten werden in Navigationsalgorithmen wie der Pfadplanung verwendet (siehe plannerRRT). Sie werden außerdem in Kartierungsanwendungen zum Suchen kollisionsfreier Pfade, zur Kollisionsvermeidung und zur Berechnung der Lokalisierung verwendet (siehe monteCarloLocalization). Sie können Ihre Belegungskarte an Ihren spezifischen Anwendungszweck anpassen.

Die occupancyMap-Objekte unterstützen lokale Koordinaten, Weltkoordinaten und Rasterindizes. Die erste Rasterposition mit dem Index (1,1) beginnt in der oberen linken Ecke des Rasters.

Verwenden Sie die Klasse occupancyMap, um 2D-Karten einer Umgebung mit Wahrscheinlichkeitswerten zu erstellen, die verschiedene Hindernisse in Ihrer Welt darstellen. Dabei können Sie exakte Wahrscheinlichkeitswerte von Zellen angeben oder auch Beobachtungen von Sensoren wie beispielsweise Laserscannern einbeziehen.

Wahrscheinlichkeitswerte werden mithilfe eines binären Bayes-Filters gespeichert, um die Belegung jeder Rasterzelle zu schätzen. Es wird eine Log-Odds-Darstellung verwendet, wobei die Werte als int16 gespeichert werden, um die Speichergröße der Karte zu reduzieren und Echtzeitanwendungen zu ermöglichen.

Erstellung

Beschreibung

map = occupancyMap(width,height) erstellt ein zweidimensionales Belegungskartenobjekt, das einen Weltraum von width und height in Metern darstellt. Die Standardrasterauflösung beträgt 1 Zelle pro Meter.

map = occupancyMap(width,height,resolution) erstellt eine Belegungskarte mit einer angegebenen Rasterauflösung in Zellen pro Meter. resolution legt die Eigenschaft Resolution fest.

Beispiel

map = occupancyMap(rows,cols,resolution,'grid') erstellt eine Belegungskarte mit der angegebenen Zeilen- und Spaltenanzahl und mit der Auflösung in Zellen pro Meter. Die Werte von rows und cols legen die Eigenschaft GridSize fest.

map = occupancyMap(p) erstellt eine Belegungskarte aus den Werten in der Matrix p. Die Rastergröße entspricht der Größe der Matrix, wobei der Wahrscheinlichkeitswert jeder Zelle aus der Matrixposition interpretiert wird.

map = occupancyMap(p,resolution) erstellt eine Belegungskarte aus der angegebenen Matrix und Auflösung in Zellen pro Meter.

Beispiel

map = occupancyMap(sourcemap) erstellt ein Objekt unter Verwendung von Werten eines anderen occupancyMap-Objekts.

map = occupancyMap(sourcemap,resolution) erstellt ein Objekt unter Verwendung von Werten eines anderen occupancyMap-Objekts, reskaliert die Matrix jedoch neu, um die angegebene Auflösung zu erreichen.

Eingabeargumente

alle erweitern

Kartenbreite, angegeben als Skalar in Metern.

Kartenhöhe, angegeben als Skalar in Metern.

Rasterauflösung, angegeben als Skalar in Zellen pro Meter.

Anzahl der Zeilen im Raster, angegeben als positive Skalarzahl.

Anzahl der Spalten im Raster, angegeben als positive Skalarzahl.

Eingabe-Belegungsraster, angegeben als Matrix von Wahrscheinlichkeitswerten von 0 bis 1. Die Größe des Rasters entspricht der Größe der Matrix. Jedes Matrixelement entspricht der Wahrscheinlichkeit, dass die Position der Rasterzelle besetzt ist. Werte nahe 1 stellen eine hohe Wahrscheinlichkeit dar, dass die Zelle ein Hindernis enthält. Werte nahe 0 stellen die Sicherheit dar, dass die Zelle nicht besetzt und frei von Hindernissen ist.

Belegungsplanobjekt, angegeben als occupancyMap-Objekt.

Eigenschaften

alle erweitern

Schwellenwert, unterhalb dessen Zellen als hindernisfrei gelten, angegeben als Skalar zwischen 0 und 1 (einschließlich). Zellen mit Wahrscheinlichkeitswerten unterhalb dieses Schwellenwerts gelten als hindernisfrei. Diese Eigenschaft definiert auch die freien Standorte für die Pfadplanung bei der Verwendung von Objekten wie plannerRRT.

Datentypen: double

Schwellenwert, ab dem Zellen als belegt gelten, angegeben als Skalar. Zellen mit Wahrscheinlichkeitswerten über diesem Schwellenwert gelten als besetzt.

Datentypen: double

Sättigungsgrenzen für die Wahrscheinlichkeit, angegeben als 1x2-realwertiger Vektor der Form [min max]. Die Wahrscheinlichkeitswerte unter dem Wert min werden auf min gesättigt und die Wahrscheinlichkeitswerte über dem Wert max werden auf max gesättigt. Diese Eigenschaft reduziert die Übersättigung von Zellen bei der Einbeziehung mehrerer Beobachtungen.

Datentypen: double

Diese Eigenschaft ist schreibgeschützt.

Anzahl der Zeilen und Spalten im Raster, gespeichert als 1x2-Realwertvektor, der die Anzahl der Zeilen und Spalten in dieser Reihenfolge darstellt.

Datentypen: double

Diese Eigenschaft ist schreibgeschützt.

Rasterauflösung, gespeichert als Skalar in Zellen pro Meter, die die Anzahl und Größe der Rasterpositionen darstellt.

Datentypen: double

Diese Eigenschaft ist schreibgeschützt.

Minimale und maximale Werte der x-Koordinaten im lokalen Rahmen, gespeichert als horizontaler Vektor mit zwei Elementen der Form [min max]. Der lokale Rahmen wird durch die Eigenschaft LocalOriginInWorld definiert.

Datentypen: double

Diese Eigenschaft ist schreibgeschützt.

Minimale und maximale Werte der y-Koordinaten im lokalen Rahmen, gespeichert als horizontaler Vektor mit zwei Elementen der Form [min max]. Der lokale Rahmen wird durch die Eigenschaft LocalOriginInWorld definiert.

Datentypen: double

Diese Eigenschaft ist schreibgeschützt.

Minimale und maximale Weltbereichswerte von x-Koordinaten, gespeichert als 1x2-Vektor, der die minimalen und maximalen Werte in dieser Reihenfolge darstellt.

Datentypen: double

Diese Eigenschaft ist schreibgeschützt.

Minimale und maximale Weltbereichswerte von y-Koordinaten, gespeichert als 1x2-Vektor, der die minimalen und maximalen Werte in dieser Reihenfolge darstellt.

Datentypen: double

[x,y] Weltkoordinaten der unteren linken Ecke des Rasters, angegeben als 1-mal-2-Vektor.

Datentypen: double

Position des Ursprungs des lokalen Rahmens in Weltkoordinaten, angegeben als Vektor mit zwei Elementen, [xLocal yLocal]. Verwenden Sie die Funktion move, um den lokalen Rahmen zu verschieben, während sich Ihr Fahrzeug bewegt.

Datentypen: double

Position der unteren linken Ecke des Rasters in lokalen Koordinaten, angegeben als Vektor mit zwei Elementen, [xLocal yLocal].

Datentypen: double

Standardwert für nicht angegebene Kartenstandorte, einschließlich Bereiche außerhalb der Karte, angegeben als Skalar zwischen 0 und 1 einschließlich.

Datentypen: double

Objektfunktionen

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

Beispiele

alle reduzieren

Erstellen Sie eine leere Belegungsrasterkarte.

map = occupancyMap(10,10,20);

Geben Sie die Position des Fahrzeugs, Bereiche, Winkel und die maximale Reichweite des Laserscans an.

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

Erstellen Sie ein lidarScan-Objekt mit den angegebenen Bereichen und Winkeln.

scan = lidarScan(ranges,angles);

Fügen Sie die Laserscan-Daten in die Belegungskarte ein.

insertRay(map,pose,scan,maxrange);

Zeigen Sie die Karte an, um die Ergebnisse des Einfügens des Laserscans anzuzeigen.

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.

Prüfen Sie die Belegung des Platzes direkt vor dem Fahrzeug.

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

Fügen Sie einen zweiten Messwert hinzu und zeigen Sie die Aktualisierung der Belegungswerte an. Durch das zusätzliche Lesen wird das Vertrauen in die Messwerte erhöht. Die freien und belegten Werte werden deutlicher.

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

Konvertieren Sie eine portable Graymap-Datei (PGM), die eine ROS-Map enthält, in ein occupancyMap zur Verwendung in MATLAB.

Importieren Sie das Bild mit imread. Schneiden Sie das Bild auf den Laufstallbereich zu.

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.

PGM-Werte von 0 bis 255 werden als uint8 ausgedrückt. Normalisieren Sie diese Werte, indem Sie das zugeschnittene Bild in double konvertieren und jede Zelle durch 255 teilen. Dieses Bild zeigt Hindernisse als Werte nahe 0. Subtrahieren Sie das normalisierte Bild von 1, um Belegungswerte zu erhalten, wobei 1 den belegten Raum darstellt.

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

Erstellen Sie das occupancyMap-Objekt mithilfe eines angepassten Kartenbildes. Die Auflösung der importierten Karte beträgt 20 Zellen pro Meter.

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.

Einschränkungen

Die Auflösung der Belegungswerte ist auf ±0,001 begrenzt. Die Werte werden als int16 unter Verwendung einer Log-Odds-Darstellung gespeichert. Dieser Datentyp begrenzt die Auflösung, spart aber Speicher beim Speichern großer Karten in MATLAB®. Wenn Sie setOccupancy und dann getOccupancy aufrufen, entspricht der zurückgegebene Wert möglicherweise nicht dem von Ihnen festgelegten Wert. Weitere Informationen finden Sie im Abschnitt zu Log-Odds-Darstellungen in Occupancy Grids.

Wenn die Speichergröße eine Einschränkung darstellt, sollten Sie stattdessen binaryOccupancyMap verwenden. Die binäre Belegungskarte benötigt bei binären Werten weniger Speicher, funktioniert aber dennoch mit Navigation Toolbox™-Algorithmen und anderen Anwendungen.

Erweiterte Fähigkeiten

alle erweitern

Versionsverlauf

Eingeführt in R2019b