Demo code for paper Fast Structural Representation and Structure-aware Loop Closing for Visual SLAM. SH-FS can be applied in visual SLAM systems to calculate the structural change in a fast way, thus can solve the perceptual aliasing problem with structure-aware loop closing method.
In the demo code, we present:
- Calculation method for Spherical Harmonics based Fast Structural representation (SH-FS)
- Free space check process for loop failure identification
IROS, 2022.
This demo repository is released under GPLv3 License. (see LICENSE)
To use this work in academic work, please cite,
@article{xie2022fast,
title={Fast Structural Representation and Structure-aware Loop Closing for Visual SLAM},
author={Xie, Shuxiang and Ishikawa, Ryoichi and Sakurada, Ken and Onishi, Masaki and Oishi, Takeshi},
year={2022}
}
The preprint version paper can be found here.
Install requirements for main program:
sudo apt install libeigen3-dev
To properly install this program, CMAKE should also be preinstalled.
To see the result of this simple demo:
mkdir build
cd build
cmake ..
make
./LD_Graph
The program takes four arguments.
- data path of the map before PGO
- data path of the map after PGO
- id of start node in the loop
- id of end node in the loop
We provide some example scenes to show the performance of the algorithm. Please download the data from
This demo includes the implementation of SH-FS and algorithm for loop failure detection. You may implement this algorithm into your own SLAM systems.
To visualize the map, use
python scripts/visulize.py
You may change the parameters in scripts/config.py to specify which map you want to draw, whehter to draw 3D points, and other necessary options.
The requirements of this program are
pip install msgpack
pip install scipy
pip install matplotlib
If you want to test your own data with this demo code, you need to create the msgpack file with certain data structure. The data structure used by our samples is the following,
├── points_t
│ ├── id # 3D point id
│ └── coord_w # 3D point position in world coordinate
│
└── nodes_t
├── id # node id
├── rotation # l2w rotation of node represented in quarternion
├── translation # l2w translation of node
├── edges # connection between nodes in pose graph
└── parent # parent in pose graph
