• Stars
    star
    293
  • Rank 136,961 (Top 3 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 3 years ago
  • Updated over 2 years ago

Reviews

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

Repository Details

pyLiDAR-SLAM

This codebase proposes modular light python and pytorch implementations of several LiDAR Odometry methods, which can easily be evaluated and compared on a set of public Datasets.

It heavily relies on omegaconf and hydra, which allows us to easily test the different modules and parameters with few but structured configuration files.

This is a research project provided "as-is" without garanties, use at your own risk. It is actively used for Kitware Vision team internal research thus is likely to be heavily extended, rewritten (and hopefully improved) in a near future.

Overview

KITTI Sequence 00 with pyLiDAR-SLAM

pyLIDAR-SLAM is designed to be modular, multiple components are implemented at each stage of the pipeline. Its modularity can make it a bit complicated to use. We provide this wiki to help you navigate it. If you have any questions, do not hesitate raising issues.

The documentation is organised as follows:

  • INSTALLATION: Describes how to install pyLiDAR-SLAM and its different components
  • DATASETS: Describes the different datasets integrated in pyLiDAR-SLAM, and how to install them
  • TOOLBOX: Describes the contents of the toolbox and the different modules proposed
  • BENCHMARK: Describes the benchmarks supported in the Dataset /!\ Note: This section is still in construction

The goal for the future is to gradually add functionalities to pyLIDAR-SLAM (Loop Closure, Motion Segmentation, Multi-Sensors, etc...).

News

[08/10/2021]: We also introduce support for individual rosbags (Introducing naturally an overhead compared to using ROS directly, but provides the flexibility of pyLiDAR-SLAM)

[08/10/2021]: We release code for Loop Closure with pyLiDAR-SLAM accompanied with a simple PoseGraph Optimization.

[08/10/2021]: We release our new work on arXiv. It proposes a new state-of-the-art pure LiDAR odometry implemented in C++ (check the project main page). python wrappings are available, and it can be used with pyLiDAR-SLAM.

Installation

See the wiki page INSTALLATION for instruction to install the code base and the modules you are interested in.

DATASETS

pyLIDAR-SLAM incorporates different datasets, see DATASETS for installation and setup instructions for each of these datasets. Only the datasets implemented in pyLIDAR-SLAM are compatible with hydra's mode and the scripts run.py and train.py.

But you can define your own datasets by extending the class DatasetLoader.

New: We support individual rosbags (without requiring a complete ROS installation). See the minimal example for more details.

A Minimal Example

Download a rosbag (e.g. From Rosbag Cartographer): example_rosbag

Note: You need the rosbag python module installed to run this example (see INSTALLATION for instructions)

Launch the SLAM:

python3 run.py num_workers=1 /          # The number of process workers to load the dataset (should be at most 1 for a rosbag)
    slam/initialization=NI /            # The initialization considered (NI=No Initialization / CV=Constant Velocity, etc...)
    slam/preprocessing=grid_sample /    # Preprocessing on the point clouds
    slam/odometry=icp_odometry /        # The Odometry algorithm
    slam.odometry.viz_debug=True /      # Whether to launch the visualization of the odometry
    slam/loop_closure=none /            # The loop closure algorithm selected (none by default)
    slam/backend=none /                 # The backend algorithm (none by default)
    dataset=rosbag /                    # The dataset selected (a simple rosbag here)
    dataset.main_topic=horizontal_laser_3d /    # The pointcloud topic of the rosbag 
    dataset.accumulate_scans=True /             # Whether to accumulate multiple messages (a sensor can return multiple scans lines or an accumulation of scans) 
    dataset.file_path=<path_to_rosbag_dir>/b3-2016-04-05-15-51-36.bag / #  The path to the rosbag file 
    hydra.run.dir=.outputs/TEST_DOC   #  The log directory where the trajectory will be saved

This will output the trajectory, log files (including the full config) on disk at location .outputs/TEST_DOC.

Our minimal LiDAR Odometry, is actually a naรฏve baseline implementation, which is mostly designed and tested on driving datasets (see the KITTI benchmark). Thus in many cases it will fail, be imprecise or too slow.

We recommend you install the module pyct_icp from our recent work, which provides a much more versatile and precise LiDAR-Odometry.

See the wiki page INSTALLATION for more details on how to install the different modules. If you want to visualize in real time the quality of the SLAM, consider also installing the module pyviz3d.

Once pyct_icp is installed, you can modify the command line above:

python3 run.py num_workers=1 /          
    slam/initialization=NI /            
    slam/preprocessing=none /    
    slam/odometry=ct_icp_robust_shaky / # The CT-ICP algorithm for shaky robot sensor (here it is for a backpack) 
    slam.odometry.viz_debug=True /      
    slam/loop_closure=none /            
    slam/backend=none /                 
    dataset=rosbag /                    
    dataset.main_topic=horizontal_laser_3d /    
    dataset.accumulate_scans=True /             
    dataset.file_path=<path_to_rosbag_dir>/b3-2016-04-05-15-51-36.bag / 
    hydra.run.dir=.outputs/TEST_DOC   

It will launch pyct_icp on the same rosbag (running much faster than our python based odometry)

With pyviz3d you should see the following reconstruction (obtained by a backpack mounting the stairs of a museum):

Minimal Example

More advanced examples / Motivation

pyLiDAR-SLAM will progressively include more and more modules, to build more powerful and more accessible LiDAR odometries.

For a more detailed / advanced usage of the toolbox please refer to our documentation in the wiki HOME.

The motivation behind the toolbox, is really to compare different modules, hydra is very useful for this purpose.

For example the script below launches consecutively the pyct_icp and icp_odometry odometries on the same datasets.

python3 run.py -m /             # We specify the -m option to tell hydra to perform a sweep (or grid search on the given arguments)
    num_workers=1 /          
    slam/initialization=NI /            
    slam/preprocessing=none /    
    slam/odometry=ct_icp_robust_shaky, icp_odometry /   # The two parameters of the grid search: two different odometries
    slam.odometry.viz_debug=True /      
    slam/loop_closure=none /            
    slam/backend=none /                 
    dataset=rosbag /                    
    dataset.main_topic=horizontal_laser_3d /    
    dataset.accumulate_scans=True /             
    dataset.file_path=<path_to_rosbag_dir>/b3-2016-04-05-15-51-36.bag / 
    hydra.run.dir=.outputs/TEST_DOC   

Benchmarks

We use this functionality of pyLIDAR-SLAM to compare the performances of its different modules on different datasets. In Benchmark we present the results of pyLIDAR-SLAM on the most popular open-source datasets.

Note this work in still in construction, and we aim to improve it and make it more extensive in the future.

Research results

Small improvements will be regularly made to pyLiDAR-SLAM, However major changes / new modules will more likely be introduced along research articles (which we aim to integrate with this project in the future)

Please check RESEARCH to see the research papers associated to this work.

System Tested

OS CUDA pytorch python hydra
Ubuntu 18.04 10.2 1.7.1 3.8.8 1.0

Author

This is a work realised in the context of Pierre Dellenbach PhD thesis under supervision of Bastien Jacquet (Kitware), Jean-Emmanuel Deschaud & Franรงois Goulette (Mines ParisTech).

Cite

If you use this work for your research, consider citing:

@misc{dellenbach2021s,
      title={What's in My LiDAR Odometry Toolbox?},
      author={Pierre Dellenbach, 
      Jean-Emmanuel Deschaud, 
      Bastien Jacquet,
      Franรงois Goulette},
      year={2021},
}

More Repositories

1

CMake

Mirror of CMake upstream repository
C
5,967
star
2

VTK

Mirror of Visualization Toolkit repository
C++
2,250
star
3

vtk-js

Visualization Toolkit for the Web
JavaScript
1,160
star
4

ParaView

VTK-based Data Analysis and Visualization Application
C++
1,051
star
5

TeleSculptor

TeleSculptor: Aerial Photogrammetry Application powered by KWIVER
C++
584
star
6

trame

Trame lets you weave various components and technologies into a Web Application solely written in Python.
Python
336
star
7

VeloView

VeloView performs real-time visualization and easy processing of live captured 3D LiDAR data from Velodyne sensors (Alpha Primeโ„ข, Puckโ„ข, Ultra Puckโ„ข, Puck Hi-Resโ„ข, Alpha Puckโ„ข, Puck LITEโ„ข, HDL-32, HDL-64E). Runs on Windows, Linux and MacOS. This repository is a mirror of https://gitlab.kitware.com/LidarView/VeloView-Velodyne.
C++
304
star
8

LidarView

LidarView performs real-time reception, recording, visualization and processing of 3D LiDAR data. This repository is a mirror of https://gitlab.kitware.com/LidarView/lidarview.
C++
250
star
9

glance

Kitware Glance is an open-source web application developed at Kitware for visualizing volumetric images, molecular structures, geometric objects, and point clouds. It is part of the ParaView platform and can serve as a foundation for building custom web-based visualization applications involving ITK.js and VTK.js.
JavaScript
244
star
10

CDash

An open source, web-based software testing server
PHP
206
star
11

vtk-examples

This is the gh-pages branch of the VTK Examples Web Site and is set up to host web pages. โš ๏ธ DO NOT SUBMIT MERGE REQUESTS HERE. โš ๏ธ Merge requests must be submitted here: https://gitlab.kitware.com/vtk/vtk-examples
HTML
204
star
12

itk-vtk-viewer

2D / 3D web image, mesh, and point set viewer using itk-wasm and vtk.js
JavaScript
197
star
13

kwiver

Pulls Together Computer Vision Algorithms into Highly-Modular Run-Time Configurable Systems
C++
186
star
14

tangelo

A simple, quick, powerful web framework
JavaScript
185
star
15

VolView

Kitware VolView: an all-in-one radiological viewer!
TypeScript
164
star
16

paraviewweb

Web framework for building interactive visualization relying on VTK or ParaView to produce visualization data
JavaScript
157
star
17

Danesfield

Kitware's system for 3D building reconstruction for the IARPA CORE3D program
Python
150
star
18

candela

Visualization components for the web
JavaScript
116
star
19

visualizer

The ParaViewWeb Visualizer application which can be used standalone or as a component within another web context.
JavaScript
106
star
20

ipyvtklink

๐Ÿ”— minimalist ipywidget to interface with any Python vtkRenderWindow
Python
87
star
21

dive

Media annotation and analysis tools for web and desktop. Get started at https://viame.kitware.com
Vue
78
star
22

wslink

Python/JavaScript library for communicating over WebSocket
Python
77
star
23

SMQTK

Python toolkit for pluggable algorithms and data structures for multimedia-based machine learning.
Terra
74
star
24

react-vtk-js

Declarative library exposing vtk.js visualization pipeline as React components
TypeScript
62
star
25

fletch

Computer Vision Software Development Environment
C++
59
star
26

KWStyle

Kitware Style Checker
C++
52
star
27

SlicerSALT

An open-source, free comprehensive software that will allow biomedical scientists to precisely locate shape changes in their imaging studies. This software called Slicer Shape AnaLysis Toolbox (SlicerSALT), will enhance the intuitiveness and ease of use for such studies, as well as allow researchers to find shape changes with higher statistical power. Altogether this constitutes a crucial resource for the imaging field that will enable many and important new findings in biomedical imaging studies.
Python
51
star
28

HPCCloud

A Cloud/Web-Based Simulation Environment
JavaScript
49
star
29

COAT

Official Code for CVPR 2022 paper Cascade Transformers for End-to-End Person Search
Python
48
star
30

SMTK

Simulation Modeling Tool Kit
C++
44
star
31

minerva

Minerva: client/server/services for analysis and visualization
Python
36
star
32

vue-vtk-js

Vue.js based components for vtk.js
JavaScript
32
star
33

arctic-viewer

Standalone application useful to load and explore cool data products.
JavaScript
31
star
34

MEVID

Official Code for WACV 2023 paper MEVID: Multi-view Extended Videos with Identities for Video Person Re-Identification
Python
30
star
35

Danesfield-App

Web application for the Danesfield System
Python
30
star
36

MetaIO

MetaImage is the text-based tagged file format for medical images that resulted. We have now extended that file format to support a variety of objects that occur in medicine such a tubes (for vessels, needles, etc.), blobs (for arbitrary shaped objects), cubes, spheres, etc. The complete library is known at MetaIO.
C
30
star
37

paraview-lite

Lite Client to a ParaView server which rely on Web technologies
JavaScript
29
star
38

ParaViewTangoRecorder

An app for the Project Tango development kit to enable recording data for ParaView
Java
28
star
39

cumulus

A REST API for creating and using cloud clusters
Python
27
star
40

paraview-visualizer

Web frontend to ParaView based on trame
Python
25
star
41

VTK-m

Mirror of https://gitlab.kitware.com/vtk/vtk-m
C++
25
star
42

DaxToolkit

Data Analysis at Extreme
C++
24
star
43

qtextensions

An open source collection of utility classes and tools for Qt.
C++
24
star
44

py-web-vue

Build a 3D Web application using VTK or ParaView while only writing a Python script. This project aims to streamline the existing ParaViewWeb infrastructure into something that is simpler to use by lowering the entry point complexity.
JavaScript
24
star
45

iMSTK

Mirror of https://gitlab.kitware.com/iMSTK/iMSTK
C++
23
star
46

web-project-templates

This repository try to gather various web project templates based on vue, vtk.js, paraviewweb...
JavaScript
23
star
47

flow

Full data science workflows on the web
Python
20
star
48

kwcoco

Python
20
star
49

seaborn_altair

Seaborn-compatible API for interactive Vega-Lite plots via Altair
Jupyter Notebook
20
star
50

ParaViewCatalystExampleCode-MOVED-

Example problems and snippets of code to demonstrate ParaView's Catalyst.
C++
20
star
51

light-viz

Scientific Visualization application for tailored post-processing relying on a ParaViewWeb backend.
JavaScript
20
star
52

DIVA

DIVA project repository
C++
18
star
53

sprokit

Stream Processing ToolKit
C++
18
star
54

vtk-js-datasets

Sample dataset for vtk.js examples
HTML
18
star
55

HPCCloud-deploy

VM Deploy for HPC-Cloud
Python
17
star
56

simput

Input generator for simulation which can be used as a standalone application or as a component within another web context.
JavaScript
17
star
57

VisCL

Computer Vision GPU acceleration with OpenCL
C++
16
star
58

trame-vtk

VTK/ParaView widgets for trame
Python
16
star
59

cdash-docker

Shell
15
star
60

LookingGlassVTKModule

C++
15
star
61

vivia

C++
14
star
62

PCLPlugin

A plugin to enable PCL functionality in ParaView
C++
14
star
63

vtk-book

Markdown version of the Visualization Toolkit Book - An object Oriented Approach to 3D Graphics
Python
13
star
64

trame-cookiecutter

Cookie Cutter template for creating trame application/module
Python
12
star
65

Visomics

Visomics is an open-source tool for the exploration of biological omics data with a focus on genomics, proteomics, transcriptomics, and metabolomics.
C++
12
star
66

keypointgui

Provides a wxPython GUI to select image-point correspondences between images and fits a homography.
Python
12
star
67

paraviewweb-demo

Website and launcher for ParaViewWeb container demo
HTML
11
star
68

IGSTK

Image Guided Surgery Software Toolkit
C++
11
star
69

kwant

KWANT is an open source C++ toolkit for computing scores and other metrics for object tracking systems.
C++
11
star
70

cinema

ParaView Cinema
JavaScript
11
star
71

trame-tutorial

Tutorial material for trame.
Python
11
star
72

openview

C++
10
star
73

VERACore

Python
10
star
74

clique

Graph editor library/application
JavaScript
10
star
75

romanesco

Romanesco is now named Girder Worker
10
star
76

Remus

Remus is a remote mesh/model service framework.
C++
9
star
77

resonantgeo

Geospatial Vue components for Resonant
JavaScript
9
star
78

QtTesting

This is a mirror of the Gitlab repository. Please use Gitlab for PRs and Issues.
C++
9
star
79

generated-image-detection

Python
9
star
80

peacock

Trame based UI for INL peacock project.
Python
9
star
81

covid-19-vis

A visualization of some COVID-19 data
JavaScript
9
star
82

divvy

Divide your data analysis across tools and visualization for a better data insight
Python
9
star
83

BoneTextureExtension

Slicer extensions for computing feature maps of N-Dimensional images using well-known texture analysis methods.
Python
9
star
84

torch_liberator

Python
8
star
85

vtkWasmBenchmarks

A collection of VTK web-based benchmark applications
C++
8
star
86

vaui

Python
8
star
87

geo-trame

Python
8
star
88

super3d

C++
8
star
89

burn-out

A computer vision toolkit designed to generate pixel-level object classifications, and additionally perform other types of video filtering. Originally created to remove on-screen displays from video.
C++
8
star
90

vibrant

C++
7
star
91

resonantlab

Choose your own visualization adventure
JavaScript
7
star
92

SlideAtlas-Server

JavaScript
7
star
93

UPennContrast

UPenn ?
Vue
7
star
94

trame-simput

Simput implementation for trame
JavaScript
7
star
95

resonanthpc

HPC-Enabled Pre- and Post-Processing with Jupyter
Python
6
star
96

paraview-docs

ParaView documentation
JavaScript
6
star
97

paraviewweb-examples

JavaScript
6
star
98

SMQTK-Core

Provide the basic underpinnings for developing interfaces that have built-in implementation discovery and factory construction from configuration.
Python
6
star
99

ipyvtk

6
star
100

conceptual-modeler

Conceptual Modeler based on GemPy and trame
Python
6
star