Chapter 3: Robot Taxonomy and Classification

Lesson 2: Stationary vs. Moving-Base Systems

This lesson introduces a major axis of robot taxonomy: whether the robot’s base is fixed to the environment (stationary-base) or is itself a dynamic part of the system (moving-base). We formalize the distinction using degrees of freedom, generalized coordinates, and energy-based modeling. The control and design consequences of base mobility are highlighted through coupled dynamics and underactuation.

1. Conceptual Overview

From Lesson 1, you have seen broad families such as manipulators and mobile robots. This lesson refines that view by asking a simpler but structural question: is the robot’s base inertially fixed or dynamically moving?

A stationary-base system is attached to ground or a rigid support. Its base coordinate is constant, and only internal joints move. Typical examples: industrial arms, gantry robots, many parallel mechanisms.

A moving-base system has a base that translates and/or rotates. The base is part of the robot’s configuration and dynamics. Examples: wheeled robots, legged robots, aerial robots, mobile manipulators, humanoids.

flowchart TD
  S["Start: given a robot"] --> Q1["Is base rigidly fixed to environment?"]
  Q1 -->|yes| FB["Stationary-base system"]
  Q1 -->|no| MB["Moving-base system"]
  FB --> FB1["Internal joints define motion"]
  MB --> MB1["Base + internal joints define motion"]
  MB1 --> MB2["Dynamics are coupled"]
        

The distinction is not only geometric but energetic: in moving-base systems, momentum exchange between base and joints is unavoidable. We now formalize this.

2. Degrees of Freedom (DOF) and Configuration Modeling

Let the robot configuration be represented by generalized coordinates \( \mathbf{q} \in \mathbb{R}^n \). For a stationary-base manipulator, \( \mathbf{q} \) contains only joint coordinates (revolute/prismatic variables).

For a moving-base system we partition coordinates into base and internal parts: \( \mathbf{x}_b \in \mathbb{R}^m \) (base pose parameters) and \( \mathbf{q} \in \mathbb{R}^n \) (joint variables), forming the full configuration \( \mathbf{z} = \begin{bmatrix}\mathbf{x}_b \\ \mathbf{q}\end{bmatrix} \in \mathbb{R}^{m+n} \).

flowchart LR
  Z["z = [xb; q]"] --> XB["xb: base coordinates (m DOF)"]
  Z --> Q["q: joint coordinates (n DOF)"]
  XB --> EX1["translation/rotation of base"]
  Q --> EX2["internal joint motion"]
        

The configuration space is thus \( \mathcal{C}_{fixed} \subseteq \mathbb{R}^n \) for stationary-base systems and \( \mathcal{C}_{moving} \subseteq \mathbb{R}^{m+n} \) for moving-base systems. Even before dynamics, this dimensional increase changes planning and control complexity.

3. Dynamics of Stationary-Base Systems

Because you are familiar with linear control, we write standard nonlinear robot dynamics in a control-affine form without assuming any kinematic details yet. For a stationary-base robot with generalized coordinates \( \mathbf{q} \), the Lagrangian is \( \mathcal{L}(\mathbf{q}, \dot{\mathbf{q}}) = T(\mathbf{q}, \dot{\mathbf{q}}) - V(\mathbf{q}) \), where \(T\) is kinetic and \(V\) potential energy.

Euler–Lagrange equations yield:

\[ \frac{d}{dt}\left(\frac{\partial \mathcal{L}}{\partial \dot{\mathbf{q}}}\right) - \frac{\partial \mathcal{L}}{\partial \mathbf{q}} = \boldsymbol{\tau}. \]

Under standard assumptions (rigid links, smooth energies), this can be written:

\[ \mathbf{M}(\mathbf{q}) \ddot{\mathbf{q}} + \mathbf{C}(\mathbf{q},\dot{\mathbf{q}})\dot{\mathbf{q}} + \mathbf{g}(\mathbf{q}) = \boldsymbol{\tau}. \]

Key structural properties (proved in standard robotics texts, but we sketch them):

  • Symmetry and positive definiteness of mass matrix: \( \mathbf{M}(\mathbf{q}) = \mathbf{M}(\mathbf{q})^\top \) and \( \mathbf{v}^\top \mathbf{M}(\mathbf{q}) \mathbf{v} > 0 \) for any nonzero \( \mathbf{v} \).
  • Energy balance: in the absence of actuation and dissipation, total mechanical energy is conserved.

Proof sketch (energy conservation): Let the total energy be \( E(\mathbf{q},\dot{\mathbf{q}}) = T(\mathbf{q},\dot{\mathbf{q}}) + V(\mathbf{q}) \). Multiply the dynamics by \( \dot{\mathbf{q}}^\top \):

\[ \dot{\mathbf{q}}^\top \mathbf{M}(\mathbf{q}) \ddot{\mathbf{q}} + \dot{\mathbf{q}}^\top \mathbf{C}(\mathbf{q},\dot{\mathbf{q}})\dot{\mathbf{q}} + \dot{\mathbf{q}}^\top \mathbf{g}(\mathbf{q}) = \dot{\mathbf{q}}^\top \boldsymbol{\tau}. \]

For a stationary-base robot, \( \dot{\mathbf{q}}^\top \mathbf{M} \ddot{\mathbf{q}} = \frac{d}{dt}T \) and \( \dot{\mathbf{q}}^\top \mathbf{g} = \frac{d}{dt}V \). Moreover, \( \dot{\mathbf{q}}^\top \mathbf{C} \dot{\mathbf{q}} = 0 \) (a standard skew-symmetry identity). Hence: \( \frac{d}{dt}(T+V) = \dot{\mathbf{q}}^\top \boldsymbol{\tau} \). If \( \boldsymbol{\tau}=\mathbf{0} \), then \( \frac{dE}{dt}=0 \), proving conservation.

4. Dynamics of Moving-Base Systems

For a moving-base robot, generalized coordinates are \( \mathbf{z}=\begin{bmatrix}\mathbf{x}_b \\ \mathbf{q}\end{bmatrix} \). The Lagrangian becomes \( \mathcal{L}(\mathbf{z},\dot{\mathbf{z}})=T(\mathbf{z},\dot{\mathbf{z}})-V(\mathbf{z}) \), and Euler–Lagrange gives:

\[ \mathbf{M}(\mathbf{z}) \ddot{\mathbf{z}} + \mathbf{C}(\mathbf{z},\dot{\mathbf{z}})\dot{\mathbf{z}} + \mathbf{g}(\mathbf{z}) = \mathbf{u}. \]

Partitioning reveals coupling:

\[ \begin{bmatrix} \mathbf{M}_{bb}(\mathbf{z}) & \mathbf{M}_{bq}(\mathbf{z}) \\ \mathbf{M}_{qb}(\mathbf{z}) & \mathbf{M}_{qq}(\mathbf{z}) \end{bmatrix} \begin{bmatrix} \ddot{\mathbf{x}}_b \\ \ddot{\mathbf{q}} \end{bmatrix} + \begin{bmatrix} \mathbf{h}_b(\mathbf{z},\dot{\mathbf{z}}) \\ \mathbf{h}_q(\mathbf{z},\dot{\mathbf{z}}) \end{bmatrix} = \begin{bmatrix} \mathbf{u}_b \\ \boldsymbol{\tau} \end{bmatrix}. \]

Here \( \mathbf{M}_{bq} \) and \( \mathbf{M}_{qb} \) are cross-inertia terms. If they are nonzero, joint accelerations produce base reactions, and base motion produces apparent forces in joint space.

Implication 1 (momentum exchange): If the base is unactuated (\( \mathbf{u}_b=\mathbf{0} \)), the system is often underactuated: joint torques \( \boldsymbol{\tau} \) must indirectly control some base DOF via coupling.

Implication 2 (energy structure persists): The same energy proof from Section 3 holds in full coordinates, giving: \( \frac{d}{dt}(T+V)=\dot{\mathbf{x}}_b^\top \mathbf{u}_b + \dot{\mathbf{q}}^\top \boldsymbol{\tau} \). Thus mobility does not break mechanical passivity; it expands the power ports.

Optional constraint view: Many mobile bases have velocity constraints \( \mathbf{A}(\mathbf{x}_b)\dot{\mathbf{x}}_b=\mathbf{0} \). These reduce feasible velocities, but still keep base coordinates dynamic. (We will treat such constraints carefully in later courses.)

5. Design and Control Consequences

The taxonomic split changes what designers and control engineers care about:

\[ \text{DOF gain}:\quad n \;\;\to\;\; n+m \quad\Rightarrow\quad \dim(\mathcal{C}) \text{ increases}. \]

  • Stationary-base: actuation directly addresses all joint DOF. Control can often be organized joint-by-joint with only internal coupling.
  • Moving-base: base mobility introduces additional DOF and cross-coupling, producing:
    • Reaction forces (joints move base).
    • Apparent forces (base motion disturbs joints).
    • Underactuation if some base DOF lack direct actuators.

A simple linear-control interpretation: around an equilibrium, the stationary-base dynamics linearize to \( \delta\ddot{\mathbf{q}} = \mathbf{A}\delta\mathbf{q} + \mathbf{B}\delta\boldsymbol{\tau} \), whereas moving-base systems yield a larger coupled linearization in \( \delta\mathbf{z} \) with potentially fewer inputs than states— a key difference for stabilizability.

6. Minimal Numerical Example (Fixed vs. Moving Base)

We compare two toy systems:

  1. Fixed-base 1-DOF arm: a single rotary joint with inertia \( I \).
  2. Moving-base arm on a cart: cart position \( x \) plus the same joint \( q \).

The fixed-base dynamics are:

\[ I \ddot{q} + b\dot{q} + k q = \tau. \]

The moving-base coupled dynamics (simplified) are:

\[ \begin{bmatrix} M + m & m\ell\cos q \\ m\ell\cos q & I + m\ell^2 \end{bmatrix} \begin{bmatrix} \ddot{x} \\ \ddot{q} \end{bmatrix} + \begin{bmatrix} -m\ell\sin q \, \dot{q}^2 \\ m g \ell \sin q \end{bmatrix} = \begin{bmatrix} u_b \\ \tau \end{bmatrix}. \]

Note the cross term \( m\ell\cos q \) that couples cart and arm. If \( u_b=0 \), cart motion is indirectly driven by \( \tau \).

6.1 Python (NumPy/SciPy)


import numpy as np
from scipy.integrate import solve_ivp

# Parameters
I = 0.2      # arm inertia
b = 0.05     # viscous friction
k = 1.0      # linear stiffness (small-angle approx)

M = 1.0      # cart mass
m = 0.5      # arm mass lumped
ell = 0.6    # COM distance
g = 9.81

# PD controller for q
qd, qdd = 0.0, 0.0
Kp, Kd = 15.0, 3.0

def fixed_base(t, s):
    q, qdot = s
    tau = -Kp*(q-qd) - Kd*(qdot-qdd)
    qddot = (tau - b*qdot - k*q)/I
    return [qdot, qddot]

def moving_base(t, s):
    x, xdot, q, qdot = s
    tau = -Kp*(q-qd) - Kd*qdot
    ub  = 0.0  # unactuated base to show coupling

    # Mass matrix
    M11 = M + m
    M12 = m*ell*np.cos(q)
    M22 = I + m*ell**2
    Mass = np.array([[M11, M12],
                     [M12, M22]])

    # Bias terms
    h1 = -m*ell*np.sin(q)*qdot**2
    h2 =  m*g*ell*np.sin(q)

    acc = np.linalg.solve(Mass, np.array([ub - h1, tau - h2]))
    xddot, qddot = acc
    return [xdot, xddot, qdot, qddot]

# Simulate both systems
tspan = (0, 5)

sol_fixed = solve_ivp(fixed_base, tspan, [0.5, 0.0], max_step=0.01)
sol_move  = solve_ivp(moving_base, tspan, [0.0, 0.0, 0.5, 0.0], max_step=0.01)

print("Fixed-base final q =", sol_fixed.y[0,-1])
print("Moving-base final q =", sol_move.y[2,-1], "final x =", sol_move.y[0,-1])
      

6.2 C++ (Eigen for linear algebra)


#include <iostream>
#include <Eigen/Dense>
#include <cmath>

using Eigen::Matrix2d;
using Eigen::Vector2d;

struct State {
  double x, xdot, q, qdot;
};

int main() {
  // Parameters
  const double I=0.2, M=1.0, m=0.5, ell=0.6, g=9.81;
  const double Kp=15.0, Kd=3.0;

  double dt = 0.001;
  State s{0.0, 0.0, 0.5, 0.0};

  for(int i=0; i<5000; ++i){
    double tau = -Kp*s.q - Kd*s.qdot;
    double ub  = 0.0;

    // Mass matrix
    double M11 = M + m;
    double M12 = m*ell*std::cos(s.q);
    double M22 = I + m*ell*ell;

    Matrix2d Mass;
    Mass << M11, M12,
            M12, M22;

    // Bias terms
    double h1 = -m*ell*std::sin(s.q)*s.qdot*s.qdot;
    double h2 =  m*g*ell*std::sin(s.q);

    Vector2d rhs;
    rhs << ub - h1, tau - h2;

    Vector2d acc = Mass.lu().solve(rhs);
    double xddot = acc(0);
    double qddot = acc(1);

    // Euler integration
    s.x    += dt*s.xdot;
    s.xdot += dt*xddot;
    s.q    += dt*s.qdot;
    s.qdot += dt*qddot;
  }

  std::cout << "Final q=" << s.q << " Final x=" << s.x << std::endl;
  return 0;
}
      

6.3 Java (simple RK4 integrator)


public class MovingBaseArmSim {

    static class State {
        double x, xdot, q, qdot;
        State(double x, double xdot, double q, double qdot){
            this.x=x; this.xdot=xdot; this.q=q; this.qdot=qdot;
        }
        State copy(){ return new State(x, xdot, q, qdot); }
    }

    // Parameters
    static double I=0.2, M=1.0, m=0.5, ell=0.6, g=9.81;
    static double Kp=15.0, Kd=3.0;

    static State f(State s){
        double tau = -Kp*s.q - Kd*s.qdot;
        double ub  = 0.0;

        double M11 = M + m;
        double M12 = m*ell*Math.cos(s.q);
        double M22 = I + m*ell*ell;

        double det = M11*M22 - M12*M12;

        double h1 = -m*ell*Math.sin(s.q)*s.qdot*s.qdot;
        double h2 =  m*g*ell*Math.sin(s.q);

        double rhs1 = ub - h1;
        double rhs2 = tau - h2;

        // Solve 2x2 system manually
        double xddot = ( M22*rhs1 - M12*rhs2)/det;
        double qddot = (-M12*rhs1 + M11*rhs2)/det;

        return new State(s.xdot, xddot, s.qdot, qddot);
    }

    static State rk4Step(State s, double dt){
        State k1 = f(s);
        State s2 = new State(s.x + 0.5*dt*k1.x, s.xdot + 0.5*dt*k1.xdot,
                             s.q + 0.5*dt*k1.q, s.qdot + 0.5*dt*k1.qdot);
        State k2 = f(s2);
        State s3 = new State(s.x + 0.5*dt*k2.x, s.xdot + 0.5*dt*k2.xdot,
                             s.q + 0.5*dt*k2.q, s.qdot + 0.5*dt*k2.qdot);
        State k3 = f(s3);
        State s4 = new State(s.x + dt*k3.x, s.xdot + dt*k3.xdot,
                             s.q + dt*k3.q, s.qdot + dt*k3.qdot);
        State k4 = f(s4);

        return new State(
            s.x    + dt*(k1.x    + 2*k2.x    + 2*k3.x    + k4.x)/6.0,
            s.xdot + dt*(k1.xdot + 2*k2.xdot + 2*k3.xdot + k4.xdot)/6.0,
            s.q    + dt*(k1.q    + 2*k2.q    + 2*k3.q    + k4.q)/6.0,
            s.qdot + dt*(k1.qdot + 2*k2.qdot + 2*k3.qdot + k4.qdot)/6.0
        );
    }

    public static void main(String[] args){
        State s = new State(0,0,0.5,0);
        double dt=0.001;
        for(int i=0;i<5000;i++){
            s = rk4Step(s, dt);
        }
        System.out.println("Final q=" + s.q + " Final x=" + s.x);
    }
}
      

6.4 MATLAB / Simulink-compatible script


% Moving-base arm on cart (ode45)
I=0.2; M=1.0; m=0.5; ell=0.6; g=9.81;
Kp=15; Kd=3;

f = @(t,s) dyn(t,s,I,M,m,ell,g,Kp,Kd);

tspan = [0 5];
s0 = [0;0;0.5;0]; % [x; xdot; q; qdot]
sol = ode45(f, tspan, s0);

xf = sol.y(1,end);
qf = sol.y(3,end);
disp(['Final q=', num2str(qf), ' Final x=', num2str(xf)]);

function ds = dyn(~, s, I, M, m, ell, g, Kp, Kd)
  x=s(1); xdot=s(2); q=s(3); qdot=s(4);

  tau = -Kp*q - Kd*qdot;
  ub = 0; % unactuated base

  M11 = M + m;
  M12 = m*ell*cos(q);
  M22 = I + m*ell^2;

  Mass = [M11 M12; M12 M22];

  h1 = -m*ell*sin(q)*qdot^2;
  h2 =  m*g*ell*sin(q);

  acc = Mass \ [ub - h1; tau - h2];
  xddot = acc(1);
  qddot = acc(2);

  ds = [xdot; xddot; qdot; qddot];
end
      

Library note: in later chapters you will see how toolboxes (e.g., ROS, MATLAB Robotics System Toolbox) encode these structures automatically. For now, the example emphasizes the coupling term and additional base state.

7. Problems and Solutions

Problem 1 (DOF Counting): Consider (i) a 6-DOF industrial arm bolted to the floor, (ii) the same arm mounted on a wheeled platform with planar motion (2 translations + 1 rotation). Compute the total configuration dimension for each case.

Solution: (i) Stationary-base: only joints move, so \( n=6 \). Thus \( \dim(\mathcal{C}_{fixed})=6 \). (ii) Moving-base: base adds \( m=3 \) planar DOF. Thus \( \dim(\mathcal{C}_{moving})=n+m=6+3=9 \).

Problem 2 (Mass Matrix Symmetry): Show that for any rigid-body robot (fixed or moving base), the mass matrix derived from kinetic energy is symmetric and positive definite.

Solution: Kinetic energy of a rigid-body system can always be written as a quadratic form in generalized velocities: \( T(\mathbf{z},\dot{\mathbf{z}})=\tfrac{1}{2}\dot{\mathbf{z}}^\top \mathbf{M}(\mathbf{z}) \dot{\mathbf{z}} \). Since \(T\) is a scalar and quadratic in \( \dot{\mathbf{z}} \), the matrix of second partial derivatives satisfies \( \mathbf{M}_{ij}=\frac{\partial^2 T}{\partial \dot{z}_i \partial \dot{z}_j} =\mathbf{M}_{ji} \), hence symmetry. Moreover, for any nonzero velocity \( \mathbf{v} \), physical kinetic energy obeys \( T = \tfrac{1}{2}\mathbf{v}^\top\mathbf{M}\mathbf{v} > 0 \), implying positive definiteness.

Problem 3 (Coupled Lagrangian): For the moving-base arm-on-cart example in Section 6, assume kinetic energy \( T=\tfrac{1}{2}(M+m)\dot{x}^2 + \tfrac{1}{2}(I+m\ell^2)\dot{q}^2 + m\ell\cos q \,\dot{x}\dot{q} \) and potential energy \( V=m g \ell (1-\cos q) \). Derive the equations of motion.

Solution: Form \( \mathcal{L}=T-V \). Compute partial derivatives: \( \frac{\partial T}{\partial \dot{x}}=(M+m)\dot{x}+m\ell\cos q\,\dot{q} \), so \( \frac{d}{dt}\frac{\partial T}{\partial \dot{x}}=(M+m)\ddot{x} + m\ell(-\sin q\,\dot{q})\dot{q} + m\ell\cos q\,\ddot{q} \). Also \( \frac{\partial T}{\partial x}=0 \), \( \frac{\partial V}{\partial x}=0 \). Thus:

\[ (M+m)\ddot{x} + m\ell\cos q\,\ddot{q} - m\ell\sin q\,\dot{q}^2 = u_b. \]

For \(q\): \( \frac{\partial T}{\partial \dot{q}}=(I+m\ell^2)\dot{q}+m\ell\cos q\,\dot{x} \), giving \( \frac{d}{dt}\frac{\partial T}{\partial \dot{q}} =(I+m\ell^2)\ddot{q}+m\ell\cos q\,\ddot{x}-m\ell\sin q\,\dot{q}\dot{x} \). Moreover \( \frac{\partial T}{\partial q}=-m\ell\sin q\,\dot{x}\dot{q} \) and \( \frac{\partial V}{\partial q}=m g \ell \sin q \). Euler–Lagrange yields:

\[ m\ell\cos q\,\ddot{x} + (I+m\ell^2)\ddot{q} + m g \ell \sin q = \tau. \]

Together these match Section 6.

Problem 4 (Underactuation Check): In the same cart–arm system, suppose \( u_b=0 \). Show that the number of inputs is less than the number of DOF. What does this imply for control?

Solution: The configuration is \( [x,q]^\top \), hence \( m+n=2 \) DOF. With \( u_b=0 \), only one input \( \tau \) remains. Therefore the system has 2 DOF but 1 actuator → underactuated. Control must exploit coupling: joint torques indirectly influence base motion. Not every trajectory is feasible with arbitrary accuracy, and stabilization requires careful design (a theme for later courses).

8. Summary

Stationary-base robots have configurations described solely by internal joints, leading to dynamics in \( \mathbf{q} \). Moving-base robots expand configuration to \( \mathbf{z}=[\mathbf{x}_b;\mathbf{q}] \), producing block-structured mass matrices with cross-coupling. This coupling yields momentum exchange and often underactuation, fundamentally affecting taxonomy, design, and control complexity.

9. References

  1. Khatib, O. (1987). A unified approach for motion and force control of robot manipulators: The operational space formulation. IEEE Journal on Robotics and Automation, 3(1), 43–53.
  2. Featherstone, R. (1983). The calculation of robot dynamics using articulated-body inertias. International Journal of Robotics Research, 2(1), 13–30.
  3. Orin, D.E., & Goswami, A. (2008). Centroidal momentum matrix of a humanoid robot: Structure and properties. IEEE/RSJ International Conference on Intelligent Robots and Systems, 653–659.
  4. Nakamura, Y., & Hanafusa, H. (1987). Dynamics and stability in coordination of multiple robotic mechanisms. International Journal of Robotics Research, 6(2), 3–12.
  5. Sentis, L., & Khatib, O. (2005). Synthesis of whole-body behaviors through hierarchical control of behavioral primitives. International Journal of Humanoid Robotics, 2(4), 505–518.