Main Content


Check status of visual RGB-D SLAM object

Since R2024a



    status = checkStatus(vslam) returns the current status of the RGB-D visual SLAM object. The frame the object is currently processing might be different than the most recently added frame.


    collapse all

    Perform RGB-D visual simultaneous localization and mapping (vSLAM) using the data from the TUM RGB-D Benchmark. You can download the data to a temporary directory using a web browser or by running this code:

    baseDownloadURL = ""; 
    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  
        disp("Downloading fr3_office.tgz (1.38 GB). This download can take a few minutes.") 
        % Extract contents of the downloaded file
        disp("Extracting fr3_office.tgz (1.38 GB) ...") 

    Create two imageDatastore objects. One to store the color images and the other to store the depth images.

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

    Select the synchronized pair of color and depth images.

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

    Specify your camera intrinsic parameters, and use them to create an RGB-D visual SLAM object.

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

    Process each pair of color and depth images, and visualize the camera poses and 3-D map points.

    for i = 1:numel(imdsColor.Files)
        colorImage = readimage(imdsColor,i);
        depthImage = readimage(imdsDepth,i);
        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
        % Get current status of system
        status = checkStatus(vslam);
        % Stop adding frames when tracking is lost
        if status == uint8(0)

    Once all the frames have been processed, reset the system.

    while ~isDone(vslam)

    Input Arguments

    collapse all

    RGB-D visual SLAM object, specified as an rgbdvslam object.

    Output Arguments

    collapse all

    Current status of the RGB-D visual SLAM object, returned as a TrackingLost, TrackingSuccessful, or FrequentKeyFrames enumeration. This table describes these enumerations.

    Enumeration ValueNumeric ValueDescription

    Tracking is lost. The number of tracked feature points in the frame currently being processed is less than the lower limit of the TrackFeatureRange property of vslam. This indicates the image does not contain enough features, or that the camera is moving too fast.

    If the object does not accept enough frames as key frames, to improve tracking, you can increase the upperLimit value of the TrackFeatureRange property and decrease the SkipMaxFrames property to add key frames more frequently.


    Tracking is successful. The number of tracked feature points in the frame currently being processed is between the lower limit and upper limit values of the TrackFeatureRange property of vslam.


    Tracking adds key frames too frequently. The number of tracked feature points in the frame currently being processed is greater than the upper limit of the TrackFeatureRange property of vslam.

    Version History

    Introduced in R2024a

    See Also