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.

matchScansGrid

Estimar la pose entre dos escaneos LIDAR mediante búsqueda basada en cuadrículas

Desde R2019b

Descripción

ejemplo

pose = matchScansGrid(currScan,refScan) encuentra la pose relativa entre un lidarScan de referencia y un objeto lidarScan actual mediante una búsqueda basada en cuadrícula. matchScansGrid convierte pares de escaneos lidar en cuadrículas probabilísticas y encuentra la pose entre los dos escaneos correlacionando sus cuadrículas. La función utiliza una estrategia de ramificación y límite para acelerar el cálculo en grandes ventanas de búsqueda discretizadas.

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

[___] = matchScansGrid(___,Name,Value) especifica opciones usando uno o más Name,Value argumentos de par. Por ejemplo, 'InitialPose',[1 1 pi/2] especifica una estimación de pose inicial para la coincidencia de escaneo.

Ejemplos

contraer todo

Realice una comparación de escaneos utilizando una búsqueda basada en cuadrículas para estimar la pose entre dos escaneos láser. Genere una cuadrícula probabilística a partir de los escaneos y estime la diferencia de pose de esas cuadrículas.

Cargue los datos del escaneo láser. Estos dos escaneos provienen de un sensor lidar real con cambios en la pose del robot y se almacenan como objetos lidarScan .

load laserScans.mat scan scan2
plot(scan)
hold on
plot(scan2)
hold off

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

Utilice matchScansGrid para estimar la pose entre los dos escaneos.

relPose = matchScansGrid(scan2,scan);

Usando la pose estimada, transforme el escaneo actual al escaneo de referencia. Los escaneos se superponen estrechamente cuando los trazas juntos.

scan2Tformed = transformScan(scan2,relPose);

plot(scan)
hold on
plot(scan2Tformed)
hold off

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

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.

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]

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.

Celdas de cuadrícula por metro, especificadas como el par separado por comas que consta de 'Resolution' y un número entero positivo. La precisión del resultado de la comparación del escaneo es exacta hasta el tamaño de la celda de la cuadrícula.

Rango máximo del sensor lidar, especificado como el par separado por comas que consta de 'MaxRange' y un escalar positivo.

Rango de búsqueda para la traducción, especificado como el par separado por comas que consta de 'TranslationSearchRange' y un vector [x y] . Estos valores definen la ventana de búsqueda en metros alrededor de la estimación de traducción inicial dada en InitialPose. Si InitialPose se proporciona como [x0 y0], entonces las coordenadas de la ventana de búsqueda son [x0-x x0+x] y [y0-y y0+y]. Este parámetro se utiliza sólo cuando se especifica InitialPose .

Rango de búsqueda para rotación, especificado como el par separado por comas que consta de 'RotationSearchRange' y un escalar positivo. Este valor define la ventana de búsqueda en radianes alrededor de la estimación de rotación inicial dada en InitialPose. Si la rotación InitialPose se da como th0, entonces la ventana de búsqueda es [th0-a th0+a], donde a es el rango de búsqueda de rotación. Este parámetro se utiliza sólo cuando se especifica InitialPose .

Argumentos de salida

contraer todo

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

Escanee las estadísticas coincidentes, devueltas como una estructura con el siguiente campo:

  • Score : escalar numérico que representa la puntuación mientras se realiza la comparación de escaneo. 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, pero los valores varían según los datos LIDAR utilizados.

  • Covariance — Covarianza estimada que representa la confianza de la pose relativa calculada, devuelta como una matriz de 3 por 3.

Referencias

[1] Hess, Wolfgang, Damon Kohler, Holger Rapp, and Daniel Andor. "Real-Time Loop Closure in 2D LIDAR SLAM." 2016 IEEE International Conference on Robotics and Automation (ICRA). 2016.

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2019b