Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: comparing slam algorithms #366

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ nav:
- Optimized-SC-F-LOAM: optimized-sc-f-loam
- SC-A-LOAM: sc-a-loam
- SC-LeGO-LOAM: sc-lego-loam
- Comparing Errors of SLAM Algorithms: compare-slam-algorithms
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
nav:
- index.md
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Comparing Open Source SLAM Algorithms

In order to compare SLAM algorithms their trajectory errors can be
compared in terms of positions and orientations, thus ground truth
should be generated and GNSS/INS can be used for this purpose.

## Setup

We have used a mapping kit which contains Velodyne VLP16 LiDAR and
Applanix LVX GNSS/INS sensors. With using this kit we could collect
data for ground truth and SLAM algorithms simultaneously. Since ground
truth is generated by GNSS/INS, it should be transformed to LiDAR frame.
Additionally, average positional error in the postprocessed GNSS/INS data
is 0.06 meters.

### Transform

To calculate error's of slam algorithms ground truth trajectory and
slam trajectories must be in the same frame. Hence, whether ground
truth or slam trajectory should rotate and translate to the other's
frame.

Tf tree of this transform is:

<p align="center">
<img src="images/maptfinal.drawio.png" width="191" height="628">
</p>

To perform necessary rotation and translation firstly transform matrices
are calculated then transforms applied on GNSS/INS positions by using
calculated transform matrices.

Before transformation:

<p align="center">
<img src="images/gnss_hdl_path_no_Tf.png" width="628" height="442">
</p>

## Results

RViz output of both of the ground truth and slam trajectories and
the graphs of the positional errors in meters of the slam algorithms
are depicted below.

| SLAM Algorithm | Trajectory After Transformation | Position Error Graphs | Average Position Error (meters) |
| :-------------------------------------------------------------: | :--------------------------------------------------------------------: | :----------------------------------------------------------------------------: | :--------------------------------------------: |
| [hdl_graph_slam](https://github.com/koide3/hdl_graph_slam) | <img src="images/hdl_vs_gnss_path.png" width="200" height="400"> | <img src="images/hdl_graph_slam_position_errors.png" width="628" height="314"> | x:11.903188 <br> y: 3.887582 <br> z: 13.905123 |
| [lidarslam_ros2](https://github.com/rsasaki0109/lidarslam_ros2) | <img src="images/lidarslam_vs_gnss_path.png" width="200" height="400"> | <img src="images/lidarslam_position_errors.png" width="628" height="314"> | x: 8.949974 <br> y: 2.818557 <br> z: 16.495759 |

## TODO

- Transform between GNSS/INS trajectory and SLAM trajectory
will be implemented using ros tf.
- SLAM algorithms tested with IMU data.
- Remaining SLAM algorithms will be tested.