ENG-654 · Lecture 05

Robot Singularities

Jacobian columns, rank loss, and singularity geometry in the uploaded 3R and 6R robots

Running examples: custom_3R_new.urdf for position kinematics and custom_6R_new.urdf for full-pose singularities.

The question that drives the lecture

Which joint rates create a desired end-effector velocity?

Forward kinematics tells us where the robot is. Its differential tells us how the robot can move from there.

If a Cartesian velocity is prescribed, what must the joints do?

\[\dot{\mathbf p}=J(\mathbf q)\dot{\mathbf q}\]
Guiding question: what physically changes when \(J\) loses rank?

Act I · Read the uploaded 3R model

custom_3R_new.urdf defines the complete position task

Selected chain

base_linklink_1link_2link_3_d3tool0

The first three joints are revolute; the final transform to tool0 is fixed.

jointorigin in parent [m]local axis
1\((0,0,0.5)\)\((0,0,1)\)
2\((1,0,0.5)\)\((0,1,0)\)
3\((2,1.25,0)\)\((0,0,1)\)
tool\((1.5,0,0.75)\)fixed
Every value on this slide is read from the uploaded URDF; no substitute robot geometry is introduced.

Act I · Build the position Jacobian

One cross product gives each column

Let \(\mathbf p\) be the current tool0 position, \(\mathbf p_k\) a point on joint axis \(k\), and \(\mathbf z_k\) that axis expressed in the base frame.

\[J_p(\mathbf q)=\begin{bmatrix}\mathbf J_{p,1}&\mathbf J_{p,2}&\mathbf J_{p,3}\end{bmatrix},\qquad \mathbf J_{p,k}=\mathbf z_k\times(\mathbf p-\mathbf p_k)\]
Column \(k\) is the Cartesian velocity of tool0 when \(\dot q_k=1\) and every other joint rate is zero.

Act I · Column 1

Joint 1 sweeps the complete mechanism around its base axis

\[\mathbf J_{p,1}=\mathbf z_1\times(\mathbf p-\mathbf p_1)\]

At URDF home

\(\mathbf z_1=[0,0,1]^T\)

\(\mathbf J_{p,1}=[-1.25,\;4.50,\;0]^T\)

The instantaneous motion is tangent to a circle about axis 1.

Act I · Column 2

Joint 2 tilts every downstream point about its current axis

\[\mathbf J_{p,2}=\mathbf z_2\times(\mathbf p-\mathbf p_2)\]

At URDF home

\(\mathbf z_2=[0,1,0]^T\)

\(\mathbf J_{p,2}=[0.75,\;0,\;-3.50]^T\)

This column couples horizontal and vertical tool motion.

Act I · Column 3

Joint 3 contributes the velocity generated by the final lever arm

\[\mathbf J_{p,3}=\mathbf z_3\times(\mathbf p-\mathbf p_3)\]

At URDF home

\(\mathbf z_3=[0,0,1]^T\)

\(\mathbf J_{p,3}=[0,\;1.50,\;0]^T\)

Its magnitude is the perpendicular distance from axis 3 to tool0.

Act I · Annotate the three columns

Read each axis, lever arm, and velocity directly on the robot

The uploaded STL links follow custom_3R_new.urdf. Every \(\mathbf z_k\), \(\mathbf r_k=\mathbf p-\mathbf p_k\), and \(\mathbf J_{p,k}=\mathbf z_k\times\mathbf r_k\) can be controlled independently.

Try it: activate one axis, its position vector, and its Jacobian column. Check the cross-product direction, then repeat for the other joints.

Act I · Define singularity

The custom 3R robot is singular when its three velocity columns lose independence

\[\boxed{\operatorname{rank}J_p<3\iff\det J_p=0}\]

Motion lost

At least one Cartesian velocity direction cannot be produced.

Columns depend

One joint-generated velocity lies in the span of the others.

Local inverse fails

Finite tool velocity can demand unbounded joint rates.

Act II · Generate the symbolic determinants

Changing \(a_1\) changes the singularity factors

Standard D–H with \(d=(d_1,1,0)\), \(\alpha=(\pi/2,\pi/2,\alpha_3)\), and \(c_i=\cos q_i\), \(s_i=\sin q_i\).

Offset axes: \(a=(1,2,1.5)\)

The additional \(-s_3\) term couples the two singularity factors.

Intersecting first axes: \(a=(0,2,1.5)\)

Now \(c_2=0\) is an explicit singularity family.

Both expressions are independent of \(q_1\), \(d_1\), and \(\alpha_3\); the code verifies them against direct symbolic D–H Jacobians.

Act II · Think in configuration space

A spatial robot has a singularity set, not one bad posture

\[\mathcal S=\{\mathbf q\in\mathcal C:D(q_2,q_3)=0\}\]

For every \(q_1\), the same curves in the \((q_2,q_3)\) torus lift into singular surfaces in \(\mathcal C\).

Act II · Map the zero set

The determinant contour partitions \((q_2,q_3)\)

Switch between \(a_1=1\) and \(a_1=0\) to see how the two code-generated determinant factors change the singularity locus.

Try it: select the intersecting-axis case and locate the new \(\cos q_2=0\) singularity lines.

Transition · From the uploaded 3R to the uploaded 6R

The same column construction scales from position to pose

custom_3R_new.urdf

Three revolute joints map to the three-dimensional velocity of tool0.

Task Jacobian: \(J_p\in\mathbb R^{3\times3}\).

custom_6R_new.urdf

Six revolute joints map to the twist of link_6.

Geometric Jacobian: \(J\in\mathbb R^{6\times6}\).

Only the uploaded model changes; the axis and lever-arm rule stays the same.

Act III · Read one revolute joint geometrically

An axis and a lever arm determine the point velocity

\(\mathbf z\): unit axis direction · \(\mathbf p_k\): any point on the axis · \(\mathbf p\): operational point · \(\mathbf r=\mathbf p-\mathbf p_k\).

1

\(\boldsymbol\omega=\dot q\,\mathbf z\)

2

\(\mathbf v=\boldsymbol\omega\times\mathbf r\)

3

\(\mathbf v=\dot q\,\mathbf z\times(\mathbf p-\mathbf p_k)\)

Act III · Fix the convention

This lecture stacks linear velocity above angular velocity

\[\boldsymbol\xi=\begin{bmatrix}\mathbf v\\\boldsymbol\omega\end{bmatrix}=J(\mathbf q)\dot{\mathbf q}\]
\[J_k=\begin{bmatrix}\mathbf z_k\times(\mathbf p-\mathbf p_k)\\\mathbf z_k\end{bmatrix}\]

Some screw-theory books use \([\boldsymbol\omega;\mathbf v]\). We use linear first, angular second.

Act III · Stack joint-generated motions

The Jacobian is a catalogue of instantaneous screws

\[J=\begin{bmatrix}|&|&&|\\\mathbf v_1&\mathbf v_2&\cdots&\mathbf v_n\\|&|&&|\\|&|&&|\\\boldsymbol\omega_1&\boldsymbol\omega_2&\cdots&\boldsymbol\omega_n\\|&|&&|\end{bmatrix}\]
A column is not merely a derivative: it is the task-space motion produced by one unit joint rate.

Act III · Verify on the custom 3R

Analytic and geometric position Jacobians coincide

\[\underbrace{\frac{\partial\mathbf p}{\partial\mathbf q}}_{J_{\rm analytic}}=\underbrace{[\,\mathbf z_1\!\times(\mathbf p-\mathbf p_1)\;\mathbf z_2\!\times(\mathbf p-\mathbf p_2)\;\mathbf z_3\!\times(\mathbf p-\mathbf p_3)\,]}_{J_{\rm geometric,v}}\]

The module checks this against central finite differences at random configurations and reports failures in the console.

Transition · Move from position to pose

A 6R chain maps six joint rates to one twist

\[\begin{bmatrix}\mathbf v_6\\\boldsymbol\omega_6\end{bmatrix}=J(\mathbf q)\dot{\mathbf q},\qquad J\in\mathbb R^{6\times6}\]

Uploaded axis sequence

Local axes: \(z,y,z,x,z,x\)

Operational point: the link_6 origin

All six joints are revolute.

The legacy tool0 branches from link 3, so the 6R pose task correctly ends at link_6.

Act III · Read the uploaded 6R model

Build six columns at the link_6 origin

\[J_k=\begin{bmatrix}{}^0\mathbf z_k\times({}^0\mathbf p_6-{}^0\mathbf p_k)\\{}^0\mathbf z_k\end{bmatrix}\]
123456

All six physical columns are simple; their base-frame trigonometric components are not.

Act III · Use the uploaded wrist geometry

Axes 4, 5, and 6 intersect at one wrist center

In custom_6R_new.urdf, the joint-5 origin lies on the joint-4 and joint-6 axis lines.

\[O_w=\text{origin of joint 5}\]

Why this matters

Reduce every twist at \(O_w\).

Wrist columns 4 to 6 then have zero linear part.

The Jacobian becomes block triangular.

This arm and wrist split follows from the uploaded axis lines, not from a generic 6R assumption.

Act III · Factor the singularity condition

The full determinant separates into arm and wrist factors

\[\det J=\underbrace{\det\!\begin{bmatrix}\mathbf z_1\!\times(\mathbf p_w-\mathbf p_1)&\mathbf z_2\!\times(\mathbf p_w-\mathbf p_2)&\mathbf z_3\!\times(\mathbf p_w-\mathbf p_3)\end{bmatrix}}_{D_{\rm arm}(q_2,q_3)}\underbrace{(-\sin q_5)}_{D_{\rm wrist}(q_5)}\]

Arm singularity

\(D_{\rm arm}(q_2,q_3)=0\)

The first three joints cannot move the wrist center in every Cartesian direction.

Wrist singularity

\(\sin q_5=0\)

Axes 4 and 6 align, so one independent angular velocity is lost.

Act III · Classify the uploaded 6R singularities

Arm and wrist rank losses have different physical meanings

Arm

\(D_{\rm arm}=0\)

Translation of \(O_w\) loses a direction.

Wrist

\(q_5=0\) or \(\pi\)

Axes 4 and 6 generate the same angular direction.

Combined

Both factors vanish.

Position and orientation capabilities are lost together.

Joint 1 and joint 6 rotate the geometry or tool about existing axes; neither appears in the determinant factors.

Act IV · Use two legal freedoms

Choose where the screw is reduced and where components live

Notation: in \({}^iJ_j\), left superscript \(i\) is the representation frame; right subscript \(j\) is the reference origin \(O_j\).

Change point \(O_j\)

Replace the moment arm endpoint without changing the joint’s screw.

Change basis \(F_i\)

Rotate linear and angular components into a nearby frame.

Preferential means strategically re-expressed—not weighted.

Act IV · Preserve the physics

Rigid twist transformations cannot create or remove rank loss

\[J_{\rm new}=A J,\qquad A\text{ invertible}\]
1

\(\operatorname{rank}(AJ)=\operatorname{rank}(J)\)

2

For a rigid adjoint, \(\det A=1\).

3

Thus the square 6R determinants have the same zero set.

Act IV · Impose the requested symbolic D–H family

Keep the geometry symbolic around a spherical wrist

parameterrows 1 to 6
\(a_i\)\((a_1,a_2,a_3,0,0,a_6)\)
\(d_i\)\((d_1,0,0,d_4,0,d_6)\)
\(\alpha_i\)\((\pi/2,\alpha_2,\pi/2,\pi/2,\pi/2,0)\)
\(\theta_i\)\((q_1,q_2,q_3,q_4,q_5,q_6)\)

Preferential choice

Representation frame: \(F_3\)

Reference point: \(O_5\), the wrist point

\[{}^3J_5\]
The derivation keeps \(a_1,a_2,a_3,a_6,d_1,d_4,d_6,\alpha_2\), and every \(q_i\) symbolic. Parameters beyond \(O_5\) disappear naturally when the screws are reduced there.

Act IV · Read the block structure

Reducing at \(O_5\) removes all wrist moment arms

\[{}^3J_5=\begin{bmatrix}{}^3J_{5,v}^{\rm arm}&\mathbf 0_{3\times3}\\{}^3J_{5,\omega}^{\rm arm}&{}^3J_{5,\omega}^{\rm wrist}\end{bmatrix}\]

Joints 1 to 3

Move \(O_5\) and rotate the wrist frame.

Joints 4 to 6

Their axes pass through \(O_5\), so their linear blocks are zero.

Determinant

Block triangularity separates arm and wrist factors.

Act IV · Symbolic linear block

Only the arm columns translate the wrist point

Use \(s_i=\sin q_i\), \(c_i=\cos q_i\), \(s_\alpha=\sin\alpha_2\), and \(c_\alpha=\cos\alpha_2\).

Columns 4 to 6 are exactly zero in the linear block because \(O_5\) lies on all three wrist axes.

Act IV · Symbolic angular block

The final three columns expose the wrist singularity

The angular block contains each joint axis expressed in \(F_3\).

At \(s_5=0\), columns 4 and 6 of the wrist block become parallel, so one independent angular direction is lost.

Act IV · Factor the symbolic determinant

The preferential determinant separates three singularity factors

Arm factor 1

\(d_4c_3-a_3s_3=0\)

Arm factor 2

\(G(q_2,q_3)=0\)

Wrist factor

\(s_5=0\)

Act IV · Observe the preferential representation

Choose \((i,j,k)\), then inspect the screw and both determinants

The uploaded 6R STL links follow custom_6R_new.urdf. Live arm and wrist factors identify the cause of rank loss.

Try it: select the regular, arm-singular, and wrist-singular cases. Then change the representation and confirm that the singularity classification stays fixed.

Act IV · Choose strategically

Put the reference near the split between arm and wrist

123|456

\(i=3\)

Nearby basis reduces propagated rotations.

\(j=5\)

\(O_5\) is the wrist center read from the URDF axis lines.

Same rank

More zero/simple entries; same singularity set.

Act IV · Keep the definitions separate

Analytic orientation rates are not angular velocity

Analytic

For \(\mathbf x=[\mathbf p;\boldsymbol\phi]\):

\(\dot{\mathbf x}=J_A(\mathbf q)\dot{\mathbf q}\)

Geometric

For a twist:

\([\mathbf v;\boldsymbol\omega]=J_G(\mathbf q)\dot{\mathbf q}\)

\[J_A=T(\boldsymbol\phi)J_G\]
For the custom 3R Cartesian position task, the translational blocks coincide exactly.

Act V · Automate the pipeline

A URDF contains enough geometry to generate the Jacobian

URDFserial chainaxes + originsscrews\({}^iJ_j\)rank condition

Meshes are optional. The mathematics needs topology, origins, axes, and joint types.

Act V · Validate before trusting

Four routes should agree at random configurations

Finite difference

\(J_{:,k}\approx[\mathbf p(q+\epsilon e_k)-\mathbf p(q-\epsilon e_k)]/(2\epsilon)\)

Geometric

Axis–lever-arm cross products generated from URDF.

Representation

Ordinary and preferential Jacobians preserve rank and determinant zero sets.

If \(J\in\mathbb R^{6\times n}\) is non-square, stop saying “determinant”: use rank, \(\sigma_{\min}\), or a square task Jacobian.

What to carry forward

From a position formula to a singularity equation

FK differentiationJacobianscrewsgeometric \(J\)preferential \(J\)singularity locus
  1. Singularity is loss of instantaneous task mobility.
  2. Each Jacobian column is one joint-generated motion.
  3. Changing rigid representation preserves rank.
  4. A preferential choice can reveal symbolic structure.
  5. A URDF can drive the complete geometric pipeline.

Bridge to Lecture 06

Singular loci organize inverse-kinematic branches

Singularities are not merely isolated bad configurations. Their loci partition configuration space and determine how IK branches can connect.

\[\boxed{\text{What happens to IK branches on either side of a singularity surface?}}\]

Next: IKS Distribution, Aspects, and Cuspidal Properties