Multibody Dynamics: Drift, Control, and the Geometry of Physical Law
1 Introduction: A Puzzle About Separation
1.1 A Useful Structural Fact
One structural feature of many mechanical models is easy to miss if one focuses only on the apparent complexity of the motion.
At any instant, within the rigid-body models considered here, you can split the modeled acceleration into two pieces: what the passive dynamics contribute at the current state, and what the applied generalized forces contribute through the input map. The two pieces add to the acceleration predicted by that model.
The point is worth stating carefully because the models themselves are highly coupled. A robot arm swinging through space, for example, mixes link-link interactions, configuration-dependent inertia, gravity, and velocity-dependent terms. The apparent complexity can make the drift/control split look less general than it is.
And yet, despite all this complexity, the stated model class still gives a clean bookkeeping separation between passive dynamics and applied inputs. The separation is not a statement about every physical effect in a real mechanism; it is a structural property of the equations once the coordinates, constraints, and actuator model have been specified.
What is more, this clean separation survives across several standard derivation languages. One can write the equations using energy methods, force balance on individual bodies, spatial screws, task-space coordinates, or differential-geometric notation. The notation and assumptions differ, but the same bookkeeping split between passive dynamics and applied inputs can still be recovered within the stated model class.
This article is about that separation—what it is, why it works, how to compute it, and what it reveals about the structure of mechanical systems.
1.2 The River Current
The best way to think about this separation is with a river.
A kayaker on a moving river experiences two kinds of motion. There is the current—the water carrying the kayaker along regardless of what they do with their paddle. And there is the paddling—the kayaker’s deliberate effort to change direction or speed.
In this analogy, the total motion is current plus paddling.
Now, the current is not the same everywhere. It depends on where the kayaker is (some parts of the river flow faster than others) and on how the water is already moving (the local velocity field). But at any given spot, the current is what it is. The kayaker cannot change it. They can only add to it.
In a mechanical system, the “current” is what we call drift—the motion the system undergoes on its own, determined entirely by its current state (where everything is and how fast it is going). The “paddling” is control—the contribution from actuator inputs (motor torques, applied forces).
In mathematical notation:
\[ \dot{x} = f_{\text{drift}}(x) + G(x)\,u \tag{1}\]
Here \(x\) is the state of the system (its configuration and velocity), \(f_{\text{drift}}(x)\) is the drift, and \(G(x)\,u\) is the control contribution. The state \(x\) determines both the drift and the “effectiveness” of the control input \(u\).
This is called a control-affine system, because the input enters in an affine (linear plus offset) way. The affine structure is what makes the clean separation possible.
1.3 A Natural Question
If the kayaker stops paddling right now—just for this instant—what happens?
The current carries them. That is all. The kayaker moves exactly as the river dictates.
We call this the Zero-Torque Counterfactual (ZTCF) family, and in this time-local context, the pointwise ZTCF sample: what the system would do, at this instant, with zero applied control. It is an instantaneous snapshot—a photograph of the physics at one moment—not a prediction of the future trajectory. (To trace what happens over time under zero control, one uses a forward ZTCF trajectory instead.) One moment later the kayaker has drifted to a new spot with a different current, and the answer changes.
But right now, right here, the pointwise ZTCF sample tells you exactly what the physics is contributing. And the difference between what is actually happening and the ZTCF sample tells you exactly what the controller is contributing.
1.4 Three Principles
This article develops three interlocking ideas:
1. Every standard dynamics framework admits a clean drift–control split. Whether you write the equations using energy methods (Euler–Lagrange), force balance on individual bodies (Newton–Euler), spatial screws, task-space coordinates, or abstract geometry, the same structural separation exists. The components look different in each language, but they encode the same physics.
2. Constraint forces are dynamically essential despite doing no net work. There is a widespread misconception that constraint forces—like the reaction at a pin joint—are passive and unimportant because they do no net generalized work. In fact, constraint forces actively redirect motion and redistribute energy between bodies. They are the guardrails of the dynamical highway. They do not speed you up or slow you down along the road, but they absolutely determine which way the road goes.
3. The physics does not depend on the language you use to describe it. Changing coordinates, switching reference frames, or adopting a different mathematical framework changes the appearance of the equations but not the physical predictions. This is not merely philosophical; it has concrete computational consequences, including the ability to cross-check results by computing the same quantity in two different frameworks and confirming they agree.
1.5 Scope and Assumptions
This article considers smooth rigid multibody systems with:
- Finite-dimensional state descriptions (finitely many generalized coordinates)
- Generalized effort inputs (torques or forces at actuated joints)
- Standard ordinary-differential-equation models of motion
- Ideal holonomic or Pfaffian constraints (no impacts, contact switching, or friction)
- No actuator internal dynamics (motors respond instantaneously)
- No dissipative effects (no damping, viscous friction, etc.)
Under these assumptions, the equations of motion have the control-affine structure shown in Equation 1. Systems with nonsmooth contacts, actuator dynamics, flexible bodies, or hysteresis may require modified treatments that go beyond this article’s scope.
1.6 What Is Standard and What Is New
The equations in this article are classical. The Euler–Lagrange equations, Newton–Euler recursions, screw theory, operational-space dynamics, and geometric mechanics are all well-established. The contribution here is:
- A unified interpretive presentation of the drift/control structure across all these frameworks
- An explicit ZTCF diagnostic as a time-local tool for separating passive dynamics from actuation effects
- A constraint-aware comparison showing how passive and actuated effects appear in each representation
- A pedagogical treatment aimed at building physical intuition alongside mathematical rigor
1.7 How This Article Is Organized
We build the ideas by concept, not by formalism. First, we establish the vocabulary of motion in everyday language (Section 2). Then we introduce our running example—a double pendulum—so we have something concrete to compute with (Section 3). Next, we develop the drift–control decomposition thoroughly in one framework (Section 4), and then show what happens when the system is constrained (Section 5). With the core ideas in place, we show how they appear in four other standard frameworks (Section 6), compare the frameworks side by side (Section 7), uncover what the compact equations hide (Section 8), connect to symmetry and conservation (Section 9), and close with practical guidance (Section 10).
2 The Language of Motion
Before we write a single equation, let’s make sure we share a common language. Every technical term in this article will be explained in plain words first. The math is a tool for making the ideas precise—but the ideas come first.
2.1 Configuration: Where Is Everything?
A mechanical system’s configuration is a complete snapshot of the spatial arrangement of all its parts. No velocities, no forces—just “where is everything right now?”
For a single door, the configuration is one number: the angle the door makes with the frame. For a two-jointed robot arm, it is two numbers: the shoulder angle and the elbow angle. For a human skeleton, it might be dozens of joint angles.
We collect all these numbers into a vector \(q\):
\[ q = \begin{bmatrix} q_1 \\ q_2 \\ \vdots \\ q_n \end{bmatrix} \]
where \(n\) is the number of degrees of freedom. Each component \(q_i\) is a generalized coordinate—a single number that captures one aspect of the arrangement.
The set of all possible configurations is the configuration space \(Q\). Think of it as a landscape. Every point on the landscape is a different arrangement of the mechanism. As the system moves, it traces a path through this landscape. A two-jointed arm traces a path through a two-dimensional landscape; a humanoid robot traces a path through a high-dimensional one.
2.2 State: Where Is Everything, and How Fast Is It Going?
Knowing the configuration is not enough to predict what happens next. A ball at the top of a hill might be sitting still or might be rolling fast toward the edge. You need to know both.
The state combines configuration and velocity:
\[ x = (q, \dot{q}) \]
where \(\dot{q}\) is the time derivative of \(q\)—how fast each generalized coordinate is changing. The state is the minimal information needed to predict future motion, given the forces.
This is a deep fact. In Newtonian mechanics, the future is completely determined by the present positions and velocities (plus the forces). You do not need to know the history of how the system got here. The state is sufficient.
2.3 Forces: What Pushes Things Around?
In the world of generalized coordinates, a generalized force (or generalized effort) is whatever causes a generalized coordinate to accelerate. For a rotational joint, the generalized force is a torque. For a translational joint, it is a linear force. We use \(\tau\) for the vector of all generalized efforts.
There are really three kinds of pushes acting on any mechanical system:
Control effort (\(\tau\) or \(u\)): the forces you apply on purpose, through motors, actuators, or muscles. These are the paddle strokes—the things you choose.
Constraint reactions (\(J_c^T \lambda\)): the forces that come from the structure of the mechanism itself—the pin joint that holds two links together, the floor that holds up a walking robot. We will have much to say about these later, because they are more important than many people realize.
External loads (\(\tau_{\text{ext}}\)): everything else—gravity, wind, contact with the environment.
2.4 The Mass Matrix: How Heavy Does It Feel?
Here is a question that sounds simple but is actually deep: “If I push on this joint, how much does it accelerate?”
For a single particle, the answer is just \(a = F/m\)—divide the force by the mass. But for a coupled multibody system, the answer depends on which direction you push, what the current configuration is, and how the masses of all the other bodies couple to this joint.
The mass matrix \(M(q)\) captures all of this. It is a square matrix that maps generalized forces to generalized accelerations.
Think of pushing a shopping cart. On smooth tile, a small push gives a big acceleration. On gravel, the same push barely moves it. Now imagine the resistance changes depending on which direction you push—sideways is easy, forward is hard—and that it also changes depending on where in the store you are. That is what the mass matrix does: it tells you how “heavy” the system feels in each generalized direction, and it changes as the configuration changes.
Two important properties:
Symmetry (\(M = M^T\)): The inertial coupling between generalized coordinates is reciprocal in the kinetic-energy metric. In practice, the off-diagonal terms that describe how one coordinate’s force affects another appear symmetrically.
Positive definiteness: For an unconstrained set of independent generalized coordinates, the mass matrix assigns positive kinetic energy to every nonzero velocity direction. That property makes the acceleration solve well posed for a given force vector, as long as the coordinate chart and constraint model remain nonsingular.
2.5 The Manipulator Equation: Putting It Together
For a rigid multibody system, the equations of motion take a beautiful standard form called the manipulator equation:
\[ M(q)\,\ddot{q} + C(q, \dot{q})\,\dot{q} + g(q) = \tau \tag{2}\]
This is Newton’s second law dressed up for generalized coordinates. Let’s read each piece:
\(M(q)\,\ddot{q}\) is the inertia term. It says: to produce acceleration \(\ddot{q}\), you need this much generalized force. This is the multibody version of \(F = ma\), except “mass” is now a matrix that depends on where you are.
\(C(q, \dot{q})\,\dot{q}\) is the velocity-product term. These are forces that arise because the mass distribution changes as the system moves. Even with no applied torque, a moving system experiences these forces. There are two flavors:
- Coriolis forces: appear when multiple joints move simultaneously. The motion of one joint creates a force on another, through the inertial coupling.
- Centripetal forces: appear from the rotation of a single joint. Think of water in a spinning bucket being pushed outward—nobody is “pushing” the water; the effect arises from the geometry of circular motion.
Together, the Coriolis and centripetal effects mean that in a coupled mechanism, nothing moves in isolation. Moving one joint shakes all the others.
\(g(q) = \partial V / \partial q\) is the gravity term: the generalized force due to gravity, computed as the gradient of the gravitational potential energy \(V(q)\).
We often bundle the velocity-product and gravity terms together as \(h(q, \dot{q}) \coloneqq C(q, \dot{q})\dot{q} + g(q)\). These are the forces the system “feels” due to its current state, with no input from the actuators. In the river analogy, \(h\) determines the current.
3 Running Example: The Planar Double Pendulum
3.1 Why This Example?
We need a concrete system to anchor our ideas. The planar double pendulum is ideal: it is the simplest system that exhibits all the phenomena we will discuss. Two rigid links, two joints, two masses—and yet it produces inertial coupling between joints, velocity-dependent forces, nontrivial gravitational loading, and even chaotic motion. It is rich enough to be interesting but small enough to write down in closed form.
Think of it as our laboratory notebook. Every idea we develop will be tested here first.
3.2 The Setup
Two rigid links are connected in a chain. The first link hangs from a fixed pivot. The second link hangs from the end of the first. Each link has length \(l_i\) and carries a point mass \(m_i\) at its far end.
We describe the configuration with two angles:
\[ q = \begin{bmatrix} \theta_1 \\ \theta_2 \end{bmatrix}, \qquad \dot{q} = \begin{bmatrix} \dot{\theta}_1 \\ \dot{\theta}_2 \end{bmatrix} \tag{3}\]
where \(\theta_1\) is measured from the downward vertical (so \(\theta_1 = 0\) means the first link hangs straight down) and \(\theta_2\) is the angle of the second link relative to the first (so \(\theta_2 = 0\) means both links are aligned).
3.3 Where Are the Masses?
The first mass sits at the end of the first link:
\[ x_1 = l_1 \sin\theta_1, \qquad y_1 = -l_1 \cos\theta_1 \]
The second mass (the endpoint of the mechanism):
\[ x_2 = l_1 \sin\theta_1 + l_2 \sin(\theta_1 + \theta_2), \qquad y_2 = -l_1 \cos\theta_1 - l_2 \cos(\theta_1 + \theta_2) \tag{4}\]
Notice the pattern: each mass sits at a position that depends on all the joints between it and the base. This is where coupling comes from.
The endpoint Jacobian relates joint velocities to endpoint velocities:
\[ J(q) = \begin{bmatrix} l_1\cos\theta_1 + l_2\cos(\theta_1+\theta_2) & l_2\cos(\theta_1+\theta_2) \\ l_1\sin\theta_1 + l_2\sin(\theta_1+\theta_2) & l_2\sin(\theta_1+\theta_2) \end{bmatrix} \tag{5}\]
The Jacobian acts like a gear ratio: it translates joint-level motion into endpoint-level motion. It changes with configuration, and when it becomes singular (loses rank), the endpoint cannot move in some direction no matter what joint velocities are applied. This is a singularity—a configuration where the mechanism loses a degree of freedom at the task level.
3.4 The Dynamic Model
Now we can write down the full equations of motion. The dynamics take the manipulator form \(\tau = M(q)\ddot{q} + C(q,\dot{q})\dot{q} + g(q)\) with:
Mass matrix:
\[ M(q) = \begin{bmatrix} (m_1+m_2)l_1^2 + m_2 l_2^2 + 2m_2 l_1 l_2 \cos\theta_2 & m_2 l_2^2 + m_2 l_1 l_2 \cos\theta_2 \\ m_2 l_2^2 + m_2 l_1 l_2 \cos\theta_2 & m_2 l_2^2 \end{bmatrix} \tag{6}\]
Look at the off-diagonal entries: they are not zero. This means the two joints are coupled—accelerating one joint creates a force on the other. And the coupling strength depends on \(\cos\theta_2\): strongest when the arm is stretched out (\(\theta_2 = 0\)), weakest when folded back (\(\theta_2 = \pi\)). You can feel this if you swing a two-section fishing rod—the resistance depends on how bent it is.
Velocity-product (Coriolis/centripetal) terms:
\[ C(q, \dot{q})\,\dot{q} = \begin{bmatrix} -2c\,\dot{\theta}_1\dot{\theta}_2 - c\,\dot{\theta}_2^2 \\ c\,\dot{\theta}_1^2 \end{bmatrix}, \qquad c \coloneqq m_2 l_1 l_2 \sin\theta_2 \tag{7}\]
The coupling parameter \(c\) depends on \(\sin\theta_2\). When \(\theta_2 = 0\) (arm straight), \(c = 0\) and there are no velocity-product forces—the two joints decouple at the velocity level. When \(\theta_2 \neq 0\), motion of each joint creates forces on the other. This is why a moving double pendulum is so unpredictable: the joints are constantly pushing each other around.
Gravity terms:
\[ g(q) = \begin{bmatrix} (m_1+m_2)\,g\,l_1 \sin\theta_1 + m_2\,g\,l_2 \sin(\theta_1+\theta_2) \\ m_2\,g\,l_2 \sin(\theta_1+\theta_2) \end{bmatrix} \tag{8}\]
Both links contribute to the torque on joint 1 (because joint 1 supports everything outboard of it), but only the second link contributes to the torque on joint 2.
4 Drift and Control: Separating Physics From Intent
This is the heart of the article. Everything we have done so far has been preparation for the ideas in this section. Take your time here—the payoff is worth it.
4.1 The Big Idea
Go back to the manipulator equation: \(M(q)\ddot{q} + C(q,\dot{q})\dot{q} + g(q) = \tau\).
Now ask: “What acceleration would the system experience if I turned off all the motors?” Set \(\tau = 0\) and solve for \(\ddot{q}\):
\[ \ddot{q}\bigr|_{\tau=0} = -M^{-1}(q)\bigl[C(q, \dot{q})\,\dot{q} + g(q)\bigr] \]
That is the drift acceleration—the river’s current.
Now ask: “What additional acceleration does the torque \(\tau\) produce?” From the full equation:
\[ \ddot{q} = -M^{-1}\bigl[C\dot{q} + g\bigr] + M^{-1}\tau \]
The total acceleration is the zero-torque acceleration plus an increment proportional to the applied torque. Let’s give these pieces names:
\[ \ddot{q} = \underbrace{-M^{-1}(q)\bigl[C(q, \dot{q})\,\dot{q} + g(q)\bigr]}_{\ddot{q}_{\text{drift}}} + \underbrace{M^{-1}(q)\,\tau}_{\ddot{q}_{\text{ctrl}}} \tag{9}\]
This is the drift–control decomposition.
4.2 Why Exactness Matters
This decomposition is not a local linearization of the state dynamics. Within the manipulator equation above, it is an algebraic split at a specified state and input because the torque \(\tau\) enters the equation linearly. The mathematical term for this is control-affine: the dynamics are affine in the input. The claim depends on the stated model assumptions; actuator dynamics, nonsmooth contact, flexible modes, and hysteresis can add terms that require a different treatment.
Why should you care about this algebraic split? Because it gives a precise model-level diagnostic. If your controller applies torque \(\tau\) and you compute \(\ddot{q}_{\text{drift}}\) and \(\ddot{q}_{\text{ctrl}}\), the sum matches the acceleration predicted by the same model. Differences from measured motion then become evidence about model error, sensing error, unmodeled inputs, or violated assumptions rather than ambiguity inside the algebraic decomposition itself.
4.3 The Drift: What the River Does
The drift acceleration \(\ddot{q}_{\text{drift}} = -M^{-1}(C\dot{q} + g)\) has two contributions:
Inertial coupling effects (\(-M^{-1}C\dot{q}\)): how the motion of each joint accelerates or decelerates the others through velocity-dependent forces. These exist because the system is moving. A stationary system has no Coriolis or centripetal effects.
Gravitational loading (\(-M^{-1}g\)): how gravity accelerates each joint given the current configuration. These exist because the system has weight. Even a stationary system feels gravity.
Together, these determine the river’s current. The current depends on where you are (configuration \(q\), which determines \(M\) and \(g\)) and how fast you are going (velocity \(\dot{q}\), which determines \(C\dot{q}\)).
4.4 The Control: What the Paddle Does
The control acceleration \(\ddot{q}_{\text{ctrl}} = M^{-1}\tau\) is the additional acceleration produced by the motors. The mass matrix \(M^{-1}\) acts as the input gain: it tells you how effectively each torque translates into acceleration.
Notice that the input gain depends on the configuration. The same motor torque produces different accelerations depending on the arm’s pose. This is like paddling in deep water versus shallow water—the same paddle stroke has different effects depending on conditions.
4.5 The Pointwise ZTCF Sample
The pointwise ZTCF sample is simply the drift evaluated at a specific moment in time:
\[ \ddot{q}_{\text{ZTCF},t} \coloneqq -M^{-1}\bigl(q(t)\bigr)\bigl[C\bigl(q(t),\dot{q}(t)\bigr)\dot{q}(t) + g\bigl(q(t)\bigr)\bigr] \tag{10}\]
It answers one question: “If I set declared control to zero right now, what acceleration would the system experience at this instant?”
Three things are important to understand about the pointwise ZTCF sample:
It is time-local, not a trajectory prediction. It tells you the instantaneous acceleration under zero torque, not where the system would end up if you stopped the motors. One millisecond later, the state has changed, and the ZTCF value is different. (To model where the system evolves over time under zero control, one computes a forward ZTCF trajectory instead.) It is a photograph, not a movie.
It reveals accumulated state effects. A system moving fast has large drift accelerations—not because of anything the motors are doing right now, but because past motor commands built up the current velocity. Imagine our kayaker: they paddled hard for the last five minutes and are now cruising at high speed. Even if they stop paddling, the current at their location (which depends on their speed through the water) is substantial. The ZTCF captures this.
It is a diagnostic tool, not a new physical concept. The ZTCF is just the drift vector field evaluated at a particular state. But this evaluation is practically powerful because it provides a clean, computable reference for separating physics from control at every instant.
4.6 How the Past Becomes the Present
Here is a subtlety worth pausing over. The drift at time \(t\) depends on the current velocity \(\dot{q}(t)\). But the current velocity is the accumulated result of all past accelerations:
\[ \dot{q}(t) = \dot{q}(t_0) + \int_{t_0}^{t} \ddot{q}(\sigma)\,d\sigma \]
So what appears as “drift” right now is really the accumulated legacy of all past inputs, all past gravitational pulls, all past Coriolis interactions.
Think of a savings account. The interest earned this month depends on the current balance, not on how the balance was accumulated. A high balance earns high interest whether it came from salary, inheritance, or a lottery win. Similarly, a high velocity produces large drift accelerations regardless of whether that velocity came from motors, gravity, or a push.
The ZTCF does not care about history. It cares about the current state. But the current state remembers the history, in the form of accumulated velocity.
4.7 Putting It All Together: The Double Pendulum
Let’s see the drift–control split for our double pendulum. We need three ingredients: the mass matrix Equation 6, the velocity-product terms Equation 7, and the gravity terms Equation 8.
4.7.1 Building From Energy
Step 1: Kinetic energy. The first mass has velocity \(v_1^2 = l_1^2\dot{\theta}_1^2\). The second mass involves both joints:
\[ v_2^2 = l_1^2\dot{\theta}_1^2 + l_2^2(\dot{\theta}_1+\dot{\theta}_2)^2 + 2l_1 l_2 \cos\theta_2\,\dot{\theta}_1(\dot{\theta}_1+\dot{\theta}_2) \]
The total kinetic energy \(T = \frac{1}{2}m_1 v_1^2 + \frac{1}{2}m_2 v_2^2\) is a quadratic form in the velocities: \(T = \frac{1}{2}\dot{q}^T M(q)\dot{q}\). Reading off the coefficients gives the mass matrix Equation 6.
Step 2: Potential energy. \(V = -m_1 g l_1\cos\theta_1 - m_2 g[l_1\cos\theta_1 + l_2\cos(\theta_1+\theta_2)]\). The gravity vector is \(g_i = \partial V/\partial \theta_i\), giving Equation 8.
Step 3: Coriolis terms. The Coriolis matrix comes from the partial derivatives of the mass matrix:
\[ C_{ij} = \sum_{k=1}^{n} \frac{1}{2}\left(\frac{\partial M_{ij}}{\partial q_k} + \frac{\partial M_{ik}}{\partial q_j} - \frac{\partial M_{jk}}{\partial q_i}\right)\dot{q}_k \]
This formula has a geometric origin (it comes from the Levi-Civita connection of the kinetic-energy metric—we will see what that means in Section 6.4). For now, it is a recipe: take partial derivatives of mass matrix entries, combine them in this specific pattern, multiply by velocities.
For our double pendulum, only \(\partial M/\partial\theta_2\) is nonzero (because only \(\cos\theta_2\) appears in \(M\)), giving \(c = m_2 l_1 l_2 \sin\theta_2\) and the velocity-product terms in Equation 7.
4.7.2 The Complete Split
The drift acceleration:
\[ \ddot{q}_{\text{drift}} = -M^{-1}\begin{bmatrix} -2c\,\dot{\theta}_1\dot{\theta}_2 - c\,\dot{\theta}_2^2 + g_1 \\ c\,\dot{\theta}_1^2 + g_2 \end{bmatrix} \]
For a \(2\times 2\) matrix, the inverse is:
\[ M^{-1} = \frac{1}{\det M}\begin{bmatrix} M_{22} & -M_{12} \\ -M_{21} & M_{11} \end{bmatrix} \]
with \(\det M = M_{11}M_{22} - M_{12}^2 > 0\) for nonsingular independent coordinates. The control acceleration is \(\ddot{q}_{\text{ctrl}} = M^{-1}\tau\), and the total is:
\[ \ddot{q} = \ddot{q}_{\text{drift}} + \ddot{q}_{\text{ctrl}} \]
4.7.3 A Sanity Check
At state \(\theta_1 = \pi/4\), \(\theta_2 = \pi/6\), \(\dot{\theta}_1 = 2\) rad/s, \(\dot{\theta}_2 = -1\) rad/s, with \(m_1 = m_2 = 1\) kg, \(l_1 = l_2 = 1\) m, \(g = 9.81\) m/s², you can plug in the numbers and verify:
- Compute \(M\), \(C\dot{q}\), and \(g\) numerically.
- Compute \(\ddot{q}_{\text{drift}} = -M^{-1}(C\dot{q} + g)\).
- Pick any torque—say \(\tau = [5, -2]^T\) N·m.
- Compute \(\ddot{q}_{\text{ctrl}} = M^{-1}\tau\).
- Confirm: \(\ddot{q}_{\text{drift}} + \ddot{q}_{\text{ctrl}}\) equals the total acceleration from the full equation.
This works to machine precision. The decomposition is exact.
4.8 From Drift to Control Design: Linearization
The drift–control decomposition connects directly to practical control design. Here is how.
Linearizing the control-affine dynamics \(\dot{x} = f_{\text{drift}}(x) + G(x)u\) at the ZTCF operating point \((x(t), u = 0)\):
\[ \dot{x} \approx \dot{x}_{\text{ZTCF},t} + A_t\,(x - x(t)) + B_t\,u \tag{11}\]
with \(A_t = \partial f_{\text{drift}}/\partial x\) (how sensitive the drift is to small state changes) and \(B_t = G(x(t))\) (how effectively the control input influences the dynamics at this state).
Think of it as a hierarchy:
- ZTCF/drift is the zeroth-order anchor: the baseline behavior at the current state.
- Linearization adds first-order sensitivity: how the dynamics change with small perturbations from this baseline.
This linearized model is the foundation for stability analysis (do the eigenvalues of \(A_t\) have negative real parts?), feedback design (LQR, pole placement, MPC), observer design (EKF-style estimation), and gain-scheduled controllers along trajectories.
4.9 Procedure Checklist: Euler–Lagrange Analysis
- Define generalized coordinates \(q\) and physical parameters.
- Derive kinetic energy \(T = \frac{1}{2}\dot{q}^T M(q)\dot{q}\) and potential energy \(V(q)\).
- Extract \(M(q)\), \(C(q,\dot{q})\), and \(g(q)\).
- Evaluate drift: \(\ddot{q}_{\text{drift}} = -M^{-1}(C\dot{q} + g)\) at the current state.
- Apply control and compute total acceleration: \(\ddot{q} = \ddot{q}_{\text{drift}} + M^{-1}\tau\).
- Compare measured acceleration with model prediction.
- Use residuals (differences) to diagnose unmodeled effects (friction, flexibility, etc.).
5 When the River Has Banks: Constrained Systems
So far, our kayaker has been on an open river—free to drift in any direction. But real rivers have banks, and real mechanisms have constraints.
5.1 What Constraints Are
A constraint is a geometric restriction on where the system can go. A door hinge forces the door to rotate about a specific axis. A ball rolling on a surface must stay on the surface. A robot end-effector might be guided along a rail.
Mathematically, a holonomic constraint is an equation \(\phi(q) = 0\) that eliminates some configurations. The system can only visit configurations where \(\phi\) vanishes.
The constraint Jacobian \(J_c = \partial\phi/\partial q\) determines how the constraint restricts velocities (\(J_c\dot{q} = 0\)) and accelerations (\(J_c\ddot{q} + \dot{J}_c\dot{q} = 0\)).
Think of guardrails on a mountain highway. The guardrail does zero work along the road—it neither speeds you up nor slows you down in the direction of travel. But if you drift toward the edge, the guardrail pushes you back. It redirects your motion without adding or removing energy from the direction you are going.
Constraint forces are the dynamical equivalent of guardrails.
5.2 The Constrained Equations
With constraints, the equations of motion acquire an extra term:
\[ M(q)\ddot{q} + C(q,\dot{q})\dot{q} + g(q) = \tau + J_c^T\lambda + \tau_{\text{ext}} \tag{12}\]
\[ J_c(q)\ddot{q} + \dot{J}_c(q,\dot{q})\dot{q} = 0 \tag{13}\]
The new term \(J_c^T\lambda\) is the generalized constraint force—the guardrail’s push, expressed in generalized coordinates. The multiplier \(\lambda\) tells you the magnitude of the push. It is not prescribed—it is determined by requiring that the constraint equation is satisfied. The constraint force is whatever it needs to be to keep the system on the constraint surface.
5.3 The Drift–Control Split Survives
Here is the important point: the drift–control decomposition still works when constraints are present. It simply operates within the constrained dynamics.
Setting \(\tau = 0\), the constrained drift is:
\[ \ddot{q}_{\text{drift}}^{c} = M^{-1}\bigl[-C\dot{q} - g + J_c^T\lambda_0 + \tau_{\text{ext}}\bigr] \tag{14}\]
where \(\lambda_0\) is the constraint multiplier needed to satisfy the constraint without actuation. The constrained control is:
\[ \ddot{q}_{\text{ctrl}}^{c} = M^{-1}\bigl[\tau + J_c^T(\lambda - \lambda_0)\bigr] \tag{15}\]
Notice something subtle: the control contribution includes not just the direct effect of \(\tau\) but also the change in constraint reaction induced by the actuation. When you apply torque to a constrained system, the constraint force adjusts to maintain compatibility under the new loading. The control “feels” this adjustment.
The decomposition remains exactly additive: \(\ddot{q} = \ddot{q}_{\text{drift}}^{c} + \ddot{q}_{\text{ctrl}}^{c}\).
Back to the kayaker: the river now has banks. The kayaker cannot paddle toward the shore (the constraint prevents it), and even the drift is redirected by the banks. But the separation between “what the current does” and “what the paddle does” still holds—each is just projected onto the channel the banks allow.
5.4 The Highway of Admissible Accelerations
At any instant, the acceleration-level constraint \(J_c\ddot{q} = -\dot{J}_c\dot{q}\) defines a set of accelerations that are compatible with the constraint:
\[ \mathcal{H}_t \coloneqq \left\{\ddot{q}\;\middle|\;J_c\ddot{q} = -\dot{J}_c\dot{q}\right\} \tag{16}\]
This is an affine hyperplane—a flat slice through the space of all possible accelerations. Think of a train on a track. The train’s acceleration must lie along the track direction. The hyperplane \(\mathcal{H}_t\) is the dynamical equivalent of “the track direction”—the set of all accelerations compatible with the constraint at this instant.
The ZTCF gives a specific base point on \(\mathcal{H}_t\)—the passive anchor. Control then moves along allowable directions within \(\mathcal{H}_t\):
\[ \ddot{q} = \ddot{q}_{\text{ZTCF},t}^{c} + B_c(x(t))\,\tau \tag{17}\]
where \(B_c = M^{-1}\bigl[I - J_c^T(J_c M^{-1} J_c^T)^{-1} J_c M^{-1}\bigr]\) is the constraint-consistent input map. It projects the unconstrained input gain \(M^{-1}\) onto the admissible acceleration set. It is the “train-track version” of the mass matrix inverse: it tells you how torques translate into accelerations within the constraint surface.
This geometric picture is exact, not an approximation.
5.5 Why Constraint Forces Deserve Your Respect
Here is one of the most surprising facts in mechanics, and it trips up a lot of people.
For an ideal holonomic constraint, the total generalized power of the constraint force is:
\[ P_{\text{constr}} = (J_c^T\lambda)^T \dot{q} = \lambda^T J_c\dot{q} = 0 \]
because \(J_c\dot{q} = 0\) (the velocity satisfies the constraint). Many textbooks state this and move on, leaving the impression that constraint forces are passive and can be ignored.
This is wrong. Or rather, the conclusion people draw from it is wrong. Let’s see why.
Constraint forces redirect motion. The constraint force \(J_c^T\lambda\) appears in the equation of motion. It directly determines which accelerations are possible. Removing the constraint changes the drift baseline entirely. Imagine removing the guardrails from a mountain road—the “zero work” property does not mean the guardrails are optional.
Constraint forces redistribute energy between bodies. While the total generalized power is zero, the power on individual generalized coordinates can be large and nonzero:
\[ P_{\text{constr},i} = [J_c^T\lambda]_i\,\dot{q}_i \]
The constraint extracts energy from some coordinates and injects it into others, with the sum being zero. Energy is not created or destroyed—it is moved around.
This is the mechanism behind whip-crack dynamics, where kinetic energy migrates from the arm (proximal segments) to the tip (distal segments) through the joint reaction forces. The constraint forces can be enormous—many times larger than any applied torque—and they are invisible in the compact generalized-coordinate formulation.
A note on interpretation: Per-coordinate power decompositions are useful diagnostic tools, but they depend on the choice of generalized coordinates. Only the total power balance is coordinate-invariant. These decompositions should be treated as bookkeeping aids, not as absolute physical partitions.
5.6 Double-Pendulum: Endpoint on a Circle
Let’s constrain our double pendulum’s endpoint to move on a circle of radius \(R\) centered at \((x_c, y_c)\):
\[ \phi(q) = (x_2 - x_c)^2 + (y_2 - y_c)^2 - R^2 = 0 \]
The constraint Jacobian \(J_c = \partial\phi/\partial q\) is a \(1 \times 2\) row vector. The coupled system forms a KKT system (named after Karush, Kuhn, and Tucker—a standard structure in constrained optimization):
\[ \begin{bmatrix} M & -J_c^T \\ J_c & 0 \end{bmatrix}\begin{bmatrix} \ddot{q} \\ \lambda \end{bmatrix} = \begin{bmatrix} \tau - C\dot{q} - g + \tau_{\text{ext}} \\ -\dot{J}_c\dot{q} \end{bmatrix} \]
This simultaneously determines both the constrained acceleration and the constraint force. Setting \(\tau = 0\) gives the constrained drift and the passive constraint reaction—the force needed to keep the endpoint on the circle even without motors.
5.7 Procedure Checklist: Constrained Euler–Lagrange
- Define the constraint equation \(\phi(q) = 0\).
- Compute \(J_c = \partial\phi/\partial q\) and \(\dot{J}_c\dot{q}\).
- Build the admissible hyperplane \(\mathcal{H}_t\).
- Form and solve the KKT system for \((\ddot{q}, \lambda)\).
- Compute the passive anchor \(\ddot{q}_{\text{ZTCF},t}^c\) by setting \(\tau = 0\).
- Recover generalized reaction loads \(J_c^T\lambda\).
- Compare constrained and unconstrained drift baselines.
- Audit power flow: verify \(P_{\text{constr}} = 0\) globally; examine per-coordinate power transfer.
6 The Same Physics in Different Languages
Now that we understand the drift–control decomposition thoroughly in one language (Euler–Lagrange), let’s see it in four others. Each framework is like a different map of the same city. The city does not change—only what each map emphasizes.
A street map shows you how to drive between intersections. A transit map shows subway connections. A topographic map shows elevation. A tourist map shows restaurants and landmarks. No map is “right” or “wrong”—each answers a different question.
In the same way:
- Newton–Euler shows you the body-level forces—where loads go and how big they are.
- Screw theory shows you the spatial geometry of motion and force.
- Operational-space analysis shows you what the task point experiences.
- Geometric mechanics shows you what is intrinsic (independent of coordinates) and what is a choice.
6.1 Newton–Euler: Following the Forces
6.1.1 What Newton–Euler Uniquely Reveals
Euler–Lagrange tells you what the generalized accelerations are. Newton–Euler tells you how the forces get there—which joint is pushing how hard, in what direction, to produce those accelerations. It is the force detective’s toolkit.
If Euler–Lagrange is a bank statement showing your account balance, Newton–Euler is the itemized list of every transaction.
6.1.2 General Equations
For each rigid body \(i\) in the chain, Newton’s second law for translation and Euler’s equation for rotation apply separately:
\[ m_i\,a_{c,i} = f_i^{\text{in}} - f_i^{\text{out}} + f_i^{\text{ext}} + f_i^{\text{ctrl}} \tag{18}\]
\[ I_i\,\dot{\omega}_i + \omega_i \times (I_i\,\omega_i) = n_i^{\text{in}} - n_i^{\text{out}} + n_i^{\text{ext}} + n_i^{\text{ctrl}} \tag{19}\]
Here \(a_{c,i}\) is the center-of-mass acceleration of body \(i\), \(\omega_i\) is its angular velocity, \(I_i\) is its rotational inertia, and the \(f\) and \(n\) terms are forces and moments from inboard joints, outboard joints, external loads, and actuators.
The term \(\omega_i \times (I_i\omega_i)\) is the gyroscopic moment—it appears because rotating bodies resist changes in their rotation axis. For planar problems (like our double pendulum), all angular velocities are parallel, so this term vanishes.
6.1.3 The Recursive Algorithm
Newton–Euler naturally leads to a two-pass algorithm that is both computationally efficient (linear in the number of bodies) and physically transparent:
Forward pass (base to tip): Starting from the fixed base, propagate velocities and accelerations outward through the chain. Each body’s velocity and acceleration are computed from its parent’s values plus the contribution of its own joint.
Backward pass (tip to base): Starting from the outermost body, compute the forces and moments at each joint. Each joint must support the weight and inertia of everything outboard of it.
This recursive structure is why Newton–Euler is the workhorse algorithm for real-time simulation of large multibody systems.
6.1.4 Drift via Newton–Euler
To evaluate the ZTCF: set all actuator torques to zero and run the forward-backward recursion. The resulting body accelerations are the drift accelerations (in Cartesian coordinates), and the joint forces are the passive reaction forces—the forces the joints must transmit even without motors.
6.1.5 Double-Pendulum Instance
For the double pendulum, the backward recursion from body 2 gives the joint 2 reaction force \(f_2^{\text{joint}}\)—a specific Cartesian force vector that link 1 exerts on link 2. The Euler–Lagrange formulation hides this force inside the mass matrix coupling. Newton–Euler makes it explicit.
Under drift conditions (zero torque), this joint force includes gravitational and centripetal loads and can be surprisingly large even with no applied torque. For structural design and understanding energy flow through the mechanism, this information is essential.
6.1.6 Procedure Checklist
- Define local body frames, masses \(m_i\), inertias \(I_i\), and center-of-mass offsets.
- Forward pass: compute \(\omega_i\), \(\dot{\omega}_i\), \(a_{c,i}\) from base to tip.
- Apply external/contact loads at each body.
- Backward pass: compute forces and moments from tip to base.
- Extract actuator torques \(\tau_i\) and joint reaction forces/moments.
- Repeat with \(\tau = 0\) for ZTCF: isolate passive load paths.
- Compare drift and total joint reactions to identify actuation-induced load changes.
- Map local Cartesian forces to generalized coordinates to verify agreement with Euler–Lagrange.
6.2 Product-of-Exponentials and Screw Theory: The Spatial Geometer’s Toolkit
6.2.1 What Screw Theory Uniquely Reveals
Screw theory provides a unified language for spatial velocity and force. Instead of separately tracking “how fast is it spinning?” and “how fast is it translating?” (as Newton–Euler does), screw theory combines them into single six-dimensional objects:
- A twist combines angular and linear velocity into one vector.
- A wrench combines moment and force into one vector.
Why bother? Because any rigid-body motion—no matter how complicated—is equivalent to a rotation about some axis combined with a translation along that same axis. Like a corkscrew. This “screw motion” description is more compact and transforms more cleanly between reference frames.
6.2.2 General Equations
Forward kinematics on the Lie group \(SE(3)\) (the group of all rigid-body transformations):
\[ g_{sb}(q) = e^{\hat{S}_1 q_1}\,e^{\hat{S}_2 q_2}\cdots e^{\hat{S}_n q_n}\,g_{sb}(0) \tag{20}\]
Each factor \(e^{\hat{S}_i q_i}\) represents the motion produced by joint \(i\) moving by amount \(q_i\) along its screw axis \(S_i\). The product composes these motions to give the total transformation from base to end-effector.
The spatial twist is \(\mathcal{V}_s = J_s(q)\dot{q}\), where \(J_s\) is the space Jacobian. The spatial acceleration:
\[ \dot{\mathcal{V}}_s = J_s(q)\ddot{q} + \dot{J}_s(q,\dot{q})\dot{q} \]
The term \(\dot{J}_s\dot{q}\) is the bias acceleration—the screw-coordinate analogue of Coriolis/centripetal effects. It is the spatial acceleration that would exist even with zero joint accelerations (constant joint velocities), arising because the screw axes shift as the configuration changes.
The wrench balance for each body involves the coadjoint map \(\text{ad}_{\mathcal{V}}^*(\mathcal{I}\mathcal{V})\), which expresses the same physics as Coriolis/centripetal terms but in the coordinate-free language of Lie algebras.
6.2.3 Drift–Control in Screw Coordinates
The ZTCF is evaluated exactly as before: freeze the state and set actuation to zero. The resulting joint-level drift acceleration is the same number as from Euler–Lagrange; the screw formulation simply expresses the spatial accelerations and wrenches in its own language.
6.2.4 Double-Pendulum Instance
For a planar two-revolute chain with the space frame at joint 1:
\[ S_1 = \begin{bmatrix} 0\\0\\1\\0\\0\\0 \end{bmatrix}, \qquad S_2 = \begin{bmatrix} 0\\0\\1\\0\\-l_1\\0 \end{bmatrix} \tag{21}\]
\(S_1\) is a pure rotation about the \(z\)-axis through the origin. \(S_2\) is a rotation about \(z\) through the point \((l_1, 0, 0)\)—which generates both rotation and translation when expressed in the space frame.
The space Jacobian is \(J_s = [S_1 \;\; \text{Ad}_{e^{\hat{S}_1\theta_1}}S_2]\), where the adjoint transformation \(\text{Ad}\) accounts for the frame change. Extracting the planar components recovers the same endpoint velocity as the geometric Jacobian Equation 5. Same physics, different notation.
6.2.5 Procedure Checklist
- Define home configuration \(g_{sb}(0)\) and screw axes \(S_i\).
- Build PoE forward kinematics and space/body Jacobians.
- Compute twist \(J_s\dot{q}\) and bias acceleration \(\dot{J}_s\dot{q}\).
- Run recursive Newton–Euler in spatial (wrench) coordinates.
- Project wrenches to joint torques.
- Evaluate ZTCF by setting actuation to zero at fixed state.
- Compare with Euler–Lagrange ZTCF mapped through the Jacobian.
6.3 Operational Space: The Task’s Point of View
6.3.1 What Operational-Space Analysis Uniquely Reveals
Every framework we have seen so far thinks in terms of joints. Operational-space analysis asks a different question entirely: “What does the world look like from the endpoint’s perspective?”
When you drive a car, you think about where the car is going—speed, heading, lane position—not about individual tire rotations and engine RPM. Operational-space analysis is the driver’s perspective: it translates between “what I want the task point to do” and “what the joints need to do to make that happen.”
6.3.2 General Equations
Define task coordinates \(x_{\text{task}} = \psi(q)\) with task Jacobian \(J = \partial\psi/\partial q\). The task-space dynamics are:
\[ \Lambda(q)\,\ddot{x}_{\text{task}} + \mu(q, \dot{q}) + p(q) = F_{\text{ctrl}} + F_{\text{constr}} + F_{\text{ext}} \tag{22}\]
where:
- \(\Lambda(q) = (JM^{-1}J^T)^{-1}\) is the task-space inertia: the effective mass felt at the task point. Valid only where \(JM^{-1}J^T\) is nonsingular.
- \(\mu(q, \dot{q}) = \Lambda(JM^{-1}C\dot{q} - \dot{J}\dot{q})\) is the task-space Coriolis/centripetal term.
- \(p(q) = \Lambda J M^{-1}g\) is the task-space gravity term.
An important subtlety: We write \(\Lambda\), \(\mu\), and \(p\) as if they are task-space primitives, but they are actually induced from joint-space dynamics through the Jacobian and mass matrix. They depend on the full joint configuration \(q\), not just the task coordinates.
The mapping between task-space forces and joint torques follows virtual work: \(\tau = J^T F\). In redundant systems (more joints than task dimensions), the reverse—going from joint torques to task-space effects—is not unique, because multiple joint-torque combinations can produce the same task-space force while differing in what they do in the null space.
6.3.3 Drift–Control in Task Space
The task-space drift is the image of joint-space drift under the kinematic map:
\[ \ddot{x}_{\text{drift}} = J\ddot{q}_{\text{drift}} + \dot{J}\dot{q} \tag{23}\]
The first term maps joint-level drift through the Jacobian. The second term, \(\dot{J}\dot{q}\), is the bias acceleration: the task-space acceleration that would exist even if all joint accelerations were zero (constant joint velocities), arising because the Jacobian itself changes with configuration.
6.3.4 Double-Pendulum Instance
For the endpoint task \(x_{\text{task}} = [x_2, y_2]^T\), the Jacobian is Equation 5 and the task-space inertia is \(\Lambda = (JM^{-1}J^T)^{-1}\)—a \(2\times 2\) matrix describing how “heavy” the endpoint feels, which changes with configuration.
Singularities occur when \(\theta_2 = 0\) or \(\theta_2 = \pi\) (the links are collinear). At these configurations, \(\Lambda\) becomes singular—you would need infinite force to accelerate the endpoint along the lost direction.
6.3.5 Procedure Checklist
- Choose task variables \(x_{\text{task}} = \psi(q)\).
- Derive \(J\) and \(\dot{J}\dot{q}\).
- Compute \(\Lambda\), \(\mu\), \(p\) (checking for singularities).
- Evaluate task-space drift: \(\ddot{x}_{\text{drift}} = J\ddot{q}_{\text{drift}} + \dot{J}\dot{q}\).
- Map task commands to joint torques via \(J^T\) and null-space projection.
- Compare total and drift task-space accelerations.
- Examine task-space inertia variation with configuration; identify singularities.
6.4 Coordinate-Free Geometric Mechanics: The Globe, Not the Map
6.4.1 Why Coordinates Are Both Useful and Dangerous
Every framework we have seen so far uses coordinates—angles, positions, task variables. Coordinates are immensely practical: they turn abstract geometric objects into concrete numbers you can compute with. But coordinates are also a choice, and different choices give different-looking equations for the same physics.
This is exactly the situation with maps of the Earth. A Mercator projection makes Greenland look enormous. An equal-area projection distorts shapes to preserve area. The Earth itself does not care which map you use—it is the same globe either way. The distances, areas, and curvatures of the Earth’s surface are real, physical things that exist independently of any map projection.
Geometric mechanics is about working directly with the globe.
6.4.2 The Configuration Manifold
The set of all configurations is a manifold \(Q\)—a smooth space that may be curved. For the double pendulum, \(Q = S^1 \times S^1\) (the product of two circles, which is a torus). Locally, it looks flat (you can use angles as coordinates), but globally it has a donut-like topology.
You do not need to understand manifold theory in depth to follow this. The key idea is: the configuration space has an intrinsic geometry that does not depend on how you label points.
6.4.3 The Kinetic Energy Metric
Kinetic energy defines a notion of “distance” on the configuration manifold. The mass matrix \(M(q)\) is, in geometric language, a Riemannian metric—it tells you the “cost” (in energy) of moving in each direction. Just as a Riemannian metric on the Earth’s surface tells you the actual distance between nearby points (regardless of map projection), the kinetic-energy metric tells you the actual energy cost of a small displacement (regardless of coordinate choice).
6.4.4 The Equations of Motion
In coordinate-free language, the equations of motion are:
\[ \nabla_{\dot{q}}\dot{q} + \text{grad}\,V(q) = \mathcal{G}(q)u + \mathcal{F}_{\text{ext}} + \mathcal{F}_{\text{constr}} \tag{24}\]
The symbol \(\nabla_{\dot{q}}\dot{q}\) is the covariant acceleration: the acceleration of \(\dot{q}\) as measured by the intrinsic geometry of the configuration space. In coordinates, it expands to \(\ddot{q}^i + \Gamma^i_{jk}\dot{q}^j\dot{q}^k\), where the Christoffel symbols \(\Gamma^i_{jk}\) are exactly the Coriolis/centripetal coefficients from the Euler–Lagrange formulation.
Here is the connection: the velocity-product terms \(C(q,\dot{q})\dot{q}\) that we computed earlier are the coordinate expression of a geometric object—the Levi-Civita connection—associated with the kinetic-energy metric. In coordinates, this connection appears through the Christoffel symbols. The connection tells you how to “parallel transport” velocity vectors along curves in configuration space.
An important clarification: nonzero Christoffel symbols do not necessarily mean the space is curved. Polar coordinates in flat Euclidean space have nonzero Christoffel symbols, but zero curvature. The Christoffel symbols reflect both the intrinsic geometry and the coordinate choice. Curvature, which depends only on the intrinsic geometry, is a deeper property.
6.4.5 Drift in Geometric Form
The intrinsic drift field on \(TQ\) (the tangent bundle—the space of all possible states, i.e., all possible position-velocity pairs) is:
\[ f_{\text{drift}}(q, \dot{q}) = \begin{pmatrix} \dot{q} \\ -\Gamma(\dot{q}, \dot{q}) - \text{grad}\,V(q) + \mathcal{F}_{\text{ext}} \end{pmatrix} \tag{25}\]
This is the same drift we computed in the Euler–Lagrange framework, written in a way that does not depend on any particular coordinate chart. The geometric formulation makes transparent that:
- The drift field is intrinsic (exists independently of coordinates).
- The connection \(\Gamma\) encodes inertial coupling.
- Constraints restrict motion to submanifolds of \(Q\).
- ZTCF with zero potential describes geodesic motion—the mechanical analogue of “straight-line motion” on a curved space.
6.4.6 Double-Pendulum Instance
The configuration manifold is \(Q = S^1 \times S^1\) (a torus). The kinetic-energy metric in coordinates \((\theta_1, \theta_2)\) is the mass matrix Equation 6. The Christoffel symbols generate the same Coriolis/centripetal terms as Equation 7. The drift field matches the Euler–Lagrange drift exactly.
To verify coordinate independence: switch to \((\phi_1, \phi_2) = (\theta_1, \theta_1 + \theta_2)\) (absolute angles instead of relative). The equations look different—different Christoffel symbols, different mass matrix entries—but the physical accelerations at any state are identical. The globe does not change when you switch map projections.
6.4.7 Procedure Checklist
- Define \(Q\) and the admissible state space \(TQ\).
- Build the kinetic-energy metric from \(T\).
- Compute the Levi-Civita connection (Christoffel symbols).
- Compute the potential gradient.
- Add control and external covector fields.
- Simulate intrinsic flow with and without control.
- Use coordinate charts only for computation and plotting.
- Verify key conclusions by changing charts to confirm invariance.
7 Cross-Formalism Equivalence
7.1 Five Maps, One City
For the same mechanism at the same state, every formalism encodes the same force balance:
\[ \text{Euler--Lagrange:}\quad M\ddot{q} + C\dot{q} + g - J_c^T\lambda = \tau + \tau_{\text{ext}} \tag{26}\]
\[ \text{Screw:}\quad \mathcal{I}\dot{\mathcal{V}} + \text{ad}_{\mathcal{V}}^*(\mathcal{I}\mathcal{V}) + \mathcal{W}_g - \mathcal{W}_{\text{constr}} = \mathcal{W}_{\text{ctrl}} + \mathcal{W}_{\text{ext}} \tag{27}\]
\[ \text{Operational-space:}\quad \Lambda\ddot{x} + \mu + p = F_{\text{ctrl}} + F_{\text{constr}} + F_{\text{ext}} \tag{28}\]
\[ \text{Geometric:}\quad \nabla_{\dot{q}}\dot{q} + \text{grad}\,V = \mathcal{G}u + \mathcal{F}_{\text{ext}} + \mathcal{F}_{\text{constr}} \tag{29}\]
These are not four different theories. They are four descriptions of the same physics. Equivalence means that under the appropriate kinematic, coordinate, and frame mappings, they produce the same physical motion, the same admissible accelerations, the same power balance, and compatible descriptions of all reactions.
7.2 Where Each Term Lives
| Physical effect | Euler–Lagrange | Newton–Euler | Screw/PoE | Op-space | Geometric |
|---|---|---|---|---|---|
| Inertia | \(M\ddot{q}\) | \(m_i a_{c,i}\), \(I_i\dot{\omega}_i\) | \(\mathcal{I}\dot{\mathcal{V}}\) | \(\Lambda\ddot{x}\) | Inertial part of \(\nabla_{\dot{q}}\dot{q}\) |
| Velocity-product | \(C\dot{q}\) | \(\omega \times (I\omega)\) etc. | \(\text{ad}_{\mathcal{V}}^*(\mathcal{I}\mathcal{V})\) + \(\dot{J}_s\dot{q}\) | \(\mu\) | \(\Gamma(\dot{q},\dot{q})\) |
| Gravity | \(g(q)\) | Per-body \(m_i\mathbf{g}\) | Gravity wrenches | \(p\) | \(\text{grad}\,V\) |
| Constraints | \(J_c^T\lambda\) | Joint reactions | Constraint wrenches | \(F_{\text{constr}}\) | Reaction covectors |
| Control | \(\tau\) | Applied body loads | Control wrenches | \(F_{\text{ctrl}}\) | \(\mathcal{G}u\) |
7.3 The ZTCF Anchor in Every Framework
At a fixed state, each framework gives you the same passive anchor:
- Euler–Lagrange: Evaluate \(\ddot{q}\) with \(\tau = 0\).
- Newton–Euler: Run the recursion with actuator channels removed.
- Screw/PoE: Evaluate spatial dynamics with zero control wrenches.
- Operational-space: Map the passive acceleration to task space: \(\ddot{x}_{\text{ZTCF}} = J\ddot{q}_{\text{ZTCF}} + \dot{J}\dot{q}\).
- Geometric: Evaluate the intrinsic drift field.
Control appears as a tangent increment from this shared baseline. The increment is expressed in different coordinates in each framework but represents the same physical change in acceleration.
7.4 Frame Changes and Invariants
Twists and wrenches transform under frame changes: \(V_s = \text{Ad}_g V_b\) and \(F_s = \text{Ad}_g^{-T} F_b\). Instantaneous power is frame-invariant: \(F_s^T V_s = F_b^T V_b\).
This means different coordinate-frame expressions of “Coriolis,” “centripetal,” or “gravity” are not different physics—they are transformed representations of the same underlying interactions. If two frameworks give different answers for the same physical quantity at the same state, it means one of the implementations has a bug.
9 Symmetry, Invariance, and Conservation Laws
9.1 Why Coordinates Don’t Change the Physics
The equations of motion are objective: they express physical relationships that do not depend on the observer’s choice of coordinates, reference frame, or mathematical language.
The distance between two cities does not depend on whether you measure it in miles or kilometers, or whether you read it from a road map or a satellite image. The measurement system is a convention; the physical distance is real. Similarly, the acceleration of a mechanical system is a physical fact that does not depend on how you parameterize the configuration space.
This objectivity is the reason all the frameworks in this article give equivalent results. They must—they are describing the same physics.
9.2 Conservation Laws From Symmetry
One of the deepest results in physics connects symmetry to conservation. Noether’s theorem says: every continuous symmetry of a mechanical system generates a conserved quantity.
- Translational symmetry (the physics does not change when you shift everything sideways) gives linear momentum conservation.
- Rotational symmetry (the physics does not change when you rotate everything) gives angular momentum conservation.
- Time-translation symmetry (the physics does not change from one moment to the next) gives energy conservation.
For the double pendulum in a gravity field: translational symmetry is broken (the pivot is fixed) and rotational symmetry is broken (gravity picks a preferred direction). But time-translation symmetry holds (if there is no dissipation), so total energy is conserved when no actuator work is done.
9.3 Symmetry Meets Drift and Control
Conservation laws interact with the drift–control decomposition in a powerful way:
If a quantity is conserved under drift (zero control), then only control can change it. This tells the control designer exactly what the actuators must actively maintain versus what the physics preserves for free.
If energy is conserved under drift, the drift dynamics preserve energy surfaces, and control moves the state between energy levels.
Broken symmetries identify drift contributions. When gravity breaks a symmetry, the corresponding quantity changes under drift at a rate determined by the ZTCF.
These conservation laws hold in every framework. They are properties of the physics, not of any particular coordinate system. They provide framework-independent cross-validation: if two frameworks predict different energy evolution for the same system, one of the implementations has an error.
10 Practical Guidance
10.1 Which Framework for Which Question?
| Formalism | Best question answered | Core unknowns | When to use |
|---|---|---|---|
| Euler–Lagrange | How do inputs change generalized accelerations? | \(\ddot{q}\) or \(\tau\) | Energy-based analysis, system ID, joint-level control |
| Constrained E–L | How do constraints redirect motion and loads? | \((\ddot{q}, \lambda)\) | Understanding constraint effects, reaction forces |
| Newton–Euler | Where do local loads and transfer pathways occur? | Body forces, moments, joint torques | Structural analysis, load path identification |
| PoE / screw | How do motion and force compose across frames? | Twists, wrenches, transformations | Spatial analysis, frame transformations |
| Operational-space | How do task objectives map to joint effort? | Task acceleration/force | End-effector control, impedance control |
| Coordinate-free | Which conclusions are representation-invariant? | Intrinsic drift/input fields | Theoretical analysis, verifying coordinate independence |
10.2 Cross-Validation: The Ultimate Debugging Tool
In practice, the smartest thing you can do is use multiple frameworks on the same problem:
- Derive dynamics in one framework (usually Euler–Lagrange for its energy-based simplicity).
- Verify predictions in another (Newton–Euler for joint loads, operational-space for task behavior).
- Use each for what it does best: Euler–Lagrange for control design, Newton–Euler for structural analysis, operational-space for task planning.
Any discrepancy between frameworks at the same state indicates a bug, not a failure of physics.
10.3 Traps to Avoid
Confusing drift with “the system at rest.” Drift is the acceleration under zero actuation at the current state. A system moving fast has enormous drift accelerations. Drift is about what the physics is doing, not about stillness.
Dismissing constraint forces because they “do no work.” They do zero net generalized work. They can still be the largest forces in the system, and they are responsible for all internal energy transfer. Removing them changes everything.
Treating a pointwise ZTCF sample as a trajectory prediction. It is an instantaneous snapshot: “what would happen this instant with zero torque.” One millisecond later, the snapshot is different. To simulate future evolution under zero control, integrate a forward ZTCF trajectory.
Writing \(\Lambda(x_{\text{task}})\) and forgetting the joint configuration. Task-space inertia depends on the full joint configuration \(q\), not just the task coordinates. Redundant systems have infinitely many configurations for each task point.
Assuming per-coordinate power decompositions are frame-invariant. Only total power balance is invariant. Per-coordinate breakdowns depend on the choice of generalized coordinates.
11 Conclusion
Let’s return to where we started.
A robot arm is swinging through space. Gravity pulls on it. Its joints are coupled. Everything depends on everything else. Within a specified rigid-body model, you can still separate the modeled acceleration into two pieces: what the passive dynamics contribute at that state and what the motors contribute through the input map.
That is the drift–control decomposition. It works because the torques enter the equations linearly, and the same structure can be expressed in the standard frameworks used here: Euler–Lagrange, Newton–Euler, screw theory, operational-space dynamics, and geometric mechanics. The components look different in each language, but under the appropriate coordinate and frame mappings they describe the same modeled mechanics.
Along the way, we saw that constraint forces—the joint reactions, the guardrails—are far more important than their “zero net work” property might suggest. They redirect motion, redistribute energy, and create the largest internal loads in the system. They deserve respect.
We saw that the ZTCF family—in particular the pointwise sample “what would happen right now with no motors?”—provides a clean, computable reference for separating physics from intent at every instant. It is a diagnostic snapshot, not a prediction, and it works identically in every framework.
And we saw that the underlying physics does not care which mathematical language you speak. The acceleration of a mechanism is a physical fact. The energy flowing through a joint is a physical fact. The conservation of energy under passive dynamics is a physical fact. These facts are the same in every framework, and checking them across frameworks is one of the best debugging tools available.
The double pendulum—two links, two joints, two masses—was rich enough to illustrate every one of these ideas. The same principles extend to larger rigid-body models, including systems with many bodies, closed kinematic loops, and complex constraint topologies, provided the assumptions behind the mass matrix, constraints, and input map remain valid. The equations get bigger, but the structural question is the same.
The river analogy is useful only if its limits are kept visible: current and paddling separate cleanly in the model, the train follows the modeled track, and the coordinate map should not change the physical prediction it represents.