Git Product home page Git Product logo

limo-velo's Introduction

LIMO-Velo (ROS2)

Contact me at [email protected] for questions or ideas.

A real-time LiDAR-Inertial SLAM for high velocities in spinning LiDARs.

Perfomance of the algorithm
Visualization of the algorithm with delta = 0.01 (100Hz)

Designed for easy modifying via modular and easy to understand code. Relying upon HKU-Mars's IKFoM and ikd-Tree open-source libraries. Based also on their FAST_LIO2.

Tested and made for racing at Formula Student Driverless

Common working speeds are 20m/s in straights and 100deg/s in the turns.

Perfomance of the algorithm
Tested on and made for Barcelona's own "Xaloc".

Centimeter-level accuracy is kept under racing speeds

Only algorithm that can deliver centimeter-level resolution on real-time. See the part of my thesis where I explain the algorithm and its results: LIMOVelo + Results.

Map comparison - Cones
Comparison of cones under racing speeds running all algorithms in real-time, except for LIO-SAM (-r 0.5). It failed otherwise.

Designed to be easily understood even by beginners

Developing an algorithm for a team requires the algorithm to be easy enough to understand being passed through generations.

Map comparison - Cones
LIMO-Velo's pipeline. Here are seen the different modules (blue), data (orange) and libraries (dark green).

LiDARs supported

  • Velodyne
  • Hesai
  • Ouster
  • Livox (check livox git branch)

Dependencies

  • Ubuntu (tested on 18.04, 20.04)
  • ROS (tested on Melodic, Noetic)
  • Eigen
  • PCL (tested on 1.8)

Newest additions

High Quality Maps

Sometimes a higher map quality is needed, now a new high_quality_publish parameter has been added to yield results like this below.

High quality cones
Sometimes Xaloc needs more definition to see if a cluster of points is actually a cone.

Work in progress (branch hdmaps)

Prelocalizing with a given HD map
Prelocalization with a previoulsy saved HD map. Still work in progress on the hdmaps branch. Official release will be in a couple of days.

Sample datasets

Xaloc's fast dataset
Xaloc's "fast" dataset. High velocity in the straights (~15m/s) and tight turns (~80deg/s).

Try xaloc.launch with Xaloc's own rosbags.

See Issue #10 to see other sample datasets found in the web. Don't hesitate to ask there for more data on specific scenarios/cases.

Using LIMO-Velo

0. Cloning the repository

When cloning the repository, we also need to clone the IKFoM and ikd-Tree submodules. Hence we will use the --recurse-submodules tag.

git clone --recurse-submodules https://github.com/Huguet57/LIMO-Velo.git

1. Compiling the code

Run colcon build to compile the code. For production, colcon build --cmake-args '-DCMAKE_BUILD_TYPE=Release' it will speed up x20 your code - you are welcome!

2. Running LIMO-Velo

To run LIMO-Velo, we can run a launch file ros2 launch limovelo ouster.launch.py (for Ouster in this case).

3. Changing parameters

To adapt LIMO-Velo to our own hardware infrastructure, a YAML file config/params.yaml is available and we need to change it to our own topic names and sensor specs.

Relevant parameters are:

  • real_time if you want to get real time experience.
  • mapping_offline is on an pre-alpha stage and it does not work 100% as it should of.
  • initialization which you can choose how you want the initialization of the pointcloud sizes (sizes =: deltas, in seconds).

4. Modifying the LiDAR driver to get true real-time performance

TODO - This section is intended to explain how to modify the LiDAR driver to increase its frequency by publishing parts of the pointcloud instead of waiting for all of it.

References

  • IKFoM: Iterated Kalman Filters on Manifolds
  • ikd-Tree: Incremental KD-Tree for Robotic Applications
  • FAST-LIO2: Fast and Direct LIO SLAM

TODO list

Fixes in progress

  • Work with 9-DOF IMUs
  • Saving and loading HD-Maps (needs 9-DOF done)
  • Adding GPS as extra input
  • Rethink mapping_offline (see Discussions)

Design choices

Fixes to investigate

  • Interpolation and smoothing of states when mapping offline
  • Erase unused (potentially dangerous) points in the map
  • Check if need to add point in map
  • Try to add a module for removing dynamic objects such as people or vehicles
  • Use UKF instead of EKF
  • Add vision buffer and ability to paint the map's points
  • Initialize IMU measurements

limo-velo's People

Contributors

ahuguetupc avatar huguet57 avatar bertaveira 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.