Skip to content

Ikhyeon-Cho/FastDEM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

100 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FastDEM

Ultra-fast elevation mapping on embedded robots — 100+ Hz on Jetson Orin

ROS1 · ROS2 · C++ Library

FastDEM real-time elevation mapping with LiDAR point cloud FastDEM elevation mapping with RGB-D camera FastDEM global elevation mapping in outdoor environment

FastDEM is a lightweight C++17 library that builds dense elevation maps from LiDAR and RGB-D point clouds in real time, without GPU. It supports both robot-centric local mapping and fixed-origin global mapping, with built-in post-processing for terrain analysis.

See also:

  • LeSTA — Self-supervised traversability learning for mobile robots (RA-L 2024)

Features

  • Fast — 100+ Hz on Jetson Orin. ~10ms per scan, on CPU alone.
  • Lightweight — Just Eigen at core. No PCL, OpenCV, or CUDA required.
  • ROS-agnostic — Clean C++ API, with optional ROS support.
  • Sensor-Aware — Physics-based sensor models for LiDAR and RGB-D range measurements.
  • Multiple Estimators — Kalman Filter (parametric), P² Quantile estimator (non-parametric).
  • Local + Global Mapping — Robot-centric or map-centric terrain mapping.
  • Post-processing — Raycasting, Uncertainty fusion, Inpainting, Feature extraction, and more.

Performance

The mapping pipeline runs at ~10 ms on embedded CPUs — fast enough to leave ample room for post-processing.

FastDEM benchmark on Jetson Orin

Measured with Velodyne VLP-16 (~30K pts/scan) · 15×15 m map at 0.1 m resolution


Dependencies

  • Eigen3, yaml-cpp, spdlog
  • nanoGrid, nanoPCL — bundled automatically

Start with ROS1

Prerequisites: Ubuntu 20.04, ROS Noetic

# Dependencies sudo apt install libeigen3-dev libyaml-cpp-dev libspdlog-dev sudo apt install ros-noetic-tf2-eigen ros-noetic-grid-map-msgs # Clone and build cd ~/catkin_ws/src git clone https://github.com/Ikhyeon-Cho/FastDEM.git catkin build fastdem_ros # Run (add global_mapping:=true for map-centric mode) roslaunch fastdem_ros run.launch rviz:=true

Configuration: ros1/config/local_mapping.yaml · ros1/config/global_mapping.yaml


Start with ROS2

Prerequisites: Ubuntu 22.04, ROS2 Humble

Other ROS2 distributions may also work but are not yet tested.

# Dependencies sudo apt install libeigen3-dev libyaml-cpp-dev libspdlog-dev sudo apt install ros-humble-tf2-eigen ros-humble-grid-map-msgs # Clone and build cd ~/ros2_ws/src git clone https://github.com/Ikhyeon-Cho/FastDEM.git colcon build --packages-up-to fastdem_ros2 # Run (add global_mapping:=true for map-centric mode) ros2 launch fastdem_ros2 run.launch.py rviz:=true

Configuration: ros2/config/local_mapping.yaml · ros2/config/global_mapping.yaml


Use FastDEM as a C++ Library

FastDEM can be used without ROS as a standalone C++ library.

# Dependencies sudo apt install libeigen3-dev libyaml-cpp-dev libspdlog-dev # Clone and build git clone https://github.com/Ikhyeon-Cho/FastDEM.git cd FastDEM/fastdem mkdir build && cd build cmake .. make -j$(nproc) sudo make install
#include <fastdem/fastdem.hpp> fastdem::ElevationMap map; map.setGeometry(15.0, 15.0, 0.1); // width, height, resolution [m] auto cfg = fastdem::loadConfig("config/default.yaml"); fastdem::FastDEM mapper(map, cfg); // With explicit transforms mapper.integrate(cloud, T_base_sensor, T_world_base);

Citation

FastDEM was originally developed for the following research:

'Learning Self-supervised Traversability with Navigation Experiences of Mobile Robots' IEEE Robotics and Automation Letters (RA-L), 2024

@article{cho2024learning, title={Learning Self-Supervised Traversability With Navigation Experiences of Mobile Robots: A Risk-Aware Self-Training Approach}, author={Cho, Ikhyeon and Chung, Woojin}, journal={IEEE Robotics and Automation Letters}, year={2024}, volume={9}, number={5}, pages={4122-4129}, doi={10.1109/LRA.2024.3376148} }

Contact: ikhyeon.c@gmail.com

BSD-3-Clause License © Ikhyeon Cho

About

Real-time 2.5D elevation mapping library for mobile robot navigation on embedded CPUs — C++17, ROS1/ROS2

Topics

Resources

License

Stars

Watchers

Forks

Contributors