Your Cart

The Go-To Supermarket for Affordable LiDAR Sensors!

Email:info@lidarstar.com

GNSS and lidar research rover parked beside a grassy bank

GNSS Altitude and LiDAR Map Height Disagree: Trace Ellipsoid and Geoid Conventions

When GNSS altitude and a LiDAR map disagree vertically, first determine what each height measures. A receiver may output height above a geoid, a ROS message may require height above an ellipsoid, and a local map may start at an arbitrary origin. These values cannot be compared directly just because all three are expressed in meters.

The practical GNSS ellipsoid geoid ROS altitude check is a provenance audit: follow one measurement from receiver output through the driver, coordinate conversion and estimator into the displayed map. Find the first undocumented change of reference. Keep this investigation separate from antenna mounting height and LiDAR extrinsic calibration until the coordinate conventions are understood.

This procedure is for integration diagnosis, not a survey certification or a promise of elevation accuracy. Use the receiver’s actual output manual and the installed driver revision. The linked ROS development branches are inspection references; confirm equivalent behavior in the version deployed on the robot before changing configuration.

GNSS antenna and lidar mounted at different heights on a stationary outdoor robot
Generated illustration of distinct sensor origins; no surveyed elevation or product performance is represented.

Name the height reference before calculating an offset

The NavSatFix definition specifies altitude above the WGS 84 ellipsoid in meters. A field called altitude in a receiver interface does not automatically meet that contract. Record its reference surface, reference point and units. Also record whether a receiver-side antenna correction or another application has already changed the reported point.

Geodetic notation distinguishes ellipsoidal height h, orthometric height H and geoid height N. The relationship h = H + N, explained in the NOAA NGS height reference discussion, gives the sign convention: recovering H requires subtracting N from h. That historical reference establishes the relationship, not a recommendation to use its old geoid model for a current project.

A local map’s z coordinate needs its own definition. It may measure displacement from a startup origin, a surveyed local origin or another documented reference. A point on the floor, the LiDAR optical origin and the GNSS antenna are different physical points. Write these choices down before subtracting any values. The robot sensor-fusion overview helps identify which component owns each output in a larger localization stack.

Read one receiver record all the way through the driver

Capture the original sentence or binary record together with the converted ROS fix. For an NMEA example, the Trimble R780 GGA reference identifies separate orthometric-height and geoid-separation fields. Treat this as that receiver family’s documented behavior; inspect the manual for your own model, output mode and firmware instead of extending it to every device that emits GGA.

In the inspected ROS 2 branch of nmea_navsat_driver, the GGA path adds parsed altitude and the field named mean_sea_level before populating ROS altitude. The same file’s RMC-only path supplies no altitude. Confirm the deployed parser’s field positions and blank-field behavior. A variable name is not enough evidence that a height was copied unchanged or corrected twice.

Build a small comparison sheet from the same measurement epoch. Include raw height, raw separation, their units, the expected operation and the published ROS result. Preserve negative signs and missing values. Do not replace an unavailable separation with zero merely to make arithmetic run. If the receiver already emits an ellipsoidal height through a different output, applying the GGA conversion to that value can introduce an erroneous second adjustment.

Keep native messages alongside the bag rather than reconstructing them from a screenshot. A formatted display may round values, hide the sign or show a different output reference. The measurement recording guide explains why original timing and data should remain available even when a later analysis uses a reduced export.

Check the map conversion and planar consumers separately

Next inspect the conversion from geographic coordinates into the robot’s world frame. The development navsat_transform documentation states that its ECEF conversions use ellipsoidal heights without geoid corrections. It also documents zero_altitude, which forces output odometry pose z to zero. Neither operation establishes the vertical datum of an independently built LiDAR map.

Save the initial datum, world-frame transform and launch parameters with the map. Determine whether the displayed z is absolute height or relative displacement after initialization. Do not infer that meaning from the frame name alone. If a fresh session starts at a different origin, two plots can disagree even when both correctly represent motion relative to their own starts.

The downstream estimator can introduce a separate planar constraint. The robot_localization state-estimation reference describes two_d_mode as constraining the three-dimensional variables to a planar model. Trace which topic is shown and which variables are actually fused before treating a flat output as evidence that the original height was corrected.

Frame orientation still matters. A tilted local map can make a vertical discrepancy vary with horizontal position. Establish its axes and origin before testing a constant correction. If the geographic track is also rotated horizontally, use the separate GNSS and LiDAR heading workflow. Changing a geoid correction will not resolve a heading-reference error.

Use a comparison worksheet with explicit unknowns

Stage Record Question to answer
Receiver Output type, firmware, height and separation fields Which surface and antenna point are represented?
Driver Version, parser path and published altitude Was a conversion performed once, twice or not at all?
World conversion Datum, transform and zero-altitude setting Is z absolute, relative or deliberately flattened?
LiDAR map Origin, axes, units and creation configuration Does its reference match the comparison value?
Independent reference Survey metadata and physical observed point Are frame, epoch and uncertainty compatible?

Keep unavailable metadata explicitly unknown. A consistent difference is a reason to investigate, not permission to label a map as mean sea level. Compare repeated observations at a stationary configuration before interpreting a moving run. Where the antenna and LiDAR are separated vertically, account for their measured rigid geometry independently of the reference-surface conversion.

Survey tripod and small lidar robot beside a simple ground reference marker
Generated illustration of an independent reference setup; the scene contains no survey result or accuracy claim.

Choose a compatible model rather than a convenient number

A geoid model has a geographic domain, version and compatible reference system. For example, the NGS GEOID18 technical details tie that model to specified NAD 83 realization and epoch inputs, and warn that other frames are not directly compatible. It is not a universal correction to apply to any WGS 84-labeled ROS altitude. Use an appropriate documented transformation chain for the actual project.

Record the model file or service version, input coordinates, reference frame, epoch where applicable and resulting separation. Retain enough information to reproduce the calculation later. A hard-coded constant may reproduce one display at one site while concealing the original mismatch. It should not become a calibration parameter simply because the robot is currently working in a small area.

After resolving reference conventions, check installation geometry using the extrinsic calibration workflow. Repeat the same comparison with the same physical point and unchanged reference data. Define acceptance criteria from the application and reference uncertainty; do not select a tolerance after seeing the residual.

Common integration questions

Does zero_altitude convert ellipsoid height to sea-level height?

No. It sets the output pose z to zero in the documented node behavior. That can support a deliberately planar pipeline, but it supplies neither a geoid model nor a vertical datum transformation.

Can I fix the discrepancy by moving the LiDAR transform vertically?

Only change that transform when installation measurements establish that it is wrong. A rigid sensor offset and a geodetic reference conversion answer different questions. Absorbing a datum mismatch into an extrinsic value makes later installation and mapping checks harder to interpret.

What makes a review request actionable?

Provide a short paired raw-and-ROS recording, the worksheet above, deployed configuration and map-origin metadata. Follow the reproducible support bundle procedure so the first unexplained conversion can be identified. A useful conclusion names the reference and operation that changed, with a repeatable comparison, instead of reporting only that two displayed numbers now match.

Leave a Reply

Your email address will not be published. Required fields are marked *

Product Enquiry