This is a restructure/rewrite of the amazing work of Andreu Huguet. His original work canbe found at LIMO-Velo. More information on why this fork exists can be found in the Motivation section.
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.
Common working speeds are 20m/s in straights and 100deg/s in the turns.
Comparison of cones under racing speeds running all algorithms in real-time, except for LIO-SAM (-r 0.5). It failed otherwise.
The easiest way to experiment is through the Python interface.
For convinience and the ability to easily experiment with the algorithm both offline and in real time, a Python interface is provided. This interface is achived through the use of the pybind11
library. Essentially, the C++ code is compiled into a Python module that can be imported and used in Python, ensuring that the performance of the C++ code is maintained and the same behaviour is observed.
To install the Python interface, run the following commands:
pip install limovelo
The Python interface is designed to be as simple as possible. The following is an example of how to use the Python interface:
import limovelo
# Create the LIMO-Velo object
limo = limovelo.LIMO_Velo()
# Load the configuration file
limo.load_config("config.yaml")
# Load the LiDAR data
lidar_data = limovelo.LidarData()
lidar_data.load("lidar_data.bin")
# Load the IMU data
imu_data = limovelo.ImuData()
imu_data.load("imu_data.bin")
The code is made as a C++ library, and can be used as such. Refer to the ROS2 implementation for an example of how to use the library.
The ROS2 implementation is a wrapper around the C++ library, and is designed to be used in a ROS2 environment. The following is an example of how to use the ROS2 implementation:
colcon build
ros2 run limovelo limovelonode