Hauptinhalt

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

lidarScan

Objekt zum Speichern von 2D-Lidar-Scans erstellen

Beschreibung

Ein lidarScan-Objekt enthält Daten für einen einzelnen 2D-Lidar-Scan (Light Detection and Ranging). Der Lidar-Scan ist ein Laserscan für eine 2D-Ebene mit gemessenen Entfernungen (Ranges) vom Sensor zu Hindernissen in der Umgebung in bestimmten Winkeln (Angles). Verwenden Sie dieses Laserscan-Objekt als Eingabe für andere Robotik-Algorithmen wie matchScans, controllerVFH oder monteCarloLocalization.

Erstellung

Beschreibung

scan = lidarScan(ranges,angles) erstellt aus ranges und angles ein lidarScan-Objekt, das die von einem Lidar-Sensor gesammelten Daten darstellt. Die Eingaben ranges und angles sind Vektoren gleicher Länge und werden direkt auf die Eigenschaften Ranges und Angles gesetzt.

Beispiel

scan = lidarScan(cart) erstellt ein lidarScan-Objekt unter Verwendung der eingegebenen kartesischen Koordinaten als n-mal-2-Matrix. Die Eigenschaft Cartesian wird direkt aus dieser Eingabe festgelegt.

scan = lidarScan(scanMsg) erstellt ein lidarScan-Objekt aus einem LaserScan (ROS Toolbox)-ROS-Nachrichtenobjekt.

Eigenschaften

alle erweitern

Entfernungsangaben vom Lidar, angegeben als Vektor in Metern. Dieser Vektor hat die gleiche Länge wie Angles und die Vektorelemente werden in Metern gemessen.

Datentypen: single | double

Winkel der Entfernungsmessungen vom Lidar, angegeben als Vektor. Dieser Vektor hat die gleiche Länge wie Ranges und die Vektorelemente werden in Radiant gemessen. Winkel werden gegen den Uhrzeigersinn um die positive z-Achse gemessen.

Datentypen: single | double

Kartesische Koordinaten der Lidar-Messwerte, zurückgegeben als [x y]-Matrix. Im Lidar-Koordinatensystem bedeutet positives x nach vorne und positives y nach links.

Datentypen: single | double

Anzahl der Lidar-Messwerte, zurückgegeben als Skalar. Dieser Skalar entspricht auch der Länge der Vektoren Ranges und Angles oder der Anzahl der Zeilen in Cartesian.

Datentypen: double

Objektfunktionen

plotDisplay laser or lidar scan readings
removeInvalidDataRemove invalid range and angle data
transformScanTransform laser scan based on relative pose

Beispiele

alle reduzieren

Geben Sie Lidar-Daten als Vektoren von Bereichen und Winkeln an. Diese Werte umfassen Messwerte außerhalb des Sensorbereichs.

x = linspace(-2,2);
ranges = abs((1.5).*x.^2 + 5);
ranges(45:55) = 3.5;
angles = linspace(-pi/2,pi/2,numel(ranges));

Erstellen Sie einen Lidar-Scan, indem Sie die Bereiche und Winkel angeben. Zeichnen Sie alle Punkte des Lidar-Scans auf.

scan = lidarScan(ranges,angles);
plot(scan)

Figure contains an axes object. The axes object with title LiDAR Scan, xlabel X, ylabel Y contains a line object which displays its values using only markers.

Entfernen Sie ungültige Punkte basierend auf einem angegebenen Mindest- und Höchstbereich.

minRange = 0.1;
maxRange = 7;
scan2 = removeInvalidData(scan,'RangeLimits',[minRange maxRange]);
hold on
plot(scan2)
legend('All Points','Valid Points')

Figure contains an axes object. The axes object with title LiDAR Scan, xlabel X, ylabel Y contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent All Points, Valid Points.

Erstellen Sie ein lidarScan-Objekt. Geben Sie die Bereiche und Winkel als Vektoren an.

refRanges = 5*ones(1,300);
refAngles = linspace(-pi/2,pi/2,300);
refScan = lidarScan(refRanges,refAngles);

Verschieben Sie den Laserscan um einen [x y]-Offset von (0.5,0.2).

transformedScan = transformScan(refScan,[0.5 0.2 0]);

Drehen Sie den Laserscan um 20 Grad.

rotateScan = transformScan(refScan,[0,0,deg2rad(20)]);

Erstellen Sie mit lidarScan (Robotics System Toolbox) einen Referenz-Lidar-Scan. Geben Sie Bereiche und Winkel als Vektoren an.

refRanges = 5*ones(1,300);
refAngles = linspace(-pi/2,pi/2,300); 
refScan = lidarScan(refRanges,refAngles);

Generieren Sie mit der Funktion transformScan (Robotics System Toolbox) einen zweiten Lidar-Scan mit einem x,y-Offset von (0.5,0.2).

currScan = transformScan(refScan,[0.5 0.2 0]);

Vergleichen Sie den Referenzscan und den zweiten Scan, um den Posenunterschied zwischen ihnen abzuschätzen.

pose = matchScans(currScan,refScan);

Verwenden Sie die Funktion transformScan, um die Scans auszurichten, indem Sie den zweiten Scan unter Verwendung der relativen Pose-Differenz in den Rahmen des ersten Scans transformieren. Plotten Sie sowohl die Originalscans als auch die ausgerichteten Scans.

currScan2 = transformScan(currScan,pose);

subplot(2,1,1);
hold on
plot(currScan)
plot(refScan)
title('Original Scans')
hold off

subplot(2,1,2);
hold on
plot(currScan2)
plot(refScan)
title('Aligned Scans')
xlim([0 5])
hold off

Figure contains 2 axes objects. Axes object 1 with title Original Scans, xlabel X, ylabel Y contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 2 with title Aligned Scans, xlabel X, ylabel Y contains 2 objects of type line. One or more of the lines displays its values using only markers

Erweiterte Fähigkeiten

alle erweitern

Versionsverlauf

Eingeführt in R2019b