Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Certifiable Rotation Averaging on SO(3)

This notebook solves a small graph of noncommuting three-dimensional rotations with GTSAM’s Burer–Monteiro Riemannian Staircase. It illustrates the same certifiable pipeline as the planar example while starting at rank three and rounding 3×33\times3 matrix variables.

Open In Colab

Noncommuting rotations with loop closures

The ground-truth orientations combine roll, pitch, and yaw, so they do not stay inside a common one-dimensional subgroup. Consecutive edges form a cycle and three additional loop closures constrain the graph. For every edge, the exact relative measurement is Rij=Ri⊤RjR_{ij}=R_i^\top R_j.

8 relative-rotation factors, 5 variables

Run and certify the rank-three relaxation

The local augmented-Lagrangian solver enforces the quadratic orthogonality constraints. The outer staircase verifies the SDP certificate and lifts the factorization rank only when necessary.

Certified: True
Final rank: 3
Certificate lower bound / minimum eigenvalue: -1.000e-03
Solver time: 0.001 s; notebook wall time: 0.001 s

Round, project, and fix the global gauge

The rank-three QCQP blocks store Xi=Ri⊤X_i=R_i^\top and share an O(3)O(3) gauge. We first choose a consistent determinant sign, transpose and project every block to the closest proper rotation with SVD, and then apply one common left rotation so the first estimate matches the first ground-truth orientation.

Maximum initial orientation error: 7.601 deg
Maximum rounded orientation error: 0.000e+00 deg
<Figure size 800x400 with 1 Axes>
<Figure size 1300x350 with 3 Axes>

The rank-three factorization is sufficient for this graph, and the certificate verifies the SDP relaxation at that level. Projection and gauge alignment convert the generic matrix-valued result into directly interpretable SO(3)SO(3) orientations.