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.

Creador de mapas SLAM

Cree mapas de cuadrícula 2D utilizando SLAM basado en lidar

Desde R2019b

Descripción

La app SLAM Map Builder carga escaneos LIDAR registrados y datos de sensores de odometría para construir una cuadrícula de ocupación 2-D utilizando algoritmos de localización y mapeo simultáneos (SLAM). La coincidencia de escaneo incremental alinea y superpone escaneos para construir el mapa. La detección de cierre de bucle se ajusta a la deriva de la odometría del vehículo detectando ubicaciones visitadas previamente y ajustando el mapa general. A veces, el algoritmo de coincidencia de escaneo y la detección de cierre de bucle requieren un ajuste manual. Utilice la app para alinear manualmente los escaneos y modificar los cierres de bucles para mejorar la precisión general del mapa. También puede ajustar la configuración del algoritmo SLAM para mejorar la creación automática de mapas.

Para usar la app:

Para cargar archivos de registro de rosbag, seleccione Import > Import from rosbag. Seleccione el archivo rosbag y haga clic en Open. Esto abre la pestaña Import . Para obtener más información, consulte Import and Filter a rosbag.

Para cargar datos desde el espacio de trabajo, Import > Import from workspace. Seleccione sus variables Scans y Poses utilizando los menús desplegables proporcionados. También puede especificar las variables en la función slamMapBuilder . Ver Programmatic Use.

Utilice SLAM Settings para ajustar la configuración del algoritmo SLAM. Se proporcionan valores predeterminados, pero sus sensores y datos específicos pueden requerir un ajuste de estas configuraciones. El valor más importante a ajustar es Loop Closure Threshold. Para obtener más información, consulte Tune SLAM Settings.

Haga clic en Build para comenzar el proceso de creación del mapa SLAM. El proceso de construcción alinea los escaneos en el mapa mediante coincidencias de escaneo incrementales, identifica cierres de bucles al visitar ubicaciones anteriores y ajusta las poses. Haga clic en Pause en cualquier momento durante el proceso de creación del mapa para alinear manualmente los escaneos incrementales o modificar los cierres de bucle.

Haga clic en Incremental Match para modificar la pose relativa del fotograma seleccionado actualmente y alinear el escaneo con el escaneo anterior. Haga clic en Loop Closure para modificar o ignorar el cierre de bucle detectado para el fotograma actual. Utilice el control deslizante en la parte inferior para retroceder a áreas donde la coincidencia de escaneos o los cierres de bucles no son precisos. Puede modificar cualquier número de escaneos o cierres de bucle. Para obtener más información, consulte Modify Increment Scans and Loop Closures.

Después de modificar su mapa, haga clic en Sync para actualizar todas las poses en el mapa escaneado. Las dos opciones bajo Sync son Sync, que busca nuevos cierres de bucle, o Sync Fast, que omite la búsqueda de cierres de bucle y solo actualiza el mapa de escaneo. Para obtener más información, consulte Sync the Map.

Cuando esté satisfecho con el aspecto del mapa, haga clic en Export to OccupancyGrid para exportar el mapa a un archivo m o guardar el mapa en el espacio de trabajo. El mapa se genera como una cuadrícula de ocupación probabilística 2-D en un objeto occupancyMap .

Puede abrir sesiones de aplicaciones existentes que haya guardado usando Open Session. Cuando esté en la pestaña Map Builder , puede guardar su progreso en un archivo m usando Save Session.

SLAM Map Builder app

Abrir la aplicación Creador de mapas SLAM

  • MATLAB® Tira de herramientas: En la pestaña Apps , en ROBOTICS AND AUTONOMOUS SYSTEMS, haga clic en SLAM Map Builder.

  • MATLAB Ventana de comando: Ingrese slamMapBuilder

Ejemplos

expandir todo

La app SLAM Map Builder le ayuda a crear una cuadrícula de ocupación a partir de escaneos LIDAR utilizando algoritmos de localización y mapeo simultáneos (SLAM). El mapa se construye estimando poses mediante la comparación de escaneos y usando cierres de bucle para optimizar el gráfico de poses. Este ejemplo le muestra el flujo de trabajo para cargar un rosbag de datos de escaneo LIDAR, filtrar los datos y crear el mapa. Ajuste el mapa de escaneo ajustando las coincidencias de escaneo incrementales y modificando los cierres de bucle.

Cargar datos de escaneo Lidar

Cargue el archivo .mat de ejemplo en el espacio de trabajo, que contiene una variable, scans, como un arreglo de celdas de objetos lidarScan .

load slamLidarScans.mat

Abre la app

En la pestaña Apps, en Robótica y sistemas autónomos, haga clic en SLAM Map Builder.

Además, puedes llamar a la función slamMapBuilder :

slamMapBuilder

Importar escaneos Lidar

Haga clic en Importar > Importar desde el espacio de trabajo para cargar los escaneos. Los datos almacenados como rosbag se pueden cargar con una licencia de ROS Toolbox .

Seleccione la variable scans en el menú desplegable Escaneos.

En la barra de herramientas, establezca Reducir resolución a (%) en 10. Reducir la resolución de los datos de manera uniforme para reducir el tiempo de cálculo del algoritmo SLAM. Para este ejemplo, el 10% es cada cinco escaneos. Haga clic en Aplicar.

Utilice el control deslizante o las teclas de flecha en la parte inferior para obtener una vista previa de los escaneos.

Una vez que haya terminado de importar, haga clic en Cerrar.

Ajustar la configuración de SLAM

El algoritmo SLAM se puede ajustar mediante el cuadro de diálogo Configuración de SLAM. Los parámetros deben ajustarse según las especificaciones de su sensor, el entorno y su aplicación. Para este ejemplo, aumente el Umbral de cierre de bucle de 200 a 300. Este umbral aumentado disminuye la probabilidad de aceptar y utilizar un cierre de bucle detectado. Establezca el Intervalo de optimización en 10. Con cada décimo cierre de bucle aceptado, el gráfico de pose se optimiza para tener en cuenta la deriva.

Construye el mapa

Después de filtrar sus datos y configurar la configuración del algoritmo SLAM, haga clic en Construir. La app comienza a procesar escaneos para crear el mapa. Debería ver cómo el control deslizante avanza y los escaneos se superponen en el mapa. La trayectoria estimada del robot se traza en el mismo mapa de escaneo. Las coincidencias de escaneo incremental se muestran en el panel Coincidencia incremental. Siempre que se detecta un cierre de bucle, el panel Cierre de bucle muestra los dos escaneos superpuestos entre sí.

Ajustar coincidencias de escaneo o cierres de bucle

En cualquier momento durante el proceso de construcción, si nota que el mapa está distorsionado o que una coincidencia incremental o un cierre de bucle parece incorrecto, haga clic en Pausar para seleccionar escaneos para realizar ajustes. También puede modificar los escaneos al final del proceso de compilación. Navegue usando las teclas de flecha o el control deslizante hasta el punto del archivo donde ocurre la distorsión por primera vez. Haga clic en los botones Coincidencia incremental o Cierre de bucle para ajustar las poses de escaneo que se muestran actualmente. En esta sección, el mal cierre del bucle es artificial y sólo tiene fines ilustrativos.

Haga clic en el botón Cierre de bucle. Esto abre una pestaña para modificar la pose relativa del cierre del bucle.

Para ignorar completamente el cierre del bucle, haga clic en Ignorar. De lo contrario, modifique manualmente la pose relativa del escaneo hasta que los escaneos se alineen.

Haga clic en Pan Scan o Rotate Scan, luego haga clic y arrastre en la figura para alinear los dos escaneos. Haga clic en Aceptar cuando haya terminado. Puede hacer esto para múltiples escaneos.

Después de modificar las poses de escaneo para coincidencias incrementales y cierres de bucle, haga clic en Sincronizar para aplicar los cambios. SyncFast actualiza el mapa sin buscar nuevos cierres de bucle y reduce el tiempo de cálculo si ya ha procesado todos los escaneos.

Exportar cuadrícula de ocupación

Una vez que haya sincronizado sus cambios y haya terminado de construir el mapa, debería ver un mapa escaneado completamente superpuesto con la trayectoria del robot.

Haga clic en Exportar Cuadrícula de ocupación para obtener un mapa de ocupación final de su entorno como un objeto occupancyMap . Especifique el nombre de la variable para exportar el mapa al espacio de trabajo. Puede crear un mapa a partir de un subconjunto de escaneos desplazándose hacia atrás hasta el cuadro deseado antes de exportar y seleccionando Hasta el escaneo seleccionado actualmente.

Llame a show en el mapa almacenado para visualizar el mapa de ocupación.

show(myOccMap)

También puede guardar una sesión de la app SLAM Map Builder usando el botón Guardar sesión. La app escribe el estado actual de la app en un archivo .mat que se puede cargar más tarde usando Abrir sesión.

Ejemplos relacionados

Uso programático

expandir todo

slamMapBuilder(bag) abre la app SLAM Map Builder e importa el archivo de registro rosbag especificado en bag, un objeto BagSelection creado usando Función rosbag (ROS Toolbox) . La app se abre en la pestaña Import para filtrar los datos del sensor en su rosbag.

slamMapBuilder(sessionFile) abre la app SLAM Map Builder desde un nombre de archivo de sesión guardado, sessionFile. Un archivo de sesión de app se crea a través del botón Save Session en la barra de herramientas de la app.

slamMapBuilder(scans) abre la app SLAM Map Builder e importa los escaneos especificados en scans, un arreglo de celdas de objetos lidarScan . La app asume que ha filtrado previamente sus escaneos y omite el proceso de importación. Haga clic en Build para comenzar a construir el mapa.

slamMapBuilder(scans,poses) abre la app SLAM Map Builder e importa los escaneos y las poses. scans se especifica como un arreglo de celdas de objetos lidarScan . poses es una matriz de vectores [x y theta] que corresponden a las poses de scans. La app asume que ha filtrado previamente sus escaneos y omite el proceso de importación. Haga clic en Build para comenzar a construir el mapa.

Más acerca de

expandir todo

Historial de versiones

Introducido en R2019b

Consulte también

Funciones

Objetos