This is a list of the new features provided by PLVS:
- Line segment detection, matching, triangulation and tracking with both pinhole and fisheye cameras (NEW experimental).
- This capability can be enabled via the option
Line.on
in the yaml settings. - Removed some bugs, customized and optimized the adopted line_descriptor module from OpenCV library.
- This capability can be enabled via the option
- Dense reconstruction with different volumetric mapping methods: voxelgrid, octree_point, octomap, fastfusion, chisel, voxblox.
- It can be enabled by using the option
PointCloudMapping.on
in the yaml settings and selecting your preferred methodPointCloudMapping.type
(see the comments in the yaml files). - With stereo cameras you can select the algorithm used to computed depth maps from stereo by setting
StereoDense.type
(GPU-accelerated libelas, libsgm, and other experimental OpenCV variants). - With fisheye cameras you can set
StereoDense.needRectification: 1
: This implies rectified stereo images are computed on-the-fly only in the point cloud mapping thread (not in the sparse mapping thread) along with depth maps (NEW experimental). Otherwise, whenCamera.type: "KannalaBrandt8"
, you can alternatively setCamera.needRectification: 1
and rectify the input stereo images for both the sparse mapping thread and dense mapping thread (to this aim, use the new examples in the folder Examples).
- It can be enabled by using the option
- Incremental segmentation with RGBD sensors and octree-based dense map.
- It can be enabled by using the option
Segmentation.on
in the yaml settings of the RGBD cameras (only working whenoctree_point
is selected as volumetric mapping method).
- It can be enabled by using the option
- Augmented reality with overlay of tracked features, built meshes and loaded 3D models.
- This viz can be enabled by using the button
AR Camera
in the viewer GUI. - A shader allows to viz points and lines with fisheye cameras.
- This viz can be enabled by using the button
- Generated sparse and dense maps can be saved and reloaded.
- You can save the generated sparse and dense maps anytime by using the GUI: first press the button
Pause
and then press the buttonSave
. As a consequence, maps will be saved in the Scripts folder. In particular, (1) a sparse map will be always saved, (2) a dense map will be saved in the form of a ply (or of another custom format) only in the case you have setPointCloudMapping.on: 1
. You can browse the producedply
point clouds by using CloudCompare. - Use the
SparseMapping
options (as showed in this TUM configuration file) in order to reload the sparse map. In particular, be sure to properly specify theSparseMapping.filename
and then setSparseMapping.reuseMap: 1
. - As for reloading the dense map, set
PointCloudMapping.loadMap: 1
and configurePointCloudMapping.loadFilename
.
- You can save the generated sparse and dense maps anytime by using the GUI: first press the button
- Extraction of ORB keypoints via CUDA.
- This capability can be optionally activated by using the option
USE_CUDA
in config.sh
- This capability can be optionally activated by using the option
- Different methods can be used with calibrated stereo cameras for estimating depth maps: libelas, libsgm, opencv (these methods may need more fine tuning).
- Use the option
StereoDense.type
to select your preferred method in the yaml settings for stereo cameras. This will work with your stereo datasets whenPointCloudMapping.on
is set to 1.
- Use the option
- Some parts of the original ORBSLAM code were improved and optimized.
- A new version of g2o is supported (tags/20230223_git). This can be enabled by setting the option
WITH_G2O_NEW
toON
in the mainCMakeLists.txt
of PLVS. Note that the new version of g2o will be automatically installed for you by the main build script (build.sh
→build_thirdparty.sh
→install_local_g2o_new.sh
). - Smart pointers to manage points and lines (WIP for keyframes) are optionally available. See the file Pointers.h.
- MapOjbect: Experimental representation for planar objects (WIP for PLVS II).
- C++17 support. This can be configured at global level in config.sh by setting the variable
CPP_STANDARD_VERSION
. - Many convenient scripts are provided for launching apps, benchmarking and monitoring the system. See the
Scripts
and theBenchmarking
folders. - Rerun visualizations are now supported (NEW).
Note: PLVS is an active project. The main README is under construction and will be updated soon with further information and details. Likewise, code improvements are coming soon.
You can find further details and videos on this page and in the following document:
PLVS: A SLAM System with Points, Lines, Volumetric Mapping, and 3D Incremental Segmentation
Luigi Freda
At present, we have some limitations with some specific sensor configurations.
-
Monocular sensors
- Line features and volumetric reconstruction are not supported with monocular sensors.
-
Incremental segmentation: Incremental segmentation is only supported with RGBD sensors and octree-based dense map (
PointCloudMapping.type: "octree_point"
). Too fast movements can break the smoothness of the reconstructed surfaces and the resulting geometric segmentation may appear suboptimal.
- With pinhole stereo cameras (
Camera.type: "Pinhole"
), rectification is automatically applied when using the new examples in the folder Examples. - With fisheye cameras,
Camera.type: "KannalaBrandt8"
, you can setCamera.needRectification: 1
and rectify the input stereo images for both the sparse mapping thread and dense mapping thread (to this aim, use the new examples in the folder Examples). Otherwise, when targeting a volumetric reconstruction, you can setStereoDense.needRectification: 1
: This implies rectified stereo images are computed on-the-fly only in the point cloud mapping thread (not in the sparse mapping thread) along with depth maps.