# Sensor Rail BOM — Issue #138
**Agent:** sl-mechanical | **Date:** 2026-03-01

Universal 2020 T-slot sensor mount rail system.
Compatible with SaltyLab (stem), SaltyRover (square posts), SaltyTank (uprights).

---

## Purchased Hardware

| # | Description | Spec | Qty (per robot) | Notes |
|---|-------------|------|-----------------|-------|
| H1 | 2020 T-slot aluminium extrusion | 20×20 mm, 200 mm length | 1–2 | OpenBuilds V-Slot or MISUMI HFS5-2020. Order pre-cut or cut with mitre saw. |
| H2 | M5×10 BHCS | Stainless | 4 | Rail-to-adapter attachment (M5 T-nuts in rail) |
| H3 | M5 T-nut (drop-in) | For 2020 slot | 4 | Off-the-shelf; used for adapter attachment |
| H4 | M3×16 SHCS | Stainless | N | One per sensor bracket (thumbscrew + clamping) |
| H5 | M3 hex nut | DIN 934, stainless | N | One per bracket T-nut (press-fit in pocket) |
| H6 | M3×6 BHCS | Stainless | 2N | Bracket arm-to-base plate (2 per bracket) |
| H7 | M4×30 SHCS | Stainless | 2 | Stem adapter clamping bolts |
| H8 | M4 hex nut | DIN 934, stainless | 2 | Stem adapter nut pockets |
| H9 | M4×12 BHCS | Stainless | 4 | Post adapter clamping |
| H10 | M4×12 BHCS | Stainless | 4 | Tank clamp frame attachment |
| H11 | M3×8 SHCS | Stainless | 4 | RPLIDAR platform bolts |
| H12 | 1/4-20 UNC hex nut | Zinc or SS | 1 | D435i tripod nut (captured in bracket) |
| H13 | M2×6 SHCS | Stainless | 4 | IMX219 PCB mounting |
| H14 | M3×8 SHCS | Stainless | 4 | UWB PCB mounting |
| H15 | M5×6 set screw | Cup point, SS | 2 | Optional rail end cap retention |

*N = number of brackets installed; typical per robot: 3–5.*

---

## Printed Parts (PETG unless noted)

| Part | File | Qty | Print settings | Mass est. |
|------|------|-----|----------------|-----------|
| T-nut base | sensor_rail_brackets.scad `base_stl` | N brackets | 5 perims, 60% infill | ~6 g |
| RPLIDAR bracket | sensor_rail_brackets.scad `rplidar_stl` | 1 | 4 perims, 40% infill | ~18 g |
| D435i bracket | sensor_rail_brackets.scad `d435i_stl` | 1 | 4 perims, 40% infill | ~14 g |
| IMX219 bracket | sensor_rail_brackets.scad `imx219_stl` | 1–4 | 4 perims, 40% infill | ~8 g |
| UWB bracket | sensor_rail_brackets.scad `uwb_stl` | 1–4 | 4 perims, 40% infill | ~10 g |
| Cable clip | sensor_rail_brackets.scad `cable_clip_stl` | 6–10 | 3 perims, 20% infill | ~2 g |
| Rail end cap | sensor_rail.scad `end_cap_stl` | 2 | 5 perims, 40% infill | ~3 g |
| Index pin set (×4) | sensor_rail.scad `index_pin_stl` | 1 set | 4 perims, 40% infill | ~4 g |
| Thumbscrew wheel | sensor_rail.scad (thumbscrew_wheel) | N | 4 perims, 30% infill | ~1.5 g |
| Stem adapter half | sensor_rail.scad `stem_adapter_stl` | 2 | 5 perims, 60% infill | ~22 g |
| Post adapter | sensor_rail.scad `post_adapter_stl` | 1–2 | 5 perims, 60% infill | ~28 g |
| Tank clamp | sensor_rail.scad `tank_clamp_stl` | 1–2 | 5 perims, 60% infill | ~20 g |

---

## Rail Length Reference

| Robot variant | Recommended rail length | Notes |
|---------------|------------------------|-------|
| SaltyLab | 200 mm | On Ø25 mm stem; 1 rail |
| SaltyRover | 200 mm | On rear sensor mast posts |
| SaltyTank | 150–200 mm | On tank side uprights or top bar |

---

## Mass Summary (typical install: 1 rail + 3 brackets + 8 clips)

| Item | Mass |
|------|------|
| 200 mm 2020 Al extrusion | ~110 g |
| 3× bracket assemblies (base + arm) | ~60 g |
| 8× cable clips | ~16 g |
| 1× adapter (stem) | ~44 g |
| Hardware (bolts/nuts) | ~25 g |
| **Total** | **~255 g** |

---

## Export Commands

```bash
# Rail profile DXF (spec for extrusion supplier)
openscad sensor_rail.scad -D 'RENDER="rail_2d"' -o sensor_rail_profile.dxf

# Printable rail section (prototype)
openscad sensor_rail.scad -D 'RENDER="rail_section_stl"' -o sensor_rail_200.stl

# Adapters
openscad sensor_rail.scad -D 'RENDER="stem_adapter_stl"' -o sensor_rail_stem_adapter.stl
openscad sensor_rail.scad -D 'RENDER="post_adapter_stl"' -o sensor_rail_post_adapter.stl
openscad sensor_rail.scad -D 'RENDER="tank_clamp_stl"'   -o sensor_rail_tank_clamp.stl
openscad sensor_rail.scad -D 'RENDER="end_cap_stl"'      -o sensor_rail_end_cap.stl
openscad sensor_rail.scad -D 'RENDER="index_pin_stl"'    -o sensor_rail_index_pins.stl

# Brackets
openscad sensor_rail_brackets.scad -D 'RENDER="base_stl"'        -o srb_tnut_base.stl
openscad sensor_rail_brackets.scad -D 'RENDER="rplidar_stl"'     -o srb_rplidar.stl
openscad sensor_rail_brackets.scad -D 'RENDER="d435i_stl"'       -o srb_d435i.stl
openscad sensor_rail_brackets.scad -D 'RENDER="imx219_stl"'      -o srb_imx219.stl
openscad sensor_rail_brackets.scad -D 'RENDER="uwb_stl"'         -o srb_uwb.stl
openscad sensor_rail_brackets.scad -D 'RENDER="cable_clip_stl"'  -o srb_cable_clip.stl
```

---

## Assembly Notes

1. **Rail purchase**: Order OpenBuilds V-Slot 2020 or MISUMI HFS5-2020 in desired length.
   Specify M5 tapped centre bore at both ends. Index holes optional (can drill manually at 25 mm pitch).
2. **T-nut bases**: Press M3 hex nut into pocket before inserting into rail.
   Insert T-nut tongue into T-groove from end of rail before fitting end caps.
3. **Thumbscrew retention**: Thread M3×16 SHCS through thumbwheel, then through bracket arm, into T-nut.
   Tighten hand-tight (¼ turn from snug). No tools required.
4. **Indexed positioning**: Insert Ø4.9 mm index pin through rail M5 cross-hole and bracket index pocket for repeatable 25 mm grid positioning.
5. **Adapter installation**:
   - *Stem*: clamp 2 halves around Ø25 mm stem with M4×30 bolts; torque 1.5 N·m.
   - *Post*: slide C-clamp around 20×20 post; tighten M4×12 bolts; torque 1.2 N·m.
   - *Tank*: slide clamp onto 6 mm frame plate edge; tighten M4×12 bolts.
6. **Cable clips**: Push cable into C-channel from front. Snap into T-groove. No fasteners needed.
