Chapter 8: Singularities and Workspace Analysis
Lesson 3: Condition Numbers and Sensitivity
This lesson formalizes the notion of numerical sensitivity in differential kinematics via matrix norms and condition numbers of the Jacobian. We connect these concepts to singularities and manipulability, and show how to compute and interpret condition numbers in software (Python, C++, Java, MATLAB/Simulink, and Wolfram Mathematica).
1. Local Sensitivity in Differential Kinematics
For an \( n \)-DOF manipulator with configuration \( \mathbf{q}\in\mathbb{R}^n \) and task-space coordinates \( \mathbf{x}\in\mathbb{R}^m \), the differential kinematics relation around a configuration \( \mathbf{q}_0 \) is
\[ \delta \mathbf{x} = \mathbf{J}(\mathbf{q}_0)\,\delta \mathbf{q}, \]
where \( \mathbf{J}(\mathbf{q}_0)\in\mathbb{R}^{m\times n} \) is the Jacobian evaluated at \( \mathbf{q}_0 \). Small joint errors \( \delta \mathbf{q} \) (sensor noise, quantization, calibration error) are mapped to task-space errors \( \delta \mathbf{x} \). A key question is:
How much can \( \delta \mathbf{x} \) amplify relative to \( \delta \mathbf{q} \)?
Using a vector norm \( \|\cdot\| \), we can bound \( \|\delta \mathbf{x}\| \) by the induced matrix norm of \( \mathbf{J} \):
\[ \|\delta \mathbf{x}\| \le \|\mathbf{J}(\mathbf{q}_0)\|\,\|\delta \mathbf{q}\|. \]
When solving the inverse problem (local IK) \( \mathbf{J}(\mathbf{q}_0)\,\delta \mathbf{q} = \delta \mathbf{x} \), the condition number of the Jacobian determines how sensitive the solution \( \delta \mathbf{q} \) is to perturbations in \( \delta \mathbf{x} \) and/or perturbations in \( \mathbf{J} \) itself.
flowchart TD
Q["Joint space: q"] --> JAC["Jacobian J(q)"]
JAC --> DX["Forward map: delta_x = J delta_q"]
DX --> AMP["Amplification: ||delta_x|| / ||delta_q||"]
JAC --> INV["Inverse map: solve J delta_q = delta_x"]
INV --> KAP["Condition number kappa(J)"]
KAP --> SENS["Sensitivity of IK and numerical stability"]
2. Matrix Norms and Condition Numbers (Square Case)
Let \( A\in\mathbb{R}^{n\times n} \) be nonsingular. A vector norm \( \|\cdot\| \) induces a matrix norm
\[ \|A\| = \max_{\mathbf{x}\neq\mathbf{0}} \frac{\|A\mathbf{x}\|}{\|\mathbf{x}\|}. \]
The condition number of \( A \) with respect to this norm is
\[ \kappa(A) = \|A\|\;\|A^{-1}\|. \]
Consider the linear system \( A\mathbf{x}=\mathbf{b} \), with exact solution \( \mathbf{x} \). If the right-hand side is perturbed to \( \mathbf{b}+\delta \mathbf{b} \), the new solution \( \mathbf{x}+\delta \mathbf{x} \) satisfies \( A(\mathbf{x}+\delta \mathbf{x})=\mathbf{b}+\delta\mathbf{b} \). Subtracting,
\[ A\,\delta \mathbf{x} = \delta \mathbf{b} \quad\Rightarrow\quad \delta \mathbf{x} = A^{-1}\delta \mathbf{b}. \]
Applying the induced norm and using submultiplicativity,
\[ \|\delta \mathbf{x}\| \le \|A^{-1}\|\,\|\delta \mathbf{b}\|. \]
To relate absolute to relative errors, note that \( \mathbf{b}=A\mathbf{x} \) implies
\[ \|\mathbf{b}\| = \|A\mathbf{x}\|\le \|A\|\;\|\mathbf{x}\| \quad\Rightarrow\quad \frac{\|\mathbf{x}\|}{\|\mathbf{b}\|} \ge \frac{1}{\|A\|}. \]
Combining,
\[ \frac{\|\delta \mathbf{x}\|}{\|\mathbf{x}\|} \le \|A^{-1}\|\;\|\delta\mathbf{b}\|\;\frac{1}{\|\mathbf{x}\|} \le \|A^{-1}\|\;\|A\|\;\frac{\|\delta\mathbf{b}\|}{\|\mathbf{b}\|} = \kappa(A)\,\frac{\|\delta\mathbf{b}\|}{\|\mathbf{b}\|}. \]
Thus the relative solution error is (to first order) bounded by \( \kappa(A) \) times the relative data error. In robotics, the analogous role is played by the Jacobian or local linear ization of kinematic mappings.
For the 2-norm, the condition number simplifies via the singular values: if \( A \) has singular values \( \sigma_1\ge\dots\ge\sigma_n>0 \), then
\[ \kappa_2(A)=\frac{\sigma_1}{\sigma_n}. \]
When \( \kappa_2(A) \) is large, the mapping is highly anisotropic: some input directions are greatly amplified and others are strongly attenuated.
3. Condition Numbers for Non-Square Jacobians
Robot Jacobians \( \mathbf{J}(\mathbf{q})\in\mathbb{R}^{m\times n} \) are often non-square: \( m<n \) (redundant) or \( m>n \) (underactuated). The 2-norm induced by the Euclidean norm is still
\[ \|\mathbf{J}\|_2 = \max_{\mathbf{v}\neq\mathbf{0}} \frac{\|\mathbf{J}\mathbf{v}\|_2}{\|\mathbf{v}\|_2}. \]
Using the singular value decomposition (SVD) \( \mathbf{J}= \mathbf{U}\,\boldsymbol{\Sigma}\,\mathbf{V}^\top \) with singular values \( \sigma_1\ge\dots\ge\sigma_r>0 \) (rank \( r \)), one has
\[ \|\mathbf{J}\|_2 = \sigma_1. \]
For full-row-rank or full-column-rank Jacobians, a widely used kinematic condition number (Yoshikawa-type) is
\[ \kappa(\mathbf{J}) = \frac{\sigma_{\max}(\mathbf{J})} {\sigma_{\min}(\mathbf{J})}, \]
where \( \sigma_{\min}(\mathbf{J}) \) is the smallest nonzero singular value. A small \( \sigma_{\min} \) indicates proximity to a singularity; indeed \( \sigma_{\min}\to 0 \) implies \( \kappa(\mathbf{J})\to\infty \). This condition number is tightly connected to the manipulability ellipsoid discussed in Lesson 2.
For local IK in the redundant case, one typically solves \( \mathbf{J}\,\delta\mathbf{q} \approx \delta\mathbf{x} \) via the Moore–Penrose pseudoinverse \( \mathbf{J}^+ = \mathbf{V}\,\boldsymbol{\Sigma}^+\,\mathbf{U}^\top \), giving the minimum-norm solution
\[ \delta\mathbf{q} = \mathbf{J}^+\,\delta\mathbf{x}. \]
The sensitivity of this solution is governed by the same singular values: small \( \sigma_{\min} \) produce large joint motions for modest task-space changes.
4. Sensitivity Bounds for Forward and Inverse Kinematics
For forward differential kinematics, from \( \delta\mathbf{x}=\mathbf{J}\delta\mathbf{q} \), the worst-case amplification factor of joint errors is
\[ \max_{\delta\mathbf{q}\neq\mathbf{0}} \frac{\|\delta\mathbf{x}\|_2}{\|\delta\mathbf{q}\|_2} = \|\mathbf{J}\|_2 = \sigma_{\max}(\mathbf{J}). \]
Conversely, in the square, nonsingular case \( m=n \), for inverse differential kinematics \( \delta\mathbf{q} = \mathbf{J}^{-1}\delta\mathbf{x} \),
\[ \frac{\|\delta\mathbf{q}\|_2}{\|\delta\mathbf{x}\|_2} \le \|\mathbf{J}^{-1}\|_2 = \frac{1}{\sigma_{\min}(\mathbf{J})}. \]
When both forward and inverse effects are relevant, e.g., when \( \delta\mathbf{x} \) is itself due to physical perturbations of \( \mathbf{q} \) and model errors in \( \mathbf{J} \), the condition number \( \kappa_2(\mathbf{J}) = \sigma_{\max}/\sigma_{\min} \) bounds the relative error amplification in joint solutions to task-space perturbations (under suitable regularity assumptions).
Special case: diagonal Jacobian. Suppose \( \mathbf{J}=\mathrm{diag}(a,b) \) with \( a,b>0 \). Then singular values are \( \sigma_1 = \max\{a,b\},\; \sigma_2=\min\{a,b\} \) and
\[ \kappa_2(\mathbf{J}) = \frac{\max\{a,b\}}{\min\{a,b\}}. \]
This shows explicitly that when the mapping is isotropic (\( a=b \)), \( \kappa_2(\mathbf{J})=1 \), while strong anisotropy \( a\gg b \) yields a large condition number and poor numerical robustness.
flowchart TD
A["Compute J(q)"] --> B["SVD: J = U Sigma V^T"]
B --> C["Singular values: sigma_max, sigma_min"]
C --> D["Condition number kappa = sigma_max / sigma_min"]
D --> E["Interpretation: near 1 = isotropic"]
D --> F["Large kappa = near singular, high sensitivity"]
5. Metric Choice, Scaling, and Relation to Manipulability
A subtlety in robotic Jacobians is that they mix translational and rotational velocities, which have different physical units. A typical spatial Jacobian has the form \( \mathbf{J} = \begin{bmatrix}\mathbf{J}_\omega \\[0.2em] \mathbf{J}_v\end{bmatrix} \), where \( \mathbf{J}_\omega \) maps joint velocities to angular velocity and \( \mathbf{J}_v \) maps to linear velocity.
To obtain a meaningful condition number, one often introduces weighting matrices \( W_x \) and \( W_q \) defining a task-space and joint-space metric:
\[ \tilde{\mathbf{J}} = W_x\,\mathbf{J}\,W_q^{-1}. \]
For example, \( W_x \) can scale angular components by a characteristic length \( \ell \), turning radians into equivalent meters, and \( W_q \) can normalize joints by their limits. The condition number \( \kappa(\tilde{\mathbf{J}}) \) then better reflects actual sensitivity in a normalized space.
Recall from Lesson 2 that the manipulability measure \( \mu(\mathbf{q}) = \sqrt{\det(\mathbf{J}\mathbf{J}^\top)} \) is proportional to the volume of the velocity ellipsoid. The singular values \( \sigma_i \) are the semi-axes of this ellipsoid, so
\[ \mu(\mathbf{q}) = \prod_{i=1}^m \sigma_i(\mathbf{q}), \quad \kappa_2(\mathbf{J}) = \frac{\sigma_{\max}}{\sigma_{\min}}. \]
Thus:
- Manipulability reflects overall magnitude of velocity capability (volume).
- Condition number reflects isotropy of that capability (shape).
Both must be considered when designing trajectories that avoid singularities and numerically ill-conditioned configurations.
6. Python Lab — Condition Number for a Planar 2R Manipulator
Consider a planar 2R arm with link lengths \( \ell_1,\ell_2 \) and joint angles \( q_1,q_2 \). The end-effector position is
\[ x = \ell_1\cos q_1 + \ell_2\cos(q_1+q_2),\quad y = \ell_1\sin q_1 + \ell_2\sin(q_1+q_2). \]
Differentiating yields the Jacobian
\[ \mathbf{J}(q_1,q_2) = \begin{bmatrix} -\ell_1\sin q_1 - \ell_2\sin(q_1+q_2) & -\ell_2\sin(q_1+q_2) \\ \;\;\ell_1\cos q_1 + \ell_2\cos(q_1+q_2) & \;\;\ell_2\cos(q_1+q_2) \end{bmatrix}. \]
The following Python code computes \( \kappa_2(\mathbf{J}) \) on a grid and illustrates sensitivity of \( \delta\mathbf{x} \) to joint noise.
import numpy as np
# Simple 2R manipulator parameters
l1 = 1.0
l2 = 1.0
def jacobian_2r(q1, q2):
s1 = np.sin(q1)
c1 = np.cos(q1)
s12 = np.sin(q1 + q2)
c12 = np.cos(q1 + q2)
J = np.array([
[-l1 * s1 - l2 * s12, -l2 * s12],
[ l1 * c1 + l2 * c12, l2 * c12]
], dtype=float)
return J
def kappa_2(J):
# 2-norm condition number via singular values
u, s, vt = np.linalg.svd(J)
sigma_max = s[0]
sigma_min = s[-1]
return sigma_max / sigma_min
# Sample grid of configurations
q1_vals = np.linspace(-np.pi, np.pi, 81)
q2_vals = np.linspace(-np.pi, np.pi, 81)
kappa_map = np.zeros((len(q1_vals), len(q2_vals)))
for i, q1 in enumerate(q1_vals):
for j, q2 in enumerate(q2_vals):
J = jacobian_2r(q1, q2)
# Avoid configurations where J is exactly singular in floating point
if np.linalg.matrix_rank(J) < 2:
kappa_map[i, j] = np.inf
else:
kappa_map[i, j] = kappa_2(J)
# Example: pick a configuration and simulate sensitivity
q1 = 0.0
q2 = 0.9
J = jacobian_2r(q1, q2)
kappa = kappa_2(J)
print("Condition number at (q1, q2) =", (q1, q2), "is", kappa)
# Joint noise model: small Gaussian perturbation
delta_q = np.array([1.0, -0.8]) * (np.pi / 180.0) # 1 deg and -0.8 deg
delta_x = J @ delta_q
print("Joint perturbation (rad):", delta_q)
print("Task-space perturbation (m):", delta_x)
print("Amplification factor ||delta_x|| / ||delta_q|| =",
np.linalg.norm(delta_x) / np.linalg.norm(delta_q))
In practice, robotics libraries such as
roboticstoolbox-python provide Jacobians for many standard
manipulators. One can simply compute the Jacobian using the library and
pass it to numpy.linalg.cond(J, 2) to obtain
\( \kappa_2(\mathbf{J}) \).
7. C++ Lab — Condition Number with Eigen
In C++, the Eigen library is a standard tool for linear
algebra in robotics and is used inside several robotics frameworks
(e.g., Orocos KDL, RBDL). The following snippet computes the Jacobian
and its 2-norm condition number for the same planar 2R arm:
#include <iostream>
#include <Eigen/Dense>
using Eigen::Matrix2d;
using Eigen::JacobiSVD;
using Eigen::ComputeFullU;
using Eigen::ComputeFullV;
Matrix2d jacobian2R(double q1, double q2, double l1, double l2) {
double s1 = std::sin(q1);
double c1 = std::cos(q1);
double s12 = std::sin(q1 + q2);
double c12 = std::cos(q1 + q2);
Matrix2d J;
J(0, 0) = -l1 * s1 - l2 * s12;
J(0, 1) = -l2 * s12;
J(1, 0) = l1 * c1 + l2 * c12;
J(1, 1) = l2 * c12;
return J;
}
double cond2(const Matrix2d &J) {
JacobiSVD<Matrix2d> svd(J, Eigen::ComputeFullU | Eigen::ComputeFullV);
const auto &S = svd.singularValues();
double sigma_max = S(0);
double sigma_min = S(1);
return sigma_max / sigma_min;
}
int main() {
double l1 = 1.0, l2 = 1.0;
double q1 = 0.0, q2 = 0.9;
Matrix2d J = jacobian2R(q1, q2, l1, l2);
double kappa = cond2(J);
std::cout << "Jacobian J:\n" << J << "\n\n";
std::cout << "Condition number kappa_2(J) = " << kappa << std::endl;
return 0;
}
In more complex manipulators, Eigen::MatrixXd can be used
and the Jacobian can be obtained from kinematics libraries like KDL,
then passed to the same JacobiSVD-based condition number
computation.
8. Java Lab — Condition Number with EJML
In Java, the EJML library is a popular choice for efficient dense linear
algebra. The snippet below uses SimpleMatrix and its SVD to
compute the condition number of the 2R Jacobian:
import org.ejml.simple.SimpleMatrix;
public class Planar2RCond {
static SimpleMatrix jacobian2R(double q1, double q2,
double l1, double l2) {
double s1 = Math.sin(q1);
double c1 = Math.cos(q1);
double s12 = Math.sin(q1 + q2);
double c12 = Math.cos(q1 + q2);
double[][] data = new double[][]{
{ -l1 * s1 - l2 * s12, -l2 * s12 },
{ l1 * c1 + l2 * c12, l2 * c12 }
};
return new SimpleMatrix(data);
}
static double cond2(SimpleMatrix J) {
var svd = J.svd();
double[] s = svd.getW().extractDiag().getDDRM().getData();
double sigmaMax = Math.max(s[0], s[1]);
double sigmaMin = Math.min(s[0], s[1]);
return sigmaMax / sigmaMin;
}
public static void main(String[] args) {
double l1 = 1.0, l2 = 1.0;
double q1 = 0.0, q2 = 0.9;
SimpleMatrix J = jacobian2R(q1, q2, l1, l2);
double kappa = cond2(J);
System.out.println("J =");
J.print();
System.out.println("kappa_2(J) = " + kappa);
}
}
In larger Java-based robotics systems (e.g., simulation servers or real-time controllers built on the JVM), this pattern can be reused for higher-dimensional Jacobians.
9. MATLAB/Simulink Lab — Condition Number as a Block
MATLAB has built-in support for singular values and condition numbers. For the planar 2R arm, we can write:
function [J, kappa] = jacobian2R_cond(q1, q2, l1, l2)
%JACOBIAN2R_COND Jacobian and condition number for planar 2R arm
s1 = sin(q1);
c1 = cos(q1);
s12 = sin(q1 + q2);
c12 = cos(q1 + q2);
J = [ -l1 * s1 - l2 * s12, -l2 * s12;
l1 * c1 + l2 * c12, l2 * c12 ];
if rank(J) < 2
kappa = Inf;
else
% 2-norm condition number
kappa = cond(J, 2);
end
end
To integrate this into Simulink for real-time monitoring:
-
Create a new MATLAB Function file (e.g.,
jacobian2R_cond.m) with the above code. -
In a Simulink model, add a MATLAB Function block,
open it, and call
[J,kappa] = jacobian2R_cond(q1,q2,l1,l2);where the inputs are fed from joint signals and constants. -
Connect the output
kappato a Scope or Display block to visualize how the condition number varies along a planned trajectory.
The same pattern generalizes to 6R manipulators once the corresponding Jacobian is implemented.
10. Wolfram Mathematica Lab — Symbolic and Numeric Exploration
Wolfram Mathematica provides symbolic and numeric tools for analyzing Jacobians and condition numbers. For the 2R arm:
l1 = 1; l2 = 1;
J[q1_, q2_] := {
{ -l1*Sin[q1] - l2*Sin[q1 + q2], -l2*Sin[q1 + q2] },
{ l1*Cos[q1] + l2*Cos[q1 + q2], l2*Cos[q1 + q2] }
};
(* Singular values and condition number *)
singVals[q1_, q2_] := SingularValueList[J[q1, q2]];
kappa[q1_, q2_] := ConditionNumber[J[q1, q2]];
(* Example numeric evaluation *)
kappa[0, 0.9]
(* Contour plot of condition number over a joint-space region *)
ContourPlot[
kappa[q1, q2],
{q1, -Pi, Pi}, {q2, -Pi, Pi},
Contours -> 20,
PlotRange -> {1, 100},
PlotLegends -> Automatic,
FrameLabel -> {"q1", "q2", "kappa(J)"}
]
Symbolic manipulation (e.g., Simplify and
Assuming) can be used to study asymptotic behavior of
\( \kappa(\mathbf{J}) \) near singular configurations.
11. Problems and Solutions
Problem 1 (Condition number of a diagonal Jacobian): Let \( \mathbf{J}=\mathrm{diag}(a,b) \) with \( a,b>0 \). Compute the 2-norm condition number \( \kappa_2(\mathbf{J}) \) and interpret its meaning for a planar 2-DOF manipulator whose velocities in two orthogonal task-space directions are scaled by \( a \) and \( b \).
Solution:
The singular values of a diagonal matrix with positive entries are precisely those diagonal entries. Thus \( \sigma_1=\max\{a,b\} \), \( \sigma_2=\min\{a,b\} \). The condition number is
\[ \kappa_2(\mathbf{J}) = \frac{\sigma_1}{\sigma_2} = \frac{\max\{a,b\}}{\min\{a,b\}}. \]
If \( a=b \), then \( \kappa_2(\mathbf{J})=1 \), indicating isotropic sensitivity: all task-space directions are amplified equally. If \( a\gg b \), the arm can generate velocity more easily along the direction associated with \( a \) than the direction associated with \( b \), and the inverse mapping from task-space velocities to joint velocities becomes highly sensitive to perturbations in that weak direction.
Problem 2 (Jacobian and condition number at a stretched configuration): For the planar 2R manipulator with \( \ell_1=\ell_2=1 \) and \( q_1=0,\; q_2=0 \), compute the Jacobian, its singular values, and discuss the condition number.
Solution:
At \( q_1=0,\;q_2=0 \), we have \( \sin 0 = 0,\; \cos 0 = 1 \) and \( q_1+q_2 = 0 \). Thus
\[ \mathbf{J}(0,0) = \begin{bmatrix} -\ell_1\sin 0 - \ell_2\sin 0 & -\ell_2\sin 0 \\ \;\;\ell_1\cos 0 + \ell_2\cos 0 & \;\;\ell_2\cos 0 \end{bmatrix} = \begin{bmatrix} 0 & 0 \\ 2 & 1 \end{bmatrix}. \]
The rank of this Jacobian is 1, since the first row is zero. Therefore one singular value is positive and the other is zero: \( \sigma_1>0,\; \sigma_2=0 \). By definition, \( \kappa_2(\mathbf{J}) = \sigma_1/\sigma_2 = \infty \), reflecting that the configuration is kinematically singular: any attempt to invert the Jacobian will lead to unbounded joint velocities for certain task-space velocity directions.
Problem 3 (Isotropy and identity Jacobian): Show that if \( \mathbf{J}\in\mathbb{R}^{m\times m} \) is orthogonally similar to a scalar multiple of the identity, i.e., \( \mathbf{J} = \alpha\,\mathbf{Q} \) for some orthogonal \( \mathbf{Q} \), then \( \kappa_2(\mathbf{J})=1 \). Interpret this condition geometrically.
Solution:
If \( \mathbf{Q} \) is orthogonal (\( \mathbf{Q}^\top\mathbf{Q}=\mathbf{I} \)) and \( \mathbf{J}=\alpha\mathbf{Q} \) with \( \alpha\neq 0 \), then \( \mathbf{J}^\top\mathbf{J} = \alpha^2 \mathbf{Q}^\top\mathbf{Q} = \alpha^2\mathbf{I} \). The eigenvalues of \( \mathbf{J}^\top\mathbf{J} \) are all equal to \( \alpha^2 \), so all singular values \( \sigma_i \) are equal to \( |\alpha| \). Hence
\[ \kappa_2(\mathbf{J}) = \frac{\sigma_{\max}}{\sigma_{\min}} = \frac{|\alpha|}{|\alpha|} = 1. \]
Geometrically, the mapping \( \mathbf{x}\mapsto \mathbf{J}\mathbf{x} \) is a pure rotation (or reflection) plus uniform scaling. All directions in joint space are amplified equally, so the velocity ellipsoid is a sphere, and the configuration is optimally isotropic from a sensitivity standpoint.
Problem 4 (Forward error bound): Let \( \delta\mathbf{x} = \mathbf{J}\,\delta\mathbf{q} \) with \( \mathbf{J}\in\mathbb{R}^{m\times n} \). Show that the maximal amplification factor of joint errors is exactly the largest singular value:
\[ \max_{\delta\mathbf{q}\neq\mathbf{0}} \frac{\|\delta\mathbf{x}\|_2}{\|\delta\mathbf{q}\|_2} = \sigma_{\max}(\mathbf{J}). \]
Solution:
Using the SVD \( \mathbf{J}=\mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^\top \), let \( \delta\mathbf{q} = \mathbf{V}\mathbf{z} \) with \( \|\mathbf{z}\|_2=\|\delta\mathbf{q}\|_2 \). Then
\[ \delta\mathbf{x} = \mathbf{J}\delta\mathbf{q} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^\top\mathbf{V}\mathbf{z} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{z}. \]
Since \( \mathbf{U} \) is orthogonal, it preserves Euclidean norms: \( \|\delta\mathbf{x}\|_2 = \|\boldsymbol{\Sigma}\mathbf{z}\|_2 \). The vector \( \boldsymbol{\Sigma}\mathbf{z} \) simply scales the components of \( \mathbf{z} \) by the singular values. The maximum ratio \( \|\boldsymbol{\Sigma}\mathbf{z}\|_2/\|\mathbf{z}\|_2 \) is achieved by choosing \( \mathbf{z} \) aligned with the first singular vector, yielding \( \|\boldsymbol{\Sigma}\mathbf{z}\|_2 = \sigma_1\|\mathbf{z}\|_2 \). Therefore the maximum amplification factor equals \( \sigma_{\max}(\mathbf{J}) \).
Problem 5 (Interpreting large condition numbers along a trajectory): A 6-DOF industrial manipulator is commanded to follow a straight-line Cartesian trajectory. Along the trajectory, the computed condition number takes values between 2 and 150. Explain how this information should be used when validating the trajectory, assuming no controller redesign.
Solution:
Values near 2 indicate nearly isotropic configurations with good numerical robustness: small errors in joint space or task space will not be dramatically amplified. Values near 150 indicate that the smallest singular value is much smaller than the largest one, so the manipulator is close to a singular configuration: joint velocities required to track the Cartesian trajectory may become very large in some directions, and small measurement/model errors can cause large deviations in \( \delta\mathbf{q} \). Without changing the controller, the trajectory should be reparameterized or slightly reshaped to avoid regions where \( \kappa(\mathbf{J}) \) exceeds a chosen threshold (e.g., 20 or 30), especially under speed and torque limits.
12. Summary
In this lesson we introduced matrix norms and condition numbers as rigorous tools to quantify sensitivity in differential kinematics. Using the singular values of the Jacobian, we defined the 2-norm condition number \( \kappa_2(\mathbf{J}) \) and showed how it diverges near singularities, complementing manipulability measures from the previous lesson. We derived bounds on the amplification of joint-space errors into task-space errors and vice versa, and emphasized the importance of metric and scaling choices when mixing rotational and translational components. Finally, we demonstrated how to compute and visualize Jacobian condition numbers in Python, C++, Java, MATLAB/Simulink, and Wolfram Mathematica.
13. References
- Yoshikawa, T. (1985). Manipulability of robotic mechanisms. International Journal of Robotics Research, 4(2), 3–9.
- Salisbury, J.K., & Roth, B. (1983). Kinematic and force analysis of articulated mechanical hands. Journal of Mechanisms, Transmissions, and Automation in Design, 105(1), 35–41.
- Angeles, J. (1988). The condition number of the Jacobian matrix for robot manipulators. Journal of Mechanical Design, 110(3), 497–501.
- Klein, C.A., & Blaho, B.E. (1987). Dexterity measures for the design and control of kinematically redundant manipulators. International Journal of Robotics Research, 6(2), 72–83.
- Chiaverini, S., Siciliano, B., & Slotine, J.J.E. (1994). A survey of the Jacobian-based inverse kinematics techniques for redundant robots. Journal of Intelligent and Robotic Systems, 14(2), 123–144.
- Doty, K.L., Melchiorri, C., & Bonivento, C. (1993). A theory of generalized inverses applied to robotics. International Journal of Robotics Research, 12(1), 1–19.
- Angeles, J. (1997). On the kinetostatic optimization of robotic manipulators. Journal of Mechanical Design, 119(4A), 498–505.
- Koeppe, R., & Hiller, M. (1994). Performance analysis of robot manipulators using condition indices. Mechanism and Machine Theory, 29(8), 1161–1171.