MCPcopy Create free account
hub / github.com/brytsknguyen/slict

github.com/brytsknguyen/slict @slict.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release slict.1.0 ↗ · + Follow
214 symbols 405 edges 15 files 12 documented · 6% updated 2mo ago★ 3178 open issues

Browse by type

Functions 174 Types & classes 40
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Note: A new version of SLICT using B-spline-based formulation and real-time performance will be updated soon. Please find our publication at: Eigen Is All You Need: Efficient Lidar-Inertial Continuous-Time Odometry with Internal Association

SLICT: Multi-Input Multi-Scale Surfel-Based Lidar-Inertial Continuous-Time Odometry and Mapping

Introduction Video

<a href="https://youtu.be/mogIgBq97Hs" target="_blank">
<img src="https://github.com/brytsknguyen/slict/raw/slict.1.0/docs/thumbnail.png" width=80% />

Build & Run

Prerequisites

The software was developed on the following dependencies. Ubuntu 20.04 and ROS Noetic is a must for compiling SLICT due to UFOMap's minimum requirement. However a docker can be used to run SLICT with older OS versions. Please find the instructions below. - Ubuntu 20.04 with ROS Noetic

  • Ceres 2.1.0 (or older, if you use later versions you may encounter this error)

    bash git clone https://ceres-solver.googlesource.com/ceres-solver cd ceres-solver && git fetch --all --tags git checkout tags/2.1.0 mkdir build && cd build cmake .. && make -j$(nproc) sudo make install

  • One more package:

    sudo apt install ros-$ROS_DISTRO-tf2-sensor-msgs

Installation

SLICT uses UFOMap for global map management. It also supports epicyclic lidar (Livox). Thus, three packages need to be included in the catkin workspace:

  1. SLICT
  2. UFOMap (devel_surfel)
  3. Livox ROS driver (forked)

Please install all dependencies first. Afterwards, create a ros workspace, clone the packages to the workspace, and build by catkin build or catkin_make, for e.g.:

mkdir -p slict_ws/src
cd slict_ws/src
git clone https://github.com/brytsknguyen/slict
git clone https://github.com/brytsknguyen/ufomap && cd ufomap && git checkout devel_surfel && cd ..
git clone https://github.com/brytsknguyen/livox_ros_driver
cd .. && catkin build

The launch files for NTU VIRAL, Newer College, MCD VIRAL, and FusionPortable are provided under launch

Please raise an issue if you encounter any problem.

Example

After build step success, run following commands:

source devel/setup.zsh # Or make this command automatic by: echo "source /home/$USER/slict_ws/devel/setup.bash" >> ~/.bashrc"
roslaunch slict run_ntuviral.launch bag_file:=${PATH_TO_THE_NTU_BAG}
# Example: roslaunch slict run_ntuviral.launch bag_file:=/home/$USER/DATASETS/ntu_viral/eee_01/eee_01.bag

“”

Docker User

Precompiled Image

To use SLICT on any platform without compiling issues, we prepare a docker image with all things precomiled.

First, please install docker engine using the instructions at https://docs.docker.com/engine/install .

Once done, pull this repo into your workspace, then build (ignore error), and source devel/setup.sh to update the path to packages. For e.g.

mkdir catkin_ws/src
cd catkin_ws/src
git clone https://github.com/brytsknguyen/slict
catkin build                                        # there may be error
source ../devel/setup.bash                          # now SLICT's path is set

Now we can just call the scripts under docker for the corresponding dataset. For example you can run SLICT with an NTU VIRAL sequence by

roscd slict/docker && ./run_ntuviral.sh /path/to/dataset

You can also set a default /path/to/dataset in the script run_ntuviral.sh at this line.

To change between the sequence, simply change the bag_file argument in the launch file.

Recompile SLICT on local container

For advance users who wants to test your changes to SLICT on the local container, simply build one with the provided docker file:

roscd slict/docker && make build  # Container is named slict-noetic-focal

Afterwards, you can remove the repository reference brytsknguyen in the script to use the local container slict-noetic-focal

Learning SLAM?

SLICT was developed with intention to keep things educational.The whole backbone of the program is in the following steps:

“”

Parts of SLICT were used in the course "Optimization-Based Localization and Mapping" at Division of Robotics, Perception and Learning, KTH Royal Institute of Technology (http://kth-rpl.se/). The course is open to public at the following OBLAM Course Site.

“”

Publication

The details of SLICT are presented in the RA-L paper and further elaborated in the attached slides slides. Please cite this work if you find it useful:

@article{nguyen2023slict,
  title         = {SLICT: Multi-input Multi-scale Surfel-Based Lidar-Inertial Continuous-Time Odometry and Mapping},
  author        = {Nguyen, Thien-Minh and Duberg, Daniel and Jensfelt, Patric and Yuan, Shenghai and Xie, Lihua},
  journal       = {IEEE Robotics and Automation Letters},
  volume        = {8},
  number        = {4},
  pages         = {2102--2109},
  year          = {2023},
  publisher     = {IEEE}
}

“”

Core symbols most depended-on inside this repo

Shape

Method 139
Class 40
Function 35

Languages

C++100%

Modules by API surface

include/utility.h83 symbols
src/Estimator.cpp41 symbols
src/SensorSync.cpp16 symbols
src/MergeLidar.cpp14 symbols
include/PreintBase.h10 symbols
src/HesaiToOuster.cpp8 symbols
src/BPearlToOuster.cpp8 symbols
src/VelodyneToOuster.cpp5 symbols
src/M2DGRToOuster.cpp5 symbols
src/LivoxToOuster.cpp5 symbols
src/Livox2ToOuster.cpp5 symbols
include/PoseLocalParameterization.h5 symbols

For agents

$ claude mcp add slict \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page