# 3-Axis Gantry + 4-DOF Wrist  ▶ NEXT

Viewer: `.../?file=gantry_arm.urdf`  ·  Generator: `gen_gantry.py`

A Cartesian (gantry) robot: 3 linear axes carry a small servo wrist. Big win vs the pure arm — **the linear
Z-axis carries the weight, so the servos never fight gravity** (erases the shoulder-torque problem).

## Current design (first passes)
- Portal frame: 2 vertical legs (1.0 m), top rail, bottom cross-bar on the ground, feet. Extrusion.
- **axis_X** (prismatic) — top horizontal rail, carriage travels ±220 mm.
- **axis_Z** (prismatic) — rail hanging under the X-carriage, ±220 mm.
- **axis_Y** (prismatic) — vertical rail dropping from the Z-carriage, 0..-420 mm (the down axis).
- **4-DOF wrist** hangs off the Y-carriage: revolute yaw/pitch/pitch/roll + tool. Reuses st3215 servos.
- Model authored Y-up; URDF has a `world` joint (rpy 1.5708 0 0) → Z-up display, feet on ground.

## Coordinate note
"Y is the vertical axis" (Cameron naming). In the model Y=up; the world joint maps Y→viewer-Z.

## Open decisions (see IMPLEMENTATION_GUIDE.md)
- Rails: 2040 extrusion + MGN12 linear guides (precise) vs V-slot wheels (cheap).
- Drive: belts (X/Z, fast) + **leadscrew on vertical Y (self-locking, holds arm when powered off)**.
- Motors: NEMA17 steppers (first pass in docs/_autolog + gen_gantry motor variant).
- Full both-ends-supported bridge if precision matters (current portal is lighter but floppier).

## Pros / cons of the gantry-arm hybrid
**Pros:** rigid XYZ, weight on the linear axes (no gravity fight), repeatable, big rectangular workspace,
simpler kinematics. **Cons:** larger footprint + overhead frame, less reach-around dexterity than a 6-DOF
arm, 3 extra linear drives (rails, belts/screws, steppers, a controller).
