If you throw an arbitrarily-shaped rigid object into the air with some random rotational motion, the motion can proceed semi-chaotically, unless it happens to be spinning purely around one of its “principle axes”. (You could try your mobile phone, for example – give most spin around its tall axis for interesting results.) General rigid body rotational motion is not simple, but it is a universal scenario, with applications ranging from submarine simulators to satellite design.
There is an analogy between translational dynamics and rotational dynamics. Force is analogous to torque, velocity to angular velocity, and so on. This analogy can easily mislead one into believing that rotational motion can be described as simply as translational motion. So why, in spite of this simple analogy, is rotational motion so much more complex than translational motion?
The signal diagram below summarizes the entire process: Euler’s laws of motion (derived from Newton’s laws of motion), as well as the relevant kinematic principles.
All the shaded blocks in this diagram are 3 dimensional vectors, except Orientation, which is some other 3-DOF representation (See Expressing Rotation).
- denotes vector integration over time.
- “rotational integral” denotes some form of (non-linear) integration that depends on the representation used for orientation.
- denotes scalar division by the body’s mass.
- denotes matrix left-multiplication by the matrix inverse of the body’s inertia tensor.
- The arrow from Orientation to denotes the fact that ‘s orientation is attached to the body’s frame of reference.
Loosely thinking, we can say (keeping in mind that we are dealing with vectors): Force tells momentum what to do. Momentum implies velocity. Velocity tells position what to do.
This holds in some sense for both translational motion and rotational motion. The difference between them arises in the italicized relationship above. Translational momentum and velocity are simply related by a scale factor (the mass), whereas their angular analogs are related by a linear transformation (the inertia tensor).
The inertia tensor is a symmetric matrix, and therefore has orthogonal eigenspaces. Its eigenvalues are the moments of inertia about its eigenvectors (called the principle axes). So the angular velocity vector is a distorted version of the angular momentum vector, biased away from dominating principle axes. For example, a disc-shaped body will distort angular velocity towards the disc’s plane, while a rod-shaped body will distort angular velocity towards the rod’s line.
So, returning to our object in the air, we know that for all its convoluted gymnastics, its angular momentum remains constant. Therefore its angular velocity is determined by its orientation. That is to say, the body is turning about an axis that is influenced by its instantaneous orientation. It is easy to see how this can lead to some degree of chaos in the general case.
From the diagram above, we can straightforwardly derive a dynamic model. The translational part of the model is defined by these equations:
We will choose the matrix representation of rotation (see Expressing Rotation), so that is the oriented inertia tensor. The rotational part of the model is then defined by these equations:
- is the 3D position vector
- is the 3D velocity vector
- is the 3D momentum vector
- is the body’s mass
- is the 3D force vector (sum of forces acting on the body)
- is the 3×3 rotation matrix
- is the 3D angular velocity vector
- is the 3D angular momentum vector
- is the 3D torque vector (sum of torques acting on the body)
- is what we might call a 3×3 “cross-product matrix”: the skew-symmetric matrix such that (for any 3D vectors and ).
is given by
The diagram below is the Simulink implementation of the model above, with a trivial difference: It is convenient to integrate acceleration rather than force, so that gravitational effects can be introduced as an acceleration without an additional dependence on the body’s mass.
The rotational kinetic energy (given by ) is conserved under zero input-torque conditions. This serves as a useful sanity check for the model’s correctness.
The rotation matrix is supposed to remain an orthogonal matrix. However, since numerical round-off errors would cause it to drift over time, it needs to be re-normalized and re-orthogonalized occasionally. For most applications this issue can be ignored. I originally developed this model for a helicopter flight simulator, and after hours of test-flying the rotation matrix still had not drifted detectably.