MetriCal Results JSON
The full JSON schema for MetriCal results can be found in the MetriCal Sensor Calibration Utilities repository on GitLab.
Serialized Results and Metrics
Every calibration outputs a comprehensive JSON of metrics, by default named results.json
. This
file contains:
- The optimized plex representing the calibrated system
- The optimized object space (with any updated spatial constraints for a given object space)
- Metrics derived over the dataset that was calibrated:
- Summary statistics for the adjustment
- Optimized object space features (e.g. 3D target or corner locations)
- Residual metrics for each observation used in the adjustment
Optimized Plex
The optimized Plex is a description of the now-calibrated System. This Plex is typically more "complete" and information-rich than the input Plex, since it is based off of the real data used to calibrate the System.
The optimized plex can be pulled out of the results.json
by using jq
:
jq .plex results.json > plex.json
Optimized Object Space
MetriCal will optimize over the object spaces used in every calibration. For example, If your object space consists of a checkerboard, MetriCal will directly estimate how flat (or not) the checkerboard actually is using the calibration data.
This comes in two forms in the results.json
file:
- An optimized object space definition that can be re-used in future calls to
metrical calibrate
. - A collection of optimized object space features (i.e. the actual 3D feature or point data) optimized using the calibration data.
The former can be extracted from the results.json
by using jq
:
jq .object_space results.json > object_space.json
Conversely, the latter is embedded in the metrics themselves:
jq .metrics.optimized_object_spaces results.json > optimized_object_spaces.json
The latter is interesting insofar as it can be plotted in 3D to visually see how object features such as targets or the positions of corner points were estimated:
{
"1c22b1c6-4d5a-4058-a71d-c9716a099d48": {
"ids": [40, 53, 34, 3, 43],
"xs": [0.3838, 0.7679, 0.6717, 0.2883, 0.6717],
"ys": [0.1917, 0.096, 0.2879, 0.5761, 0.192],
"zs": [0.00245, -0.00159, 0.00122, -0.00155, 0.00085]
}
}
The optimized object space features are in a JSON object where
- the keys are UUIDs for each object space
- the values are an object containing the feature identifiers (
ids
), as well as Cartesian coordinate data (xs
,ys
,zs
) for each feature
Summary Statistics
The main entrypoint into the metrics contained in the results.json
is the collection of summary
statistics. Of all the metrics output in a results.json
file, the Summary Statistics for a
calibration run the most risk of being misinterpreted. Always bear in mind that these figures
represent broad, global mathematical strokes, and should be interpreted holistically along with the
rest of the metrics of a calibration. These summary statistics can be extracted from the metrics
using jq
:
jq .metrics.summary_statistics results.json > summary_statistics.json
These are the same summary statistics that are output in the console logs.
Residual Metrics
Residual metrics are generated for each and every cost or observation added to the calibration. The most immediately familiar residual metric might be reprojection error, but similar metrics can be derived for other modalities and observations as well. A full list of these is linked below:
Metric Type | Produced by |
---|---|
Circle Misalignment | All Camera-LiDAR pairs |
Composed Relative Extrinsics Error | All Components and Objects |
Image Reprojection | All Cameras |
IMU Preintegration Error | All IMUs |
Interior Points to Plane Error | All Camera-LiDAR pairs |
Object Inertial Extrinsics Error | All IMUs |
Paired 3D Point Error | All LiDAR-LiDAR pairs |
Paired Plane Normal Error | All LiDAR-LiDAR pairs |