---
name: project_locked_base_parts
description: "wrap_holder + yoke_exact are the LOCKED canonical servo-to-servo base parts for the robot; clearance stays tunable pending Cameron's print/fit test"
metadata: 
  node_type: memory
  type: project
  originSessionId: f6b5d2b8-94fd-4193-ba95-68aa32076e95
---

As of 2026-06-24 Cameron **locked** these as the canonical BASE parts of the robot — the servo-to-servo connection — and all future assembly builds on them:
- `/data/cameron/repos/smith300_para_stuff/wrap_holder.py` → `wrap_holder.stl` — both-sides wrapping STS3215 servo holder (rear end-clamp: wraps the body on 4 sides + bolts BOTH ±Y mount faces via counterbored screw collars; cylindrical sweep-relief clears the yoke over ±100°; trimmed against the real servo STEP).
- `/data/cameron/repos/smith300_para_stuff/yoke_exact.py` → `yoke_exact.stl` — yoke gripping horn + idler (exact extracted bolt circles).
- Verified: holder∩servo = 0, holder∩yoke = 0 (static + swept). Both export as single valid closed solids → printable.

**Clearance stays TUNABLE** (Cameron still has to print + verify fit before freezing). Canonical clearance method = **voxel dilation**: `voxel_trim.py <mm>` builds the holder un-trimmed (build123d), uniformly dilates the servo on a 0.15mm voxel grid (scipy `binary_dilation` + skimage marching-cubes), then mesh-boolean subtracts (trimesh `manifold3d`). Gives a true uniform gap (~0.3mm, verified holder∩servo=0). OCP `offset()` CANNOT inflate the geared servo (fails on body solid + fused, all join kinds) — voxel is the workaround. Deps installed into `.venv_cad` via uv: trimesh, manifold3d, scikit-image, opencv-contrib-python-headless (cv2.aruco, for the fidex marker generation) (scipy/numpy already there). Fallback = `python wrap_holder.py` (build123d `SERVO_CLEAR`, 6-dir Minkowski, gap 0.17–0.30mm). Sleeve cavity gap = `CLEAR` (0.4mm).

Next robot work (Cameron 2026-06-24): reproduce smith300's servo layout using these base parts + new connector geometries, **fully parametric as a function of holder+yoke**, then add ArUco/fidex exoskeleton holders (see [[fidex_notes]] in vault). Reference layout = `smith300_para_stuff/smith300.urdf`.

**FIRST PHYSICAL PRINT-FIT TEST (Cameron 2026-06-30):** printed the yoke (`yoke_exact.stl`) + the carved
box holder (`holder_approx_drilled.stl`, from the [[project_blender_connector_interface]] carve workflow)
on a real ST3215. Tuned: (1) holder cavity 0.3mm was a CRACKING tight squeeze -> loosened to **0.5mm**
(`CLEAR` = arg2 of `carve_holder.py`). (2) Yoke back/idler (non-gear) plate left too much gap, not flush
after bolting -> added `IDLER_SNUG` to `yoke_exact.py` (pulls that plate IN; horn side unchanged); dialing
0.5 -> **0.9** (0.5 was closer but small gap remained). Also shortened the yoke arm `link_len` 70 -> **20**
for faster fit-test printing (connector does the reaching now). Both holder CLEAR + yoke IDLER_SNUG are
single tunable params — start fit work from THESE values (holder 0.5, yoke snug ~0.9), not the 0.3 defaults.
