Git Product home page Git Product logo

pole-localization's Introduction

Online Range Image-based Pole Extractor for Long-term LiDAR Localization in Urban Environments

This repo contains the code for our ECMR2021 paper "Online Range Image-based Pole Extractor for Long-term LiDAR Localization in Urban Environments" and RAS paper "Online Pole Segmentation on Range Images for Long-term LiDAR Localization in Urban Environments".

Developed by Hao Dong and Xieyuanli Chen.

Overview of our approach. A. we project the LiDAR point cloud into a range image and B. extract poles in the image. C. based on the extracted poles, we then build a global pole map of the environment. D. we finally propose a pole-based observation model for MCL to localize the robot in the map.

Publication

If you use our implementation in your academic work, please cite the corresponding conference paper and journal paper:

@InProceedings{dong2021ecmr,
author = {H. Dong and X. Chen and C. Stachniss},
title = {{Online Range Image-based Pole Extractor for Long-term LiDAR Localization in Urban Environments}},
booktitle = {Proceedings of the European Conference on Mobile Robots (ECMR)},
year = {2021}
}
@article{dong2023jras,
title = {Online pole segmentation on range images for long-term LiDAR localization in urban environments},
journal = {Robotics and Autonomous Systems},
volume ={159},
pages = {104283},
year = {2023},
issn = {0921-8890},
doi = {https://doi.org/10.1016/j.robot.2022.104283},
author = {H. Dong and X. Chen and S. S{\"a}rkk{\"a} and C. Stachniss}
}

Dependencies

The code was tested with Ubuntu 20.04 with its standard python version 3.8.

  • Python dependencies

    pip install numpy matplotlib open3d-python progressbar2 pyquaternion transforms3d scipy scikit-image networkx numba arrow pykitti

How to use

NCLT Dataset

Download the dataset and extract the data in the /nclt/data folder following the recommended data structure, and then run:

python src/ncltpoles.py

KITTI Dataset

Download the KITTI raw data 2011_09_26_drive_0009 by navigating to the /kitti/raw_data folder and run:

./kitti_downloader.sh

then run:

python src/kittipoles.py

MulRan Dataset

Download the KAIST 01 and KAIST 02 dataset and extract the data in the /mulran/data folder following the recommended data structure, and then run:

python src/mulranpoles.py

Pole Dataset

The pole datasets are stored in the /data/pole-dataset/KITTI and /data/pole-dataset/NCLT folders. The data are stored in .npz format with the shape N*2. Each row represents the x and y position of one pole. You can evaluate the pole extraction with the groud-truth pole map by running:

python src/test_match.py

Pole Learning

 python src/ncltpoles_learning.py

License

Copyright 2021, Hao Dong, Xieyuanli Chen, Cyrill Stachniss, Photogrammetry and Robotics Lab, University of Bonn.

This project is free software made available under the MIT License. For details see the LICENSE file.

Acknowledgement

Many thanks to the excellent open-source projects polex and SalsaNext.

pole-localization's People

Contributors

chen-xieyuanli avatar donghao51 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pole-localization's Issues

Question about util.project_xy()

Hi,

First, Thank you for the excellent work!

I've been trying to understand the work done in src/ncltpoles

util.poject_xy()
I have a question regarding the function util.project_xy(). I don't really understand what transformation it's achieving ?

ncltpoles.save_local_maps()
Also, in the function ncltpoles.save_local_maps(), I don't understand why we need to do

T_w_mc = util.project_xy(session.T_w_r_odo_velo[imid[i]].dot(T_r_mc))

Couldn't we simply have done

T_w_mc = session.T_w_r_odo_velo[imid[i]].dot(T_r_mc) ?

And why T_m_r couldn't simply be T_m_r = T_m_mc.dot(T_mc_r) ?

Thanks,

use own point cloud dataset

If I want to use my own point cloud dataset, do I need to convert them to Kitti data format or change the code?

About save_global_map

Hi @donghao51,

Thanks for your fantastic work! While reading your code, I found pole-based localization for each session is conducted on the saved global map. However, It seems like the global map is generated from poles extracted from all sessions by the function save_global_map. Whether my understanding is right? If so, why the global map is not generated only by historical sessions instead of all sessions for global localization?

Best wishes!

About Range Projection & Experiment Settings

Hi. I am recently attempting to use and re-produce some of the functionalities included in the paper, during which, I encounter the following problems:

  1. in range projection: what if several points (in the raw point cloud) are mapped to the same pixel (in the range image), which is rather likely to happen, however carefully the hyper-parameters are chosen? It seems that only one of these points are preserved ... OR otherwise, how do you handle such cases?
  2. in clustering: I notice that numba@jit is used to accelerate the code execution. However, to the best of my knowledge, numpy.delete() is not supported by the numba library. What is your comments?
  3. about the experiemnt settings: in section IV-C, the runtime of the proposed method, using CPU only, is "0.09 s for pole extraction" and "less than 0.1 s" for all MCL steps. I am curious about the experiment settings (e.g. CPU type name, RAM size, etc.).

Thanks for you time and looking forward to your reply ^_^ Nice day!

Generate poles range image

Hi ,
Thanks for the amazing work.
I wonder if there is a way to generate a range image containing only the poles from a pcd file ?
Thanks.
Kind regards,
Bruno

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.