I made an app that can be useful if you are doing SLAM or Nav and regularly deal with 2D grid maps in the form of image + YAML. It allows you to easily view and compare such map files with correct geometry, align them, take measurements and more. I simply named it “maps
” . A detailed presentation of all features with videos and screenshots is in the README of the repo.
Since the app can be also compiled to web assembly, you can even try it directly in your browser with demo data and/or your own map files. A local installation is instead recommended for frequent or advanced use (see below).
Visualization
maps
can be used as a fast replacement for viewers that would be more tedious to set up or don’t understand the geometric properties. For example, you can simply call maps map1.yaml map2.yaml
in your terminal or open files from the GUI. From there, you can:
- View the maps in in a shared, metric coordinate system (Aligned view) or as images side-by-side (Tiles & Stacked views)
- Apply color or transparency for blending the layers or adjust the draw order.
- Use the measurement tool.
- Use the magnifying lens to inspect details of large maps by just hovering the mouse above the regions you are interested in.
- Enable value interpretation & colormapping (i.e.: preview what map_server + RViz would show).
- Create screenshots directly from the app.
Alignment
On top of pure visualization, you can also move map layers around freely for pose alignment. Use cases for this are for example different mapping runs or different floors, where the maps have different (random) origins. Aligning this can be a tricky task, especially with larger areas, so there are some features to make that easier:
- Fixed magnifying lenses can focus multiple areas simultaneously while moving.
- Keybindings: e.g. you can move and rotate the map with WASD/QE with configurable sensitivity.
- It’s optimized to render fast and in real-time, also with large images.
- The resulting poses can be saved to files.
- Session files can be saved that allow to pause work and reopen it later (not supported in web app).
General
Technical details: maps
is written in pure Rust and uses the egui library. egui’s immediate-mode paradigm and its graphics & wasm support was invaluable for the development of such a visualization-heavy app.
ROS: While it uses the ROS map file format, maps
does not require ROS. So whether you use ROS 1/2 or some other robot middleware doesn’t matter as long as you can provide files in that simple YAML+image format.
Native build support: any OS that supports Rust and egui should allow you to install it with cargo install maps
. So feel free to use Linux, macOS or Windows.
License: Apache 2.0