Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

plot

Graficar puntos de mapa 3D y trayectoria estimada de la cámara en SLAM visual estéreo

Desde R2025a

    Descripción

    plot(vslam) traza los puntos del mapa 3-D y la trayectoria estimada de la cámara a partir del objeto SLAM visual vslam.

    ejemplo

    plot(vslam,Name=Value) especifica opciones utilizando uno o más argumentos de nombre-valor. Por ejemplo, MarkerSize=10 establece el diámetro del tamaño del marcador en 10 puntos.

    ax = plot(___) devuelve el controlador de ejes para los puntos mapeados en 3D del gráfico, utilizando cualquier combinación de argumentos de entrada de sintaxis anteriores.

    Ejemplos

    contraer todo

    Realice la localización y el mapeo visual simultáneo estereoscópico (vSLAM) utilizando los datos del Conjunto de datos de localización y mapeo a largo plazo UTIAS proporcionado por el Instituto de Estudios Aeroespaciales de la Universidad de Toronto. Puede descargar los datos a un directorio mediante un navegador web o ejecutando este código:

    ftpObj = ftp("asrl3.utias.utoronto.ca");
    tempFolder = fullfile(tempdir);
    dataFolder = [tempFolder,'2020-vtr-dataset\UTIAS-In-The-Dark\'];
    zipFileName = [dataFolder,'run_000005.zip'];
    folderExists = exist(dataFolder,"dir");

    Crea una carpeta en un directorio temporal para guardar el archivo descargado y extraer su contenido.

    if ~folderExists  
        mkdir(dataFolder) 
        disp("Downloading run_000005.zip (818 MB). This download can take a few minutes.") 
        mget(ftpObj,"/2020-vtr-dataset/UTIAS-In-The-Dark/run_000005.zip",tempFolder);
    
        disp("Extracting run_000005.zip (818 MB) ...") 
        unzip(zipFileName,dataFolder); 
    end

    Crea dos objetos imageDatastore para almacenar las imágenes estéreo.

    imgFolderLeft = [dataFolder,'\images\left\'];
    imgFolderRight = [dataFolder,'\images\right\'];
    imdsLeft = imageDatastore(imgFolderLeft);
    imdsRight = imageDatastore(imgFolderRight);

    Especifique los parámetros intrínsecos y la línea base de la cámara estéreo, y utilícelos para crear un objeto SLAM visual estéreo. La distancia focal, el punto principal y el tamaño de la imagen están en píxeles, y la línea de base está en metros.

    focalLength = [387.777 387.777];  
    principalPoint = [257.446 197.718];  
    imageSize = [384 512];            
    intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize);
    baseline = 0.239965; 
    
    vslam = stereovslam(intrinsics,baseline,MaxNumPoints=600, ...
        TrackFeatureRange=[30 120],SkipMaxFrames=5);

    Procese cada par de imágenes estéreo y visualice las poses de la cámara y los puntos del mapa 3D.

    for i = 1:numel(imdsLeft.Files)
        leftImage = readimage(imdsLeft,i);
        rightImage = readimage(imdsRight,i);
        addFrame(vslam,leftImage,rightImage);
    
        if hasNewKeyFrame(vslam)
            % Query 3-D map points and camera poses
            xyzPoints = mapPoints(vslam);
            [camPoses,viewIds] = poses(vslam);
    
            % Display 3-D map points and camera trajectory
            plot(vslam);
        end
    
        % Get current status of system
        status = checkStatus(vslam);
        
        % Stop adding frames when tracking is lost
        if status == uint8(0)
            break
        end
    end 

    Una vez procesados todos los fotogramas, reinicie el sistema.

    while ~isDone(vslam)
        plot(vslam)
    end

    Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 12 objects of type line, text, patch, scatter. This object represents Camera trajectory.

    reset(vslam)

    Argumentos de entrada

    contraer todo

    Objeto SLAM visual estéreo, especificado como un objeto stereovslam.

    Argumentos de par nombre-valor

    contraer todo

    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.

    Ejemplo: plot(vslam,MarkerSize=10), establece el diámetro del marcador en 10 puntos.

    Diámetro de los marcadores para los puntos del mapa 3D, especificado como un entero positivo en puntos.

    Color de los marcadores de los puntos del mapa 3D, especificado como un triplete RGB o un nombre de color corto o largo. Cada valor dentro de un triplete RGB debe estar en el rango [0 1].

    Fuente de mapa de colores para marcadores, especificada como "X", "Y", "Z" o "MarkerColor".

    Ancho de la base de la cámara, especificado como un escalar positivo en las unidades de datos de los ejes.

    Color de la cámara, especificado como un triplete RGB o un nombre de color corto o largo. Cada valor dentro de un triplete RGB debe estar en el rango [0 1].

    Ejes para visualización, especificados como un objeto gráfico Axes o un objeto UIAxes. Utilice este argumento de nombre-valor para visualizar el gráfico en una interfaz de usuario para la que haya especificado las propiedades Figure y Axes.

    Argumentos de salida

    contraer todo

    Controlador de ejes, devuelto como un objeto gráfico axes.

    Historial de versiones

    Introducido en R2025a

    Consulte también

    Objetos

    Funciones