hasNewKeyFrame
Description
Examples
Monocular Visual SLAM Using TUM RGB-D Data Set
Perform monocular 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 = "https://cvg.cit.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
Create an imageDatastore
object to store all the RGB images.
imageFolder = dataFolder+"rgbd_dataset_freiburg3_long_office_household/rgb/";
imds = imageDatastore(imageFolder);
Specify your camera intrinsic parameters, and use them to create a monocular visual SLAM object.
intrinsics = cameraIntrinsics([535.4 539.2],[320.1 247.6],[480 640]); vslam = monovslam(intrinsics);
Process each image frame, and visualize the camera poses and 3-D map points.
for i = 1:numel(imds.Files) addFrame(vslam,readimage(imds,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 plot(vslam); end % Get current status of system status = checkStatus(vslam); end
Note that the monovslam
object runs several algorithm parts on separate threads, which can introduce a latency in processing of an image frame added by using the addFrame
function.
% Plot intermediate results and wait until all images are processed while ~isDone(vslam) if hasNewKeyFrame(vslam) plot(vslam); end end
After all the images are processed, you can collect the final 3-D map points and camera poses for further analysis.
xyzPoints = mapPoints(vslam);
[camPoses,viewIds] = poses(vslam);
% Reset the system
reset(vslam)
Input Arguments
vslam
— Visual SLAM object
monovslam
object
Visual SLAM object, specified as a monovslam
object.
Output Arguments
hasAdded
— New key frame status
false
or 0
| true
or 1
New key frame status, returned as 0
(false
) or
1
(true
). A value of true
indicates that a new key frame has been added within the visual SLAM object
vslam
. A value of false
indicates that no new
key frame has been added. The object considers an image frame to be a key frame if the
number of tracked feature points in the current frame satisfies one of these conditions:
The number of tracked feature points is within the limits specified by the
TrackFeatureRange
property of themonovslam
object,vslam
.The number of tracked feature points is greater than the upper limit specified by the
TrackFeatureRange
property of themonovslam
object,vslam
, and the number of skipped frames since adding the last key frame equals the value of theSkipMaxFrames
.
The hasNewKeyFrame
object function returns
true
once per new key frame added. For example, if the monovslam
object adds only one key frame, then two consecutive calls to
hasNewKeyFrame
return true
and
false
, respectively.
Version History
Introduced in R2023b
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)