Main Content

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

matchScans

Estimar la pose entre dos escaneos láser.

Desde R2019b

Descripción

ejemplo

pose = matchScans(currScan,refScan) encuentra la pose relativa entre un objeto lidarScan de referencia y un objeto lidarScan actual utilizando la transformación de distribuciones normales (NDT).

ejemplo

pose = matchScans(currRanges,currAngles,refRanges,refAngles) encuentra la pose relativa entre dos escaneos láser especificados como rangos y ángulos.

[pose,stats] = matchScans(___) devuelve estadísticas adicionales sobre el resultado de la coincidencia del escaneo utilizando los argumentos de entrada anteriores.

[___] = matchScans(___,Name,Value) especifica opciones adicionales especificadas por uno o más Name,Value argumentos de par.

Ejemplos

contraer todo

Cree un escaneo lidar de referencia usando lidarScan. 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 en 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 cuadro 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

Este ejemplo utiliza el algoritmo de solver 'fminunc' para realizar coincidencias de escaneo. Este algoritmo de solver requiere una licencia de Optimization Toolbox™ .

Especifique un escaneo láser de referencia como rangos y ángulos.

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

Usando la función transformScan (Robotics System Toolbox) , genere un segundo escaneo láser en un desplazamiento x,y de (0.5,0.2).

[currRanges,currAngles] = transformScan(refRanges,refAngles,[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(currRanges,currAngles,refRanges,refAngles,'SolverAlgorithm','fminunc');

Mejore la estimación dando una estimación de pose inicial.

pose = matchScans(currRanges,currAngles,refRanges,refAngles,...
                  'SolverAlgorithm','fminunc','InitialPose',[-0.4 -0.1 0]);

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

[currRanges2,currAngles2] = transformScan(currRanges,currAngles,pose);

[x1, y1] = pol2cart(refAngles,refRanges);
[x2, y2] = pol2cart(currAngles,currRanges);
[x3, y3] = pol2cart(currAngles2,currRanges2);

subplot(1,2,1)
plot(x1,y1,'o',x2,y2,'*r')
title('Original Scans')
subplot(1,2,2)
plot(x1,y1,'o',x3,y3,'*r')
title('Aligned Scans')

Figure contains 2 axes objects. Axes object 1 with title Original Scans 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 contains 2 objects of type line. One or more of the lines displays its values using only markers

Argumentos de entrada

contraer todo

Lecturas de escaneo LIDAR actuales, especificadas como un objeto lidarScan .

Su escaneo LIDAR puede contener valores Inf y NaN , pero el algoritmo los ignora.

Lecturas de escaneo LIDAR de referencia, especificadas como un objeto lidarScan .

Su escaneo LIDAR puede contener valores Inf y NaN , pero el algoritmo los ignora.

Rangos de escaneo láser actuales, especificados como un vector. Los rangos se dan como distancias a objetos medidas desde el sensor láser.

Sus rangos de escaneo láser pueden contener valores Inf y NaN , pero el algoritmo los ignora.

Ángulos de escaneo láser actuales, especificados como un vector en radianes. Los ángulos se dan como las orientaciones de las mediciones de rango correspondientes.

Rangos de escaneo láser de referencia, especificados como un vector en metros. Los rangos se dan como distancias a objetos medidas desde el sensor láser.

Sus rangos de escaneo láser pueden contener valores Inf y NaN , pero el algoritmo los ignora.

Ángulos de escaneo láser de referencia, especificados como un vector en radianes. Los ángulos se dan como las orientaciones de las mediciones de rango correspondientes.

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de los otros argumentos, pero el orden de los pares no importa.

Antes de R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: "InitialPose",[1 1 pi/2]

Algoritmo de optimización, especificado como "trust-region" o "fminunc". El uso de "fminunc" requiere una licencia Optimization Toolbox™ .

Suposición inicial de la pose actual en relación con el escaneo láser de referencia, especificada como el par separado por comas que consta de "InitialPose" y un vector [x y theta] . [x y] es la traslación en metros y theta es la rotación en radianes.

Longitud de un lado de celda en metros, especificada como el par separado por comas que consta de "CellSize" y un escalar numérico. matchScans utiliza el tamaño de celda para discretizar el espacio para el algoritmo NDT.

Ajustar el tamaño de la celda es importante para el uso adecuado del algoritmo NDT. El tamaño de celda óptimo depende de los escaneos de entrada y del entorno de su robot. Los tamaños de celda más grandes pueden dar lugar a coincidencias menos precisas con áreas mal muestreadas. Los tamaños de celda más pequeños requieren más memoria y menos variación entre escaneos posteriores. El ruido del sensor también influye en el algoritmo con tamaños de celda más pequeños. La elección de un tamaño de celda adecuado depende de la escala de su entorno y de los datos de entrada.

Número máximo de iteraciones, especificado como el par separado por comas que consta de "MaxIterations" y un entero escalar. Un mayor número de iteraciones da como resultado estimaciones de pose más precisas, pero a expensas de un tiempo de ejecución más prolongado.

Límite inferior del cambio en la puntuación de NDT, especificado como el par separado por comas que consta de "ScoreTolerance" y un escalar numérico. La puntuación NDT se almacena en el campo Score de la estructura de salida stats . Entre iteraciones, si la puntuación cambia menos que esta tolerancia, el algoritmo converge hacia una solución. Una tolerancia menor da como resultado estimaciones de pose más precisas, pero requiere un tiempo de ejecución más largo.

Argumentos de salida

contraer todo

Pose del escaneo actual en relación con el escaneo de referencia, devuelto como [x y theta], donde [x y] es la traslación en metros y theta es la rotación en radianes.

Escanee las estadísticas coincidentes, devueltas como una estructura con los siguientes campos:

  • Score : escalar numérico que representa la puntuación NDT mientras se realiza la comparación de escaneos. Esta puntuación es una estimación de la probabilidad de que el escaneo actual transformado coincida con el escaneo de referencia. Score siempre es no negativo. Las puntuaciones más altas indican una mejor coincidencia.

  • Hessian — Matriz de 3 por 3 que representa el hessiano de la función de costes de END en la solución pose dada. El hessiano se utiliza como indicador de la incertidumbre asociada con la estimación de la pose.

Referencias

[1] Biber, P., and W. Strasser. "The Normal Distributions Transform: A New Approach to Laser Scan Matching." Intelligent Robots and Systems Proceedings. 2003.

[2] Magnusson, Martin. "The Three-Dimensional Normal-Distributions Transform -- an Efficient Representation for Registration, Surface Analysis, and Loop Detection." PhD Dissertation. Örebro University, School of Science and Technology, 2009.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b