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]
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
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
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
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
- Fr2 Desk: We provide a demo running dataset TUM RGBD. Download hand labeled dataset
./soslam_exe --Fr2_Desk --3d
- Fr1 Desk2: We provide a demo running dataset TUM RGBD. Download hand labeled dataset
./soslam_exe --Fr1_Desk2 --3d
- Fr2 Dishes: We provide a demo running dataset TUM RGBD. Download hand labeled dataset
./soslam_exe --Fr2_Dishes --3d
-
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.
Thanks for the great work:
- Ziqi Han, Email: ziqihan@umich.edu
- Zhewei Ye, Email: yezhewei@umich.edu
- Tien-Li Lin, Email: tienli@umich.edu
- Yi-Cheng Liu, Email: liuyiche@umich.edu
- Shubh Agrawal, Email: shbhgrwl@umich.edu
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}
}
-
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".
- 3.1 Finish writing constraints.
-
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.
- 6.1 Rot.
-
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.