# Optimized-SC-F-LOAM

## What is Optimized-SC-F-LOAM?

- An improved version of F-LOAM and uses an adaptive threshold to further judge the loop closure detection results and reducing false loop closure detections. Also it uses feature point-based matching to calculate the constraints between a pair of loop closure frame point clouds and decreases time consumption of constructing loop frame constraints.

## Repository Information

### Original Repository link

[https://github.com/SlamCabbage/Optimized-SC-F-LOAM](<https://github.com/SlamCabbage/Optimized-SC-F-LOAM>)

### Required Sensors

- LIDAR \[VLP-16, HDL-32, HDL-64\]

### ROS Compatibility

- ROS 1

### Dependencies

- [ROS](<http://wiki.ros.org/noetic/Installation/Ubuntu>)
- [PCL](<https://pointclouds.org/downloads/#linux>)
- [GTSAM](<https://gtsam.org/get_started/>)
- [Ceres Solver](<https://github.com/ceres-solver/ceres-solver/blob/master/docs/source/installation.rst>)
- For visualization purpose, this package uses hector trajectory sever, you may install the package by

```bash
sudo apt-get install ros-noetic-hector-trajectory-server
```

## Build &amp; Run

### 1\) Build

```bash
cd ~/catkin_ws/src
git clone https://github.com/SlamCabbage/Optimized-SC-F-LOAM.git
cd ..
catkin_make
```

### 2\) Create message file

In this folder, Ground Truth information, optimized pose information, F-LOAM pose information and time information are stored

```bash
mkdir -p ~/message/Scans

Change line 383 in the laserLoopOptimizationNode.cpp to your own "message" folder path
```

(Do not forget to rebuild your package)

### 3\) Set parameters

- Set LIDAR topic and LIDAR properties on 'sc\_f\_loam\_mapping.launch'

### 4\) Run

```bash
source devel/setup.bash
roslaunch optimized_sc_f_loam optimized_sc_f_loam_mapping.launch
```

## Example Result

### Results on KITTI Sequence 00 and Sequence 05

The table shows the results from the Optimized-SC-F-LOAM paper. "OURS" is Optimized-SC-F-LOAM. A dash means that the paper gives no value.

| Methods | Datasets | ATE (%) | ARE (deg/100m) | Time (ms/loop frame) |
| :--- | :---: | :---: | :---: | :---: |
| Simple-SC-F-LOAM | 00 | 0.75 | 0.27 | 501 |
| Simple-SC-F-LOAM | 05 | 0.51 | 0.24 | 422 |
| F-LOAM | 00 | 1.13 | 0.37 | \- |
| F-LOAM | 05 | 0.81 | 0.32 | \- |
| SC-A-LOAM | 00 | 0.83 | 0.34 | 444 |
| SC-A-LOAM | 05 | 0.50 | 0.27 | 439 |
| A-LOAM | 00 | 1.09 | 0.40 | \- |
| A-LOAM | 05 | 0.87 | 0.37 | \- |
| LeGO-LOAM | 00 | 2.17 | 13.4 | \- |
| LeGO-LOAM | 05 | 1.28 | 0.74 | \- |
| LOAM | 00 | 0.78 | \- | \- |
| LOAM | 05 | 0.57 | \- | \- |
| OURS | 00 | **0.75** | **0.27** | **135** |
| OURS | 05 | **0.43** | **0.22** | **129** |

### Comparison of trajectories on KITTI dataset

Test on KITTI sequence You can download the sequence 00 and 05 datasets from the KITTI official website and convert them into bag files using the kitti2bag open source method.

00: 2011\_10\_03\_drive\_0027 000000 004540

05: 2011\_09\_30\_drive\_0018 000000 002760

See the link: [https://github.com/ethz-asl/kitti\_to\_rosbag](<https://github.com/ethz-asl/kitti_to_rosbag>)

## Acknowledgements

Thanks for SC-A-LOAM(Scan context: Egocentric spatial descriptor for place recognition within 3d point cloud map) and F-LOAM(F-LOAM : Fast LiDAR Odometry and Mapping).

## Citation

```bibtex
@misc{https://doi.org/10.48550/arxiv.2204.04932,
  doi = {10.48550/ARXIV.2204.04932},

  url = {https://arxiv.org/abs/2204.04932},

  author = {Liao, Lizhou and Fu, Chunyun and Feng, Binbin and Su, Tian},

  keywords = {Robotics (cs.RO), FOS: Computer and information sciences, FOS: Computer and information sciences},

  title = {Optimized SC-F-LOAM: Optimized Fast LiDAR Odometry and Mapping Using Scan Context},

  publisher = {arXiv},

  year = {2022},

  copyright = {arXiv.org perpetual, non-exclusive license}
}
```
