Reading and display settings

Appearance

System follows your operating system and keeps following it, even if you change it later. The header's sun, moon and monitor cycle the same three options.

Text size (%) 100%

Default. Scales every text size on the site, equations and tables included.

Reading width 70ch

How much text runs across one line of prose. Narrower is easier to track; wider fits more on screen.

Line spacing 1.6

The leading on body text. Taller leading helps a tired eye stay on the line.

Density

Padding and gaps around controls, cards, and tables — how much breathing room the layout leaves itself.

Motion

System follows your operating system. Reduced removes every transition on this site. Full keeps them on unless your system asks for less.

1

Through several keyframes: geodesics and B-splines

Smooth curves on SO(3)

🎯 Goal: see why chaining geodesics (slerps) through keyframes gives angular-velocity jumps, and how a cumulative B-spline built from Exp and Log gives a smooth curve instead.

Between two orientations the geodesic $R_0\operatorname{Exp}(t\operatorname{Log}(R_0^\top R_1))$ is the natural path (Part 6). Through many keyframes, chaining geodesics gives a curve whose angular velocity jumps at every keyframe: fine for a slideshow, bad for a camera path or for modelling a rolling-shutter sensor. The standard fix transfers B-splines to the group through relative rotations. A cumulative cubic B-spline on segment $i$ is

$$ R(u) = R_{i-1}\prod_{j=1}^{3}\operatorname{Exp}\!\bigl(\tilde B_j(u)\,\Omega_{i+j-1}\bigr), \qquad \Omega_k = \operatorname{Log}(R_{k-1}^\top R_k), $$
$$ \tilde B_1 = \tfrac16(5 + 3u - 3u^2 + u^3),\quad \tilde B_2 = \tfrac16(1 + 3u + 3u^2 - 2u^3),\quad \tilde B_3 = \tfrac16u^3. $$

Each factor is an honest rotation, so the curve never leaves $SO(3)$. It is twice continuously differentiable, which gives smooth angular velocity and acceleration, and it depends only on four neighbouring control rotations. That local support keeps continuous-time SLAM tractable. Unlike the geodesic chain, it only approaches the control points: it smooths them rather than passing through them.

Left: where each curve points the body's nose (its $x$ axis) on the unit sphere. Dots are the keyframes. Right: angular speed along each curve; the geodesic chain jumps at every keyframe. Drag to orbit.

2

Integrating angular velocity

Ṙ = R[ω]×, three ways

🎯 Goal: integrate a gyroscope's body rate on a coning motion with three schemes and see which stays on the group and which stays accurate.

A gyroscope samples $\omega_b$ at interval $\Delta t$, and attitude obeys $\dot R = R[\omega_b]_\times$ (Part 4). Three integrators:

$$ \underbrace{R \leftarrow R + R[\omega]_\times\Delta t}_{\text{additive Euler}},\qquad \underbrace{R\leftarrow \operatorname{GS}\bigl(R + R[\omega]_\times\Delta t\bigr)}_{\text{Euler, re-orthonormalized}},\qquad \underbrace{R\leftarrow R\operatorname{Exp}(\omega\,\Delta t)}_{\text{exponential}}. $$

Two separate errors are at play. The first is leaving the group. The additive step does it immediately, since $I+[\omega]_\times\Delta t$ is not orthogonal, and its determinant grows by a factor of $1+\lVert\omega\rVert^2\Delta t^2$ every step. Re-orthonormalizing hides the symptom. The exponential step never leaves $SO(3)$ at all. The second is time discretization. Every scheme that holds $\omega$ at its start-of-step value over the whole step is only first-order accurate in time, whatever it does to stay on the group. Sampling $\omega$ at the midpoint makes the exponential step second-order. The test motion is coning, where the body's axis sweeps a cone so $\omega_b$ keeps rotating: the classic stress test for strapdown integrators. On the log-scale plot, the three start-of-step schemes share a degree-level error (and additive Euler's determinant runs away), while the midpoint exponential is two orders of magnitude better. What remains of its error grows slowly and steadily. That is the coning error, the non-commutativity residue that high-rate inertial systems remove with dedicated multi-sample coning corrections.

$\log_{10}$ attitude error (degrees) against time for each integrator. The inset reports how far each result has left $SO(3)$.

3

Preintegrating a gyroscope

One relative rotation per keyframe pair, corrected for bias

🎯 Goal: compress hundreds of gyro samples between two camera frames into one relative rotation, and update it for a new bias estimate with a single Jacobian instead of re-integrating.

A visual-inertial system receives maybe 200 gyro samples between two camera frames. Integrating them from the current attitude estimate would force re-integration every time that estimate changes, which happens at every optimizer iteration. Preintegration (Lupton & Sukkarieh; Forster et al.) integrates the relative rotation instead, which does not depend on the start attitude at all:

$$ \Delta R_{ij} = \prod_{k=i}^{j-1}\operatorname{Exp}\bigl((\tilde\omega_k - b_g)\,\Delta t\bigr), \qquad R_j = R_i\,\Delta R_{ij}. $$

It still depends on the gyro bias $b_g$, which the estimator refines as it goes. Instead of re-integrating, push the bias change through the product with the right Jacobian and the adjoint, exactly as in Parts 8 and 9:

$$ \Delta R_{ij}(b_g + \delta b) \approx \Delta R_{ij}(b_g)\,\operatorname{Exp}\!\Bigl(\frac{\partial\Delta R_{ij}}{\partial b_g}\,\delta b\Bigr), \qquad \frac{\partial\Delta R_{ij}}{\partial b_g} = -\sum_{k=i}^{j-1}\Delta R_{k+1,j}^\top\,J_r\bigl((\tilde\omega_k - b_g)\Delta t\bigr)\,\Delta t. $$

The demo preintegrates a gyro stream with a bias guess, then treats the slider as the correction $\delta b$ the estimator later finds. It compares the first-order update with a full re-integration. For realistic corrections (a few degrees per second or less) the two agree to a small fraction of a degree, at the cost of one $3\times3$ matrix product instead of hundreds of Exp calls.

The body's nose over the preintegration window. Gray: truth. Magenta: preintegrated with the old bias guess. Blue: after the first-order bias correction. Dashed green: fully re-integrated with the corrected bias. Drag to orbit.

4

The whole toolkit on one page

What each part gave you

Compose in the group
Multiply poses; never add them (Parts 1–2). Subscripts cancel: $T_{AB}T_{BC} = T_{AC}$.
Compute in the tangent space
Steps, errors, velocities and noise are vectors in $\mathbb{R}^n$ (Parts 3–4).
Move between them
$\operatorname{Exp}$ and $\operatorname{Log}$, with their numerical branches (Parts 5, 7); $\oplus$ and $\ominus$ built on them (Part 3).
Store sensibly
Matrices or quaternions for state; rotation vectors for small quantities; Euler angles only for people (Part 6).
Change sides
The adjoint converts left and right perturbations, twists and covariances (Part 8).
Differentiate
Right and left Jacobians and the elementary table; always check numerically (Part 9).
Optimize
Gauss–Newton or LM in the tangent space, update with $\oplus$ (Part 10).
Be uncertain
Gaussians on $\varepsilon$, propagated with Ad and $J_r$ (Part 11).
Move in time
Geodesics, B-splines, exponential integration, preintegration (this part).

The formula sheet collects every formula for $SO(2)$, $SO(3)$, $SE(2)$ and $SE(3)$ on one page. To see these tools inside full estimators, continue with Nonlinear Optimization (localization, SLAM, pose graphs and 3D rotation estimation) and Multi-View Geometry (the five-point algorithm, PnP and bundle adjustment).

5

Further reading

6

Check your understanding

0/5 answered