Robot workspaces: derive the reachable position set

Derive the exact position workspace of a two-link robot with elbow limits. Test targets against its annulus, recover a valid arm configuration, and separate position reach from orientation and path feasibility.

By 11 min read

What you will learn

  • Distinguish joint configurations from the positions their forward map reaches.
  • Derive inner and outer reach radii for a two-link arm with an elbow limit.
  • Test a target and reconstruct one allowed joint pair.
  • Explain why position reach does not guarantee an arbitrary tool orientation.
  • Separate workspace membership from a feasible motion between configurations.

Before you start

A robot with 3 m of total link length can still fail to reach a point 0.5 m from its base. Its links must fold into a configuration that puts the tool there.

This lesson derives the complete reachable position set for one planar arm. You can check a target with a radius calculation, then recover joint angles that reach it.

Map joint configurations to tool positions

Our fixed-base arm has a 2 m first link and a 1 m second link. The shoulder angle θ₁ measures counterclockwise rotation from world x. The elbow angle θ₂ measures rotation relative to the first link.

The shoulder can make a full turn without a travel restriction. The elbow stays within −α ≤ θ₂ ≤ α, where 0° ≤ α ≤ 180°. We ignore obstacles, link thickness and self-collision in this geometric model.

A joint pair q = (θ₁, θ₂) describes the arm's configuration. Forward kinematics maps that pair to the tool position p(q) = (x, y). The reachable position workspace collects the outputs of every allowed joint pair:

W = {p(q) : q is allowed}

Joint coordinates use radians; workspace coordinates use meters. The same target can have multiple joint solutions, so a tool position need not specify the entire arm. Lynch and Park's task-space discussion separates the robot's configuration space from its possible end-effector outputs.

Find the tool radius from the elbow angle

Let r = ‖p‖₂ be the distance from the base to the tool. In world coordinates:

x = 2 cos θ₁ + cos(θ₁ + θ₂)
y = 2 sin θ₁ + sin(θ₁ + θ₂)

Square both coordinates and add. The sine and cosine identities remove θ₁:

r² = x² + y²
r² = 2² + 1² + 2(2)(1) cos θ₂
r² = 5 + 4 cos θ₂

Each numeric length here uses meters, so r² uses m². The same identity follows from the law of cosines. Its plus sign matches our elbow convention: θ₂ = 0 means straight links, with r = 3 m.

Changing θ₁ rotates the whole arm and preserves its radius. Changing θ₂ changes how tightly the links fold, which changes the radius.

Prove the reachable annulus and its area

Cosine decreases from 1 to −1 as an angle increases from 0 to π. With |θ₂| ≤ α, the smallest radius occurs at θ₂ = ±α. The largest occurs at θ₂ = 0:

r_min = √(5 + 4 cos α)
r_max = 3
r_min ≤ ‖p‖₂ ≤ r_max

Every intermediate elbow angle gives a radius between these bounds. Continuity supplies every radius in the interval. The unrestricted shoulder then rotates each such arm through every bearing, covering the entire annulus.

That argument proves both directions: every allowed configuration stays in the annulus, and every point in the annulus has an allowed configuration. A sampled point cloud can illustrate this set, but finite samples alone would leave gaps between the tested points.

Subtract the inner disk's area from the outer disk's area:

A = π(9 − r_min²)
A = 4π(1 − cos α) m²

At α = 180°, the radius interval is [1, 3] m and the area is 8π m². At α = 120°, it becomes [√3, 3] m with area 6π m². At α = 0°, both radii equal 3 m: the reachable set is a circle with zero planar area.

Check a target and recover a configuration

Take p = (2, 1) m. Its squared radius is 5 m², so the radius is √5 ≈ 2.236068 m. Substituting into the radius law gives cos θ₂ = 0.

The two elbow choices are θ₂ = ±90°. Both fit when α ≥ 90°; neither fits when α is smaller. In particular, α = 60° gives r_min = √7 ≈ 2.645751 m, leaving this target inside the excluded hole.

For an allowed target, choose the nonnegative elbow branch and recover the shoulder:

θ₂ = acos((r² − 5)/4)
θ₁ = atan2(y, x)
− atan2(sin θ₂, 2 + cos θ₂)

For (2, 1), the two atan2 terms match. This gives (θ₁, θ₂) = (0°, 90°): the first link ends at (2, 0), and the second reaches (2, 1).

This construction also proves membership by producing a valid input to the forward map. The analytical inverse-kinematics lesson develops both branches; here, one valid branch suffices to demonstrate position reach.

Change the elbow limit and target

Reach experiment

Which positions can this arm reach?

The links measure 2 m and 1 m. The shoulder can rotate freely; the relative elbow angle stays between −α and α. Obstacles and link collisions are outside this geometric model.

180°
2.00 m
1.00 m

Reachable positions in world axes (m)

Position workspace with inner radius 1.000000 meters; target (2.000, 1.000) is reachableBoth axes share the same meter scale. The blue annulus includes its solid outer and dashed inner circular boundaries. The amber cross marks the target. The solid black arm shows one valid joint pair, with open base and elbow circles and a filled tool point. The dotted radial line measures the target distance, not a motion path.-3-30033xy
The region comes from the exact radius bounds derived above. The target remains fixed when α changes. Its radial line does not prescribe a route for the arm.
  • Blue fill and circular boundaries: reachable positions
  • Black connected links: one valid arm configuration
  • Amber cross: requested target position
Target position (m)
(2.000, 1.000)
Target radius (m)
2.236068
Inner radius (m)
1.000000
Outer radius (m)
3.000000
Position workspace area (m²)
25.132741
Workspace shape
Annulus
Target status
Reachable
Valid joint angles (degrees)
(0.000, 90.000)
Reconstructed tool position (m)
(2.000, 1.000)
Reconstruction error (m)
0.000000

Reachable. The displayed joint pair places the tool at the target within the stated numerical tolerance.

The solver shows the branch with a nonnegative elbow angle. Shoulder angles describe orientation modulo a full turn. A radial tolerance of 10⁻¹⁰ m handles floating-point roundoff at either boundary; it is not a physical clearance margin. The reconstruction error measures the displayed solution against the target.

Very thin annuli can fall below screen resolution. At α = 0° the circle still contains reachable positions even though its planar area is zero.

Keep the default target fixed and lower α. The target stays reachable through α = 90°, then leaves the workspace. Choose the elbow-boundary preset to inspect that transition.

The inner-hole preset fails even with maximum elbow travel. The outer-reach preset fails because its target exceeds the total link length. The locked-elbow preset shows a valid straight arm on a circle whose area is zero.

The lab tests the exact radial inequalities with a 10⁻¹⁰ m tolerance for floating-point roundoff. Within that tiny boundary band, it reconstructs a configuration on the nearest allowed radius and reports the residual. This numerical allowance supplies no physical clearance or positioning guarantee.

State whether orientation belongs to the task

The annulus answers a position question. A planar pose also specifies a tool heading φ, which this arm sets to φ = θ₁ + θ₂, modulo a full turn.

At (3, 0), the arm must extend straight along positive x. Its tool heading is therefore 0°, and a request for 90° at that same position has no solution. Two independently prescribed position coordinates plus an independent heading generally exceed this arm's two joint freedoms.

A pose workspace records the reachable position-heading combinations. The usual all-orientations definition of a dexterous workspace asks for positions that support every tool orientation. Specify the orientation set when using that term: in this planar example, it means every heading around the circle.

This unequal-link 2R arm has no such dexterous positions. A reachable position allows at most two distinct geometric arm configurations, giving at most two headings. Adding a wrist joint would change that question, but the position annulus alone does not establish the answer for a different mechanism.

Distinguish joint stops from singularities

A workspace boundary need not mean that the unconstrained position Jacobian loses rank. Our inner boundary at 0° < α < 180° comes from the elbow travel limit. At θ₂ = ±α, the determinant det J = 2 sin θ₂ is nonzero.

The matrix still describes two independent instantaneous position directions if both joint rates are free. The physical elbow stop restricts which signed rates the controller may command. That restriction creates a workspace edge even though the unconstrained matrix retains rank two.

At the fully straight or fully folded configurations, det J does vanish. The kinematic-singularities lesson explains the lost instantaneous direction. Workspace membership and local velocity freedom answer separate questions.

Use reach as one part of a motion check

The annulus proof depends on unrestricted shoulder rotation and the symmetric elbow interval. Restrict the shoulder, and reachable bearings can disappear. Add an obstacle, and a tool position may require an arm configuration whose links intersect it.

A reachable target also leaves a path question: can the robot move from its current configuration to an allowed target configuration without collision? The configuration space lesson follows paths through joint coordinates and shows why an angle chart can jump while the arm moves continuously. Lynch and Park's C-space obstacle discussion addresses configurations and connected free regions, including collisions along the robot's links.

For a robot cell, a reach calculation can rule out impossible bin positions before detailed planning. A learned policy can use the same geometric test to reject an unreachable proposed target. Membership still leaves orientation, joint-rate limits, contact and dynamics to check.

Once you have a feasible geometric path, trajectory time scaling sets how quickly the robot follows it. Changing the timing cannot make an unreachable point enter this workspace.

Reproduce the geometry in Python

This standard-library example checks the same target under several elbow limits. It then reconstructs the default arm and verifies the forward position.

from math import acos, atan2, cos, sin, sqrt, hypot, pi, degrees

x, y = 2.0, 1.0
radius = hypot(x, y)
tolerance = 1e-10

for alpha_degrees in (180, 120, 90, 60, 0):
    alpha = alpha_degrees * pi / 180
    inner = sqrt(5 + 4 * cos(alpha))
    area = 8 * pi * sin(alpha / 2) ** 2
    reachable = inner - tolerance <= radius <= 3 + tolerance
    print(f"alpha={alpha_degrees:3d}: inner={inner:.6f} m, "
          f"area={area:.6f} m^2, reachable={reachable}")

# Reconstruct one branch with the default 180-degree elbow limit.
c2 = max(-1.0, min(1.0, (radius * radius - 5) / 4))
theta2 = acos(c2)
theta1 = atan2(y, x) - atan2(sin(theta2), 2 + cos(theta2))
px = 2 * cos(theta1) + cos(theta1 + theta2)
py = 2 * sin(theta1) + sin(theta1 + theta2)
error = hypot(px - x, py - y)
assert 0 <= theta2 <= pi
assert error < tolerance

def clean(value):
    return 0.0 if abs(value) < 0.5e-6 else value

print(f"angles: ({clean(degrees(theta1)):.6f}, "
      f"{degrees(theta2):.6f}) degrees")
print(f"tool: ({px:.6f}, {py:.6f}) m")
print(f"residual: {error:.6f} m")

Expected output:

alpha=180: inner=1.000000 m, area=25.132741 m^2, reachable=True
alpha=120: inner=1.732051 m, area=18.849556 m^2, reachable=True
alpha= 90: inner=2.236068 m, area=12.566371 m^2, reachable=True
alpha= 60: inner=2.645751 m, area=6.283185 m^2, reachable=False
alpha=  0: inner=3.000000 m, area=0.000000 m^2, reachable=False
angles: (0.000000, 90.000000) degrees
tool: (2.000000, 1.000000) m
residual: 0.000000 m

Try it yourself

1. Design the elbow range for a radius. What minimum value of α lets this arm reach a target at radius 2 m? What is the workspace area at that limit?

Show solution

Require 5 + 4 cos α ≤ 4. Thus cos α ≤ −1/4, and the smallest allowed α is acos(−1/4) ≈ 104.477512°.

The inner radius then equals 2 m. Subtracting disk areas gives π(3² − 2²) = 5π ≈ 15.707963 m². Every bearing at radius 2 m is reachable because the shoulder remains unrestricted.

2. Separate a joint boundary from a pose request. Set α = 90° and target (2, 1) m. Is the position reachable? Does the positive-elbow solution have a singular position Jacobian? Can the arm reach this position with a heading of 0°?

Show solution

The position lies on the inner boundary r = √5 m. The positive-elbow solution is (0°, 90°), and det J = 2 sin 90° = 2 m²/rad², so its position Jacobian has rank two. Its elbow already sits at the upper travel limit.

For a 0° tool heading, the second link would contribute (1, 0) m. The first link would then have to reach (1, 1) m, whose length is √2 m. That conflicts with the fixed 2 m first link, so this pose has no solution even though the position is reachable.

Sources and further study