Robot Jacobians and Singularities
Joint speeds combine into a tool velocity through a posture-dependent map. Straighten an arm and that map can lose a direction, even though the joints still move.
Why Does This Exist?
The gripper is at the right point, but the next command asks it to slide farther outward along a fully extended arm. The joints can turn; none of their instantaneous motions produces that outward tip velocity. Reaching a position and being able to move through it in every direction are different questions.
A robot Jacobian is the local map from joint velocity to task velocity. A kinematic singularity is a configuration where that map loses rank relative to the maximum rank it can attain. The task matters: controlling planar position is different from controlling a full position and orientation.
Start with forward kinematics: it maps joint angles to tool position. A velocity is how quickly a position changes. The Jacobian differentiates that same mapping, so each column says what one moving joint contributes while the others are momentarily still. This page develops that local relationship, rather than solving a complete collision-free motion.
Think of It Like This
Moving a desk lamp's head
Hold a two-hinge desk lamp in a bent posture. Turning its base hinge sweeps the head around the base; turning its elbow sweeps the head around the elbow. At the current posture, each sweep has a tangent direction. Turn both hinges and their instantaneous contributions add. Straighten the lamp and those tangents line up: two hinges now offer only one instantaneous direction for its head.
The hinges are joints, the head is the tool and the tangents are Jacobian columns. The analogy stops at force and finite motion. A real lamp has springs and joint friction, and a finite swing follows an arc rather than its initial tangent.
How It Actually Works
What is in a Jacobian column?
Let contain two joint angles in radians and the tip position in metres. A dot means differentiation with respect to time. For link lengths , shoulder angle measured counterclockwise from base , and elbow angle relative to the first link:
The matrix contains the partial derivatives of with respect to each angle:
Column one is the tip velocity per unit shoulder rate; column two is the contribution per unit elbow rate. This position Jacobian has units of metres per radian. A spatial Jacobian instead maps to a six-component twist, combining angular and linear velocity. Always declare the frame, reference point and component order before using it.
Work the bent arm, then straighten it
Set m and . The tip is m and
With rad/s, shoulder motion contributes m/s; elbow motion contributes m/s. Their sum is m/s. The diagram places these two contributions head to tail, labelled 1 and 2. The mint arrow joins the original tip to their combined endpoint. It is a velocity vector, not the tip's position after a finite step. Both physical links have equal length within each panel; the panels use slightly different drawing scales for space.
At the tip is m and . Every finite joint-rate choice gives . The matrix rank drops from two to one; the dashed horizontal request in the right panel is unavailable. Bending inward later can change , but that does not supply a nonzero horizontal velocity at this exact instant. Modern Robotics on singularities formalizes rank loss and distinguishes it from simply having too few joints for a task.
What does damping buy?
The pseudoinverse gives the least-squares joint-rate solution with minimum Euclidean norm. Near a singularity, a small achievable task direction can require large joint rates. Damped least squares instead minimizes , where is requested tool velocity and sets the trade-off. Its solution is
Here is the identity matrix, distinct from physical inertia. In our translational, revolute-only fixture, choose in the corresponding Jacobian units. At the straight posture, requesting m/s gives rad/s. The achieved velocity is m/s. Damping softens inversion; it cannot create the missing horizontal direction or enforce explicit actuator limits. The formula follows by differentiating the stated quadratic objective. Joint bounds need a constrained solve or another explicit limit-handling policy.
The singular values of describe directional velocity amplification. Mapping a unit joint-rate sphere through gives a velocity ellipsoid; a collapsed axis reveals rank loss. Modern Robotics on manipulability derives this geometry. A raw norm combining metres per second and radians per second needs a declared task weighting; its condition number is otherwise unit-dependent.
Why does the transpose map forces?
Let be a tool force and its corresponding generalized joint load, using matching frames and sign conventions. Equality of instantaneous power gives . Substituting gives . For the bent fixture, N maps to N m. The tool power is W; joint power is W.
An external load contributes to the robot's generalized force. Motors holding against that load supply the opposite contribution, alongside gravity compensation. Modern Robotics on statics derives the transpose through power. This is the bridge to impedance control, not a claim that transpose mapping alone controls contact.
Code
This dependency-free check verifies the analytic velocity against a small forward kinematics step, then checks the unachievable component of the damped request.
from math import cos, sin, pi
def tip(q1: float, q2: float) -> tuple[float, float]: return cos(q1) + cos(q1 + q2), sin(q1) + sin(q1 + q2)
q = (0.0, pi / 2)rates = (0.2, -0.1)dt = 1e-6p0 = tip(*q)p1 = tip(q[0] + dt * rates[0], q[1] + dt * rates[1])velocity = tuple((b - a) / dt for a, b in zip(p0, p1))assert max(abs(a-b) for a, b in zip(velocity, (-0.1, 0.2))) < 1e-6
def damped_straight(vy: float, damping: float) -> tuple[float, float]: # J = [[0, 0], [2, 1]]: horizontal request cannot contribute. return 2 * vy / (5 + damping**2), vy / (5 + damping**2)
u = damped_straight(0.2, 0.1)achieved = (0.0, 2 * u[0] + u[1])assert abs(achieved[1] - 0.1996007984031936) < 1e-12print(tuple(round(v, 6) for v in velocity))print(tuple(round(v, 6) for v in achieved))Output: (-0.1, 0.2) and (0.0, 0.199601). The finite difference checks a local
derivative, not finite-step trajectory accuracy.
Watch Out For
The inverse returns enormous rates near extension
The desired tool motion is small, but one joint rate explodes. Inspect the smallest singular value, the achieved task velocity and the joint-rate limits together. Damping accepts tracking error to reduce sensitivity; a bounded optimization makes the limits explicit. Continuing to integrate an unachievable request can still drift.
A force in one frame meets a Jacobian in another
The torque vector has the right shape yet produces the wrong wrench. Express the wrench and Jacobian at the same reference point and in compatible coordinates, including angular/linear ordering. Check the power identity with a test velocity; array dimensions alone won't catch a frame or action-reaction sign error.
The Quick Version
- A Jacobian maps joint rates to instantaneous task velocity at the current posture.
- Singularity means rank loss relative to the chosen task's attainable maximum.
- Damped inversion trades tracking accuracy for reduced sensitivity; missing directions stay missing.
- The transpose maps matching tool wrenches to generalized joint loads through equality of power.
- Kinematic feasibility leaves torque, collision and timing checks to the rest of the motion system.