Skip to content

hscoburg/openHDMap

Repository files navigation

openHDMap

High-resolution maps created from open data for self-localization of autonomous vehicles

openHDMap is a Qt-based desktop application for downloading, generating, visualizing, and exporting HD map data. The project combines a native GUI, geospatial processing, and a plugin architecture for download and export workflows.

Current release version: 0.1

Features

  • Interactive desktop GUI for map-centric workflows
  • Download plugins for supported regional open-data sources
  • Terrain, building, and vegetation processing based on GDAL, PDAL, VTK, and mlpack
  • Export plugins for point-cloud and mesh output
  • Automated test suite

Demo Videos

openHDMap GUI Walkthrough

Short demonstration of the openHDMap workflow and user interaction.

openHDMap.mp4

Direct link: video/openHDMap.mp4

Localization in a Map Generated with openHDMap

This video shows multiple tiles generated by openHDMap as point clouds and merged into one larger point-cloud map. Localization in this PCD map is performed with ICP.

  • Red arrow: ICP pose
  • Green arrow: RTK-GNSS pose
  • Yellow points: current lidar scan from an Ouster OS1-64

No additional preprocessing was applied to the lidar points, which is also apparent in the video. Further details about the localization process are provided in the paper.

Localization_openHDMap_short.mp4

Direct link: video/Localization_openHDMap.mp4

Project Layout

  • src/ - Application sources
  • src/core/ - Processing, mesh generation, parsing, worker pool, plugin handling
  • src/gui/ - Main windows and Qt widgets
  • src/plugins/ - Download and export plugins
  • src/utils/ - Dialogs, defaults, and shared helpers
  • resources/ - Icons, styles, and Qt resources
  • tests/ - Qt-based unit and integration tests
  • Dockerfile.22.04 - Ubuntu 22.04 container build
  • run_local.sh - Convenience launcher for local builds
  • run_docker_gui.sh - Interactive Docker launcher with host X11
  • run_docker_virtual.sh - Headless Docker validation launcher

Dependencies

The build uses CMake and C++17 and expects these libraries and tools to be available:

  • Qt5 Core, Widgets, Network, Gui, WebEngineWidgets, WebChannel, and Concurrent
  • GDAL
  • PDAL
  • PROJ
  • VTK
  • Eigen3
  • OpenMP
  • mlpack
  • Armadillo
  • Boost.Serialization
  • unzip
  • pkg-config
  • g++
  • Optional: Docker

If CMake cannot find Qt WebEngine, PDAL, or another dependency, point it at the correct installation with CMAKE_PREFIX_PATH or the package-specific *_DIR variable.

Ubuntu Example

sudo apt update
sudo apt install \
  cmake g++ pkg-config unzip \
  qtbase5-dev qt5-qmake qtbase5-dev-tools qtchooser qtwebengine5-dev \
  libgdal-dev libpdal-dev pdal libproj-dev libvtk9-dev libeigen3-dev \
  libmlpack-dev libarmadillo-dev libboost-serialization-dev

Clone

Clone the repository from GitHub and enter the project directory:

git clone https://github.com/hscoburg/openHDMap.git
cd openHDMap

Build

cmake -S . -B build
cmake --build build -j$(nproc)

Run Locally

Use the built binary directly:

./build/openHDMap

Or use the convenience script, which configures and builds automatically if needed:

./run_local.sh

You can override the build directory with OPENHDMAP_BUILD_DIR.

Test

Run the full test suite with:

ctest --test-dir build --output-on-failure

If you run the tests from VS Code installed via Snap, the CTest configuration clears GTK_PATH automatically to avoid incompatible GTK module injection.

Docker

Build the container image:

docker build -f Dockerfile.22.04 -t openhdmap:22.04 .

Smoke-test the startup path without relying on a host display:

./run_docker_virtual.sh --smoke-test
./run_docker_gui.sh --smoke-test

Run the application interactively with host X11 forwarding:

./run_docker_gui.sh

Run a headless validation on a virtual display:

./run_docker_virtual.sh

Notes:

  • run_docker_gui.sh is the user-facing mode for interactive use.
  • run_docker_virtual.sh is intended for smoke tests, CI, and headless validation. It starts the GUI on a virtual display, but it is not a practical end-user interaction mode.
  • Install xhost on the host for GUI Docker runs: sudo apt install x11-xserver-utils.
  • Docker builds and runs require access to the Docker daemon.
  • QtWebEngine inside the container uses Chromium with --no-sandbox because the application runs as root in the container.
  • Docker working data is stored persistently on the host in ~/openHDMap-data by default. Override this with OPENHDMAP_DATA_DIR if you want a different host-visible directory.

Plugin Architecture

The application discovers plugins at runtime through Qt plugin metadata and dedicated plugin directories below the executable.

Download plugins implement IDownloadPlugin and handle acquisition and conversion of source datasets such as DGM1 and LOD2.

Export plugins implement IExportPlugin and provide output formats for processed geometry and point-cloud data.

A more detailed overview is available in PLUGIN_ARCHITECTURE.md.

Current in-tree plugins include:

  • OpenDataBayernDownloadPlugin
  • MeshExportPlugin
  • PointCloudExportPlugin

Data Sources and Embedded Components

  • Open Data Bayern: regional geodata download source
  • OpenStreetMap: base map and georeferencing context
  • Leaflet.js: embedded map visualization in the GUI

Please review the individual upstream terms and licenses before redistributing downloaded datasets.

Coverage

If you configure the project with coverage enabled, the HTML report can be opened locally at build/coverage_report/index.html.

Historical example values from 2025-06-30:

  • Line coverage: 42.1%
  • Function coverage: 67.3%

Additional Documentation

  • CHANGELOG.md - release history
  • PLUGIN_ARCHITECTURE.md - detailed plugin architecture and extension guide
  • THIRD_PARTY_LICENSES.md - third-party software and data-source notices
  • DOCKER_GUI_USAGE.md - Docker GUI usage notes

Citation

If you use openHDMap in academic work, cite it as:

@inproceedings{brueckner2026openhdmap,
  author = {Br{\"u}ckner, C. and Patino-Studencki, L.},
  title = {openHDMap: High-Resolution Maps Created from Open Data for Self-Localization of Autonomous Vehicles},
  booktitle = {Proceedings of the 12th International Conference on Vehicle Technology and Intelligent Transport Systems},
  year = {2026},
  pages = {363--371},
  isbn = {978-989-758-831-0},
  issn = {2184-495X}
}

Contributing

Contributions are welcome through pull requests and issues.

License

openHDMap is licensed under the Apache License 2.0. See LICENSE for the project license and THIRD_PARTY_LICENSES.md for dependency and data-source notices.

About

High-resolution maps created from open data for self-localization of autonomous vehicle

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors