Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

robotics.LidarSLAM clase

Paquete: robotics

Realice la localización y la asignación mediante exploraciones LiDAR

Descripción

La clase realiza la localización y mapeo simultáneos (SLAM) para las entradas del sensor de escaneo LiDAR.LidarSLAM El algoritmo SLAM toma los escaneos LiDAR y los adjunta a un nodo en un gráfico de pose subyacente. El algoritmo correlaciona los escaneos usando la coincidencia de escaneo. También busca cierres de bucle, donde los escaneos se superponen a las regiones previamente asignadas y optimiza las poses de nodo en el gráfico de pose.

Construcción

slamObj = robotics.LidarSLAM crea un objeto LiDAR SLAM. El tamaño del mapa de ocupación predeterminado es de 20 celdas por metro. El rango máximo para cada escaneo LiDAR es de 8 metros.

ejemplo

slamObj = robotics.LidarSLAM(mapResolution,maxLidarRange) crea un objeto LiDAR SLAM y establece las propiedades basadas en las entradas.MapResolutionMaxLidarRange

slamObj = robotics.LidarSLAM(mapResolution,maxLidarRange,maxNumScans) especifica el límite superior en el número de exploraciones aceptadas permitidas al generar código. es un entero positivo.maxNumScans Este límite de escaneo solo es necesario cuando se genera código.

Ejemplos

contraer todo

Utilice un objeto para añadir y comparar iterativamente escaneos LiDAR y construir un gráfico de pose optimizado de la trayectoria del robot.LidarSLAM Para obtener un mapa de ocupación de las poses y exploraciones asociadas, utilice la función.

Cargar datos y configurar el algoritmo de SLAM

Cargue una matriz de objetos de celda.lidarScan Los escaneos LiDAR fueron recogidos en un garaje de estacionamiento en un robot Husky® de ClearPath Robotics®. Típicamente, los escaneos LiDAR se toman en una frecuencia alta y cada escaneo no es necesario para SLAM. Por lo tanto, muestrear los escaneos seleccionando solo cada 40 º escaneo.

load garage_fl1_southend.mat scans scans = scans(1:40:end);

Para configurar el algoritmo de SLAM, especifique el rango LiDAR, la resolución de mapa, el umbral de cierre de bucle y el radio de búsqueda. Ajuste estos parámetros para su robot y entorno específicos. Cree el objeto con estos parámetros.LidarSLAM

maxRange = 19.2; % meters resolution = 10; % cells per meter  slamObj = robotics.LidarSLAM(resolution,maxRange); slamObj.LoopClosureThreshold = 360; slamObj.LoopClosureSearchRadius = 8;

Agregar exploraciones de forma iterativa

Mediante un bucle, agregue exploraciones al objeto SLAM.for El objeto utiliza la coincidencia de escaneo para comparar cada escaneo agregado con los agregados previamente. Para mejorar el mapa, el objeto optimiza el gráfico de pose cada vez que detecta un cierre de bucle. Cada 10 escaneos, mostrar las poses almacenadas y escaneos.

for i = 1:numel(scans)      addScan(slamObj,scans{i});          if rem(i,10) == 0         show(slamObj);     end end

Ver mapa de ocupación

Después de agregar todos los escaneos al objeto SLAM, cree un mapa llamando con los escaneos y poses.robotics.OccupancyGrid Utilice la misma resolución de mapa y el rango máximo que usó con el objeto SLAM.

[scansSLAM,poses] = scansAndPoses(slamObj); occGrid = buildMap(scansSLAM,poses,resolution,maxRange); figure show(occGrid) title('Occupancy Map of Garage')

Propiedades

expandir todo

Gráfico de pose subyacente que conecta los escaneos, especificados como un objeto.PoseGraph Agregar exploraciones para actualizar este gráfico de pose.LidarSLAM Cuando se encuentran cierres de bucle, el gráfico de pose se optimiza utilizando.OptimizationFcn

Resolución del mapa de la cuadrícula de ocupación, especificado como un entero positivo en las celdas por metro. Especifique la resolución de mapa en la construcción.

Rango máximo del sensor LiDAR, especificado como un escalar positivo en metros. Especifique el rango máximo en la construcción.

Función de optimización de gráficos de pose, especificada como un identificador de función. De forma predeterminada, el algoritmo llama a la función.optimizePoseGraph Para especificar su propio método de optimización, la clase requiere que la signatura de la función sea: es un objeto. es un vector-por-3 de poses enumeradas en orden de ID de nodo secuencial. es una estructura que contiene un campo como un escalar positivo.

[updatedPose,stat] = myOptimizationFcn(poseGraph)
poseGraphPoseGraphupdatedPosen[x y theta]statResidualError Utilice la estructura para incluir otra información relevante para su optimización.stat

Umbral en la puntuación del algoritmo de coincidencia de escaneo para aceptar cierres de bucle, especificados como un escalar positivo. Los umbrales más altos corresponden a una mejor coincidencia, pero las puntuaciones varían en función de los datos del sensor.

Radio de búsqueda para la detección de cierre de bucle, especificada como un escalar positivo. El aumento de este radio afecta al rendimiento aumentando el tiempo de búsqueda. Sintonice esta distancia en función de su entorno y la trayectoria del robot esperada.

Número de intentos para encontrar cierres de bucle, especificados como un entero positivo. Aumentar el número de intentos afecta al rendimiento al aumentar el tiempo de búsqueda.

Permitir la reversión automática de cierres de bucle añadido, especificado como o.truefalse El objeto SLAM realiza un seguimiento del error residual devuelto por el.OptimizationFcn Si detecta un cambio repentino en el error residual y esta propiedad es, rechaza (revierte) el cierre del lazo.true

Número de cierres de bucle aceptados para desencadenar la optimización, especificado como un entero positivo. De forma predeterminada, el se optimiza cada vez que agrega un cierre de bucle.PoseGraphLidarSLAM

Cambio mínimo en la pose necesario para procesar exploraciones, especificadas como un vector.[translation rotation] Un cambio de pose relativo para un análisis recién agregado se calcula como.[x y theta] Si la traducción en posición o rotación de excede estos umbrales, el objeto acepta el escaneo y agrega una pose se agrega a la.xythetaLidarSLAMPoseGraph

Métodos

Más acerca de

expandir todo

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

Introducido en R2018a