# Design Index — every URDF we built + where things live

Code + STLs live flat in `smith300_para_stuff/` (shared deps: `gen_two_servo.py` + shared STLs — that's why
the code is NOT scattered into subfolders; only docs are organized per-design under `docs/`).
Viewer: `https://cad.omidlab.net/?dir=/data/cameron/repos/smith300_para_stuff&file=<URDF>`

| URDF | What it is | Generator | Doc |
|---|---|---|---|
| **two_servo_beauty.urdf** | Main arm: curvy connectors, filleted holders/yokes, 5mm yoke stubs | gen_beauty.py | docs/arm |
| **two_servo_detach.urdf** | Beauty arm + detachable fiducial base (drop-on pins) | gen_detach.py | docs/arm |
| two_servo.urdf | Default arm (rounded-square connectors) | apply_glb_layout.py | docs/arm |
| two_servo_aligned.urdf | Snapped-orthogonal variant | gen_aligned.py | docs/arm |
| camera_mount.urdf | Arducam B0332 (OV9281) + printable cradle | gen_camera.py | docs/camera_mount |
| two_servo_cb_overhead.urdf | Gravity comp — overhead post counterbalance | gen_cb.py | docs/gravity_comp |
| two_servo_cb_shoulder.urdf | Gravity comp — shoulder-integrated (rides arm) | gen_cb.py | docs/gravity_comp |
| gantry_arm.urdf | 3-axis extrusion gantry + 4-DOF hanging wrist | gen_gantry.py | docs/gantry |
| gantry_arm_motorized.urdf | Gantry + NEMA17 + T8 leadscrew + MGN12 rails + GT2 belts | gen_nema.py | docs/gantry |
| linear_rail.urdf | Fully 3D-printable linear actuator (dovetail + printed screw + STS3215) | gen_linear_rail.py | docs/linear_rail |
| mobile_base.urdf | 4-wheel base + vertical lift + 4-DOF arm | gen_mobile.py | docs/home_robot |
| mobile_gantry.urdf | 4-wheel base + compact 3-axis gantry (fetch-like) | gen_mobile_gantry.py | docs/home_robot |

## Core shared files
- `gen_two_servo.py` — LAYOUT (servo poses, servo_0 frame) → URDF + GLB + connectors. `read_layout`, `gen_urdf`, `gen_glb`.
- `gen_curvy.py` — curvy/waisted connectors. `fillet_holder.py` → holder_fillet. `yoke_fillet.py` → yoke_fillet.
- `apply_glb_layout.py` — reads Cameron's Blender GLB → rebuilds everything.
- `struct_analysis.py` / `struct_beams.py` — structural analysis (torque, wobble, beam bending).
- `compute_cb.py` — counterbalance spring math. `gen_camera.py`, `gen_gantry.py`, `gen_cb.py`.

## Blender ↔ agent pipeline (how the arm is authored)
Cameron poses each servo 6-DOF in Blender, exports a **parent-chain GLB** (world→servo_0→…→servo_N, each relative
to its parent, so moving one servo carries the downstream chain). Agent `read_layout`s it and regenerates
connectors + base + URDF. Base pieces (`base_cube*`) pass through as editable nodes.

## Yoke (updated 2026-07-08)
**`gen_yoke.py` is the canonical yoke generator** (trimesh, runs anywhere — no build123d needed).
PLATE_T=2.0 (halved for screw engagement into the horn), HOLE_D=3.05. Contact faces pinned; thickness
comes off the outer faces only. `yoke_exact.py` (build123d, recovered from the lab post-outage) is
ARCHIVAL — reference only. All consumers (arm links, v1 gripper, v2 gripper) take gen_yoke output via
yoke_fillet.stl / yoke_exact.stl / gnode_v2_yoke.stl.
