Chapter 10: Root Locus Design Techniques
Lesson 4: Shaping Root Locus for Damping and Speed Requirements
This lesson develops systematic techniques for shaping the root locus so that closed-loop poles satisfy prescribed damping ratio and speed (settling time) requirements. Building on previous lessons, we translate time-domain specifications into regions of the complex plane and modify the open-loop transfer function via compensator poles and zeros to ensure that the root locus passes through these regions. We also connect these ideas to software implementations in Python, C++, Java, MATLAB/Simulink and Wolfram Mathematica, with a robotics-motivated example.
1. Conceptual Overview
Suppose a unity-feedback loop has open-loop transfer function
\[ L(s) = K \, G(s) C(s), \]
where \( G(s) \) models the plant and \( C(s) \) is a compensator we are free to design. The closed-loop characteristic equation is
\[ 1 + K G(s) C(s) = 0. \]
The root locus of \( L(s) \) is the set of all roots of \( 1 + K L_0(s) = 0 \) as \( K \in [0,\infty) \), where \( L_0(s) = G(s) C(s) / K \) is the normalized open-loop transfer function. Our design objective is:
Given time-domain specifications on overshoot and settling time, choose \( C(s) \) and a gain \( K \) such that the root locus of \( L(s) \) contains closed-loop poles in an admissible region of the complex plane.
The admissible region is usually defined in terms of:
- minimum damping ratio \( \zeta_{\min} \) (limits overshoot),
- maximum settling time \( T_{s,\max} \) (limits speed of response).
Shaping the root locus means introducing real poles/zeros in \( C(s) \) so that the locus bends into the prescribed region instead of violating damping or speed requirements.
2. Damping Ratio and Settling Time as s-Plane Constraints
For a standard second-order closed-loop transfer function
\[ T(s) = \frac{\omega_n^2}{s^2 + 2\zeta \omega_n s + \omega_n^2}, \]
the characteristic equation is \( s^2 + 2\zeta \omega_n s + \omega_n^2 = 0 \) with poles
\[ s_{1,2} = -\zeta \omega_n \pm j \omega_n \sqrt{1 - \zeta^2}. \]
Let \( s = \sigma + j\omega \) denote a generic closed-loop pole (with \( \sigma < 0 \) for stability). Equating real and imaginary parts with the standard form above yields
\[ \omega_n = \sqrt{\sigma^2 + \omega^2}, \qquad \zeta = -\frac{\sigma}{\sqrt{\sigma^2 + \omega^2}}. \]
Hence a constraint \( \zeta \ge \zeta_{\min} \) defines a sector in the left-half plane. The boundary corresponding to \( \zeta = \zeta_{\min} \) satisfies
\[ \zeta_{\min} = -\frac{\sigma}{\sqrt{\sigma^2 + \omega^2}} \quad \Longleftrightarrow \quad \sigma = -\zeta_{\min} \sqrt{\sigma^2 + \omega^2}. \]
This is the equation of a ray emanating from the origin at angle \( \theta_{\min} = \arccos(\zeta_{\min}) \) measured from the negative real axis. Poles to the left of this ray have damping ratio at least \( \zeta_{\min} \).
For the (approximate) 2% settling time (for underdamped second order):
\[ T_s \approx \frac{4}{\zeta \omega_n} = \frac{4}{-\sigma}, \]
using \( \zeta \omega_n = -\sigma \). A bound \( T_s \le T_{s,\max} \) is equivalent to
\[ -\sigma \ge \frac{4}{T_{s,\max}} \quad \Longleftrightarrow \quad \sigma \le -\frac{4}{T_{s,\max}}. \]
Thus the settling-time requirement defines a vertical line in the left-half plane; poles must lie to the left of this line.
Design region: The set of admissible closed-loop pole locations is the intersection of
- the half-plane left of \( \sigma = -4 / T_{s,\max} \), and
- the sector corresponding to \( \zeta \ge \zeta_{\min} \).
For higher-order systems, the requirement is usually imposed on dominant poles, assuming remaining poles are sufficiently far left and contribute negligibly to the transient.
3. Why Root Locus Shaping is Needed: a Simple Example
Consider a plant with a pole at the origin and a single real pole, typical of a simplified robot joint actuator model:
\[ G(s) = \frac{1}{s(s+a)}, \qquad a > 0, \]
with unity feedback and proportional gain \( K \). The closed-loop characteristic equation is
\[ 1 + K G(s) = 0 \quad \Longleftrightarrow \quad s^2 + a s + K = 0. \]
Comparing with the standard second-order form \( s^2 + 2\zeta \omega_n s + \omega_n^2 = 0 \), we get
\[ 2\zeta \omega_n = a, \qquad \omega_n^2 = K. \]
Hence
\[ \zeta \omega_n = \frac{a}{2} \quad \Longrightarrow \quad T_s \approx \frac{4}{\zeta \omega_n} = \frac{8}{a}. \]
Key observation: For this plant, the settling time \( T_s \) is determined by \( a \), not by the gain \( K \). Increasing \( K \) moves the closed-loop poles along a locus that changes the damping ratio but leaves \( T_s \) fixed.
If we require, for example, \( T_s \le 1 \,\mathrm{s} \) and \( a = 2 \), then \( T_s = 8/a = 4 \) and no value of \( K \) can satisfy the settling-time requirement. The shape of the root locus is incompatible with the speed specification.
The only remedy within classical linear control is to alter the open-loop dynamics via a compensator \( C(s) \), e.g. introducing a zero (phase lead) or an additional pole (phase lag), to reshape the root locus so that it passes through a region corresponding to both desired damping and speed.
4. Shaping via Compensator Zeros and Poles
Let the plant open-loop transfer function be \( G(s) = \dfrac{N(s)}{D(s)} \) with poles \( p_1,\dots,p_{n_p} \) and zeros \( z_1,\dots,z_{n_z} \). We introduce a compensator
\[ C(s) = K_c \frac{(s - z_{c,1})\cdots (s - z_{c,n_c})} {(s - p_{c,1})\cdots (s - p_{c,m_c})} \]
so that the overall open-loop transfer function \( L(s) = K G(s) C(s) \) has poles \( \{p_j\} \cup \{p_{c,k}\} \) and zeros \( \{z_i\} \cup \{z_{c,\ell}\} \).
For a desired closed-loop pole location \( s_d = \sigma_d + j\omega_d \) in the admissible region (satisfying the damping and settling-time constraints), the root-locus conditions are:
-
Angle condition
\[ \sum_{i=1}^{n_z + n_c} \angle(s_d - z_i) - \sum_{j=1}^{n_p + m_c} \angle(s_d - p_j) = (2k+1)\pi,\quad k \in \mathbb{Z}, \]
-
Magnitude condition
\[ K = \frac{1}{|G(s_d) C(s_d)|} = \frac{\prod_{j=1}^{n_p + m_c} |s_d - p_j|} {\prod_{i=1}^{n_z + n_c} |s_d - z_i|}. \]
Suppose we add a single real compensator zero at \( s = -z_c \), with \( z_c > 0 \). Writing \( z_{c,1} = -z_c \), the only unknown in the angle condition becomes \( \angle(s_d + z_c) \):
\[ \angle(s_d + z_c) = (2k+1)\pi + \sum_{j=1}^{n_p} \angle(s_d - p_j) + \sum_{k=1}^{m_c} \angle(s_d - p_{c,k}) - \sum_{i=1}^{n_z} \angle(s_d - z_i). \]
If we constrain \( -z_c \) to lie on the real axis, then \( s_d + z_c \) has real part \( \sigma_d + z_c \) and imaginary part \( \omega_d \), and
\[ \angle(s_d + z_c) = \arctan\!\left(\frac{\omega_d}{\sigma_d + z_c}\right). \]
Equating this expression to the right-hand side above yields a nonlinear equation in the single unknown \( z_c \), which can be solved numerically. Once \( z_c \) is fixed, the magnitude condition yields the required gain \( K \).
A similar reasoning applies when adding compensator poles; now the
unknowns appear with a negative sign in the angle condition. In
practice, designers use interactive tools (e.g. MATLAB
rlocus and sgrid) to adjust compensator
zeros/poles until the root locus intersects the desired region at
acceptable gains.
5. Design Workflow for Root Locus Shaping
The general workflow for shaping a root locus to meet damping and speed constraints is summarized below.
flowchart TD
A["Specify specs: zeta_min, Ts_max, Mp_max"] --> B["Convert to s-plane region (sector + vertical line)"]
B --> C["Plot uncompensated root locus of L0(s) = G(s)"]
C --> D{"Does locus enter \nadmissible region?"}
D -->|yes| E["Choose gain K meeting specs"]
D -->|no| F["Add compensator zero/pole C(s)"]
F --> G["Use angle condition at desired sd to pick zero/pole locations"]
G --> H["Plot new root locus of L(s) = G(s) C(s)"]
H --> I{"Dominant poles \ninside region?"}
I -->|yes| J["Compute K from magnitude condition; verify in time response"]
I -->|no| F
This loop generally converges quickly using computational tools and physical insight regarding the influence of poles and zeros: zeros tend to attract root locus branches, while poles repel them.
6. Python Implementation: Root Locus Shaping for a Robot Joint
We illustrate root locus shaping for a simplified robot joint driven by a DC motor. A common linearized model (about a fixed configuration) has transfer function
\[ G(s) = \frac{K_m}{J s^2 + b s}, \]
where \( J \) is inertia, \( b \) is viscous damping and \( K_m \) is motor gain. We design a lead compensator
\[ C(s) = K_c \frac{s + z_c}{s + p_c}, \]
to satisfy \( \zeta_{\min} = 0.6 \) and
\( T_{s,\max} = 1.0 \,\mathrm{s} \). The Python
python-control library integrates well with robotics
toolboxes such as roboticstoolbox-python, allowing the
resulting controller to be embedded in a simulated robot manipulator.
import numpy as np
import control as ctrl
import matplotlib.pyplot as plt
# Robot joint parameters (example values)
J = 0.01 # inertia
b = 0.1 # viscous damping
K_m = 0.5 # motor constant
# Plant: G(s) = K_m / (J s^2 + b s) = K_m / (s (J s + b))
num_G = [K_m]
den_G = [J, b, 0.0]
G = ctrl.TransferFunction(num_G, den_G)
# Desired specs
zeta_min = 0.6
Ts_max = 1.0
sigma_min = -4.0 / Ts_max # vertical line
# Choose tentative lead compensator parameters (manual initial guess)
z_c = 10.0 # zero at s = -z_c
p_c = 50.0 # pole at s = -p_c, placed further left for approximate phase lead
C0 = ctrl.TransferFunction([1.0, z_c], [1.0, p_c])
L = G * C0
# Plot root locus and overlay lines of constant zeta and sigma
fig, ax = plt.subplots()
rlocus_data = ctrl.root_locus(L, Plot=True, ax=ax, grid=False)
# Overlay damping ratio rays and vertical line using sgrid
zeta_list = [zeta_min]
wn_list = np.linspace(0.1, 50.0, 200)
for zeta in zeta_list:
# ray: sigma = -zeta * wn, omega = wn * sqrt(1 - zeta^2)
sigma = -zeta * wn_list
omega = wn_list * np.sqrt(1.0 - zeta**2)
ax.plot(sigma, omega, linestyle="--")
ax.plot(sigma, -omega, linestyle="--")
ax.axvline(sigma_min, linestyle="--") # settling time vertical line
ax.set_xlabel("Real axis")
ax.set_ylabel("Imag axis")
ax.set_title("Root locus with initial lead compensator")
plt.show()
# Search for gain K such that dominant pole lies inside admissible region
def dominant_poles_for_gain(K):
closed_loop = ctrl.feedback(K * L, 1)
poles = ctrl.pole(closed_loop)
# dominant poles: those with largest real part (closest to imaginary axis)
real_parts = np.real(poles)
idx = np.argsort(real_parts)[-2:] # two poles with largest real part
return poles[idx]
def specs_satisfied(pole):
sigma = np.real(pole)
omega = np.imag(pole)
wn = np.sqrt(sigma**2 + omega**2)
if wn == 0.0:
return False
zeta = -sigma / wn
Ts = 4.0 / (-sigma)
return (zeta >= zeta_min) and (Ts <= Ts_max)
K_candidates = np.logspace(-1, 3, 200)
good_pairs = []
for K in K_candidates:
poles = dominant_poles_for_gain(K)
if any(specs_satisfied(p) for p in poles):
good_pairs.append((K, poles))
print("Number of gains meeting specs with current compensator:", len(good_pairs))
if good_pairs:
K_star, poles_star = good_pairs[0]
print("Example acceptable gain:", K_star)
print("Dominant poles:", poles_star)
In a robotics control stack, the resulting \( C(s) \) would be discretized and implemented in a low-level joint controller (e.g. within a ROS control loop), while higher-level trajectory planners operate on a slower time scale.
7. C++ Implementation: Gain Search for Second-Order Approximation
For quick analysis on embedded systems (e.g. microcontrollers on mobile robots), one often uses a reduced second-order approximation of the dominant dynamics. Consider the characteristic polynomial
\[ s^2 + a s + K = 0, \]
derived from a simple plant with proportional control. The closed-loop poles are
\[ s_{1,2} = -\frac{a}{2} \pm \frac{1}{2}\sqrt{a^2 - 4K}. \]
The C++ snippet below scans gains \( K \) and rejects those that violate either minimum damping ratio or maximum settling time. This code can be integrated into a calibration routine for a robot actuator.
#include <iostream>
#include <cmath>
struct Specs {
double zeta_min;
double Ts_max;
};
bool specs_satisfied(double a, double K, const Specs& specs) {
double disc = a * a - 4.0 * K;
// Require underdamped behavior: disc < 0
if (disc >= 0.0) return false;
double sigma = -0.5 * a;
double omega = 0.5 * std::sqrt(-disc);
double wn = std::sqrt(sigma * sigma + omega * omega);
if (wn == 0.0) return false;
double zeta = -sigma / wn;
double Ts = 4.0 / (-sigma);
return (zeta >= specs.zeta_min) && (Ts <= specs.Ts_max);
}
int main() {
double a = 4.0; // from plant G(s) = 1 / (s (s + a))
Specs specs{0.6, 1.0}; // zeta_min, Ts_max
double K_min = 0.1, K_max = 20.0;
int N = 200;
for (int i = 0; i <= N; ++i) {
double K = K_min + (K_max - K_min) * i / static_cast<double>(N);
if (specs_satisfied(a, K, specs)) {
std::cout << "Acceptable gain K = " << K << std::endl;
break;
}
}
return 0;
}
For higher-order models (e.g. including motor inductance), a robotics
C++ stack would typically rely on libraries such as Eigen
for polynomial root computation and possibly integrate with
ros_control to deploy the resulting gains.
8. Java Implementation: Checking Pole Locations
Java-based robotics frameworks (for instance, those used in educational robot platforms) can implement similar logic to test candidate gains. The example below uses the same second-order approximation, relying on basic math functions only.
public class RootLocusShaping {
static class Specs {
double zetaMin;
double TsMax;
Specs(double zetaMin, double TsMax) {
this.zetaMin = zetaMin;
this.TsMax = TsMax;
}
}
static boolean specsSatisfied(double a, double K, Specs specs) {
double disc = a * a - 4.0 * K;
if (disc >= 0.0) {
// poles are real; here we require underdamped behavior
return false;
}
double sigma = -0.5 * a;
double omega = 0.5 * Math.sqrt(-disc);
double wn = Math.sqrt(sigma * sigma + omega * omega);
if (wn == 0.0) return false;
double zeta = -sigma / wn;
double Ts = 4.0 / (-sigma);
return (zeta >= specs.zetaMin) && (Ts <= specs.TsMax);
}
public static void main(String[] args) {
double a = 4.0;
Specs specs = new Specs(0.6, 1.0);
double Kmin = 0.1, Kmax = 20.0;
int N = 200;
for (int i = 0; i <= N; ++i) {
double K = Kmin + (Kmax - Kmin) * i / (double) N;
if (specsSatisfied(a, K, specs)) {
System.out.println("Acceptable gain K = " + K);
break;
}
}
}
}
For more complex plants, Java libraries such as Apache Commons Math can be used to compute polynomial roots arising from higher-order characteristic equations generated during root locus shaping.
9. MATLAB/Simulink Implementation for Controller Shaping
MATLAB and Simulink are standard tools in control and robotics. The
following script shapes the root locus of a robot joint plant using a
lead compensator and superimposes damping and settling-time constraints
via sgrid.
% Robot joint parameters
J = 0.01;
b = 0.1;
Km = 0.5;
s = tf('s');
G = Km / (J*s^2 + b*s); % G(s) = Km / (J s^2 + b s)
% Desired specs
zeta_min = 0.6;
Ts_max = 1.0;
% Initial lead compensator guess
zc = 10; % zero at s = -zc
pc = 50; % pole at s = -pc
C = (s + zc) / (s + pc);
L = G * C;
figure;
rlocus(L);
hold on;
% Overlay grid of damping and natural frequency
zeta_list = [zeta_min];
wn_list = 0.1:0.1:50;
sgrid(zeta_list, wn_list);
% Vertical line for Ts_max: sigma = -4 / Ts_max
sigma_min = -4 / Ts_max;
plot([sigma_min sigma_min], ylim, 'k--');
title('Root locus with lead compensator');
% Interactively pick desired closed-loop pole on root locus
disp('Click on the root locus at desired pole location...');
[K_star, poles_star] = rlocfind(L);
fprintf('Selected gain K = %.3f\n', K_star);
disp('Dominant poles:');
disp(poles_star);
T = feedback(K_star * L, 1);
figure;
step(T);
grid on;
title('Step response with shaped root locus');
In Simulink, the same controller can be implemented by connecting a transfer function block representing \( C(s) \) in series with the plant model \( G(s) \). The step response scope can be used to visually verify overshoot and settling time. Such models are often embedded in larger robotic simulations built on top of Simscape Multibody.
10. Wolfram Mathematica Implementation
Mathematica provides symbolic and numeric tools for root locus analysis. Below we define the same robot joint plant and a lead compensator, then plot the root locus and numerically search for gains that satisfy the specified region constraints.
(* Plant and compensator definition *)
J = 0.01;
b = 0.1;
Km = 0.5;
s = LaplaceTransformVariable;
G = TransferFunctionModel[Km/(J*s^2 + b*s), s];
zc = 10;
pc = 50;
C = TransferFunctionModel[(s + zc)/(s + pc), s];
L = SystemsModelSeriesConnect[G, C];
(* Root locus plot *)
RootLocusPlot[L, {1, 10^3},
PlotRange -> All,
Frame -> True,
Axes -> False,
PlotLabel -> "Root locus with lead compensator"
]
(* Specs *)
zetaMin = 0.6;
TsMax = 1.0;
sigmaMin = -4.0/TsMax;
specsSatisfied[p_] := Module[{sigma, omega, wn, zeta, Ts},
sigma = Re[p];
omega = Im[p];
wn = Sqrt[sigma^2 + omega^2];
If[wn == 0, Return[False]];
zeta = -sigma/wn;
Ts = 4.0/(-sigma);
Return[zeta >= zetaMin && Ts <= TsMax];
];
(* Sample gains and test dominant poles *)
kList = LogSpace[-1, 3, 100];
goodGains = Reap[
Do[
poles = Eigenvalues[
SystemsModelStateSpace[
FeedbackConnect[k*L, 1]
]["A"]
];
domPoles = Take[Reverse@SortBy[poles, Re], 2];
If[Or @@ (specsSatisfied /@ domPoles), Sow[k]],
{k, kList}
]
][[2, 1]];
goodGains
Symbolic capabilities allow derivation of analytical expressions for compensator parameters in simple cases, complementing the numerical root locus shaping illustrated above.
11. Problems and Solutions
Problem 1 (Design region from specs): A control system must satisfy a maximum overshoot of 10% and a 2% settling time less than 2 seconds. For a dominant second-order approximation, take \( M_p \approx 0.10 \) and \( T_s \approx 4 / (\zeta \omega_n) \). (a) Compute the corresponding minimum damping ratio \( \zeta_{\min} \). (b) Determine the vertical line \( \sigma = \sigma_{\min} \) defining the settling-time constraint. (c) Sketch the admissible region.
Solution:
(a) For a standard second-order system,
\[ M_p \approx \exp\!\left( -\frac{\pi \zeta}{\sqrt{1 - \zeta^2}} \right). \]
Set \( M_p = 0.10 \) and solve approximately
\[ 0.10 \approx \exp\!\left( -\frac{\pi \zeta}{\sqrt{1 - \zeta^2}} \right). \]
Taking logarithms:
\[ \ln(0.10) = -\frac{\pi \zeta}{\sqrt{1 - \zeta^2}}. \]
Numerically this yields \( \zeta_{\min} \approx 0.59 \) (a well-known approximation is that 10% overshoot corresponds to \( \zeta \approx 0.6 \)).
(b) The settling-time requirement is \( T_s \le 2 \,\mathrm{s} \), so
\[ T_s \approx \frac{4}{-\sigma} \le 2 \quad \Longrightarrow \quad -\sigma \ge 2 \quad \Longrightarrow \quad \sigma \le -2. \]
Thus \( \sigma_{\min} = -2 \).
(c) The admissible region is the intersection of the half-plane \( \sigma \le -2 \) with the sector corresponding to \( \zeta \ge \zeta_{\min} \approx 0.6 \), i.e. the region to the left of the vertical line \( \sigma = -2 \) and inside the cone defined by constant damping ratio lines at angle \( \theta_{\min} = \arccos(\zeta_{\min}) \).
Problem 2 (Infeasibility of specs without shaping): For the plant \( G(s) = \dfrac{1}{s(s+2)} \) with proportional feedback of gain \( K \), show that the 2% settling time \( T_s \) is independent of \( K \). Conclude when root locus shaping is necessary if \( T_{s,\max} < 4 \,\mathrm{s} \).
Solution:
The closed-loop characteristic equation is
\[ 1 + \frac{K}{s(s+2)} = 0 \quad \Longleftrightarrow \quad s^2 + 2s + K = 0. \]
Compare with \( s^2 + 2\zeta \omega_n s + \omega_n^2 = 0 \):
\[ 2\zeta \omega_n = 2, \qquad \omega_n^2 = K \quad \Longrightarrow \quad \zeta \omega_n = 1. \]
Therefore
\[ T_s \approx \frac{4}{\zeta \omega_n} = \frac{4}{1} = 4 \,\mathrm{s}. \]
The settling time does not depend on \( K \). If \( T_{s,\max} < 4 \,\mathrm{s} \), no choice of gain can meet the requirement; we must alter the open-loop dynamics by adding a compensator (e.g. a lead compensator) to reshape the root locus and reduce \( T_s \).
Problem 3 (Angle condition for compensator zero): A plant has open-loop transfer function \( G(s) = \dfrac{1}{s(s+4)} \). We wish to place a dominant closed-loop pole at \( s_d = -2 + j 2\sqrt{3} \), which corresponds to \( \zeta = 0.5 \) and \( \omega_n = 4 \). We decide to add a single real compensator zero at \( s = -z_c \), with \( z_c > 0 \). Write the angle condition that \( z_c \) must satisfy.
Solution:
The plant poles are \( p_1 = 0 \), \( p_2 = -4 \). With the compensator zero \( z_{c,1} = -z_c \), the open-loop transfer function is
\[ L(s) = K \frac{s + z_c}{s(s+4)}. \]
At \( s = s_d \), the angle condition is
\[ \angle(s_d + z_c) - \bigl[\angle(s_d - 0) + \angle(s_d + 4)\bigr] = (2k+1)\pi, \quad k \in \mathbb{Z}. \]
Writing \( s_d = \sigma_d + j\omega_d \), we have \( \angle(s_d + z_c) = \arctan\bigl(\omega_d / (\sigma_d + z_c)\bigr) \), \( \angle(s_d - 0) = \arctan(\omega_d / \sigma_d) \), \( \angle(s_d + 4) = \arctan(\omega_d / (\sigma_d + 4)) \). Substituting these expressions yields a scalar nonlinear equation for \( z_c \), to be solved numerically.
Problem 4 (Effect of a far-left pole): Suppose after adding a lead compensator with a zero near the desired pole location, you also add a compensator pole at \( s = -p_c \) with \( p_c \gg 0 \) (very far left). Explain qualitatively how this affects the root locus and why the dominant poles approximately retain the desired damping and settling-time characteristics.
Solution:
A pole far to the left (large negative real part) repels root locus branches only weakly in the region close to the imaginary axis. Intuitively, the magnitude of \( s - (-p_c) \) is large and varies slowly for \( s \) near the origin, so its contribution to both the magnitude and angle conditions is nearly constant in the region of interest. As a result, the two dominant poles near the desired location (shaped primarily by the nearby zero and existing plant poles) remain almost unchanged, while the additional pole contributes a fast mode with small time constant, decaying quickly and hardly affecting the visible transient response. This justifies the dominant-pole approximation frequently used in root locus design.
Problem 5 (Shaping for a robot joint): A linearized robot joint has transfer function \( G(s) = \dfrac{K_m}{J s^2 + b s} \), with \( J = 0.02 \), \( b = 0.2 \), \( K_m = 1 \). You are given specs \( \zeta_{\min} = 0.7 \), \( T_{s,\max} = 1.2 \,\mathrm{s} \). Outline a root locus shaping strategy using a lead compensator \( C(s) = K_c \dfrac{s + z_c}{s + p_c} \).
Solution:
- Compute the admissible region: lines of constant damping ratio \( \zeta_{\min} = 0.7 \) and vertical line \( \sigma = -4/T_{s,\max} \approx -3.33 \).
- Plot the uncompensated root locus of \( L_0(s) = G(s) \) and verify that it does not intersect the region at acceptable gains (typically, it will be too slow).
- Pick a desired closed-loop pole \( s_d \) inside the region, e.g. at the intersection of \( \zeta = 0.7 \) line and \( \sigma = -3.33 \) (or slightly further left to increase robustness).
- Choose a lead zero \( -z_c \) near the desired pole (slightly to its left on the real axis) and solve the angle condition for a lead pole \( -p_c \) (or vice versa) so that \( s_d \) lies on the root locus of \( L(s) = G(s) C(s) \).
- Use the magnitude condition to compute the gain \( K_c \) and verify the step response. Adjust \( z_c \), \( p_c \) iteratively until both damping and settling-time requirements are met while preserving adequate gain and phase margins (to be analyzed in later chapters).
12. Summary
In this lesson we connected time-domain specifications on overshoot and settling time to geometric constraints in the complex plane. For second-order dominant dynamics, a minimum damping ratio defines a sector, while a maximum settling time defines a vertical line. We showed, via a simple example, that varying the proportional gain alone may be insufficient to satisfy speed requirements, motivating root locus shaping through compensator poles and zeros. Using the angle and magnitude conditions, we derived equations for compensator parameters that force the root locus to pass through a desired pole location in the admissible region. Finally, we illustrated how to implement and verify these designs in Python, C++, Java, MATLAB/Simulink and Wolfram Mathematica, with an emphasis on robotic joint control as a motivating application.
13. References
- Evans, W. R. (1948). Control system synthesis by root locus method. Transactions of the AIEE, 67(1), 547–551.
- Evans, W. R. (1950). Graphical analysis of control systems. Transactions of the AIEE, 69(1), 65–78.
- Jury, E. I. (1964). On the theory and application of the z-transform method. IRE Transactions on Automatic Control, 9(1), 10–21.
- MacFarlane, A. G. J., & Kouvaritakis, B. (1977). A design technique for linear multivariable feedback systems using the diagonal dominance concept. International Journal of Control, 25(3), 297–318.
- Botros, N. M. (1966). Root locus techniques for systems with prescribed damping ratio and natural frequency. IEEE Transactions on Automatic Control, 11(2), 251–253.
- Ackermann, J. (1972). Parameter space design of robust control systems. Part I: Theory. Automatica, 8(5), 711–728.
- Kuo, B. C. (1963). A contribution to the root-locus method in control systems. Journal of the Franklin Institute, 276(6), 497–514.
- Franklin, G. F., & Powell, J. D. (1971). A mathematical basis for performance specifications in control systems. IEEE Transactions on Automatic Control, 16(5), 613–620.