La Red de Conocimientos Pedagógicos - Currículum vitae - El cartógrafo ajusta los parámetros

El cartógrafo ajusta los parámetros

Etiquetas de tecnología: Cartographer

Traducido de la documentación de Cartographer_ros

Cartographer es un sistema complejo y ajustarlo requiere una buena comprensión de su funcionamiento interno. Esta página intenta resumir visualmente los diferentes subsistemas utilizados por los cartógrafos y sus valores de configuración. Si está interesado en algo más que una simple introducción a Draftsmen, también debería consultar los Draftsmen Papers. Solo describe 2D SLAM, pero define estrictamente la mayoría de los conceptos descritos aquí. Estos conceptos generalmente se aplican al 3D.

W. Hess, D. Kohler, H. Rapp y D. Andor, Cierre de bucle en tiempo real en lidar SLAM 2D, Robótica y Automatización (ICRA), Conferencia Internacional IEEE sobre Robótica y Automatización de 2016. IEEE, 2016. Páginas 1271–1278.

Draftsman puede verse como dos subsistemas separados pero relacionados. El primero es LocalSLAM (a veces llamado generador de trayectoria local o front-end). Su trabajo es construir una serie de subgrafos. Cada subgrafo es localmente consistente, pero aceptamos que LocalSLAM varía con el tiempo. Se puede encontrar en install_isolated/share/cartoon/configuration_files/trajectory_builder_2D. Lua es 2d e install_isolated/share/cartoon/configuration_files/trajectory_builder_3D. Lua es 3D. (En el resto de esta página, nos referiremos a trace_builder_nd como una opción pública).

Otro subsistema es SLAM global (a veces llamado backend). Se ejecuta en un hilo en segundo plano y su trabajo principal es encontrar restricciones de bucle. Lo hace escaneando subgrafos coincidentes. También combina otros datos de sensores para obtener una vista de nivel superior y determinar la solución global más consistente. En 3D también intenta encontrar la dirección de la gravedad. La mayoría de sus opciones se pueden encontrar en install_isolated/share/carto grapher/configuration_files/pose_graph.

En un nivel superior de abstracción, el trabajo de LocalSLAM es generar buenos subgrafos, mientras que el trabajo de Global SLAM es combinarlos de manera más consistente.

Los sensores de alcance (como el lidar) proporcionan información de profundidad en múltiples direcciones. Sin embargo, algunas mediciones no son relevantes para SLAM. Si el sensor está parcialmente cubierto de polvo o si se guía hacia una parte del robot, parte de la distancia medida puede considerarse ruido en SLAM. Por otro lado, algunas de las mediciones más distantes también pueden provenir de fuentes no deseadas (reflejos, ruido de sensores) y no son relevantes para SLAM. Para resolver estos problemas, el cartógrafo primero aplica un filtro de paso de banda y solo mantiene los valores del rango entre un rango mínimo y máximo. Los valores mínimo y máximo deben elegirse en función de las especificaciones del robot y del sensor.

Nota

En 2D, Cartographer cambiará la extensión de track_builder_2d. Missing_data_ray_length excede el rango máximo. También proporciona valores max_z y min_z para filtrar nubes de puntos 3D en cortes 2D.

Nota

En el archivo de configuración de Cartographer, cada distancia se define en metros.

La distancia se mide durante un período de tiempo mientras el robot está realmente en movimiento. Sin embargo, la distancia la proporciona un "lote" de sensores en un mensaje ROS de gran tamaño. Los cartógrafos pueden considerar la marca de tiempo de cada mensaje de forma independiente para tener en cuenta la distorsión causada por el movimiento del robot. Cuanto más frecuentemente mide un cartógrafo, mejor podrá combinar las mediciones en un único escaneo coherente que pueda capturarse de inmediato. Por lo tanto, se recomienda encarecidamente proporcionar la mayor cantidad de datos de rango posible mediante escaneo (mensajes ROS).

Los datos de alcance normalmente se miden desde un único punto del robot, pero se miden desde múltiples ángulos. Esto significa que las superficies cerradas (como las carreteras) se golpean con frecuencia y proporcionan muchos puntos. Por el contrario, los objetos distantes reciben menos impacto y proporcionan menos puntos. Para reducir la carga computacional del procesamiento de nubes de puntos, generalmente necesitamos reducir la muestra de la nube de puntos. Sin embargo, el muestreo aleatorio simple eliminará puntos de áreas que ya tienen mediciones de baja densidad, mientras que las áreas de alta densidad seguirán teniendo más puntos de los necesarios. Para resolver este problema de densidad, podemos usar un filtro de vóxel para reducir la resolución de los puntos originales en un cubo de tamaño constante y mantener solo el centroide de cada cubo.

Los tamaños de cubo más pequeños darán como resultado una representación de datos más densa, lo que resultará en más cálculos. Los cubos más grandes provocarán la pérdida de datos, pero a un ritmo más rápido.

Después de aplicar el filtro vóxel de tamaño fijo, el cartógrafo también aplicó un filtro vóxel adaptativo. Este filtro intenta determinar el tamaño de vóxel óptimo (con la longitud máxima) para lograr el número objetivo de puntos. En 3D, se utilizan dos filtros de vóxel adaptativos para generar nubes de puntos de alta y baja resolución, y su uso se aclarará en LocalSLAM.

Una unidad de medición inercial puede ser una fuente útil de información para SLAM porque proporciona una dirección precisa de la gravedad (y por lo tanto del suelo) y una indicación general ruidosa pero buena de la rotación del robot. Para filtrar el ruido de la IMU, se observó la gravedad durante un cierto período de tiempo. Si usa 2D SLAM, puede procesar datos de rango en tiempo real sin la necesidad de fuentes de información adicionales, por lo que puede elegir si desea que el mapeador use la IMU. Al utilizar 3D SLAM, es necesario proporcionar la IMU porque sirve como una suposición inicial para la dirección del escaneo, lo que reduce en gran medida la complejidad de la coincidencia del escaneo.

Nota

En el archivo de configuración del trazador, este valor se define en segundos cada vez.

Una vez que haya escaneado, combinado y filtrado datos de múltiples rangos, estará listo para el algoritmo LocalSLAM. LocalSLAM utiliza la estimación inicial del estimador de pose para insertar nuevos escaneos en su construcción de subgrafo actual mediante la comparación de escaneos. La idea detrás del estimador de pose es utilizar datos de sensores de otros sensores además del telémetro para predecir dónde se debe insertar el subgrafo en el siguiente escaneo.

Existen dos estrategias de coincidencia de escaneos:

De cualquier manera, CeresScanMatcher se puede configurar para darle a cada entrada un peso específico. El peso es una medida de confianza en los datos y puede verse como una covarianza estática. Las unidades de los parámetros de peso son cantidades adimensionales y no se pueden comparar entre sí. Cuanto mayor es el peso de una fuente de datos, más énfasis pone el cartógrafo en esa fuente de datos al escanear y comparar. Las fuentes de datos incluyen espacio ocupado (puntos de escaneo), traslación y rotación del extrapolador de actitud (o RealTimeCorrelativeScanMatcher).

Nota

En 3D, los parámetros de occupancy_space_weight_0 y occupancy_space_weight_1 están relacionados con puntos de filtro de alta y baja resolución, respectivamente.

CeresScanMatcher lleva el nombre de Ceres Solver, que utiliza Google como biblioteca para resolver problemas de mínimos cuadrados no lineales. El problema de coincidencia de escaneos se modela como una minimización del problema, donde el movimiento entre dos escaneos (matriz de transformación) es el parámetro a determinar. Ceres utiliza un algoritmo de descenso para optimizar el movimiento para un número determinado de iteraciones. Ceres se puede configurar para ajustar la velocidad de convergencia según sus propias necesidades.

RealTimeCorrelativeScanMatcher se puede cambiar según su confianza en el sensor. Funciona buscando escaneos similares en una ventana de búsqueda definida por un radio de distancia máximo y un radio angular máximo. Al realizar la comparación de escaneos usando escaneos en esta ventana, puede elegir diferentes pesos para los componentes de traslación y rotación. Por ejemplo, puedes usar estos pesos si sabes que el robot no girará demasiado.

Para evitar insertar demasiados escaneos en cada subimagen, una vez que el comparador de escaneo detecta movimiento entre escaneos, lo pasa a través de un filtro de movimiento.

Si el movimiento que lo provocó no es lo suficientemente importante, el escaneo se eliminará. Un escaneo se inserta en el subgrafo actual solo si su movimiento está por encima de una cierta distancia, ángulo o umbral de tiempo.

Cuando SLAM local ha recibido una determinada cantidad de datos de rango, la construcción del subgrafo se considera completa. LocalSLAM variará con el tiempo y GlobalSLAM se utiliza para resolver este problema de deriva. El subgrafo debe ser lo suficientemente pequeño como para que la deriva dentro del subgrafo esté por debajo de la resolución, de modo que el subgrafo sea localmente correcto. Por otro lado, el subgrafo debe ser lo suficientemente grande para que el cierre del bucle funcione correctamente.

Los subgrafos pueden almacenar sus datos de rango en varias estructuras de datos diferentes: la representación más utilizada se llama cuadrícula de probabilidad. Sin embargo, en 2D, también puede optar por utilizar un campo de distancia con signo truncado (TSDF).

La cuadrícula de probabilidad divide el espacio en una tabla 2D o una tabla 3D, donde cada píxel tiene un tamaño fijo y contiene la probabilidad de ser ocupado por un obstáculo. Las probabilidades se actualizan en función de los "aciertos" (datos del rango de medición) y los "fallos" (espacio libre entre el sensor y el punto de medición). Los aciertos y errores se pueden calcular con diferentes ponderaciones en la probabilidad de ocupación, dando más o menos confianza.

En 2D, solo se almacena una cuadrícula de probabilidad en cada subgrafo. En 3D, se utilizan dos cuadrículas de probabilidad híbridas para el rendimiento de coincidencia de escaneos. (El término "híbrido" se refiere únicamente a la representación de datos del árbol interno y es abstracto para el usuario)

La coincidencia de escaneo primero alinea los puntos lejanos de la nube de puntos de baja resolución con la malla de mezcla de baja resolución, y luego Alinear puntos de alta resolución con una malla de mezcla de alta resolución para refinar la pose.

Nota

CartographerROS proporciona un complemento RViz para visualizar subgrafos. Puede seleccionar la trama secundaria para ver desde el número. En 3D, RViz solo muestra la proyección 2D (escala de grises) de la cuadrícula de probabilidad mixta 3D. El panel izquierdo de RViz ofrece la opción de cambiar entre visualizaciones de malla híbrida de baja y alta resolución.

TODO: Registrar la configuración de TSDF

Mientras LocalSLAM genera sus subgrafos continuos, la tarea de optimización global (a menudo llamada "problema de optimización" o "ajuste de pose dispersa") se ejecuta en segundo plano. Su función es reorganizar los subgrafos para que formen una imagen global coherente. Por ejemplo, la optimización es responsable de cambiar la trayectoria construida actualmente para alinear correctamente el subgrafo con respecto al cierre del bucle.

Una vez insertado un cierto número de nodos de trayectoria, la optimización se ejecutará en lotes. Dependiendo de la frecuencia con la que lo ejecute, puede ajustar el tamaño de estos lotes.

Nota

Establecer pose_graph. optimizar_every_n_nodes a 0 es una forma conveniente de desactivar SLAM global y centrarse en el comportamiento de SLAM local. Esto suele ser lo primero que debe ajustar el dibujante.

Global SLAM es un tipo de "GraphSLAM", que es esencialmente una optimización del gráfico de pose. Funciona creando restricciones entre nodos y subgrafos y luego optimizando el gráfico restringido. Las restricciones pueden verse visualmente como pequeñas cuerdas que unen todos los nodos. Los escasos ajustes de postura anclan completamente estas cuerdas. La red resultante se llama "gráfico de pose".

Nota

Las restricciones se pueden visualizar en RViz, lo que hace que sea muy conveniente ajustar SLAM global. También puede alternar pose_graph.constraint_builder.log_matches para obtener informes periódicos del generador de restricciones en formato de histograma.

Nota

De hecho, las restricciones globales pueden encontrar cierres de bucles no solo en una única trayectoria. También pueden alinear diferentes trayectorias registradas por múltiples robots, pero mantendremos este uso y los parámetros relacionados con la localización global, que está más allá del alcance de este artículo.

Para limitar el número de restricciones (y cálculos), el cartógrafo solo considera un conjunto submuestreado de todos los nodos cerrados que construyen las restricciones. Esto está controlado por la constante de frecuencia de muestreo. Muestreo de muy pocos nodos puede dar lugar a restricciones omitidas y cierres de bucles no válidos.

El muestreo de demasiados nodos ralentiza SLAM global y evita el cierre del bucle en tiempo real.

Cuando se considera que los nodos y subgrafos establecen restricciones, pasarán por el primer comparador de escaneo llamado FastCorrelativeScanMatcher. Scan Matcher está diseñado específicamente para que los dibujantes permitan la coincidencia de escaneos cerrados en tiempo real. En FastCorrelativeScanMatcher, confiamos en un mecanismo de "ramificación y vinculación" para trabajar en diferentes resoluciones de cuadrícula, eliminando efectivamente números de coincidencia incorrectos. Este mecanismo se trata ampliamente en el artículo de cartografía presentado anteriormente en este artículo. Adecuado para árboles de exploración con profundidad controlable.

Una vez que FastCorrelativeScanMatcher tiene una sugerencia suficientemente buena (por encima de la puntuación mínima de coincidencia), se introduce en el comparador de escaneo de Ceres para mejorar la postura.

Ceres se utiliza para reorganizar subtramas basadas en múltiples residuos cuando el cartógrafo ejecuta un problema de optimización. Los residuos se calculan utilizando una función de pérdida ponderada. La optimización global tiene una función de costos que tiene en cuenta una gran cantidad de fuentes de datos: restricciones globales (cierre de bucle), restricciones no globales (matcher), mediciones de aceleración y rotación de IMU, estimaciones locales de pose aproximada de SLAM, fuentes de rango o marcos fijos ( como sistemas GPS). Puede configurar pesos y opciones de Ceres como se describe en la sección LocalSLAM.

Nota

Se puede encontrar información útil sobre los residuos utilizados en el problema de optimización cambiando: pose_graph. Número máximo de iteraciones finales.

El problema de optimización proporciona cierta flexibilidad en la actitud de la IMU como parte de su IMU residual. De forma predeterminada, Ceres tiene la libertad de optimizar la calibración externa entre la IMU y el marco de seguimiento. Si no confía en su postura IMU, puede registrar los resultados de la optimización global de Ceres y utilizarlos para mejorar su calibración externa. Si Ceres no ha optimizado correctamente su postura IMU y confía plenamente en su calibración externa, puede dejar esta postura sin cambios.

En los residuos, el impacto de los valores atípicos es manejado por la función de pérdida de Huber con escala de Huber. Cuanto mayor sea la escala de Huber, mayor será el impacto de los (potenciales) valores atípicos.

Una vez completada la trayectoria, Cartographer ejecutará una nueva optimización global, normalmente mucho más avanzada que la optimización global anterior. Esto se hace para mejorar el resultado final del cartógrafo, que normalmente no requiere tiempo real, por lo que muchas iteraciones suelen ser la opción correcta.