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.

matchScansLine

Estimar la pose entre dos escaneos láser usando características de línea

Desde R2020a

Descripción

relpose = matchScansLine(currScan,refScan,initialRelPose) estima la pose relativa entre dos escaneos en función de las características de línea coincidentes identificadas en cada escaneo. Especifique una suposición inicial sobre la pose relativa, initialRelPose.

[relpose,stats] = matchScansLine(___) devuelve información adicional sobre la covarianza y la condición de salida en stats como una estructura utilizando las entradas anteriores.

ejemplo

[relpose,stats,debugInfo] = matchScansLine(___) devuelve información de depuración adicional, debugInfo, del resultado de coincidencia del escaneo basado en líneas.

ejemplo

[___] = matchScansLine(___,Name,Value) especifica opciones utilizando uno o más argumentos de par nombre-valor.

Ejemplos

contraer todo

Este ejemplo muestra cómo utilizar la función matchScansLine para estimar la pose relativa entre escaneos LIDAR dada una estimación inicial. Las características de línea identificadas se visualizan para mostrar cómo el algoritmo de coincidencia de escaneos asocia características entre escaneos.

Cargue un par de escaneos lidar. El archivo .mat también contiene una estimación inicial de la diferencia de pose relativa, initGuess, que podría basarse en la odometría u otros datos del sensor.

load tb3_scanPair.mat
plot(s1)
hold on
plot(s2)
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

Establezca parámetros para la extracción y asociación de entidades de línea. El ruido de los datos LIDAR determina el umbral de suavidad, que define cuándo se produce un salto de línea para una característica de línea específica. Aumente este valor para obtener datos LIDAR más ruidosos. La escala de compatibilidad determina cuándo las características se consideran coincidencias. Aumente este valor para restricciones más flexibles en los parámetros de entidades de línea.

smoothnessThresh = 0.2;
compatibilityScale = 0.002;

Llame a matchScansLine con la suposición inicial dada y otros parámetros especificados como pares nombre-valor. La función calcula las características de las líneas para cada escaneo, intenta hacerlas coincidir y utiliza una estimación general para obtener la diferencia de pose.

[relPose, stats, debugInfo] = matchScansLine(s2, s1, initGuess, ...
                                       'SmoothnessThreshold', smoothnessThresh, ...
                                       'CompatibilityScale', compatibilityScale);

Después de hacer coincidir los escaneos, la salida debugInfo le brinda información sobre los parámetros de las características de línea detectadas, [rho alpha] y la hipótesis de qué características coinciden entre los escaneos.

debugInfo.MatchHypothesis indica que la primera, segunda y sexta característica de línea en s1 coincide con la quinta, segunda y cuarta características en s2.

debugInfo.MatchHypothesis                                  
ans = 1×6

     5     2     0     0     0     4

La función auxiliar proporcionada traza estos dos escaneos y las características extraídas con etiquetas. s2 se transforma para estar en el mismo cuadro según la suposición inicial de la pose relativa.

exampleHelperShowLineFeaturesInScan(s1, s2, debugInfo, initGuess);

Figure contains 2 axes objects. Axes object 1 with title s1 Line Features, xlabel X, ylabel Y contains 16 objects of type line, text. One or more of the lines displays its values using only markers Axes object 2 with title s2 Line Features - Transformed, xlabel X, ylabel Y contains 19 objects of type line, text. One or more of the lines displays its values using only markers

Utilice la pose relativa estimada de matchScansLine para transformar s2. Luego, trace ambos escaneos para mostrar que la diferencia de pose relativa es precisa y los escaneos se superponen para mostrar el mismo entorno.

s2t = transformScan(s2,relPose);
clf
plot(s1)
hold on
plot(s2t)
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.

Suposición inicial de la pose actual en relación con el marco de escaneo láser de referencia, especificada como un vector [x y theta] . [x y] es la traslación en metros y theta es la rotación en radianes.

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: "LineMergeThreshold",[0.10 0.2]

Umbral para detectar puntos de salto de línea en el escaneo, especificado como escalar. La suavidad se define llamando a diff(diff(scanData)) y asume ángulos de escaneo igualmente espaciados. Los puntos de escaneo correspondientes a valores de suavidad superiores a este umbral se consideran puntos de ruptura. Para datos de escaneo LIDAR con un nivel de ruido más alto, aumente este umbral.

Número mínimo de puntos de escaneo en cada característica de línea, especificado como un entero positivo mayor que 3.

Una característica de línea no se puede identificar a partir de un conjunto de puntos de escaneo si el número de puntos en ese conjunto está por debajo de este umbral. Cuando los datos del escaneo LIDAR tienen ruido, establecer esta propiedad en un valor demasiado pequeño puede provocar que se identifiquen características de línea de baja calidad y sesgar el resultado coincidente. Por otro lado, es posible que se pierdan algunas características de línea clave si este número se establece demasiado grande.

Umbral en los parámetros de línea para fusionar características de línea, especificado como un vector de dos elementos [rho alpha]. Una línea está definida por dos parámetros:

  • rho –– Distancia del origen a la recta a lo largo de un vector perpendicular a la recta, especificada en metros.

  • alpha –– Ángulo entre el eje x y el vector rho , especificado en radianes.

Si la diferencia entre estos parámetros para dos entidades de línea está por debajo del umbral dado, las entidades de línea se fusionan.

Límite inferior del valor de prominencia para detectar una esquina, especificado como un escalar positivo.

La prominencia mide cuánto se destaca un extremo local en los datos lidar. Sólo los valores superiores a este límite inferior se consideran esquina. Las esquinas ayudan a identificar entidades de línea, pero no forman parte de la entidad en sí. Para datos de escaneo LIDAR ruidosos, aumente este límite inferior.

Escala utilizada para ajustar los umbrales de compatibilidad para la asociación de características, especificada como un escalar positivo. Una escala más baja significa un umbral de compatibilidad más estricto para asociar funciones. Si no se encuentran características en los datos LIDAR con características de línea obvias, aumente este valor. Para coincidencias de características no válidas, reduzca este valor.

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 la información coincidente, devuelta como una estructura con los siguientes campos:

  • Covariance –– Matriz de 3 por 3 que representa la covarianza de la estimación de pose relativa. La función matScansLine no proporciona covarianza entre los componentes (x,y) y theta de la pose relativa. Por tanto, la matriz sigue el patrón: [Cxx, Cxy 0; Cyx Cyy 0; 0 0 Ctheta].

  • ExitFlag –– Valor escalar que indica la condición de salida del solver:

    • 0 –– Sin errores.

    • 1 –– Se encuentra un número insuficiente de características de línea (< 2) en uno o ambos escaneos. Considere utilizar diferentes escaneos con más características de línea.

    • 2 –– Se identifica un número insuficiente de coincidencias de características de línea. Esto puede indicar que el initialRelPose no es válido o los escaneos están demasiado separados.

Información de depuración para el resultado de coincidencia del escaneo basado en líneas, devuelta como una estructura con los siguientes campos:

  • ReferenceFeatures –– Características de línea extraídas del escaneo de referencia como una matriz n-por-2. Cada característica de línea se representa como [rho alpha] para la ecuación paramétrica, rho = x ∙cos(alpha) + y ∙sin(alpha).

  • ReferenceScanMask –– Máscara que indica qué puntos en el escaneo de referencia se utilizan para cada característica de línea como una matriz n-por- p . Cada fila corresponde a una fila en ReferenceFeatures y contiene ceros y unos para cada punto en refScan.

  • CurrentFeatures –– Características de línea extraídas del escaneo actual como una matriz n-por-2. Cada característica de línea se representa como [rho alpha] para la ecuación paramétrica, rho = x ∙cos(alpha) + y ∙sin(alpha).

  • CurrentScanMask –– Máscara que indica qué puntos en el escaneo actual se utilizan para cada característica de línea como una matriz n-por- p . Cada fila corresponde a una fila en ReferenceFeatures y contiene ceros y unos para cada punto en refScan.

  • MatchHypothesis –– Mejor hipótesis de coincidencia de características de línea como un vector de elemento n , donde n es el número de características de línea en CurrentFeatures. Cada elemento representa la característica correspondiente en ReferenceFeatures y proporciona el índice de la característica coincidente en ReferenceFeatures es un índice que coincide con el

  • MatchValue –– Valor escalar que indica una puntuación para cada MatchHypothesis. Un valor más bajo se considera una mejor coincidencia. Si dos elementos de MatchHypothesis tienen el mismo índice, se utiliza la característica con menor puntuación.

Referencias

[1] Neira, J., and J.d. Tardos. “Data Association in Stochastic Mapping Using the Joint Compatibility Test.” IEEE Transactions on Robotics and Automation 17, no. 6 (2001): 890–97. https://doi.org/10.1109/70.976019.

[2] Shen, Xiaotong, Emilio Frazzoli, Daniela Rus, and Marcelo H. Ang. “Fast Joint Compatibility Branch and Bound for Feature Cloud Matching.” 2016 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 2016. https://doi.org/10.1109/iros.2016.7759281.

Historial de versiones

Introducido en R2020a