matchScansLine
Estimar la pose entre dos escaneos láser usando características de línea
Desde R2020a
Sintaxis
Descripción
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, relpose
= matchScansLine(currScan
,refScan
,initialRelPose
)initialRelPose
.
[___] = matchScansLine(___,
especifica opciones utilizando uno o más argumentos de par nombre-valor.Name,Value
)
Ejemplos
Estimar la pose de los escaneos con características lineales
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
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);
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
Argumentos de entrada
currScan
— Lecturas actuales del escaneo LIDAR
lidarScan
objeto
Lecturas de escaneo LIDAR actuales, especificadas como un objeto lidarScan
.
Su escaneo LIDAR puede contener valores Inf
y NaN
, pero el algoritmo los ignora.
refScan
— Lecturas de escaneo lidar de referencia
lidarScan
objeto
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.
initialRelPose
— Suposición inicial de pose relativa
[x y theta]
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]
SmoothnessThreshold
— Umbral para detectar puntos de salto de línea en el escaneo
0.1
(predeterminado) | escalar
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.
MinPointsPerLine
— Número mínimo de puntos de escaneo en cada característica de línea
10
(predeterminado) | entero positivo mayor que 3
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.
LineMergeThreshold
— Umbral en parámetros de línea para fusionar características de línea
[0.05 0.1]
(predeterminado) | vector de dos elementos [rho alpha]
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 ejex
y el vectorrho
, 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.
MinCornerProminence
— Límite inferior del valor de prominencia para detectar una esquina
0.05
(predeterminado) | escalar positivo
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.
CompatibilityScale
— Escala utilizada para ajustar los umbrales de compatibilidad para la asociación de funciones
0.0005
(predeterminado) | escalar positivo
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
relpose
— Pose del escaneo actual
[x y theta]
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.
stats
— Escanear información coincidente
estructura
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ónmatScansLine
no proporciona covarianza entre los componentes(x,y)
ytheta
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 elinitialRelPose
no es válido o los escaneos están demasiado separados.
debugInfo
— Información de depuración para el resultado de coincidencia del escaneo basado en líneas
estructura
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 enReferenceFeatures
y contiene ceros y unos para cada punto enrefScan
.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 enReferenceFeatures
y contiene ceros y unos para cada punto enrefScan
.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 enCurrentFeatures
. Cada elemento representa la característica correspondiente enReferenceFeatures
y proporciona el índice de la característica coincidente enReferenceFeatures
es un índice que coincide con elMatchValue
–– Valor escalar que indica una puntuación para cadaMatchHypothesis
. Un valor más bajo se considera una mejor coincidencia. Si dos elementos deMatchHypothesis
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
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)