3.5.11 · D2Guidance, Navigation & Control (GNC)

Visual walkthrough — Modified Rodrigues parameters — singularity-free, compact

2,857 words13 min readBack to topic

Step 1 — A rotation is just an axis and an angle

WHAT. Pick up any rigid object — a phone, a spacecraft. However you turn it from one pose to another, there is always a single straight line (the axis) you could have spun it around, and a single amount of turn (the angle) to do it in one go. That is the whole content of a rotation.

We give these two things names:

  • — the axis, drawn as an arrow of length exactly (a "unit" arrow, hence the little hat ). It only says which way the spin-line points, not how far.
  • — the angle, measured in degrees, saying how much we turn around .

WHY. Every other attitude description (matrices, Euler angles, quaternions, MRPs) is secretly a repackaging of this same pair. If we start here, we start at the true bottom.

A note on sign — the sense of the turn. The axis arrow also fixes which way is a positive turn: curl the fingers of your right hand around with the thumb pointing along the arrow, and your fingers show the direction of positive . So a rotation by about is the same motion as a rotation by about — flipping the axis and flipping the sign of the angle cancel out. Keep this twin fact; it decides every sign later.

PICTURE. Below, the amber arrow is ; the object swings through angle around it (right-hand rule shown).

Figure — Modified Rodrigues parameters — singularity-free, compact

Step 2 — Sine and cosine: reading a right triangle

WHAT. Before we can pack into numbers, we need a way to turn an angle into a length. That is what sine and cosine are for. Draw a right triangle (one corner is a square ). Pick one of the slanted corners; its angle is .

  • — the side touching , divided by the long slanted side.
  • — the side across from , over the long side.

WHY these tools? We need functions that grow smoothly with the angle and are known everywhere. Sine and cosine are exactly "how far along" and "how far up" you have travelled around a circle — the natural dictionary between angle and length.

PICTURE. In a circle of radius , an angle lands you at the point : cosine is the horizontal reach, sine the vertical reach.

Figure — Modified Rodrigues parameters — singularity-free, compact

Step 3 — The half-angle packing: the quaternion

WHAT. We now build the first compact code for our rotation. Take the half of the angle, , and split it into a cosine part and a sine part:

  • — a single number (the scalar part). It is the cosine of the half angle.
  • — a little arrow (vector part): the axis stretched by . It points the same way as the axis, but its length now records how big the angle is.

Together the four numbers form the quaternion — see Quaternions (Euler symmetric parameters).

WHY the half-angle — and why it makes rotations combine correctly. Here is the picture worth pausing on. Do a rotation, then do a second identical rotation — the total is a turn of about the same axis. Watch what the vector part does under this doubling. A single quaternion carries ; but the trig doubling rule says — the full angle is what you get by multiplying two half-angle pieces together. In other words, the half-angle is precisely the exponent that adds when you compose turns: stack two rotations and their half-angles add (), which the sine/cosine machinery turns into the correct combined rotation. Had we stored the full angle instead of the half, composing two rotations would not correspond to simply multiplying the codes — the half is the unique choice that makes "multiply the quaternions" mean "do one turn then the other." And because and of a half-angle never both vanish, the code never blows up: no singularity anywhere.

PICTURE. As sweeps , the half-angle sweeps only . Watch start at , cross at , and reach at ; the doubling rule is drawn as the amber curve built from the two cyan ones.

Figure — Modified Rodrigues parameters — singularity-free, compact

Step 4 — First attempt: divide by (the Gibbs vector, and why it fails)

WHAT. Four numbers is one too many. To get to three, we divide the arrow by the scalar :

Here a new tool appears: the tangent.

  • — sine over cosine, "how steep." When cosine (the bottom) shrinks to , the tangent shoots to infinity.

This is the classical Rodrigues parameters (Gibbs vector) — see Classical Rodrigues parameters (Gibbs vector).

WHY divide? Dividing kills the length of -arrow's dependence on the hypotenuse and leaves a clean 3-number vector along the axis, whose length is a pure function of the angle. Three numbers achieved.

WHY it fails. Look at the denominator . At , the half-angle is , and . Dividing by zero — the Gibbs vector explodes at only . Far too early for a spacecraft that may tumble past half a turn.

PICTURE. The tangent curve rockets to infinity as its angle nears ; that vertical wall is the Gibbs singularity at .

Figure — Modified Rodrigues parameters — singularity-free, compact

Step 5 — The fix: divide by instead

WHAT. Keep the three-number idea, but change the divisor from to :

  • — the Modified Rodrigues Parameters, our target three numbers.
  • — the new denominator. It equals .

WHY this divisor? Ask: when does hit zero? Only when , i.e. , i.e. , i.e. — a full turn. Compare with Gibbs (died at ) and Euler angles (gimbal lock at ). Adding shifts the blow-up all the way out to , the farthest it can possibly be.

PICTURE. Plot the denominators together: crosses zero at (Gibbs dies there), while only touches zero at (MRP survives the whole normal range).

Figure — Modified Rodrigues parameters — singularity-free, compact

Step 6 — Why is exactly

WHAT. Substitute the quaternion pieces and simplify:

The middle-to-right jump uses one trigonometric identity:

Earn the identity — a two-line algebraic sketch. Write , so is the half of (which is once ). Now use two schoolbook doubling rules:

The first says "a full sine is two half-pieces multiplied"; the second is the standard rearranged so the cancels the . Divide one by the other — a factor cancels top and bottom:

Set . Then — the quarter angle. That is where the famous comes from.

  • — still just the axis direction (division by a scalar cannot rotate an arrow).
  • — the length of , now the tangent of a quarter angle.

WHY it matters. The quarter-angle is the reason the singularity is at : blows up when , i.e. . "Half of the half angle" = a second halving = the singularity pushed twice as far out as Gibbs.

PICTURE. The half-angle right triangle sits inside a circle; the identity is literally the slope of the chord from the point to — a chord that subtends half of , giving . The cancelled factor is drawn too.

Figure — Modified Rodrigues parameters — singularity-free, compact

Step 6b — What the sign of means

WHAT. Over the working range the quarter angle stays in — the first quadrant — where is . So for a forward turn the scalar length is never negative, and the whole direction (including which way you spin) is carried by the axis , exactly as sine carried the sign in Step 2.

WHY this is the clean design. Because the quarter angle never leaves quadrant I in normal use, we never fight tangent's sign-flipping (tangent goes negative in quadrant II, positive again in III — the very repeat-every- trouble that bites arctan). MRPs sidestep it: keep and let do the signing.

Negative angles / reverse spin. A turn of (spin the other way) is, by the twin fact from Step 1, the same as about . Feed that in: — the MRP simply flips sign. So reversing the sense of rotation flips through the origin, which is exactly what your intuition wants: opposite turn ⇒ opposite little arrow.

PICTURE. Two arrows: a turn about gives ; the reverse turn gives , the mirror image through the origin.

Figure — Modified Rodrigues parameters — singularity-free, compact

Step 7 — Every case of as grows

WHAT. Because (non-negative in range), walk through the whole span of and see what the length does:

meaning
identity,
small, safe
switch threshold
dangerously large
singularity

WHY the threshold is . At the quarter angle is , and exactly. So is the natural halfway warning line: below it you are safe, above it you are heading for the blow-up.

Degenerate case . Then , , so regardless of the axis — because doing nothing has no meaningful axis. The origin is the identity rotation. Good: no division problem there since .

PICTURE. Number line of with the gate at and the wall at .

Figure — Modified Rodrigues parameters — singularity-free, compact

Step 8 — The shadow set: dodging the last wall

WHAT. Recall from Step 3 that and are the same rotation. So feed the negated quaternion through our very same recipe . Watch the denominator carefully: the scalar part is now , so "" becomes "", and the vector part is :

That is why the denominator flips to — it is the same formula fed the sign-twin quaternion. Now turn this into a formula in alone. Multiply top and bottom of by and use (since ), together with and :

  • — the length of squared.
  • The minus sign and the divide-by-length-squared invert the vector through the unit sphere: a long becomes a short .

WHY. If (past , climbing toward the wall), switch to . Since , you instantly land back in the safe zone — describing the same pose. The shadow encodes , so a turn becomes a comfortable one. This is why MRPs are "singularity-free in practice."

PICTURE. A long red outside the unit circle maps to a short cyan inside it — same line through the origin, flipped side.

Figure — Modified Rodrigues parameters — singularity-free, compact

The one-picture summary

Everything above, compressed: axis–angle (with sign) → half-angle quaternion (adds under composition) → divide by → quarter-angle tangent → shadow-set flip past the unit circle (singular at the origin).

Figure — Modified Rodrigues parameters — singularity-free, compact
Recall Feynman retelling — say it in plain words

A rotation is nothing but a spin-line and how far you turn on it, and the right-hand rule around that line tells you which way is positive — so turning the other way is the same as flipping the line. To store that in numbers, I first cut the angle in half and write down "how flat" and "how tall" that half-angle is — that's the quaternion, four safe numbers. Why the half? Because when I do a turn twice, the half-angles simply add, and the sine-doubling rule is exactly what makes "multiply the codes" mean "do one turn then the other" — the half is the magic exponent that adds. Four is one too many, so I try to squash it to three by dividing the tall part by the flat part; but the flat part hits zero at half a turn and the whole thing explodes — that's the old Gibbs vector, useless. The clever fix is to divide by "one plus the flat part" instead; that denominator only vanishes at a full turn. Cleaning up the algebra with two doubling rules — and — a factor cancels and I'm left with the axis times the tangent of a quarter angle. The length is that quarter-tangent: zero at rest, one at half a turn, infinity at a full turn, and its sign lives in the axis, not the tangent. Finally, since flipping a quaternion's sign means the same rotation, feeding the sign-twin through the very same recipe turns "" into "" and gives a spare "shadow" version; whenever my vector grows past length one I swap to the shadow, which lands short and safe — but I must never do the swap near the origin, because the shadow of "no turn" is itself infinite. That's why three numbers are enough and I never actually meet a wall.

One-line summary ::: from axis–angle via a quaternion divided by ; shadow-set flip past dodges the lone singularity. Why quarter-angle not half ::: dividing by (not ) turns into , moving the singularity from to . Why is the shadow denominator ::: it is the same formula fed the sign-twin , so ; it is singular at the identity, so only switch when .

See also: Direction Cosine Matrix (DCM), Attitude kinematics and $\boldsymbol\omega$, Spacecraft attitude control laws.