Skip to content

Design document: Marine TF frame hierarchy with vertical datum frames #8

Description

@rolker

Summary

Design and document a TF frame hierarchy for marine robotics that extends REP-105 with vertical datum frames specific to marine operations. This is a project-level spec to be implemented in mru_transform, with potential future formalization as a contribution to the marine robotics REP.

Motivation

Marine robots need multiple vertical reference surfaces that don't exist in standard REP-105:

  • Chart datum (MLLW, LAT, etc.) — the static reference for nautical charts and S57 data
  • Sea surface / tide — the dynamic water level, needed for navigation and depth interpretation
  • Ellipsoidal height — what GPS measures directly

Currently these relationships are handled ad-hoc. A well-defined TF tree makes vertical datum conversions available to any node via standard tf2 lookups, and establishes conventions that other marine ROS projects can adopt.

Proposed Frame Hierarchy

earth (ECEF)
└─ map  (ENU, WGS84 ellipsoid, established at first GPS fix)
   ├─ chart_datum   (static offset via VDatum/PROJ, position-dependent, optional)
   ├─ map_tide      (dynamic, current water surface in ellipsoidal height)
   └─ odom          (identity or localization correction)
       └─ base_link
           ├─ base_link_north_up   (position only, no orientation)
           ├─ base_link_level      (heading only, no pitch/roll)
           ├─ waterline            (static, from URDF)
           └─ [sensor frames]

Design Decisions

  1. map stays ellipsoidal — GPS positions work directly without VDatum. The system functions without datum conversion; chart_datum is additive/optional.

  2. chart_datum is a child of map — the map→chart_datum transform encodes the static VDatum offset (ellipsoid to chart datum) for the current geographic position. Updated spatially as the robot moves. Requires VDatum grids (PROJ + .GTX files) or NOAA VDatum API.

  3. map_tide is a child of map — water surface expressed in ellipsoidal height. Tide height above chart datum is recoverable via tf2 lookup from chart_datum to map_tide.

  4. Multiple strategies for deriving map_tide:

    • RTK averaging (current sea_surface_estimator approach) — averages base_link Z over time to filter out wave motion and estimate sea surface
    • MRU heave — if the MRU provides heave data, subtract heave from current position for an instantaneous sea surface estimate (no buffer delay)
    • Tidal model — predicted tide from a model or external source
    • The map_tide frame is the same regardless of derivation method; consumers don't need to know the source.
  5. waterline frame in URDF — resolves the existing TODO in sea_surface_estimator (the node currently averages base_link Z, but the robot isn't at the waterline).

  6. NED convention variants — suffixed frames (map_ned, base_link_fsd) connected by static rotations, per the marine REP discussion. Not detailed here; to be addressed separately.

Analogies to Aviation

Aviation Marine Nature
pressure_altitude (REP-105) map_tide Dynamic surface measurement
MSL / geoid (EGM96) chart_datum (MLLW/LAT) Static reference, position-dependent
WGS84 ellipsoid map Geodetic reference

REP-105 already suggests pressure_altitude as an extra intermediate frame for aerial vehicles. The marine vertical datum frames follow the same pattern.

Scope

  • Write the TF tree spec as a design document
  • Document frame semantics, update strategies, and conventions
  • Define the chart_datum node interface (links to mru_transform#7)
  • Document map_tide derivation strategies (RTK averaging, MRU heave, tidal model)
  • Document waterline frame convention

Out of scope (for now):

  • NED/FSD convention details
  • Formal REP contribution

Related


Authored-By: Claude Code Agent
Model: Claude Opus 4.6

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions