acschaefer / polex

Long-Term Urban Vehicle Localization Using Pole Landmarks Extracted from 3-D Lidar Scans
MIT License
66 stars 30 forks source link

Long-Term Urban Vehicle Localization Using Pole Landmarks Extracted from 3-D Lidar Scans

This repository contains the Python code that accompanies our paper "Long-Term Urban Vehicle Localization Using Pole Landmarks Extracted from 3-D Lidar Scans" submitted to the European Conference on Mobile Robots. The implementation allows to

It provides the following three software modules.

Pole extractor

This module takes odometry and 3-D lidar scans accumulated over a short trajectory segment as input, searches for pole-like objects in the data, and outputs the parameters of the corresponding pole estimates.

Poles extracted from NCLT 3-D lidar data
Pole extraction from NCLT lidar data.

Poles extracted from KITTI 3-D lidar data
Pole extraction from KITTI lidar data.

Mapping module

Given a set of possibly overlapping local landmark maps generated by the pole extractor, this module resolves all ambiguities and creates a global reference map of pole landmarks.

Map of pole landmarks generated from NCLT dataset
NCLT landmark map.

Map of pole landmarks generated from KITTI dataset
KITTI landmark map with vehicle trajectory.

Localization module

On the basis of the global map, live odometry measurements, and pole landmark estimates, this module computes an estimate of the current vehicle pose using a particle filter.

Particle filter localization on NCLT dataset
Particle filter localization on NCLT. The red dots denote the particles, the blue dots denote the reference landmarks, ad the black crosses visualize the online landmarks.

Running the code

First of all, please make sure you are running Python 2.7.

While the pole extractor is represented by its own Python module poles.py, the mapping and localization module are implemented separately for NCLT (ncltpoles.py) and KITTI (kittipoles.py) due to the different representations of the datasets. For closer information about the workings of the implementation, please read the paper and follow the source code documentation.

In order to run the scripts with the experiments on NCLT (ncltpoles.py) and KITTI (kittipoles.py), please install the package manager pip via

sudo apt install python-pip python-tk

and use it to install the following Python packages:

pip install numpy matplotlib open3d-python progressbar pyquaternion transforms3d scipy scikit-image networkx psutil

Then, please check out the ray tracing repository and build it.

With these prerequisites, you are ready to run the experiments and the different modules.