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 — 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.
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, yaml-cpp, spdlog
- nanoGrid, nanoPCL — bundled automatically
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:=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-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:=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


