galata. GitHub ↗

ADR-0006: The equations of motion are written about the centre of gravity

Context

ADR-0002 says the body frame's origin is "a documented geometric reference point fixed to the airframe, not the centre of gravity", and that the CG is carried as an explicit offset so that CG position can be swept.

That statement fixes where geometry and aerodynamic data are referenced. It does not, on its own, say which point the equations of motion are written about, and those are different questions. Writing them about an origin offset from the CG is legitimate and some tools do it, but it introduces additional terms — omega_dot x r and omega x (omega x r) in the force equation — and it makes (u, v, w) the velocity of the reference point rather than of the CG, so V, alpha and beta acquire a dependence on where the origin happens to sit.

ADR-0002 left this ambiguous. This record removes the ambiguity.

Decision

The rigid-body equations of motion are written about the instantaneous centre of gravity. (u, v, w) in the state vector is the air-relative velocity of the CG, and V, alpha and beta derived from it are the CG's.

The airframe reference point remains as ADR-0002 describes it: a fixed geometric datum, the point aerodynamic coefficient data is referenced to.

The CG offset is therefore not a term in the equations of motion. It appears in exactly one place: the transfer of the aerodynamic wrench from the reference point to the CG, M_cg = M_ref + r_cg_to_ref x F — the offset taken as the vector from the CG to the point the force acts at, which is the direction Aircraft::cg_to_aero_reference_m is named for and the direction sim::moved_to_cg implements. An earlier version of this record wrote r_ref_to_cg, which is the same vector reversed; getting it backwards flips the sign of every moment contribution, and a sign-flipped pitching moment still trims — at the wrong elevator, with the wrong static margin. That transfer is where a CG sweep does its work, and it is the mechanism by which moving the CG aft reduces static margin and drives the short period unstable — which is the phenomenon this tool exists to let a user find.

The inertia tensor supplied in MassProperties is about the CG, in body axes, and is not assumed diagonal.

Alternatives considered

Write the equations about the airframe reference point. The honest case: it is what ADR-0002's wording most naturally implies; it removes the need to know where the CG is before integrating; and it means a CG change does not change the meaning of the state vector, which makes two runs at different CG directly comparable component by component.

Rejected on three counts. The extra omega_dot x r term makes the force equation implicitly coupled to the moment equation — v_dot depends on omega_dot, which depends on the moments — so each derivative evaluation needs either a 6x6 solve or an algebraic rearrangement, which is a real cost paid on every RK4 stage of every simulation. alpha and beta become properties of an arbitrary datum rather than of the aircraft, so a model whose author moved the reference point produces different aerodynamic angles for identical motion. And it is not what the flight-dynamics literature this project validates against does: Stevens/Lewis/Johnson and Etkin/Reid both write CG-referenced equations, so a reader checking a sign against a textbook would be checking against a different set of equations.

Carry both formulations. Rejected: two sets of equations of motion is two places for a sign error, and the second exists only to serve a preference.

Consequences

Revisit when

A vertical requires the reference-point formulation — a rotorcraft with a large offset rotor hub, or a launch vehicle with substantial CG travel — at which point the extra terms earn their cost and this becomes a per-model choice rather than a project-wide one.