Skip to content

MRHan-426/SOSLAM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SO-SLAM

gif

ROB530 Primary language build passing License

This is Team 6's final project git repository for ROB530: Mobile Robotics.

The title of our project is Implementation and Evaluation of Semantic-Object SLAM Algorithm

The team members include: Ziqi Han, Zhewei Ye, Tien-Li Lin, Yi-Cheng Liu, Shubh Agrawal.

Related Paper: [RA-L&ICRA 2022]

  • Liao Z, Hu Y, Zhang J, et al. So-slam: Semantic object slam with scale proportional and symmetrical texture constraints[J]. IEEE Robotics and Automation Letters, 2022, 7(2): 4008-4015. [PDF]

πŸ“š 1. Prerequisites

sudo apt-get install libglew-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libtbb-dev
sudo apt-get install libmetis-dev
sudo apt-get install libpugixml-dev
sudo apt-get install libpcl-dev
cmake 3.26.0
libboost 1.71.0  # make sure to compile C++ version from source code.
Pangolin 0.8.0
OpenCV 4.7.0

βš™οΈ 2. Compile GTSAM

Note that higher version may bring unexpected errors, we do not test other version so far.

git clone --branch 4.1.1 https://github.com/borglab/gtsam.git

Modify Eigen cmake config file: cmake/HandleEigen.cmake

set(GTSAM_USE_SYSTEM_EIGEN ON)

Then:

mkdir build
cd build
cmake ..
make check
sudo make install

πŸ› οΈ 3. Compile our repo

Branch Master contains point cloud visualization, so you have some more prerequisites.

git clone --branch master https://github.com/MRHan-426/SOSLAM.git

Branch 0.0.1 doesnot contain point cloud visualization, so you don't have to compile PCL, VTK.

git clone --branch 0.0.1 https://github.com/MRHan-426/SOSLAM.git

Then:

mkdir build
cd build
cmake ..
make

🌟 4. Examples

First, prepare dataset and rename as input directory. We provide three hand-labeled dataset below.

It cost us a lot of time to label and associate these datasets, so please star if we do help you.

There are detailed configurations in config.yaml, please change if you need.

  • Dummy Example: We provide a demo to visualize for debugging. It will shows two hand designed ellipsoid.
./soslam_exe --dummy --3d
./soslam_exe --Fr2_Desk --3d

image

./soslam_exe --Fr1_Desk2 --3d

image

./soslam_exe --Fr2_Dishes --3d

image

🎬 5. Videos and Documentation

  • Our project presentation video is on [YouTube].

  • Project Document: [PDF]

πŸ“ 6. Note

  • If you want to use it in your work or with other datasets, you should prepare the dataset containing:

    • RGB image
    • Label xml (contain "objectKey" key to store the data association information)
    • Odom txt
    • Depth image (if you do not need point cloud visualization, just ignore)
    • Camera intrinsic txt

    Be aware that you should rename your images and xmls as number 1,2,3,...

    Be aware that RGB, Depth, Label, Odom must match.

  • This is an incomplete version of our project.

    • We have a lot of experiments to be done.
    • We have not achieved real-time.

πŸ… 7. Acknowledgement

Thanks for the great work:

πŸ“« 8. Contact

Please cite the author's paper if you use the code in your work.

@article{liao2022so,
  title={So-slam: Semantic object slam with scale proportional and symmetrical texture constraints},
  author={Liao, Ziwei and Hu, Yutong and Zhang, Jiadong and Qi, Xianyu and Zhang, Xiaoyu and Wang, Wei},
  journal={IEEE Robotics and Automation Letters},
  volume={7},
  number={2},
  pages={4008--4015},
  year={2022},
  publisher={IEEE}
}

πŸ“Œ 9. Project Log & Todo List

  • 1. Get dataset ready. Label and associate data by hand.

  • 2. Rewrite quardicslam in C++, called "c++ core".

    • 2.1 Finish compiling.
    • 2.2 Get correct answer.
  • 3.New Constraints and quadric Initialization.

    • 3.1 Finish writing constraints.
      • 3.1.1 Semantic Scale constraint.
      • 3.1.2 Plane Support constraint.
      • 3.1.3 Symmetry Texture constraint.
      • 3.1.4 Bounding Box constraint.
    • 3.2 Finish writing Quadric Initialization.
    • 3.3 Add Constraints into "c++ core".
      • 3.3.1 Debug Semantic Scale constraint.
      • 3.3.2 Debug Plane Support constraint.
      • 3.3.3 Debug Symmetry Texture constraint.
      • 3.3.4 Debug Bounding Box Constraint.
    • 3.4 Add Quadric Initialization part into "c++ core".
  • 4. Add visualization part.

    • dependency problems.
    • adding quadrics drawing(MapDrawer).
      • Map object that can return all objects to draw.
      • camera pose drawing.
      • graph drawing.
      • verify drawing correctness.
    • adding frame drawer(FrameDrawer).
      • state == Tracking::NOT_INITIALIZED.
      • quadricimage is in Tracking, move to here.
      • It also use a Update to update images, find a way to place Update.
      • verify drawing correctness.
    • point cloud
    • multithread part
    • world axis
    • usability: control visualization

==========================================================================

4.10 ~ 4.13 TODO list

  • 5. Finish debugging.

    • 5.1 Debug for the main optimization loop.
    • 5.2 Debug for symmetry factor.
  • 6. Evaluation our algrithm. [3D point cloud to get ground truth]

    • 6.1 Rot.
      • basic Rot.
      • check association
      • check semantic table.
      • other dataset(annotation and binding)
    • 6.2 IOU.
  • 7. Add visual odometry to take place of odom ground truth. [Orb Slam] [Optional]

==========================================================================

4.14 ~ 4.16 TODO list

  • 8. Doing experiments, Record Video.
  • 9. Write final report.
  • 10. Modify code, make it clear.