Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

lidarScan

Crear un objeto para almacenar el escaneo de LiDAR 2D

Descripción

Un objeto lidarScan contiene los datos de un solo escaneo de LiDAR (detección y distancia por luz) 2D. El escaneo de LiDAR es un escaneo láser de un plano 2D con distancias (Ranges) medidas desde el sensor hasta los obstáculos del entorno en ángulos específicos (Angles). Utilice este objeto de escaneo láser como entrada a otros algoritmos de robótica como matchScans, controllerVFH o monteCarloLocalization.

Creación

Descripción

scan = lidarScan(ranges,angles) crea un objeto lidarScan a partir de ranges y angles, que representan los datos recopilados de un sensor de LiDAR. Las entradas de ranges y angles son vectores de la misma longitud y se establecen directamente en las propiedades Ranges y Angles.

ejemplo

scan = lidarScan(cart) crea un objeto lidarScan mediante las coordenadas cartesianas de entrada como una matriz n por 2. La propiedad Cartesian se establece directamente desde esta entrada.

scan = lidarScan(scanMsg) crea un objeto lidarScan a partir de un objeto de mensaje LaserScan (ROS Toolbox) ROS.

Propiedades

expandir todo

Lecturas de distancia de LiDAR, especificadas como un vector en metros. Este vector tiene la misma longitud que Angles y los elementos del vector se miden en metros.

Tipos de datos: single | double

Ángulo de las lecturas de distancia de LiDAR, especificadas como un vector. Este vector tiene la misma longitud que Ranges y los elementos del vector se miden en radianes. Los ángulos se miden en sentido contrario a las agujas del reloj alrededor del eje positivo z.

Tipos de datos: single | double

Coordenadas cartesianas de las lecturas de LiDAR, devueltas como una matriz [x y]. En el marco de coordenadas de LiDAR, la x positiva es hacia adelante y la y positiva es hacia la izquierda.

Tipos de datos: single | double

Número de lecturas de LiDAR, devuelto como un escalar. Este escalar también es igual a la longitud de los vectores Ranges y Angles o al número de filas de Cartesian.

Tipos de datos: double

Funciones del objeto

plotMostrar lecturas de escaneo láser o lidar
removeInvalidDataEliminar datos de rango y ángulo no válidos
transformScanTransformar el escaneo láser según la pose relativa

Ejemplos

contraer todo

Especifique los datos de LiDAR como vectores de alcances y ángulos. Estos valores incluyen lecturas fuera del alcance de los sensores.

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

Cree un escaneo LiDAR especificando los alcances y los ángulos. Represente todos los puntos del escaneo LiDAR.

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.

Elimine los puntos no válidos en función de un alcance mínimo y máximo especificado.

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.

Cree un objeto lidarScan. Especifique los alcances y los ángulos como vectores.

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

Traslade el escaneo láser con un desplazamiento de [x y] de (0.5,0.2).

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

Gire el escaneo láser 20 grados.

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

Cree un escaneo LiDAR de referencia utilizando lidarScan (Robotics System Toolbox). Especifique rangos y ángulos como vectores.

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

Usando la función transformScan (Robotics System Toolbox), genere un segundo escaneo LiDAR con un desplazamiento x,y de (0.5,0.2).

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

Haga coincidir el escaneo de referencia y el segundo escaneo para estimar la diferencia de pose entre ellos.

pose = matchScans(currScan,refScan);

Utilice la función transformScan para alinear los escaneos transformando el segundo escaneo en el marco del primer escaneo usando la diferencia de pose relativa. Traza tanto los escaneos originales como los escaneos alineados.

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

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido en R2019b