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.

scansAndPoses

Extraer escaneos y poses correspondientes.

Desde R2019b

Descripción

ejemplo

[scans,poses] = scansAndPoses(slamObj) devuelve los escaneos utilizados por el objeto lidarSLAM como objetos lidarScan , junto con sus objetos [x y theta] asociados. Poses del gráfico de pose subyacente de slamObj.

[scans,poses] = scansAndPoses(slamObj,nodeIDs) devuelve los escaneos y las poses para las ID de nodo específicas. Para obtener los ID de los nodos, consulte el objeto poseGraph subyacente en slamObj para conocer los ID de los nodos.

Ejemplos

contraer todo

Utilice un objeto lidarSLAM para agregar y comparar de forma iterativa escaneos LIDAR y crear un gráfico de pose optimizado de la trayectoria del robot. Para obtener un mapa de ocupación de las poses y escaneos asociados, use la función buildMap .

Cargar datos y configurar el algoritmo SLAM

Cargue un arreglo de celdas de objetos lidarScan . Los escaneos LIDAR se recopilaron en un estacionamiento en un robot Husky® de ClearPath Robotics®. Normalmente, los escaneos LIDAR se toman a alta frecuencia y cada escaneo no es necesario para SLAM. Por lo tanto, reduzca la muestra de los escaneos seleccionando solo cada 40 escaneos.

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

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

maxRange = 19.2; % meters
resolution = 10; % cells per meter

slamObj = lidarSLAM(resolution,maxRange);
slamObj.LoopClosureThreshold = 360;
slamObj.LoopClosureSearchRadius = 8;

Agregar escaneos iterativamente

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

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 occupancyMap llamando a buildMap con los escaneos y las poses. Utilice la misma resolución de mapa y alcance máximo que utilizó con el objeto SLAM.

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

Argumentos de entrada

contraer todo

Objeto Lidar SLAM, especificado como un objeto lidarSLAM . El objeto contiene los parámetros del algoritmo SLAM, los datos del sensor y el gráfico de pose subyacente utilizado para construir el mapa.

ID de nodo del gráfico de pose, especificados como un número entero positivo. Los nodos se agregan al gráfico de pose con números de identificación secuenciales. Para obtener los ID de los nodos, consulte el objeto poseGraph subyacente en slamObj para conocer los ID de los nodos.

Argumentos de salida

contraer todo

Lecturas de escaneo Lidar, devueltas como un objeto lidarScan .

Pose para cada escaneo, devuelta como una n-por 3 de vectores [x y theta] . Cada fila es una pose que corresponde a un escaneo en scans.

Capacidades ampliadas

Historial de versiones

Introducido en R2019b