Skip to the lesson
FixTheRobot Explore Robotics / Linear Algebra / M10 Lie Groups and Advanced Robotics Mathematics / M10-T7

Linear Algebra · Theory · M10

M10-T7 — Perturbations on Manifolds

You cannot add an error to a rotation, but you can multiply by a small one. Left or right, the choice defines what the error vector, its covariance and the Jacobians mean.

  • Lesson 7 of 8
  • Module 10: Lie Groups and Advanced Robotics Mathematics
  • Lie groups and manifolds
  • About 9 minutes to read

Estimators correct their state by small amounts and describe their uncertainty by small errors. For rotations and poses, both must be expressed as multiplication by a small group element, close to the identity, written with the exponential map. The side on which you multiply is a convention with real consequences, which every textbook on estimation on manifolds chooses and states.

Learning objectives

After this lesson, you should be able to:

  • Define right (local) and left (global) perturbations and the corresponding error definitions.
  • Relate the two through the adjoint: δl = Rδ_r, and for SE(3) with Ad_T.
  • Apply the update rule x ← x ⊞ δ with the exponential map, and describe a covariance in the tangent space.
  • Choose a convention consistently across a code base and recognise the signs that indicate a mismatch.

Introduction and motivation

The error-state Kalman filter of a UAV estimates a small attitude error δθ, then corrects the attitude with R ← R exp([δθ]ₓ) and resets δθ to zero. A pose-graph library optimises x ⊞ δ. A colleague in the same company uses the opposite side convention, and their covariance matrices, though both “3 × 3 attitude covariances”, are related by a rotation. Without a clear convention the two cannot be fused, compared or plotted together.

The intuition

Take a pose R and nudge it slightly. You can describe the nudge from the point of view of the body (turn a little about the body's own axes: multiply on the right) or from the world (turn about the world axes: multiply on the left). The resulting pose is the same, but the vector δ describing it differs: it is expressed in different frames. Converting between the two descriptions is just rotating the vector with R, the adjoint.

Right and left perturbationsA pose R can be perturbed by a small rotation delta applied on its right, which rotates about the body axes, or on its left, which rotates about the world axes. The two descriptions of the same perturbed pose are linked by the rotation R: the left perturbation vector equals R times the right one.right (local) perturbationR′ = R exp([δ_r]ₓ)δ_r in the body frame left (global) perturbationR′ = exp([δ_l]ₓ) Rδ_l in the world frame Same pose R′ ⇒ δ_l = R δ_r (the adjoint of the rotation) Error of an estimate R̂ against truth R: δ = log( R̂ᵀ R ) (body) or log( R R̂ᵀ ) (world) Update in a filter or optimiser: R̂ ← R̂ exp([δ̂]ₓ) (right) or exp([δ̂]ₓ) R̂ (left)
Right (body-frame) versus left (world-frame) perturbations, linked by the adjoint.

Interactive figure. A box with a base rotation and a small perturbation applied on the left or on the right. The readout reports the equivalent perturbation vector in the other convention, obtained by rotating with the base rotation. This figure needs JavaScript to be interactive.

Choose a rotation vector ω (the base pose, pale box) and a small perturbation δ (solid box). Toggle between right and left perturbation: both boxes differ from the base by the same angle ‖δ‖, but in different directions. The readout shows the equivalent perturbation in the other convention, which is Rδ (or R⁻¹δ).

Geometric and physical interpretation

Geometric view. The tangent space at R is the set of velocities there. Writing a tangent vector as R[δ]ₓ (right) uses the body frame; as [δ]ₓR (left) uses the world frame. The two charts δ ↦ R exp(δ) and δ ↦ exp(δ)R are different local coordinates around R, equal to first order up to the linear map R. Physical view. A gyro measures rates in the body frame, so right perturbations match raw sensors; a global map correction (SLAM) shifts all poses about world axes, so left perturbations match corrections that come from the outside.

The mathematics

R, R̂
the true and estimated rotation.
δr, δl
right (body) and left (world) perturbation vectors.
⊞
the “plus” on a manifold: R ⊞ δ = R exp([δ]ₓ) (right) or exp([δ]ₓ) R (left).
Ad_R = R
the adjoint of SO(3): it converts perturbations between frames. For SE(3), Ad_T (6 × 6).

Perturbations

R′ = R exp([δr]ₓ)   (right, local)        R′ = exp([δl]ₓ) R   (left, global)

What it means. A small group element near the identity multiplies the pose on one side. The vector δ lives in the tangent space (Module 10) and has three components.

Relation between them

R exp([δ]ₓ) = exp([Rδ]ₓ) R,      δl = R δr      (SE(3):  δl = Ad_T δr)

What it means. Moving a small rotation from the right of R to the left rotates its vector by R (since R[δ]ₓRᵀ = [Rδ]ₓ). A covariance transforms as Σl = R Σr Rᵀ (Module 9).

Errors and updates

δr = log( R̂ᵀ R ),   δl = log( R R̂ᵀ );        update:  R̂ ← R̂ exp([δ̂]ₓ)  or  exp([δ̂]ₓ) R̂

What it means. Errors are logarithms of a relative rotation (small, so the first-order forms apply). Corrections are applied by multiplication, which keeps the estimate exactly on SO(3).

Right: R exp(δ) with δ in the body frame. Left: exp(δ) R with δ in the world frame. R exp(δ) = exp(Rδ) R, so δl = Rδ_r (Ad_T for poses). Updates multiply, errors are logarithms.

Step-by-step derivation: the adjoint identity, error definitions and covariance

  1. Conjugation of a skew matrix. For any rotation R and vector δ, R[δ]ₓRᵀ = [Rδ]ₓ. (Check: for any v, R(δ × Rᵀv) = Rδ × v, because rotation preserves the cross product.)
  2. Conjugation of the exponential. Since R(Σ [δ]ₓⁿ/n!)Rᵀ = Σ (R[δ]ₓRᵀ)ⁿ/n!, R exp([δ]ₓ)Rᵀ = exp([Rδ]ₓ). Multiply on the right by R: R exp([δ]ₓ) = exp([Rδ]ₓ) R. So a right perturbation δr equals a left perturbation δ_l = Rδ_r: the adjoint relation.
  3. Error definitions. If the true pose is R = R̂ exp([δ_r]ₓ), the error is δ_r = log(R̂ᵀR) (measured in the estimate's body frame). If R = exp([δ_l]ₓ)R̂, then δ_l = log(RR̂ᵀ) (measured in the world frame).
  4. Covariance in the tangent space. Define an uncertainty by R = R̂ exp([δ]ₓ) with δ ~ N(0, Σ_r). In the left convention δ_l = R̂δ_r has covariance Σ_l = R̂Σ_rR̂ᵀ (Module 9, covariance propagation). The two 3 × 3 matrices describe the same uncertainty in different frames.
  5. Updates. A filter computes a correction δ̂ from a measurement and applies R̂ ← R̂ exp([δ̂]ₓ) (right) or exp([δ̂]ₓ)R̂ (left). The result is exactly a rotation; the filter then resets the error state to zero (the nominal state absorbed the correction).
  6. SE(3). For poses T = (R, t) and a twist perturbation ξ, T exp(ξ^) = exp((Ad_T ξ)^) T. The 6 × 6 adjoint Ad_T = [[R, [t]ₓR], [0, R]] (previous lessons) converts a right twist (body) into a left twist (world); covariances transform as Ad Σ Adᵀ.
  7. Which convention? Right (local) perturbations give simpler Jacobians for body-frame measurements such as gyros and for chain compositions T_i⁻¹T_j; left (global) perturbations suit quantities defined in the world and are the convention of some libraries (Sophus offers both). Sola's micro Lie theory uses right (“local”) as the default.
  8. Consistency with the filter. The measurement Jacobians must use the same convention as the error state, and the reset step must use the matching correction; mixing them produces covariances that are rotated by R and a slowly diverging filter.

Smallness. All of this assumes ‖δ‖ is small enough for first-order approximations (previous lesson). After each update the perturbation is reabsorbed into the nominal state so δ stays small by construction, which is the central idea of error-state formulations.

A worked example: right, left and the adjoint

  • Setup. R = Rz(90°) (rotation vector (0, 0, π/2)) and a right perturbation δ_r = (0.1, 0, 0) (a 0.1 rad turn about the body x-axis).
  • Right result. R exp([δ_r]ₓ) = [[0, −0.995, 0.0998], [1, 0, 0], [0, 0.0998, 0.995]].
  • The same pose as a left perturbation. δ_l = Rδ_r = (0, 0.1, 0) (the body x-axis points along world y, so the world-axis turn is about y): exp([δ_l]ₓ)R gives exactly the same matrix ✓.
  • Error. If the truth is that matrix and the estimate is R̂ = Rz(90°), the body-frame error is δ_r = log(R̂ᵀR) = (0.1, 0, 0) and the world-frame error is δ_l = log(RR̂ᵀ) = (0, 0.1, 0): same angle 0.1 rad, different axes.
  • Covariance. A body-frame attitude covariance Σ_r = diag(0.04, 0.01, 0.01) (larger uncertainty about the body x-axis) becomes Σ_l = R Σ_r Rᵀ = diag(0.01, 0.04, 0.01) in world axes: the large uncertainty is now about world y.
  • Update. A filter estimates δ̂ = (0, 0, 0.02) in the body frame; R̂ ← R̂ exp([δ̂]ₓ) turns the estimate by 0.02 rad about the body z-axis (also world z here) and the error state is reset to zero.
  • A pose. For T with rotation Rz(90°) and translation (1, 2, 3), the right twist (1, 0, 0; 0, 0, 1) equals the left twist Ad_T ξ = (2, 0, 0; 0, 0, 1) (from the SE(3) lesson).

Robotics application

Error-state Kalman filters (UAVs). The state is a nominal attitude plus a small error δθ; corrections are right (or left) multiplications followed by reset; the covariance is 3 × 3 in the tangent space; see the error-state Kalman filter, quaternion-based orientation and IMU preintegration.

Pose-graph SLAM. The optimiser updates each pose by T ← T exp(δ^) (right) from the solution of the normal equations; the information matrix of an edge is expressed in the tangent space of the chosen convention; see pose graphs and nonlinear least squares.

LiDAR registration and evaluation. ICP increments are left or right twists; trajectory error metrics use log(T_gt⁻¹T_est) (right) or log(T_est T_gt⁻¹) (left), which differ; see ICP fundamentals.

Navigation and manipulators. Orientation tracking error in the body frame feeds a body-frame angular velocity command (right) while a world-frame target uses the left error (Module 8).

Engineering implications and limitations

Practical rules

  • Choose one convention and write it down. State it in the header of every estimator (error-state, Jacobians, covariance frame, reset). Use the same convention in plots and evaluation scripts.
  • Make the Jacobians match. Measurement and motion Jacobians must be derived for the same side as the error state; a mismatch rotates the covariance by R.
  • Convert covariances with the adjoint. Σl = R Σr Rᵀ (SO(3)) or Ad Σ Adᵀ (SE(3)) when exchanging data with a system that uses the other side.
  • Reset after every correction. After applying δ̂ to the nominal state, set the error state to zero and update the covariance by the reset Jacobian (≈ I − ½[δ̂]ₓ for small δ̂).
  • Keep δ small. Re-linearise (and reabsorb) every step so that first-order approximations hold.
  • Test with a known pose. Apply a perturbation both ways and check R exp(δ) = exp(Rδ)R in a unit test.

Limits

The tangent-space description is local. Large errors (beyond about 0.2–0.5 rad), rotations near π and non-Gaussian error distributions are not captured by a 3 × 3 covariance of a small δ; use sampling or robust methods and reset the linearisation point.

Common misconceptions

“Left and right perturbations are the same thing.”

They give the same set of poses but with different vectors: δl = Rδ_r. They coincide only for R = I (or when δ is along the rotation axis).

“The attitude error is the difference of the estimated and true rotation matrices.”

It is the logarithm of the relative rotation, R̂ᵀR or RR̂ᵀ, a small 3-vector.

“Quaternion attitude needs a 4 × 4 covariance.”

The error is a 3-vector, so the covariance is 3 × 3 in the tangent space; the quaternion's four components have one constraint.

“The convention does not matter if the code runs.”

It matters for covariances, Jacobians and corrections: a mismatch can produce a correct-looking filter that is rotated by R in its uncertainty and slowly diverges.

Engineering takeaways

  1. A perturbation is a small group element multiplying the pose: right R exp([δr]ₓ) (body frame), left exp([δl]ₓ)R (world frame).
  2. R exp([δ]ₓ) = exp([Rδ]ₓ)R, so δl = Rδ_r; for SE(3) use Ad_T; covariances map by R Σ Rᵀ or Ad Σ Adᵀ.
  3. Errors are logarithms of relative poses (R̂ᵀR or RR̂ᵀ); updates multiply by the exponential of the correction and then reset the error.
  4. Attitude covariances are 3 × 3 in the tangent space, whatever the storage representation.
  5. Fix a convention, derive all Jacobians for it, and convert with the adjoint when interfacing.

References and further reading

Primary papers and authoritative documentation.

Knowledge check

Three conceptual questions. Write an answer, then reveal the explanation. Your answers stay in your browser.

Question 1

R = Rz(90°) and a body-frame (right) perturbation δr = (0, 0.05, 0). What is the equivalent left perturbation?

Explanation

δl = Rδ_r = Rz(90°)(0, 0.05, 0) = (−0.05, 0, 0). The body y-axis points along world −x, so the world-axis turn is about −x.

Question 2

A body-frame attitude covariance is diag(0.09, 0.01, 0.01) and R = Rz(90°). Give the world-frame covariance.

Explanation

Σl = R Σr Rᵀ with R = Rz(90°): it swaps the x and y axes, so Σl = diag(0.01, 0.09, 0.01): the large uncertainty now lies about the world y-axis.

Question 3

A filter derives its measurement Jacobian for a left error state but applies the correction as a right multiplication. What symptom do you expect?

Explanation

The correction is rotated by R relative to what the covariance expects: states with large attitude changes converge slowly or oscillate, and the reported covariance is rotated relative to the real error (inconsistent NEES). The fix is to use the same side for the Jacobian, correction and reset.

What’s next

The final lesson asks how a function of a pose changes when the pose is perturbed in the tangent space. Those derivatives are the Jacobians on Lie groups, the objects that SLAM back ends and error-state filters are built from.

Next lesson

M10-T8 — Jacobians on Lie Groups

Define derivatives of functions of poses with respect to tangent perturbations and name the adjoint and the left and right Jacobians.

Nothing below is required to finish this lesson.