• Stars
    star
    502
  • Rank 87,851 (Top 2 %)
  • Language
    Python
  • Created about 5 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Full-python LiDAR SLAM using ICP and Scan Context

PyICP SLAM

Full-python LiDAR SLAM.

Purpose

  • Full-python LiDAR SLAM
    • Easy to exchange or connect with any Python-based components (e.g., DL front-ends such as Deep Odometry)
      • Here, ICP, which is a very basic option for LiDAR, and Scan Context (IROS 18) are used for odometry and loop detection, respectively.
  • Hands-on LiDAR SLAM
    • Easy to understand (could be used for educational purpose)
  • The practical use case of miniSAM
    • The miniSAM is easy to use at Python

What is SLAM?

  • In this repository, SLAM (Simultaneous localization and mapping) is considered as
    • SLAM = Odometry + Loop closure
  • In this repository, the state to be optimized only has robot poses; that is pose-graph SLAM.

Overview of the PyICP SLAM

  • The pipeline of the PyICP SLAM is composed of three parts
    1. Odometry: ICP (iterative closest point)
      • In here, Point-to-point and frame-to-frame (i.e., no local mapping)
    2. Loop detection: Scan Context (IROS 18)
      • Reverse loop detection is supported.
    3. Back-end (graph optimizer): miniSAM
      • Python API

Features

  • Thanks to the Scan Context, reverse loops can be successfully closed.

    • E.g., see KITTI 14 at Results section below.
  • Time costs

    • (Here, no accelerated and naive) ICP gets 7-10 Hz for randomly downsampled points (7000 points)
    • (Here, no accelerated and naive) Scan Context gets 1-2 Hz (when 10 ringkey candidates).
    • miniSAM is enough fast.

How to use

Just run

$ python3 main_icp_slam.py

The details of parameters are eaily found in the argparser in that .py file.

Results (KITTI dataset)

Those results are produced under the same parameter conditions:

  • ICP used random downsampling, 7000 points.
  • Scan Context's parameters:
    • Ring: 20, Sector: 60
    • The number of ringkey candidates: 30
    • Correct Loop threshold: 0.17 for 09, 0.15 for 14, and 0.11 for all others

Results (left to right):

  • 00 (loop), 01, 02 (loop), 03

  • 04, 05 (loop), 06 (loop), 09 (loop)

  • 10, 11, 12, 13 (loop)

  • 14 (loop), 15 (loop), 16 (loop), 17

  • 18 (loop), 20

Some of the results are good, and some of them are not enough. Those results are for the study to understand when is the algorithm works or not.

Findings

Author

  Giseop Kim ([email protected])

Contirbutors

  @JustWon
    - Supports Pangolin-based point cloud visualization along the SLAM poses.
    - Go to https://github.com/JustWon/PyICP-SLAM

More Repositories

1

removert

Remove then revert (IROS 2020)
C++
510
star
2

SC-LIO-SAM

LiDAR-inertial SLAM: Scan Context + LIO-SAM
C++
497
star
3

lt-mapper

A Modular Framework for LiDAR-based Lifelong Mapping
C++
354
star
4

SC-A-LOAM

Robust LiDAR SLAM with a versatile plug-and-play loop closing and pose-graph optimization.
C++
316
star
5

navtech-radar-slam

Radar SLAM: yeti radar odometry + scan context
C++
115
star
6

modern-slam-tutorial-python

learning and feeling SLAM together with hands-on-experiments
Jupyter Notebook
71
star
7

IROS20-SLAM-papers

A personal list-up
HTML
52
star
8

symforce-tutorials

Learn symforce together :)
Jupyter Notebook
22
star
9

multi-robot-isam-example

An example about using anchor node for multi-robot and -session slam
C++
20
star
10

scancontext-pybind

LiDAR place recognition. For fast python support.
C++
19
star
11

mini-kitti-publisher

A very simple KITTI odometry dataset's images and velodyne points publisher
Python
17
star
12

scancontext

backup of irapkaist/scancontext
C++
16
star
13

Daily-Arxiv-Tracking-Automation

Automatically download the all pdfs from a daily rss
Python
15
star
14

semantickitti-matlab

Some useful tools written in Matlab for Semantic KITTI
MATLAB
14
star
15

mini-pyllio

A very minimal but working Python only implementation for loosely-coupled LiDAR-Inertial odometry for education purpose.
Python
14
star
16

toy-robust-backend-slam

Toy DCS
C++
13
star
17

SC-LeGO-LOAM

backup of irapkaist/SC-LeGO-LOAM
C++
12
star
18

ceres-tutorials

personal practice
C++
12
star
19

kitti-global-map-making

global map construction for kitti360 dataset (can be used for the original kitti)
MATLAB
11
star
20

depth-mapping-matlab

Global 3D Map Construction using RTAB-Map iPhone/iPad app data
MATLAB
11
star
21

nano-pgo

For an education purpose, from-scratch, single-file, python-only pose-graph optimization implementation
Python
10
star
22

thrust_examples

Hands-on Learning about cpu vs gpu
Cuda
6
star
23

fit-plane-open3d

example with real world lidar scan
Python
6
star
24

cpp-profiling-practice

for education.
C++
5
star
25

scancontext-cpp

Scan Context C++ for LiDAR Place Recognition
C++
5
star
26

control_toy_practices

for beginners
Python
4
star
27

pytorch-solver-tutorial

pytorch-based optimization examples for traditional problems
Jupyter Notebook
4
star
28

my-interest-cvpr21-paper-listup

4
star
29

gisbi-kim.github.io

blog
CSS
4
star
30

pypose-practice

pypose practices
Python
4
star
31

ComplexUrbanH3DS

To make virtual horizontal 3D scans (so H3DS) from the original Complex Urbans Dataset's point cloud, which was made from 2D push-broom lidars.
MATLAB
4
star
32

cpp-design-pattern

C++
4
star
33

numerical_programming_lectures

tbb, gpu things for robotics
C++
4
star
34

mulran-evaluation

MATLAB
3
star
35

scan_saver

input: rosbag (topics), output: custom .bin file per scan
C++
3
star
36

kitti_making_lidar_gt_pose

head to tail based lidar gt pose making code
MATLAB
3
star
37

nla_study

A study on numerical linear algebra (NLA)
Python
2
star
38

laptop-slam

Goal: 1. using laptop's default camera, 2. using python-only, 3. do v-SLAM
Python
2
star
39

OusterRangeImageMatlab

OusterRangeImageMatlab
MATLAB
2
star
40

scancontext_tro

scancontext++ (TRO 2022) codes
MATLAB
1
star
41

my-leet-codes

C++
1
star
42

ipad_data_processsing

some utils
Python
1
star
43

preprocessing-pointnetvlad

Python
1
star
44

yeti_odom_drawer

MATLAB
1
star
45

iccv23-title-abstracts-db

to easily skim iccv23
1
star
46

iros23-paper-title-and-abstracts

parser pythonc code and sqlite db file
HTML
1
star
47

cv-gskim

1 page cv
TeX
1
star
48

ce545-taxi

course
Jupyter Notebook
1
star
49

mixRobust_distributed_mapper

MATLAB
1
star
50

cpp_study

A personal study backup
C++
1
star
51

hands_on_numerical_opt

for practice
1
star
52

arxiv_gpt_korean_translator

using openai api
Python
1
star