Visual walkthrough — IMU — integrated accelerometer + gyroscope
We are chasing ONE chain of reasoning, in plain words for now:
Read it left to right. Each word becomes a real symbol only in the step that earns it — the symbol-laden version of this same chain is the final summary figure, once every letter has been defined.
Step 1 — What a spring inside a box actually feels
WHAT. Picture a tiny ball (the proof mass) hanging on a spring inside a sealed box. The box is the accelerometer. The only thing the electronics can measure is how hard the spring pushes on the ball.
WHY. People say "accelerometer measures acceleration" — but the device has no window to the outside world. It cannot see the ground or the sky. All it knows is its own spring's squeeze. So before any maths, we must ask: what does that spring squeeze equal?
PICTURE. 
Two boxes. On the left, a box resting on a table: gravity (, plum arrow) pulls the ball down, so the spring must push up to hold it — the spring is compressed, the sensor reads a push. On the right, the same box in free-fall: nothing holds the ball, the spring is relaxed, the reading is zero.
Step 2 — Turning the spring squeeze into an equation
WHAT. Write Newton's law for the ball, then isolate the spring — because the spring is the only thing sensed.
WHY. We need a formula linking the sensed quantity () to the thing we actually want (true acceleration ). Newton is the bridge.
In an inertial frame the ball obeys:
Divide every term by and use :
Term by term of the boxed result: is what the chip reports; is the true acceleration we crave; is the gravity vector (points down, so points up). The equation says: the sensor reads true acceleration with gravity removed.
PICTURE. 
A number line of vertical acceleration. At rest (): (points up). In free-fall (): . This matches the two boxes of Step 1 exactly.
Step 3 — Why rotation needs a cross product
WHAT. Take a rigid body spinning about an axis. A point glued to it, at position from the centre, sweeps a circle. Its velocity is .
WHY. The gyro hands us (how fast the box spins, and about which axis). To turn "spin rate" into "how orientation changes", we need the rule that connects spinning to motion. That rule is the cross product.
PICTURE. 
The teal axis is . The orange arm is . The burnt-orange velocity arrow is tangent to the circle — perpendicular to the plane of and . Note the point on the axis (grey dot) with zero velocity.
Step 4 — Packing the cross product into a matrix
WHAT. Rewrite "" as a matrix multiplication.
WHY — and why not just cross each axis by hand? Orientation is a matrix : its three columns are the box's three body axes written in world coordinates. To spin the box we must rotate all three of those column-vectors, and each one changes as . We could compute three separate cross products every tick — but there is a cleaner truth. The operation "cross this vector with " is linear in the vector: it obeys . Every linear operation on 3-vectors is a single fixed matrix. So instead of three hand-crafted cross products, one matrix does the job to any and all vectors at once — and, crucially, one matrix multiplying another matrix ( or ) processes all three columns in a single standard operation your computer already knows how to do fast. That is why we package the cross product as the skew-symmetric matrix :
How to read it: it is all zeros on the diagonal (a vector crossed with itself is zero), and the off-diagonal entries are the components of arranged with alternating signs. Multiply this matrix by any vector and out pops exactly — try it on and you get , the cross product.
PICTURE. 
Left: the skew matrix with each entry labelled (, , …) and the zero diagonal highlighted. Right: the same matrix eating a vector and spitting out — proving the matrix is the cross product in disguise.
Step 5 — How orientation changes each tick (and why it must be renormalized)
WHAT. State the law that grows forward in time, its practical one-step update, and the clean-up it demands.
WHY. A gyro doesn't give orientation directly — it gives the rate of spin. We must integrate rate into orientation, just like integrating speed into distance. The rule is:
Term by term: means "how the orientation matrix changes per second". It equals the current orientation multiplied by the spin-matrix — geometrically, "keep the current attitude, then apply a little twist about ".
For a small time step , the exact update uses the matrix exponential; the tiny-step approximation is:
Term by term: is orientation now; is "no change"; is the small twist accumulated over one tick. Add them and you have next tick's orientation.
PICTURE. 
A box drawn at three successive ticks, each rotated a hair further about the teal axis. Between frames, the tiny orange twist arrow labelled shows the small rotation applied. The faint dashed box shows the slight stretch the approximation introduces before renormalization pulls it back. This repeated nudging is called strapdown mechanization — the sensor is "strapped down" to the body, so its axes rotate with it.
Step 6 — Rotate the push, then add gravity back
WHAT. Now that we know , take the accelerometer's (in body frame), rotate it to world, and add gravity to recover true world acceleration.
WHY. From Step 2, . But came out of the box in body coordinates, tilted every which way. We can only add the world gravity vector if both are in the same frame. So rotate first.
Here finally earns its subscript: it is true acceleration expressed in the world frame.
PICTURE. 
A tilted box senses (teal, along its own axes). swings it upright into world coordinates as (orange). Adding the plum gravity arrow cancels it exactly for a still sensor, giving — proving a stationary tilted box is correctly seen as not accelerating, once you rotate.
Step 7 — Two integrations to a dot on the map
WHAT. Integrate world acceleration once for velocity, again for position — earning the symbols and .
WHY. Acceleration is the change of velocity; velocity is the change of position. This is plain calculus — the two integrals stack the chain from "push" to "place".
Here is world-frame velocity and is world-frame position — the dot on the map.
PICTURE. 
Three stacked strips over time: constant (top), the ramping (its running area, middle), the curving (area of the ramp, bottom). Each strip is the accumulated area of the one above — integration made visible. This whole self-contained process, with no GPS, is Dead Reckoning.
Step 8 — The degenerate cases that ruin everything: bias drift
Every real sensor lies by a tiny constant amount, called a bias. There are two biases, and they poison the chain differently. We treat both.
8a — Accelerometer bias alone: quadratic position error
WHAT. Suppose the gyro is perfect but the accelerometer over-reports by a constant (m/s²), even when the box is dead still.
WHY. That fake acceleration flows straight into Step 7's two integrals — no tilt needed:
A constant integrated once is a ramp (); the ramp integrated again is a parabola (). So an accel bias alone already gives quadratic position blow-up.
8b — Gyro bias alone: cubic position error
WHAT. Now suppose the accelerometer is perfect but the gyro over-reports spin by a constant (rad/s), even when still.
WHY. Watch it cascade through Steps 5 → 6 → 7:
- Tilt error grows straight: (integrating a constant bias once).
- That tilt mis-points gravity. A frame tilted by angle leaks a horizontal slice of gravity equal to .
- Integrate the ramp once → velocity error . Integrate again → position error:
Why ? A ramp () integrated twice picks up two more powers of : . The cube is why "tiny" gyro biases become huge — worse than the accel bias's .
PICTURE. 
Three curves on one plot: the linear tilt error (), the quadratic accel-bias position error (), and the cubic gyro-tilt position error () rocketing highest. The cubic dwarfs the quadratic which dwarfs the linear — the visual reason an IMU alone is hopeless long-term, and must be fused with GPS or vision.
The one-picture summary

One flow, five boxes, now with every symbol earned: gyro rate → integrate (with renormalization) to orientation → rotate the accelerometer's and add gravity to get → integrate to → integrate to . Two drift gremlins sit underneath: the accel bias growing as , the gyro bias as .
Recall Feynman retelling — say it back in plain words
Imagine a sealed box that can't see outside. Inside is a ball on a spring: all it knows is how hard the spring pushes — that's the specific force. At rest the spring holds the ball against gravity, so it reads "up"; in free-fall it reads nothing. To turn that push into real acceleration you must add gravity back — but gravity points "down" in the world, and the box is tilted, so first you need to know which way it's facing. That's the gyro's job: it reports how fast the box spins, and spinning-times-position is a cross product, which — because that operation is linear — we pack into one little skew matrix that handles all three body axes at once. Nudge the orientation matrix by that twist every tick and you always know which way is up; but the tiny-step nudge slowly stretches the matrix, so you must snap it back to a clean rotation (renormalize) now and then. Now rotate the spring-push into world coordinates, add gravity — true acceleration. Integrate once for speed, once more for position: a dot on the map, built from nothing but spins and squeezes. The catch: sensors lie a little. A steady accelerometer bias integrates twice into an error growing like time squared; a whisper of gyro bias tilts your "up", and since a small tilt leaks gravity in proportion to the angle itself (), that ramp integrates twice into an error growing like time cubed — tiny at first, monstrous within a minute. So we lean on the IMU for split-seconds and let GPS or a camera keep it honest.
Recall Quick self-test
Why must gyro data be handled before accelerometer data? ::: Because needs and in the same frame; only the gyro-derived can rotate into the world so gravity can be added correctly. Why does gyro-bias position error grow as while accel-bias grows as ? ::: Accel bias is a constant fed straight into two integrals (). Gyro bias first integrates to a linear tilt (), which leaks a ramp of fake acceleration ( via ); integrating a ramp twice adds two more powers (). Why must the orientation matrix be renormalized? ::: The small-angle update drops higher-order terms of the exponential, so columns lose unit length and perpendicularity; repeated, warps vectors instead of purely rotating. Snap it back (Gram–Schmidt / quaternion normalization). What does a stationary tilted accelerometer read, and why isn't it "accelerating"? ::: It reads the tilted gravity reaction; rotating to world and adding cancels to — no acceleration once you rotate first.