Code Monkey home page Code Monkey logo

pyicp-slam's Introduction

PyICP SLAM

Full-python LiDAR SLAM.

(if you find a C++ version of this repo, go to https://github.com/irapkaist/SC-LeGO-LOAM)

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

  • The Scan Context does not find loops well when there is a lane level change (i.e., KITTI 08, as below figures).

  • If the loop threshold is too low (0.07 in the below figure), no loops are detected and thus the odometry errors cannot be reduced.

  • If the loop threshold is high (0.20 in the below figure), false loops are detected and thus the graph optimization failed.

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

pyicp-slam's People

Contributors

irapkaist avatar

Stargazers

PEP 8 Speaks avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.