← All work

moos-map

2026

I built moos-map to create reliable map backgrounds for MOOS-IvP, an open-source robot-autonomy framework. It extends earlier community map-building tools with exact geographic cropping, compatible placement files, and automated verification, using the same builder behind a browser interface and command line. I packaged and published it on PyPI, the Python package index, for others to install and use.

The moos-map interface selecting a region of the Charles River

Why it needed to exist

The earlier tools provided valuable foundations, but AnaxiMap took more effort to use, and Raymond’s prototype hadn’t been distributed. I built moos-map to make that workflow straightforward to install and use, with a documented interface, reliable outputs, and a published package, alongside the technical improvements described below.

A map background needs both a TIFF image and geographic placement information for pMarineViewer, MOOS-IvP’s mission viewer. If the image and its recorded bounds disagree, vehicles appear in the wrong place even when the mission itself is correct.

HeroCC’s AnaxiMap already downloaded and stitched map tiles, offered imagery-source selection and tile reuse, and generated initial placement files. Raymond Turrisi’s prototype provided browser navigation, region selection, adjustable bounds and mission origin, place search, live export estimates, and TIFF export. I used those foundations to guide a new implementation, adding the cropping, compatibility, and reliability work described below.

Making it usable

I implemented exact geographic cropping so the image matches the requested coordinates rather than keeping whole-tile margins. The builder writes the strict placement-file format expected by current pMarineViewer, including the mission origin, and bundles it with the TIFF and optional copy-ready mission settings. It reopens the completed files to check their dimensions, bounds, origin, and consistency before reporting success.

I added support for maps crossing UTM coordinate zones, the geographic strips used by a common mapping system, or the equator. These maps work with current MOOS-IvP builds using the PROJ coordinate-conversion library. To check placement in the viewer, I compared a generated Charles River map with MIT’s existing background and verified that local and geographic vehicle positions aligned in pMarineViewer.

Downloads run concurrently, retry temporary failures, and validate each tile so incomplete imagery isn’t accepted as a finished map. Provider-specific caches keep different imagery sources from colliding. The builder stages and verifies the output before replacing an existing map, restoring the previous files if replacement fails.

For field setup without reliable internet, I added offline builds from local MBTiles archives, files of previously downloaded map tiles. I expanded the earlier planning tools with exact dimensions, resolution, tile counts, and placement estimates so users can check the size and position of a map before downloading it. The browser interface adds place-name autocomplete and ranked search results. It shares the command line’s crop calculations, cache, and checks so interactive and automated builds follow the same rules. Machine-readable output makes planning, building, and verification available to scripts and coding agents.

Publishing it for others

I documented the workflow and packaged moos-map for installation through PyPI. Automated tests cover the map geometry, downloads, caching, output files, interfaces, and failure recovery. Together with the viewer comparison, that gives other MOOS-IvP users a published application they can install, check, and build on.

← All work