Ultra-fast elevation mapping on embedded robots — 100+ Hz on Jetson Orin
ROS1 · ROS2 · C++ Library
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)
- Fast — 100+ Hz on Jetson Orin. ~10ms per scan, on CPU alone.
- Lightweight — Only three system dependencies. No PCL, OpenCV, or GPU 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.
The mapping pipeline runs at ~10 ms on embedded CPUs — fast enough to leave ample room for post-processing.
Measured with Velodyne VLP-16 (~30K pts/scan) · 15×15 m map at 0.1 m resolution
- Eigen3 — Linear algebra
- yaml-cpp — Configuration parsing
- spdlog — Logging
Prerequisites: Ubuntu 20.04, ROS Noetic
# Dependencies
sudo apt install libeigen3-dev libyaml-cpp-dev libspdlog-dev
sudo apt install ros-noetic-grid-map-msgs ros-noetic-tf2-eigen
# 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:=trueConfiguration: ros1/config/local_mapping.yaml · ros1/config/global_mapping.yaml
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-grid-map-msgs ros-humble-tf2-eigen
# 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:=trueConfiguration: ros2/config/local_mapping.yaml · ros2/config/global_mapping.yaml
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);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


