rotation_translation_error — 3D registration_metrics op

• Data kinds: pose × pose → table

• Call: import fullseye as fs; fs.ledger.rotation_translation_error(gt, est) (to call the implementation directly, import ops3d; ops3d.rotation_translation_error(gt, est); from the registry, ops3d.get("rotation_translation_error"))

• Return value through the ledger: fullseye.ledger.rotation_translation_error(...) returns only the declared out type table (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.rotation_translation_error.raw(...) or call ops3d.rotation_translation_error directly.

• GPU: none (CPU reference implementation only)

Usage

The relative rotation error (geodesic angle [deg], RRE) and relative translation error (RTE) between two 4×4 transforms.

RRE = angle(gt_R^T · est_R) = atan2(|axial(dR − dRᵀ)|/2, (tr−1)/2) in degrees. For a rotation difference by angle θ about any axis, RRE=θ. RTE = ‖gt_t − est_t‖. → (rre_deg, rte). Non-4×4 raises ValueError (fail-closed).

• gt / est: 4×4 homogeneous transforms (top-left 3×3 is the rotation, right column the translation). Non-finite values give ValueError.

• rre_deg is in degrees in [0, 180] (atan2 taking sin from the skew-symmetric part and cos from the trace; arccos has a √ε floor near 1 and answered 0 for anything at or below 1e-6° -- fixed 2026-10-07). rte is the norm of the difference of the translation columns, in coordinate units. The translation column depends on the origin of the rotation, so for the same pose error, the farther the origin is from the object, the larger RTE comes out (compare only transforms that use the same frame convention).

• Orthogonality of the rotation matrix is not checked, so pass a correct transform built from the (R,t) output of gicp etc. with make_transform of the same module. Whereas inlier_ratio / registration_recall measure via residuals on the point cloud, this one measures the difference of the transform parameters themselves.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

Runnable examples (verified samples that actually call this op)

• reg_eval — py -3.11 examples_3d/reg_eval.py

Ops the type connects to (they accept table as input)

fuse_to_voxel · mesh_select_lod

Same category (registration_metrics)

inlier_ratio · rmse_inliers · registration_recall


*Provenance: ops3d.py — 3D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.