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.

checkStatus

Comprobar el estado del objeto SLAM RGB-D visual

Desde R2025a

    Descripción

    status = checkStatus(vslam) devuelve el estado actual del objeto SLAM visual RGB-D. El marco que el objeto está procesando actualmente podría ser diferente del marco agregado más recientemente.

    ejemplo

    Ejemplos

    contraer todo

    Realice la localización y el mapeo visual simultáneos RGB-D (vSLAM) utilizando los datos del TUM RGB-D Benchmark. Puede descargar los datos a un directorio temporal utilizando un navegador web o ejecutando este código:

    baseDownloadURL = "https://vision.in.tum.de/rgbd/dataset/freiburg3/rgbd_dataset_freiburg3_long_office_household.tgz"; 
    dataFolder = fullfile(tempdir,"tum_rgbd_dataset",filesep); 
    options = weboptions(Timeout=Inf);
    tgzFileName = dataFolder+"fr3_office.tgz";
    folderExists = exist(dataFolder,"dir");
    
    % Create a folder in a temporary directory to save the downloaded file
    if ~folderExists  
        mkdir(dataFolder) 
        disp("Downloading fr3_office.tgz (1.38 GB). This download can take a few minutes.") 
        websave(tgzFileName,baseDownloadURL,options); 
        
        % Extract contents of the downloaded file
        disp("Extracting fr3_office.tgz (1.38 GB) ...") 
        untar(tgzFileName,dataFolder); 
    end

    Crea dos objetos imageDatastore. Uno para almacenar las imágenes en color y el otro para almacenar las imágenes de profundidad.

    colorImageFolder = dataFolder+"rgbd_dataset_freiburg3_long_office_household/rgb/";
    depthImageFolder = dataFolder+"rgbd_dataset_freiburg3_long_office_household/depth/";
    
    imdsColor = imageDatastore(colorImageFolder);
    imdsDepth = imageDatastore(depthImageFolder);

    Seleccione el par sincronizado de imágenes de color y profundidad.

    data = load("rgbDepthPairs.mat");
    imdsColor=subset(imdsColor, data.indexPairs(:, 1));
    imdsDepth=subset(imdsDepth, data.indexPairs(:, 2));

    Especifique los parámetros intrínsecos de su cámara y utilícelos para crear un objeto SLAM visual RGB-D.

    intrinsics = cameraIntrinsics([535.4 539.2],[320.1 247.6],[480 640]);
    depthScaleFactor = 5000;
    vslam = rgbdvslam(intrinsics,depthScaleFactor);

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

    for i = 1:numel(imdsColor.Files)
        colorImage = readimage(imdsColor,i);
        depthImage = readimage(imdsDepth,i);
        addFrame(vslam,colorImage,depthImage);
    
        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 

    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.

    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 RGB-D, especificado como un objeto rgbdvslam.

    Argumentos de salida

    contraer todo

    Estado actual del objeto SLAM visual RGB-D, devuelto como una enumeración TrackingLost, TrackingSuccessful o FrequentKeyFrames. En esta tabla se describen estas enumeraciones.

    Valor de enumeraciónValor numéricoDescripción
    TrackingLostuint8(0)

    Se perdió el seguimiento. La cantidad de puntos característicos rastreados en el marco que se está procesando actualmente es menor que el límite inferior de la propiedad TrackFeatureRange de vslam. Esto indica que la imagen no contiene suficientes funciones o que la cámara se está moviendo demasiado rápido.

    Si el objeto no acepta suficientes fotogramas como fotogramas clave, para mejorar el seguimiento, puede aumentar el valor upperLimit de la propiedad TrackFeatureRange y disminuir la propiedad SkipMaxFrames para agregar fotogramas clave con mayor frecuencia.

    TrackingSuccessfuluint8(1)

    El seguimiento se ha realizado correctamente. La cantidad de puntos característicos rastreados en el marco que se está procesando actualmente se encuentra entre los valores de límite inferior y límite superior de la propiedad TrackFeatureRange de vslam.

    FrequentKeyFramesuint8(2)

    El seguimiento agrega fotogramas clave con demasiada frecuencia. La cantidad de puntos característicos rastreados en el marco que se está procesando actualmente es mayor que el límite superior de la propiedad TrackFeatureRange de vslam.

    Historial de versiones

    Introducido en R2025a

    Consulte también

    Objetos

    Funciones