Degrees of Freedom and Robot Models of the Human Body

NoteFrom Anatomy to Equations

You now know how to idealize individual joints. The next question is: how many independent numbers do I need to describe a golf swing?

Suppose you have a model of the human body made from the joints we discussed in Chapter 22. You specify:

  • Pelvis orientation (3 angles)
  • Spine angles (3 DOF)
  • Lead hip angle (3 DOF)
  • Lead knee angle (1 DOF)
  • Lead ankle angles (2 DOF)
  • Trail hip angle (3 DOF)
  • Trail knee angle (1 DOF)
  • Trail ankle angles (2 DOF)
  • Lead shoulder angle (3 DOF)
  • Lead elbow angles (2 DOF)
  • Lead wrist angles (2 DOF)
  • Trail shoulder angle (3 DOF)
  • Trail elbow angles (2 DOF)
  • Trail wrist angles (2 DOF)

That’s approximately 35 numbers. Are all 35 independent? Is there a systematic way to count?

The answer is the Grübler-Kutzbach formula, a tool from mechanism design that counts the degrees of freedom of any kinematic chain. In this chapter, we’ll learn to use it, build a complete golf swing model in URDF (Unified Robot Description Format), and show how to simulate that model using robotics software.

This is where biomechanics meets robotics. The human body is a robot. The laws are the same.

Counting Degrees of Freedom — The Robotics Way

The Formula

The Grübler-Kutzbach formula (also called the Chebychev-Grübler-Kutzbach formula) counts the total degrees of freedom of a kinematic system.

ImportantGrübler-Kutzbach Formula

For a kinematic chain of \(N\) rigid bodies (links) connected by \(J\) joints, where joint \(i\) has \(f_i\) degrees of freedom, the total degrees of freedom of the system is:

\[\mathrm{DOF} = 6(N-1) - \sum_{i=1}^{J} (6 - f_i)\]

Equivalently, defining \(c_i = 6 - f_i\) as the number of constraints imposed by joint \(i\):

\[\mathrm{DOF} = 6(N-1) - \sum_{i=1}^{J} c_i\]

The constant 6 reflects the dimension of rigid-body motion in three-dimensional space: three translations + three rotations.

Interpretation

Consider \(N\) bodies floating freely in space with no constraints. Each body can translate and rotate independently: \(6(N-1)\) DOF total, with the first body serving as the reference frame.

Each joint imposes constraints. A revolute joint (1 DOF) imposes \(c = 6 - 1 = 5\) constraints: it prevents translation in 3 directions and rotation about 2 axes (perpendicular to the joint axis). A spherical joint (3 DOF) imposes \(c = 6 - 3 = 3\) constraints: only translation is prevented.

The formula subtracts the total constraints from the free DOF.

Worked Example 1: A Simple Robot Arm

Tip3-Link Robot Arm

Consider a robot arm with a fixed base and three revolute joints in series:

Bodies: Ground (base, fixed) + Link 1 + Link 2 + Link 3 = 4 total. Count the ground as one of the \(N\) bodies, so \(N = 4\).

Joints: 3 revolute joints (one between ground and link 1, one between link 1 and link 2, one between link 2 and link 3). So \(J = 3\).

Constraint count: Each revolute has \(f_i = 1\), so \(c_i = 6 - 1 = 5\). Total constraints: \(\sum c_i = 15\).

Grübler calculation: \[\mathrm{DOF} = 6(4-1) - 15 = 18 - 15 = 3\]

Sanity check: A 3-link planar arm (all revolutes in the same plane) should have 3 DOF. The end-effector position in the plane has 2 DOF (x and y), and the end-effector orientation has 1 DOF (angle). Total: 3 DOF. \(\checkmark\)

Alternative calculation (tree formula): For a tree structure (no loops), the DOF is simply the sum of joint DOFs: \[\mathrm{DOF} = \sum_{i=1}^{J} f_i = 1 + 1 + 1 = 3\]

Both methods agree for a tree structure.

Worked Example 2: A Closed Kinematic Loop

Tip4-Bar Mechanism (Linkage)

Consider a classic 4-bar linkage: 4 bars (links) connected by 4 revolute joints forming a closed loop. One link is the ground frame (fixed), so \(N = 4\) (ground + 3 moving links).

Key insight: Because this is a planar mechanism, we must use the planar Grübler formula, not the spatial one. In 2D, each free body has 3 DOF (two translations + one rotation), and each revolute joint imposes 2 constraints (prevents the two translations at the joint, while permitting rotation):

\[ \mathrm{DOF}_{\text{planar}} = 3(N-1) - \sum c_i^{\text{planar}} \]

With \(N = 4\) bodies and \(J = 4\) planar revolutes (\(c = 2\) each): \[ \mathrm{DOF} = 3(4-1) - 4 \times 2 = 9 - 8 = 1 \]

A 4-bar linkage has 1 DOF. \(\checkmark\) You can input one angle and the geometry of the closed loop determines all other positions.

Common pitfall: Applying the spatial Grübler formula (\(6(N-1) - \sum(6-f_i)\)) to a planar mechanism gives \(6 \times 3 - 4 \times 5 = 18 - 20 = -2\), which is meaningless. The spatial formula overcounts constraints because planar revolutes implicitly constrain out-of-plane motion that was never available.

Lesson: The Grübler formula is powerful but requires careful counting. For a tree structure (no loops), use the simple formula \(\sum f_i\). For a mechanism with loops, you must account for loop closure constraints, and the planar formula differs from the 3D formula.

Worked Example — The Golf Swing Model

{#sec-golf_swing_dof}

Consider a golf swing model and count its degrees of freedom.

Model Definition

The model consists of the following kinematic chain:

  • Base: Pelvis (fixed to ground). Define the pelvis in the global frame. The pelvis orientation is fixed, or small pelvis rotations can be allowed about the \(z\)-axis (azimuth, yaw).

  • Spine:

    • Lumbar spine: 3-DOF joint (spherical) connecting pelvis to lumbar vertebra
    • Thorax: 3-DOF joint (spherical) connecting lumbar to thorax/ribcage
  • Lead side (left arm for right-handed golfer):

    • Lead shoulder: 3-DOF (spherical) connecting thorax to upper arm
    • Lead elbow: 2-DOF (revolute flexion + revolute pronation) connecting upper arm to forearm
    • Lead wrist: 2-DOF (universal joint) connecting forearm to hand
    • Lead hand: (0-DOF, rigidly attached to club, OR 3-DOF if we allow grip motion)
    • Club: (0-DOF, rigidly attached to lead hand)
  • Trail side (right arm for right-handed golfer):

    • Trail hip: 3-DOF (spherical) connecting pelvis to trail upper leg
    • Trail knee: 1-DOF (revolute) connecting upper leg to lower leg
    • Trail ankle: 2-DOF connecting lower leg to foot
    • Lead hip: 3-DOF connecting pelvis to lead upper leg
    • Lead knee: 1-DOF connecting upper leg to lower leg
    • Lead ankle: 2-DOF connecting lower leg to foot

For this calculation, focus on the upper body and arms and ignore the legs.

Simplified Upper Body Model

  • Pelvis (base, fixed orientation): 0 DOF relative to ground
  • Lumbar spine: 3-DOF (3R spherical joint)
  • Thorax: 3-DOF (3R spherical joint)
  • Lead shoulder: 3-DOF (3R spherical)
  • Lead elbow: 2-DOF (1R flexion + 1R pronation)
  • Lead wrist: 2-DOF (2R universal)
  • Trail shoulder: 3-DOF (3R spherical)
  • Trail elbow: 2-DOF (1R flexion + 1R pronation)
  • Trail wrist: 2-DOF (2R universal)

Open chain (if the two hands were not gripping the same club):

\[ \begin{aligned} \sum f_i &= 3 + 3 + 3 + 2 + 2 + 3 + 2 + 2 \\ &= 20 \text{ DOF} \end{aligned} \]

Bodies: Pelvis + Lumbar + Thorax + Lead Upper Arm + Lead Forearm + Lead Hand + Trail Upper Arm + Trail Forearm + Trail Hand = 9 bodies (plus the ground/pelvis base, so \(N = 10\)).

Joints: 8 joints as listed.

Grübler check (open chain): \[\mathrm{DOF} = 6(10-1) - \sum c_i = 54 - (6-3 \times 3) - (6-3) - (6-2) - ... \]

For this open chain, use the simpler tree formula: \[\mathrm{DOF}_{\text{tree}} = \sum f_i = 20\]

So without any closure constraints, 20 DOF.

The Grip Constraint (Loop Closure)

The key constraint is that the two hands grip the same club. The lead hand holds one end of the grip, and the trail hand holds the other end. The club is a rigid body.

This creates a loop closure constraint: the position and orientation of the club relative to the lead hand must be consistent with the position and orientation relative to the trail hand.

If we model the club as rigidly attached to the lead hand (0 additional DOF), then the trail hand must follow the lead hand exactly. But this is too restrictive—the hands can slip slightly relative to each other on the grip.

A more realistic model: the club is a separate body connected to: - Lead hand via a 0-DOF (rigid) joint OR a 6-DOF (free) joint with stiffness constraints - Trail hand via a 0-DOF (rigid) joint OR a 6-DOF (free) joint with stiffness constraints

If we use 6-DOF joints, we’ve added 12 DOF (6 for each hand). The total becomes \(20 + 12 = 32\) DOF in the open chain.

But the constraint is: the club is a single rigid body. Its position and orientation are uniquely determined. This is 6 constraints (3 position + 3 orientation).

Closed-chain DOF: \[\mathrm{DOF}_{\text{closed}} = 32 - 6 = 26 \text{ DOF}\]

Alternatively, if we use the simpler model (club rigidly attached to lead hand), we have: \[\mathrm{DOF}_{\text{closed}} = 20 - 6 = 14 \text{ DOF}\]

(The 6 subtracted are the position/orientation of the trail hand relative to the club, which is now constrained.)

In practice: A full-body golf swing model (including both legs) has approximately 25–30 DOF depending on how many joints we include. This is large but manageable for dynamics simulation and optimization.

ImportantDOF Counting in Practice

When building a biomechanical model:

  • Start with the kinematic structure (which bodies, which joints)
  • Use the tree formula if there are no loops: \(\sum f_i\)
  • If there’s a loop (two hands on a club, foot-ground contact in a stance), use the full Grübler formula with loop closure constraints
  • Verify your answer by checking intuition: does it match the task-space dimensionality?

For the golf swing, we have roughly 25–30 DOF. The task (hit a golf ball to a target) requires control of the club orientation (3 DOF) and club position (3 DOF) at impact. That’s 6 DOF task-space. This means we have 20–25 DOF of redundancy: many different arm configurations can hit the same shot.

The Human Arm — A 7-DOF Redundant Manipulator

{#sec-arm_redundancy}

The human arm is a fascinating example of a redundant manipulator. Let’s analyze it in detail.

DOF Count

A single human arm has: - Shoulder: 3 DOF (spherical joint) - Elbow: 1 DOF (flexion) - Pronation/supination: 1 DOF (forearm rotation) - Wrist: 2 DOF (flexion + deviation)

Total: \(3 + 1 + 1 + 2 = 7\) DOF.

Task Space

The task for the arm is to position and orient the hand. In 3D space: - Position: 3 DOF (x, y, z coordinates of the hand) - Orientation: 3 DOF (roll, pitch, yaw of the hand frame)

Total task space: 6 DOF.

Redundancy

The arm has 7 actuated DOF but only needs 6 to achieve the task. This means:

\[\text{Redundancy} = 7 - 6 = 1 \text{ DOF of redundancy}\]

Physically, this means: you can keep your hand fixed in position and orientation while still moving your arm. The only motion available is the null space of the Jacobian.

The Null-Space Motion: Elbow Swivel

The null-space motion of the arm is the elbow swivel. Keep your hand fixed in space (position and orientation). Now swivel your elbow in and out. The hand doesn’t move, but the elbow traces a circle.

Mathematically, if \(\bm{J}(\bm{q})\) is the Jacobian (relating joint velocities to hand velocities), then the null space is:

\[\mathcal{N}(\bm{J}) = \{\bm{v} : \bm{J} \bm{v} = \mathbf{0}\}\]

Any velocity in this null space leaves the hand unchanged.

Why Redundancy Matters for Golf

In the golf swing, both hands are on the club. The task is to move the club along a specific path. Because the arm is redundant, there are multiple arm configurations that can achieve the same club position at any moment.

Elite golfers exploit this redundancy to: - Maximize club speed at impact (choose the configuration with the highest end-effector velocity) - Minimize muscle activation and energy cost - Avoid awkward or painful arm positions - Adjust grip tension (allowing more pronation or wrist bow through the swing)

This is why motion capture shows that no two golfers swing identically (Glazier 2011; Myers et al. 2008). Glazier (2011) reviews movement variability in the golf swing and argues it is partly functional rather than simply error, and Myers et al. (2008) report the spread across 100 golfers. The task (club trajectory) is constrained, but the arm configuration is not. Different golfers choose different null-space motions.

This is consistent with motion capture observations suggesting that golfers tend to show individual variation in arm configuration even when producing similar club trajectories (Nesbit 2005; Horan et al. 2010). The task (club trajectory) is constrained, but the arm configuration is not. Different golfers choose different null-space motions (illustrative; depends on individual motor strategies and training history).

TipElbow Swivel in the Golf Swing

Consider a golfer at the top of the backswing. The club is at a specific position and orientation. Now, without moving the club, the golfer could:

  • Flex the elbow slightly (bringing the elbow closer to the body): this uses the null-space motion.
  • Extend the elbow slightly (straightening the arm): another null-space motion.

Both configurations move the elbow but leave the club unchanged. In the downswing, different null-space trajectories would result in different arm angles at the same club positions. Some trajectories are more efficient (less muscular effort), others place less strain on the joints.

Biomechanical optimization of the golf swing must account for this redundancy: there is not a unique optimal arm configuration for each club position, but rather a manifold of near-optimal configurations.

The Pseudoinverse and Null-Space Projection

If we want to solve for joint velocities \(\dot{\bm{q}}\) given desired hand velocity \(\dot{\bm{x}}\) (task space), we use the inverse Jacobian:

\[\dot{\bm{q}} = \bm{J}^{\dagger} \dot{\bm{x}} + (\bm{I} - \bm{J}^{\dagger}\bm{J}) \bm{v}_{\text{null}}\]

where: - \(\bm{J}^{\dagger}\) is the Moore-Penrose pseudoinverse - \((\bm{I} - \bm{J}^{\dagger}\bm{J})\) is the projection onto the null space - \(\bm{v}_{\text{null}}\) is any vector in the null space

The first term, \(\bm{J}^{\dagger} \dot{\bm{x}}\), solves the task. The second term, \((\bm{I} - \bm{J}^{\dagger}\bm{J}) \bm{v}_{\text{null}}\), is the null-space motion.

By choosing different \(\bm{v}_{\text{null}}\), we can optimize for secondary objectives (minimize energy, avoid joint limits, maximize manipulability) while maintaining the task.

Kinematic Redundancy and the Manifold of Solutions

{#sec-manifold_solutions}

NoteMany Ways to Reach the Cup

Here’s a simple everyday fact: there are infinitely many ways to reach for a coffee cup on your desk.

Your shoulder can rotate, your elbow can flex or extend, your wrist can bend and twist. If you keep your hand fixed at the cup, you can still move your arm. Your elbow can point forward, sideways, or backward — each configuration is a different arrangement of your shoulder, elbow, and wrist, yet your hand stays at the cup.

This is redundancy. Your body has more degrees of freedom than the task requires.

The golf swing is the same. A golfer has roughly 25–30 degrees of freedom, though the exact count is a modelling choice rather than a fact about anatomy — see the URDF specification later in this chapter (Delp et al. 2007; Rajagopal et al. 2016). For scale, the widely used upper-extremity model of Holzbaur et al. (2005) assigns 15 degrees of freedom to a single arm, covering shoulder, elbow, forearm, wrist, thumb and index finger. Two arms plus torso and pelvis rotation reach the range quoted here only once the hand and finger joints are collapsed, which is what the model in this chapter does. But the task — place the club face square to the target with maximum speed at impact — requires control of only 6 variables: the position (3) and orientation (3) of the club head.

WarningPedagogical Simplification

The numerical values, claims, and parameters discussed in this section are formulated as illustrative model outputs and didactic simplifications. They are intended for pedagogical purposes and do not represent published, empirical biomechanical measurements.

In this illustrative reduction, that leaves 20–25 DOF unspecified. There are infinitely many joint configurations that produce the same club position. This is not a problem. It’s a feature. It’s how the brain exploits redundancy to adapt, optimize, and recover from perturbations.

In this section, we characterize the structure of these infinite solutions: the manifold of solutions.

The Redundancy Problem

Let’s formalize the redundancy. Suppose the task is to control the position and orientation of the club head. We call this the task space:

\[ \bm{x} = h(\bm{q}) \in \mathbb{R}^6 \tag{1}\]

where \(\bm{q} \in \mathbb{R}^n\) is the vector of joint angles (\(n \approx 25\)\(30\) for a full-body golf swing model) and \(h\) is the forward kinematics function that maps joint angles to club head pose.

The task is 6-dimensional. The system is \(n\)-dimensional. Since \(n > 6\), the system is redundant: there are \(n - 6\) “extra” degrees of freedom that don’t directly affect the task.

For a full-body golf swing model with \(n = 25\), we have:

\[ \text{Redundancy} = 25 - 6 = 19 \text{ DOF of redundancy} \tag{2}\]

This means: you can move your joints while keeping the club head fixed. The only motions available are those that don’t move the club head. These are called null-space motions.

The Task Jacobian and the Null Space

To understand null-space motion mathematically, we differentiate the task:

\[ \dot{\bm{x}} = \frac{\partial h}{\partial \bm{q}} \dot{\bm{q}} = \bm{J}(\bm{q}) \dot{\bm{q}} \tag{3}\]

where \(\bm{J}(\bm{q}) \in \mathbb{R}^{6 \times n}\) is the task Jacobian. It relates club head velocity (task space) to joint velocities (joint space).

Since \(\bm{J}\) has more columns than rows (\(n > 6\)), it has a non-trivial null space:

ImportantNull Space of the Jacobian

The null space of the Jacobian is the set of all joint velocities that produce zero club head velocity:

\[ \mathcal{N}(\bm{J}) = \{\dot{\bm{q}}_0 : \bm{J} \dot{\bm{q}}_0 = 0\} \tag{4}\]

Geometrically, this is the set of directions in joint space that are orthogonal to all rows of \(\bm{J}\).

Dimensionally, if \(\bm{J}\) has rank \(r = 6\) (full rank in task space), then \(\dim(\mathcal{N}(\bm{J})) = n - r = n - 6\).

Physical meaning: Any velocity in the null space produces zero task-space velocity. These are internal motions—motions that move the joints but leave the club head stationary.

The Solution Manifold

Now consider the inverse problem: given a desired club head position \(\bm{x}^*\), find all joint configurations \(\bm{q}\) that achieve it.

The set of all solutions is:

\[ \mathcal{M}(\bm{x}^*) = \{\bm{q} : h(\bm{q}) = \bm{x}^*\} \tag{5}\]

This set is called the solution manifold. It is a submanifold of the joint configuration space \(\mathbb{R}^n\).

ImportantDimension of the Solution Manifold

If the task Jacobian \(\bm{J}(\bm{q})\) has full rank (rank 6) at a configuration \(\bm{q}^*\), then the solution manifold \(\mathcal{M}(\bm{x}^*)\) passing through \(\bm{q}^*\) is a smooth submanifold of dimension \(n - 6 = 19\).

Proof sketch: The level set \(h(\bm{q}) = \bm{x}^*\) is defined by 6 equations. If \(\bm{J}\) has rank 6, these equations are independent, and the implicit function theorem applies. The solution set is a \((n - 6)\)-dimensional submanifold.

Intuition: The Elbow Circle

The simplest example is the 7-DOF human arm reaching a fixed hand position in space. The arm has 7 DOF but the task (hand position and orientation) requires 6. So there is \(7 - 6 = 1\) DOF of redundancy.

The solution manifold is 1-dimensional: a curve in joint space. This curve is the elbow circle. As you move along the elbow circle, your joint angles change, but your hand stays fixed. Your elbow traces a circle in 3D space.

For the golf swing with 25 DOF and 6-DOF task, the solution manifold is 19-dimensional. You can’t visualize it, but the principle is the same: a smooth 19-dimensional surface in 25-dimensional joint space. Every point on this surface corresponds to a different joint configuration that places the club head at the desired position.

Different Golfers, Different Paths

Two golfers with different body proportions, flexibility, and strength navigate different solution manifolds. Their manifolds are actually different subsets of joint space because their anthropometry is different.

Yet if both golfers hit the same shot (same club position at impact, same club head velocity), their task-space trajectories are identical. Their joint-space trajectories, however, are completely different. One golfer might use more shoulder rotation; the other uses more spinal twist. One might have a more extended arm at the top; the other more bent. Both are moving along different paths through their respective solution manifolds, yet both hit the same target.

This is motor equivalence: same task, different joint trajectories.

ImportantMotor Equivalence and Biological Variability

In biomechanics, different individuals can perform the same task with completely different movement patterns because:

  • Each individual has a unique body (different limb lengths, joint ranges, muscle properties).
  • The task is lower-dimensional than the organism (task is 6 DOF, body is 25–30 DOF).
  • Therefore, there are multiple solution manifolds (one per individual), and multiple paths on each manifold.
  • The nervous system exploits this freedom to adapt to constraints, injuries, and learned preferences.

This explains why two elite golfers can look completely different in slow motion yet produce identical ball flights.

Bernstein’s Degrees of Freedom Problem

In 1967, the Soviet biomechanist Nikolai Bernstein posed the fundamental question: How does the brain choose among infinitely many solutions?

ImportantBernstein’s Degrees of Freedom Problem

Given a motor task (e.g., hit a golf ball), the organism has many more DOF than required by the task. This creates a problem:

  • The task constrains only 6 DOF (club position and orientation).
  • The body has 25–30 DOF.
  • Therefore, there are infinitely many ways to accomplish the task.
  • How does the brain choose which one?

This is Bernstein’s degrees of freedom problem. It is the fundamental challenge of motor control.

The traditional answer was that the brain “freezes” extra degrees of freedom: it selects a subset of joints to control and keeps the others rigid. A beginner might lock the wrist and elbow, using only shoulder and hip rotation. This reduces the effective DOF, making the problem easier but less fluid.

Experts do the opposite: they free degrees of freedom. An expert golfer uses all 25–30 DOF, exploiting the full redundancy. This requires more sophisticated neural control but allows optimization for energy efficiency, injury avoidance, and adaptability.

NoteFreezing vs. Freeing DOF

A beginner’s golf swing is characterized by rigidity: the wrist is locked, the elbow stays close to the body, the spine is stiff. The swing uses perhaps 10–12 effective DOF.

An expert’s swing is fluid and coordinated: the wrist is active, the elbow follows a natural arc, the spine rotates smoothly. The swing uses 25–30 DOF.

Why the difference?

In a beginner, motor control is not yet learned. The brain hasn’t developed the neural patterns to coordinate all DOF simultaneously. So it shuts down redundancy: it freezes joints. This makes the task easier to control (lower-dimensional problem) but produces less speed and less consistency.

As the golfer learns, the brain develops these patterns. It learns to exploit redundancy: to coordinate the full chain of joints. This unlocks energy transfer (the whip effect of the club), allows compensation for perturbations (wind, slight mis-hits), and enables the golfer to recover from injuries by redistributing load to other joints.

Self-Organization Through Constraints

So how does the brain actually choose? The answer is not that it picks one solution at random. Rather, the solution is dramatically constrained by physics and physiology:

  • Joint limits: Each joint has a maximum range of motion. This reduces the feasible set to a smaller manifold (the intersection of the solution manifold with the joint-limit constraints).
  • Muscle strength: Not all accelerations are achievable with available torque. This further constrains the feasible solution space.
  • Energy minimization: The brain tends to choose solutions that minimize metabolic cost or joint stress. This singles out a small region of the solution manifold.
  • Stability and safety: The brain avoids configurations that are unstable or place the body in mechanical disadvantage.
  • The two-handed constraint: Both hands grip the club. This is a loop-closure constraint that dramatically shrinks the solution space.

These physical constraints do the work. The brain doesn’t need to pick from infinity; it only needs to navigate a greatly reduced feasible set.

Compensation Patterns

A beautiful consequence of the solution manifold is compensation. When one DOF is limited (due to injury, immobility, or asymmetry), the redundancy allows other DOF to compensate.

Example: A golfer with reduced hip mobility cannot rotate the hips as much. But because the solution manifold is high-dimensional, other joints can take up the slack. The thoracic spine can rotate more, or the shoulders can shift, or the timing can change. The golfer can still hit the same shot, but the null-space motion is different.

This is why skilled golfers can adapt to injuries. And it’s why rehabilitation after injury works: the brain learns new paths through the solution manifold that respect the new constraints.

The 7-DOF Arm — Redundancy in Miniature

{#sec-arm_redundancy_detailed}

Let’s focus on a single limb to make the solution manifold concrete.

DOF Count and Redundancy

The human arm has: - Shoulder: 3 DOF - Elbow: 1 DOF - Forearm rotation: 1 DOF - Wrist: 2 DOF

Total: 7 DOF. The task (hand position and orientation) is 6 DOF. Redundancy: \(7 - 6 = 1\).

The Elbow Circle — A Concrete Null-Space Motion

The null-space motion is the elbow circle. Keep your hand fixed in space (position and orientation). Now swing your elbow outward and inward. Your hand stays at the same location, but your elbow traces a circle.

Mathematically, this is a motion \(\dot{\bm{q}}_0 \in \mathcal{N}(\bm{J})\). The joint angles change, but \(\bm{J} \dot{\bm{q}}_0 = 0\), so the hand velocity is zero.

Application to the Golf Swing

In the golf swing, both hands grip the club, but each arm has its own 1 DOF of redundancy (the elbow circle). This means:

  • At any instant, the lead elbow can point forward (tucked), sideways (neutral), or backward (flying).
  • Each choice is a different point on the solution manifold.
  • Different instructors teach different elbow positions: “Keep your elbow tucked” vs. “Let your elbow fly.” These are not contradictions; they are different points on the same manifold that produce the same task outcome.
  • The optimal elbow position depends on secondary objectives: energy efficiency, injury avoidance, or club head speed.

An instructor might optimize for one criterion (minimal shoulder strain), while an elite golfer naturally chooses another (maximum energy transfer). Both are navigating the solution manifold, but along different paths.

Redundancy and Null-Space Control

{#sec-null_space_control}

NoteNull-Space Optimization in the ZTCF Family

Recall from Chapter 5 and 6 that the system evolves under drift and control:

\[ \dot{\bm{x}}_{\text{state}} = \bm{f}(\bm{x}_{\text{state}}) + \bm{G}(\bm{x}_{\text{state}}) \bm{u} \tag{6}\]

In the golf swing, the state includes joint angles and velocities. The control is muscular torque.

Now, here is the key insight: redundancy means the control matrix \(\bm{G}\) has a null space. Some control directions don’t affect the task (club head motion) but DO affect joint loads, energy storage, and timing.

Specifically, suppose we decompose the control:

\[ \bm{u} = \bm{u}_{\text{task}} + \bm{u}_{\text{null}} \tag{7}\]

where: - \(\bm{u}_{\text{task}}\) is a component that directly drives the task (club head motion). - \(\bm{u}_{\text{null}}\) is a component that lies in the null space of the task Jacobian (doesn’t move the club head).

The brain can use \(\bm{u}_{\text{null}}\) to optimize secondary objectives without affecting the primary task:

  • Minimize joint stress: By distributing load across multiple joints rather than concentrating it in one.
  • Maximize energy transfer: By timing the null-space motion to add energy to the system without changing the club head trajectory.
  • Reduce metabolic cost: By exploiting passive dynamics in the null space (e.g., letting gravity assist in the downswing).
  • Increase robustness: By maintaining stability in the null-space directions even when the task is on track.

This is precisely what skilled golfers do intuitively. They simultaneously: - Control the primary task (club head to the ball, square face, maximum speed). - Optimize secondary objectives in the null space (energy transfer, joint health, adaptability).

This layered control is the hallmark of expertise.

The Pseudoinverse Solution and Null-Space Projection

If we want to command a desired club head velocity \(\dot{\bm{x}}_{\text{desired}}\) while optimizing in the null space, we solve:

\[ \dot{\bm{q}} = \bm{J}^{\dagger} \dot{\bm{x}}_{\text{desired}} + (\bm{I} - \bm{J}^{\dagger} \bm{J}) \bm{z} \tag{8}\]

where: - \(\bm{J}^{\dagger}\) is the Moore-Penrose pseudoinverse: \((J^T J)^{-1} J^T\). - \((\bm{I} - \bm{J}^{\dagger} \bm{J})\) is the orthogonal projection onto \(\mathcal{N}(\bm{J})\). - \(\bm{z}\) is an arbitrary vector (the null-space optimization input).

The first term solves the task: it finds the joint velocities needed to produce the desired club head velocity. The second term adds null-space motion: it optimizes the solution without affecting the task.

TipNull-Space Optimization: Elbow Swivel

Consider a golfer at the top of the backswing. The task is to swing the club down along a specific trajectory. The club head position and velocity are prescribed.

However, the elbow position is not prescribed. It’s part of the null space.

The pseudoinverse gives one solution: a particular elbow position that achieves the task. But there are infinitely many solutions (a 1-DOF family for a 7-DOF arm).

By choosing the null-space vector \(\bm{z}\), the brain can: - Minimize shoulder torque: choose an elbow position that reduces the torque required at the shoulder. - Maximize club head speed: choose an elbow position that adds energy to the system (e.g., allowing the elbow to extend into the swing, converting arm energy into club head speed). - Adapt to perturbations: if the club is slightly off the planned trajectory, adjust the null-space motion to compensate without changing the primary task.

Elite golfers do this automatically. Their null-space choices are learned over thousands of repetitions.

Summary: The Manifold of Solutions

The structure of the golf swing emerges from redundancy:

  • The solution manifold is the set of all joint configurations that achieve a given club head pose.
  • It is high-dimensional (\(n - m = 19\)\(24\) for a golfer with 25–30 DOF aiming at a 6-DOF task).
  • Different golfers, different anthropometries, different paths along manifolds.
  • Physical constraints (joint limits, muscle strength, injury, the two-handed grip) prune the manifold to a manageable subset.
  • The brain exploits this structure to optimize multiple objectives simultaneously: the primary task (hit the ball) and secondary objectives (minimize energy, avoid injury, adapt to perturbations).
  • Redundancy is not a liability; it is the key to adaptation and resilience.

URDF — The Unified Robot Description Format

{#sec-urdf}

URDF is an XML-based format that describes the kinematic and dynamic structure of a robot. It was originally developed for ROS (Robot Operating System) at Willow Garage. Today, URDF is the standard format for describing humanoid robots, industrial arms, and increasingly, human body models.

Basic Structure

A URDF file defines: - Links: Rigid bodies with mass properties and geometry (collision and visual shapes) - Joints: Constraints connecting links - Inertia: Mass and moment of inertia for each link

Key URDF Tags

ImportantURDF Link

A <link> element represents a rigid body. It contains: - <inertial>: Mass and moment of inertia - <collision>: Collision geometry (for contact simulation) - <visual>: Visual mesh for rendering

Inertia values are stored in a 3×3 symmetric matrix \(\bm{I}\), represented as six values: \(I_{xx}, I_{xy}, I_{xz}, I_{yy}, I_{yz}, I_{zz}\).

ImportantURDF Joint

A <joint> element represents a kinematic constraint. It contains: - <parent link>: The parent rigid body - <child link>: The child rigid body - <origin>: Relative position/orientation (x, y, z, roll, pitch, yaw) - <axis>: Direction of motion (for revolute: unit vector; for prismatic: direction of translation) - <limit>: Range of motion (lower, upper bounds) and effort/velocity limits - <dynamics>: Damping and friction coefficients - type: revolute, continuous, prismatic, floating, planar, fixed

URDF Joint Types

  • revolute: Rotation about a fixed axis, with position limits
  • continuous: Rotation about a fixed axis, unlimited (can spin freely, like a wheel)
  • prismatic: Translation along a fixed axis
  • floating: 6-DOF free motion (used for objects not attached to anything)
  • planar: 3-DOF motion in a plane (2 translations + 1 rotation)
  • fixed: 0-DOF (rigid connection)

Critical Limitation: URDF Cannot Represent Closed Loops

URDF describes a kinematic tree structure. Each link has exactly one parent. This means URDF cannot directly represent a closed kinematic loop.

For example, the golf swing has a loop: both hands grip the club. If we model the club as a separate body connected to both hands, this is a loop. URDF cannot handle this.

Workarounds: - Ignore one side of the loop: Attach the club to one hand (lead hand) via a fixed joint, and ignore the trail hand’s contact with the club. This is simple but inaccurate.

  • Use a dynamics engine that supports loops: Some simulators (Drake, MuJoCo, PyBullet) can load URDF and add constraint equations to handle loops. The loop is treated as a constraint in the dynamics solver, not as part of the kinematic tree.

  • Use SDF instead of URDF: The Simulation Description Format (SDF) supports multiple kinematic trees and joint constraints, so it can represent loops. SDF is more complex but more general.

For our golf swing model, we’ll use approach 2: load the URDF into a dynamics engine and add a constraint that the trail hand must stay attached to the club grip.

Building a Full-Body Golf URDF

{#sec-golf_urdf}

Kinematic Structure

Since URDF requires a tree, we’ll model the golf swing as a branching tree with the pelvis as the root:

pelvis (root)
|-- lumbar
|   +-- thorax
|       |-- lead_shoulder
|       |   +-- lead_upper_arm
|       |       +-- lead_forearm
|       |           +-- lead_hand
|       |               +-- club
|       +-- trail_shoulder
|           +-- trail_upper_arm
|               +-- trail_forearm
|                   +-- trail_hand
|-- lead_hip
|   +-- lead_upper_leg
|       +-- lead_lower_leg
|           +-- lead_foot
+-- trail_hip
    +-- trail_upper_leg
        +-- trail_lower_leg
            +-- trail_foot

This tree has 11 links (pelvis + 10 others) and 10 joints. The DOF is the sum of joint DOFs: \[\text{DOF} = 3 + 3 + 3 + 2 + 2 + 3 + 2 + 2 + 3 + 1 + 2 + 3 + 1 + 2 = 32 \text{ DOF (if we include hip flexion/extension, leg DOFs)}\]

For a simplified upper-body model (ignoring legs): \[\text{DOF} = 3 + 3 + 3 + 2 + 2 + 3 + 2 + 2 = 20 \text{ DOF}\]

Segment Parameters: Anthropometry

To populate the URDF with realistic inertia values, we use anthropometric data. The most widely used data comes from de Leva (1996) (De Leva 1996), who measured body segment masses and moments of inertia on cadavers and living subjects.

TipAnthropometric Data (De Leva 1996)

For a 70 kg male, typical segment masses are:

Segment Mass (% total) Mass (kg)
Upper arm 2.7 1.9
Forearm 1.6 1.1
Hand 0.6 0.4
Thorax 16 11.2
Lumbar (part of thorax)
Upper leg 10 7.0
Lower leg 4.7 3.3
Foot 1.5 1.0

For moments of inertia, de Leva provides regression equations. For example, the moment of inertia of the forearm about its long axis is: \[I_{zz}^{\text{forearm}} \approx 0.016 \times m \times L^2\] where \(m\) is forearm mass and \(L\) is forearm length.

A complete URDF would include all segment masses and inertias computed from de Leva’s data scaled to the athlete’s body weight.

A Simplified Golf Swing URDF (Upper Body)

<?xml version="1.0"?>
<robot name="golfer">

  <!-- Pelvis (base, fixed to ground) -->
  <link name="pelvis">
    <inertial>
      <mass value="10.0"/>
      <origin xyz="0 0 0"/>
      <inertia ixx="0.5" ixy="0" ixz="0"
               iyy="0.5" iyz="0"
               izz="0.5"/>
    </inertial>
  </link>

  <!-- Lumbar vertebrae -->
  <link name="lumbar">
    <inertial>
      <mass value="2.0"/>
      <origin xyz="0 0 0.1"/>
      <inertia ixx="0.02" ixy="0" ixz="0"
               iyy="0.02" iyz="0"
               izz="0.01"/>
    </inertial>
  </link>

  <!-- Thorax (ribcage) -->
  <link name="thorax">
    <inertial>
      <mass value="11.0"/>
      <origin xyz="0 0 0.2"/>
      <inertia ixx="0.3" ixy="0" ixz="0"
               iyy="0.3" iyz="0"
               izz="0.15"/>
    </inertial>
  </link>

  <!-- Trail shoulder / upper arm -->
  <link name="trail_upper_arm">
    <inertial>
      <mass value="2.0"/>
      <origin xyz="0 -0.15 0"/>
      <inertia ixx="0.05" ixy="0" ixz="0"
               iyy="0.01" iyz="0"
               izz="0.05"/>
    </inertial>
  </link>

  <!-- Trail forearm -->
  <link name="trail_forearm">
    <inertial>
      <mass value="1.1"/>
      <origin xyz="0 -0.15 0"/>
      <inertia ixx="0.03" ixy="0" ixz="0"
               iyy="0.01" iyz="0"
               izz="0.03"/>
    </inertial>
  </link>

  <!-- Trail hand -->
  <link name="trail_hand">
    <inertial>
      <mass value="0.4"/>
      <origin xyz="0 -0.05 0"/>
      <inertia ixx="0.001" ixy="0" ixz="0"
               iyy="0.001" iyz="0"
               izz="0.001"/>
    </inertial>
  </link>

  <!-- Lead shoulder / upper arm (same for left side) -->
  <link name="lead_upper_arm">
    <inertial>
      <mass value="2.0"/>
      <origin xyz="0 0.15 0"/>
      <inertia ixx="0.05" ixy="0" ixz="0"
               iyy="0.01" iyz="0"
               izz="0.05"/>
    </inertial>
  </link>

  <!-- Lead forearm -->
  <link name="lead_forearm">
    <inertial>
      <mass value="1.1"/>
      <origin xyz="0 0.15 0"/>
      <inertia ixx="0.03" ixy="0" ixz="0"
               iyy="0.01" iyz="0"
               izz="0.03"/>
    </inertial>
  </link>

  <!-- Lead hand -->
  <link name="lead_hand">
    <inertial>
      <mass value="0.4"/>
      <origin xyz="0 0.05 0"/>
      <inertia ixx="0.001" ixy="0" ixz="0"
               iyy="0.001" iyz="0"
               izz="0.001"/>
    </inertial>
  </link>

  <!-- Golf club -->
  <link name="club">
    <inertial>
      <mass value="0.2"/>
      <origin xyz="0.5 0 0"/>
      <inertia ixx="0.005" ixy="0" ixz="0"
               iyy="0.005" iyz="0"
               izz="0.001"/>
    </inertial>
  </link>

  <!-- Lumbar-thorax joint (3-DOF spherical) -->
  <joint name="lumbar_joint" type="revolute">
    <parent link="pelvis"/>
    <child link="lumbar"/>
    <origin xyz="0 0 0" rpy="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit lower="-0.5" upper="0.5" effort="100" velocity="1.0"/>
  </joint>

  <!-- Note: A complete 3-DOF joint would require three revolutes -->
  <!-- We'll simplify and use 1-DOF revolutes for each axis -->
  <!-- ... (additional joints for thorax, shoulders, elbows, wrists) ...-->

</robot>

Note: This is a simplified excerpt. A complete URDF would include all 20 joints (3 per arm shoulder, 2 per elbow, 2 per wrist, 3 for lumbar, 3 for thorax) and would require careful definition of each axis.

From URDF to Simulation — Drake, MuJoCo, and Pinocchio

{#sec-simulation_engines}

Once you have a URDF, you can load it into a dynamics engine. These engines compute the equations of motion automatically.

Drake (MIT)

Drake is a C++/Python library for dynamics, control, and optimization. It includes: - Symbolic and numerical differentiation - Inverse and forward dynamics - Trajectory optimization - Contact mechanics (collision and friction)

For a golf swing, Drake can: 1. Load the golf URDF 2. Compute the mass matrix \(\bm{M}(\bm{q})\) symbolically 3. Compute Coriolis \(\bm{C}(\bm{q},\dot{\bm{q}})\) and gravity \(\bm{g}(\bm{q})\) symbolically 4. Integrate the equations \(\bm{M}\ddot{\bm{q}} = \bm{u} - \bm{C}\dot{\bm{q}} - \bm{g}\) forward in time 5. Optimize muscle activations to produce a desired swing

MuJoCo (DeepMind)

MuJoCo (Multi-Joint dynamics with Contact) is a physics engine designed for robotics and biomechanics. It’s fast, accurate, and widely used for reinforcement learning.

Key features: - Can simulate 1000+ timesteps per second for a humanoid model - Supports contact forces (Coulomb friction, rolling resistance) - Supports tendons (muscles with nonlinear force-length relations) - Can optimize policies using reinforcement learning

For the golf swing, MuJoCo is ideal for learning-based approaches. You can train a neural network policy to swing a golf club by reinforcement learning in MuJoCo simulation.

Pinocchio (INRIA)

Pinocchio is a lightweight library focused on efficient computation of dynamics algorithms. It computes: - Forward kinematics: given \(\bm{q}\) and \(\dot{\bm{q}}\), compute link positions and velocities - Jacobians: \(\bm{J}(\bm{q})\) and time derivatives \(\dot{\bm{J}}(\bm{q},\dot{\bm{q}})\) - Inverse dynamics: given \(\bm{q}, \dot{\bm{q}}, \ddot{\bm{q}}\), compute required torques - Forward dynamics: given torques, compute accelerations

Pinocchio is excellent for trajectory optimization. It can efficiently compute derivatives of costs and constraints, which are needed for gradient-based optimization.

Computing the Equations of Motion Automatically

Here’s the power of these tools. In Chapter 9, we derived the equations of motion:

\[\bm{M}(\bm{q})\ddot{\bm{q}} = \bm{u} - \bm{C}(\bm{q},\dot{\bm{q}})\dot{\bm{q}} - \bm{g}(\bm{q})\]

Deriving these by hand for a 20-DOF golf swing model is tedious and error-prone. But Drake or Pinocchio computes them automatically from the URDF.

TipAutomatic Dynamics Computation

In Drake (Python):

import pydrake
from pydrake.multibody.parsing import Parser
from pydrake.systems.framework import DiagramBuilder

# Load the golf URDF
parser = Parser()
plant = parser.AddModelFromFile("golfer.urdf")

# Plant automatically computes M, C, g
# To get M(q) at a specific configuration:
context = plant.CreateDefaultContext()
M = plant.CalcMassMatrixViaInverseDynamics(context)

# To integrate the dynamics forward:
simulator = Simulator(plant)
context = simulator.get_mutable_context()
simulator.Initialize()
simulator.AdvanceTo(final_time=1.0)

The library handles all the complexity. You specify the structure (URDF), and the engine does the computation.

Sensitivity Analysis — What Happens When Parameters Are Wrong?

{#sec-sensitivity}

Real biomechanics has uncertainties. Segment masses, lengths, and inertia are measured with 5-10% error. How sensitive is our golf swing model to these errors?

Sources of Uncertainty

  • Mass and anthropometry: De Leva data is averaged over a population. Individual athletes differ.
  • Segment length: Estimated from marker positions in motion capture. Error: 1-2 cm.
  • Inertia tensor: Computed from regression equations. Error: 10-20%.
  • Joint axis location: Joint centers are inferred, not directly measured. Error: 5 mm.
  • Initial conditions: Motion capture data has noise. Error: 5-10 mm in position, 5{}^in angle.

Sensitivity to Anthropometry

A natural question: if the forearm mass is \(m = 1.1 \pm 0.1\) kg, how much does this affect the club speed at impact?

This is a sensitivity analysis. We compute:

\[\text{Sensitivity} = \frac{\partial v_{\text{club}}}{\partial m_{\text{forearm}}}\]

TipSensitivity of Club Speed to Forearm Mass

Using a simplified arm model (2-segment arm, no wrist motion), the club speed depends on: - Shoulder torque \(\tau_s\) (larger shoulder can swing faster) - Arm configuration (forearm length, mass distribution) - Forearm inertia

A rough estimate: increasing the forearm mass by 10% decreases the club speed by 0.5-1%. The effect is small because the club speed is more sensitive to the initial shoulder angular velocity than to forearm inertia.

More sensitive: The early downswing (first 0.1 s) is very sensitive to initial angular velocity. If the pelvis rotation rate is 1{}^off, the club path is significantly altered.

Sensitivity to Initial Conditions

The golf swing is chaotic in a weak sense: small changes in initial conditions lead to larger changes in the outcome. This is because the swing is controlled by initial conditions (the backswing position, velocity, and acceleration), and any error in measuring these propagates forward.

Key finding: The ZTCF (Zero Torque Counterfactual, from Chapter 20) is moderately sensitive to anthropometric parameters but extremely sensitive to initial conditions and joint torques.

This is why motion capture accuracy matters more than perfectly measured segment masses. Getting the initial arm position and velocity correct is more important than having exact segment inertias.

ImportantPractical Implications

When building a golf biomechanics model:

  • Prioritize motion capture accuracy: Invest in high-quality mocap (120+ Hz, multiple cameras, careful marker placement). This is more important than precise anthropometry.

  • Use population-average anthropometry: De Leva’s data is good enough. Refining it further doesn’t help if your mocap is noisy.

  • Include sensitivity bounds: When reporting results (club speed, joint torques), include error bars showing the effect of \(\pm 10%\) anthropometric errors.

  • Test robustness: Run simulations with perturbed parameters. If your conclusions hold across a 20% parameter range, you have robust findings.

Building Intuition: From URDF to Golf Physics

{#sec-intuition}

Let’s return to the big picture. Why does all this matter for golf?

The Redundancy Principle

The golf swing has 20-30 DOF in the upper body. The task (hit the ball straight to a target) uses only 6 DOF (club position and orientation at impact). This leaves 15-25 DOF of redundancy.

Elite golfers exploit this redundancy: - They can produce the same impact position via different arm/shoulder configurations - Different configurations have different energy costs, different injury risks, different feel - Over a career, they learn the null-space motions that work best for their body

A robot with redundancy is more adaptable, more robust to perturbations, and more efficient. The human body is a redundant robot.

The Identification Problem

If we want to understand how a golfer produces a particular swing, we face an inverse problem: given the club trajectory, find the joint torques and muscle activations that produce it.

With 20 DOF, this is underdetermined: there are infinitely many solutions. The nervous system must choose one. Which one?

Optimization theory suggests the nervous system minimizes some cost (muscle activation, energy, jerks, joint torques). Different costs lead to different solutions. Biomechanics must find the right cost.

A URDF + dynamics engine allows us to: 1. Propose a cost function 2. Optimize the muscle activations 3. Check if the predicted swing matches recorded mocap 4. Iteratively refine the cost function

This is the future of golf biomechanics: mathematical models that explain not just what the golfer does, but why they choose that particular swing pattern.

ImportantKey Takeaways: From URDF to Physics
  • Grübler-Kutzbach formula: Counts the DOF of any kinematic system. For a tree: \(\sum f_i\). For a mechanism with loops: account for loop closure constraints.

  • Human arm redundancy: 7 DOF to achieve a 6-DOF task. The 1 extra DOF is the null space (elbow swivel). Redundancy allows optimization of secondary objectives.

  • URDF and dynamics: Define the structure, let the engine compute \(\bm{M}, \bm{C}, \bm{g}\). This enables forward simulation, inverse dynamics, and trajectory optimization.

  • Sensitivity: Initial conditions matter more than anthropometry. High-quality motion capture is more valuable than perfectly tuned segment parameters.

  • Optimization and redundancy: The nervous system solves an ill-posed inverse problem. Propose a cost, optimize, compare to data. Iterate.

Looking Ahead

We now have a complete musculoskeletal model: joints with defined degrees of freedom, kinematic chains described in URDF, and dynamics engines to simulate them. But a model without a controller is just a ragdoll. Who—or what—controls the swing? Part VIII turns to the remarkable organ that orchestrates all of this: the human brain. Chapter 24 examines how the brain solves the control problem under severe constraints of delay, noise, and bandwidth.

Chapter Exercises

  • DOF Counting: For the golf swing model described in Section 1.2, compute the DOF using the Grübler formula:

    • Count the bodies \(N\) (include ground)
    • Count the joints \(J\) and their DOFs \(f_i\)
    • Compute \(\mathrm{DOF} = 6(N-1) - \sum(6-f_i)\)
    • If the model includes a two-handed grip on the club, subtract the loop closure constraints
  • Null-Space Motion: For a 7-DOF arm (shoulder 3, elbow 1, pronation 1, wrist 2):

    • Describe the null-space motion (what can the arm do without moving the hand?)
    • If the task is to keep the hand at a fixed position, how many possible elbow positions exist?
    • If you add the constraint that the elbow must stay at a specific height (z-coordinate), how many DOF remain in the null space?
  • URDF Construction: Write a minimal URDF for a golfer’s spine and trail arm (3-link: thorax, upper arm, forearm). Include:

    • Three links with realistic inertias (use de Leva data for 70 kg athlete)
    • Two 3-DOF spherical joints (thorax rotation, shoulder) implemented as three sequential revolutes (ZYX order)
    • Masses and inertia tensors
  • Anthropometric Scaling: If a golfer is 80 kg instead of 70 kg, how would you scale the segment masses from de Leva’s data? How would the moments of inertia scale?

  • Sensitivity Calculation: Suppose club speed at impact is \(v_{\text{club}} = 45\) m/s. A sensitivity analysis shows \(\frac{\partial v}{\partial m_{\text{forearm}}} = -0.05\) m/s per kg. If forearm mass is uncertain by \(\pm 0.2\) kg, what is the uncertainty in club speed?

  • Loop Constraint: Explain why a two-handed golf grip creates a loop constraint in the kinematic model. How many constraints does this loop impose? (Position: 3, orientation: 3, or less?)

  • Redundancy in Golf: Explain why elbow swivel (null-space motion) matters for golf swing consistency. Can two golfers produce the same club trajectory with different arm configurations? Give a specific example.

References

De Leva, Paolo. 1996. “Adjustments to Zatsiorsky-Seluyanov’s Segment Inertia Parameters.” Journal of Biomechanics 29 (9): 1223–30. https://doi.org/10.1016/0021-9290(95)00178-6.
Delp, S. L., F. C. Anderson, A. S. Arnold, et al. 2007. “OpenSim: Open-Source Software to Create and Analyze Dynamic Simulations of Movement.” IEEE Transactions on Biomedical Engineering 54 (11): 1940–50. https://doi.org/10.1109/TBME.2007.901024.
Glazier, Paul S. 2011. “Movement Variability in the Golf Swing: Theoretical, Methodological, and Practical Issues.” Research Quarterly for Exercise and Sport 82 (2): 157–61. https://doi.org/10.1080/02701367.2011.10599742.
Holzbaur, Katherine R. S., Wendy M. Murray, and Scott L. Delp. 2005. “A Model of the Upper Extremity for Simulating Musculoskeletal Surgery and Analyzing Neuromuscular Control.” Annals of Biomedical Engineering 33 (6): 829–40. https://doi.org/10.1007/s10439-005-3320-7.
Horan, Sean A., Kerrie Evans, Norman R. Morris, and Justin J. Kavanagh. 2010. “Swing Kinematics of Male and Female Skilled Golfers Following Clubhead Augmentation.” International Journal of Sports Science and Coaching 5 (2): 275–84.
Myers, Joseph, Scott Lephart, Yung-Shen Tsai, Timothy Sell, James Smoliga, and John Jolly. 2008. “The Role of Upper Torso and Pelvis Rotation in Driving Performance During the Golf Swing.” Journal of Sports Sciences 26 (2): 181–88. https://doi.org/10.1080/02640410701373543.
Nesbit, Steven M. 2005. “A Three Dimensional Kinematic and Kinetic Study of the Golf Swing.” Journal of Sports Science and Medicine 4: 499–519.
Rajagopal, Ajay, Christopher L. Dembia, Scott L. DeLp, and Jennifer L. Hicks. 2016. “Full-Body Musculoskeletal Model for Muscle-Driven Simulation of Human Motion.” IEEE Transactions on Biomedical Engineering 63 (10): 2068–79. https://doi.org/10.1109/TBME.2016.2586891.