base on PLVS is a real-time SLAM system with points, lines, volumetric mapping and 3D unsupervised incremental segmentation. <p align="center"> <img src="Images/PLVS-logo.png" alt="PLVS lab" width="300" border="0"/> </p> # PLVS II ### v0.3.0 Author: [Luigi Freda](https://www.luigifreda.com) PLVS is a real-time system that combines sparse SLAM, volumetric mapping, and 3D unsupervised incremental segmentation. PLVS stands for **Points**, **Lines**, **Volumetric mapping**, and **Segmentation**. <p align="center"> <img src="Images/PLVS-lab.png" alt="PLVS lab" max-width="585" border="0"/> <img src="Images/PLVS-ar2.gif" alt="PLVS augmented reality" height="180" border="0"/> <img src="Images/PLVS-details.gif" alt="PLVS details" height="180" border="0"/> <img src="Images/PLVS-Points-Lines-Vol-Seg.png" alt="PLVS details" max-width="695" border="0"/> </p> PLVS is available in two different versions. - **PLVS I**: hosted in the branch `plvs1`. It builds on [ORB-SLAM2](https://github.com/raulmur/ORB_SLAM2), and supports mono, stereo, and RGB-D cameras. - **PLVS II**: hosted in the `master` branch. It builds on [ORB-SLAM3](https://github.com/UZ-SLAMLab/ORB_SLAM3), and also supports camera systems provided with IMUs. This [document](./new_features.md) provides a list of the **new features** introduced by PLVS. For more information and videos, please visit this [project page](https://www.luigifreda.com/research/plvs-an-open-source-rgb-d-and-stereo-slam-for-volumetric-reconstruction-and-3d-incremental-segmentation/) or refer to the following **document**: **[PLVS: A SLAM System with Points, Lines, Volumetric Mapping, and 3D Incremental Segmentation](https://arxiv.org/pdf/2309.10896.pdf)**  *Luigi Freda* **Note**: PLVS is an active project. This *README* is under construction and will be updated with further information and details as new improvements are released. Stay tuned! ## Quick start - The [build](#build) procedures were tested under **Ubuntu 20, 22, 24**. - ROS1 support is provided only under **noetic** with **Ubuntu 20** (see [here](#ros-build)). - ROS2 was tested under **foxy** and **Ubuntu 20** (further details [here](#ros-build)). If you don't have Ubuntu 20 with noetic, check [rosdocker](https://github.com/luigifreda/rosdocker) and use the *noetic* or *noetic_cuda* containers. **NOTE**: At present, under Ubuntu 24.04, `BUILD_WITH_MARCH_NATIVE` is set to `OFF`. Enabling `--march=native` optimization brings some problems probably due to different default building options in the native `libpcl`. --- ### Build 1. Install basic dependencies: `$ ./install_dependencies.sh` 2. Install *OpenCV* in a local folder: `$ ./install_local_opencv.sh` 3. Build the *PLVS* framework: `$ ./build.sh` It should be easy to adapt the above procedures if you have a different OS version. If you want to skip step 2, you can set the variables `OpenCV_DIR` and `OPENCV_VERSION` in `config.sh` with your local *OpenCV* path and version, respectively. However, this is not recommended. ### ROS build #### ROS 1 Under **ROS noetic**, open a new terminal, source the main ROS1 `setup.bash` and run: `$ ./build_ros_catkin.sh` This command builds the *PLVS* ROS1 workspace in `Example_old/ROS/PLVS` and deploys it in the `ros_ws` folder. #### ROS 2 Under **ROS 2**, open a new terminal, source the main ROS2 `setup.bash` and run: `$ ./build_ros_colcon.sh` This command builds the *PLVS* ROS2 workspace in `Example/ROS2/PLVS` and deploys it in the `ros2_ws` folder. --- ### Running the examples Once everything is built, you can enter in the `Scripts` folder and test the different examples. For instance you can configure and run: - `$ ./run_tum_rgbd.sh` for TUM RGB-D datasets - `$ ./run_kitti_stereo.sh` for KITTI datasets - `$ ./run_euroc_stereo_inertial.sh` for Euroc datasets, stereo + inertial - `$ ./run_euroc_stereo.sh` for Euroc datasets, only stereo - `$ ./run_tum_vi_stereo.sh` for TUM VI datasets, only stereo - `$ ./run_tum_vi_stereo_inertial.sh` for TUM VI datasets, stereo + inertial In each of the above scripts, you have to configure *(1)* the `DATASET_BASE_FOLDER`, *(2)* the specific `DATASET` of interest, and *(3)* the used `YAML` configuration file. In particular, each `YAML` configuration file shows different sections with commented options. For a quick overview of the **new features** and their corresponding `YAML` options refer to [new_features.md](./new_features.md). #### ROS 1 If you built the ROS workspace, you can use the scripts `ros_xterm*` to launch the PLVS ROS nodes. For instance, with the TUM datasets, configure and run `ros_xterm_tum_rgbd.sh`. #### ROS 2 Refer to this [README](./Examples/ROS2/PLVS/README.md). At present, this is a work in progress. With the TUM datasets, configure and run `ros2_xterm_tum_rgbd.sh`. **Note**: The ROS1 and ROS2 install paths are automatically detected by the script `Scripts/find_ros.sh`. --- ## Contributing We welcome contributions to the codebase through pull requests, bug reports, comments, and feature proposals via issues. For any questions or feedback, please contact *luigifreda(at)gmail(dot)com*. Thank you! --- ## License PLVS is released under [GPLv3 license](./LICENSE). PLVS contains some modified libraries, each one coming with its license. Where nothing is specified, a GPLv3 license applies to the software. If you use PLVS in your projects, please cite our above-mentioned document. --- ## Credits * The *PLVS I* and *PLVS II* frameworks are based on [ORB-SLAM2](https://github.com/raulmur/ORB_SLAM2) and [ORB-SLAM3](https://github.com/UZ-SLAMLab/ORB_SLAM3) respectively. Many thanks to their Authors for their great work and contributions to the Research and open-source communities. * Ther ROS 2 wrapper was inspired by this [repository](https://github.com/zang09/ORB_SLAM3_ROS2). Many thanks to his Author, [Haebeom Jung](https://github.com/zang09). ", Assign "at most 3 tags" to the expected json: {"id":"4061","tags":[]} "only from the tags list I provide: []" returns me the "expected json"