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.

matchScansGrid

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

Descripción

pose = matchScansGrid(currScan,refScan) encuentra la pose relativa entre un objeto de referencia lidarScan y un objeto actual lidarScan utilizando 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.

ejemplo

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

[___] = matchScansGrid(___,Name,Value) especifica opciones utilizando uno o más argumentos de par Name,Value. 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 postura 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

contraer todo

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.

En versiones anteriores a R2021a, use comas para separar cada nombre y valor, y encierre Name entre comillas.

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

Estimación inicial de la postura 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.

Alcance 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 da 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 solo se utiliza 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 solo se utiliza cuando se especifica InitialPose.

Argumentos de salida

contraer todo

Pose del escaneo actual en relación con el escaneo de referencia, devuelta como un vector [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 el siguiente campo:

  • Score — Escalar numérico que representa la puntuación mientras se realiza la coincidencia 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

expandir todo

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

Historial de versiones

Introducido en R2019b