saltylab-firmware/chassis/payload_bay_BOM.md
sl-mechanical 796e343b78 feat(mechanical): modular payload bay system (Issue #170)
Dovetail rail + tool-free swappable payload modules for all variants:
- payload_bay_rail.scad: 50×12 mm 60° dovetail rail (DXF for CNC Al bar),
  spring ball detent (Ø6 mm, 50 mm pitch), continuous safety-lock groove
  (M4 thumbscrew), 4-pin pogo connector housing (GND/5V/12V/UART),
  lab/rover/tank deck adapter plates
- payload_bay_modules.scad: universal _module_base() (male tongue, detent
  bore, 4× Ø4 mm target pads, lock bore) + 3 example modules: cargo tray
  (200×100 mm, Velcro slots, bungee cord slots), camera boom (120 mm mast +
  80 mm arm, 2020-rail-compatible head, 3-position tilt), cup holder
  (Ø80 mm tapered, 8-slot flex grip). Includes copy-paste module template.
- payload_bay_BOM.md: hardware list, CNC spec (dovetail dimensions, surface
  finish, connector pocket), load analysis (2 kg rated with Al rail + lock),
  module developer guide with constraints table

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 10:38:07 -05:00

166 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Payload Bay BOM — Issue #170
**Agent:** sl-mechanical | **Date:** 2026-03-01
Modular dovetail payload rail system. Tool-free slide-and-click module swapping.
Cross-variant: SaltyLab, SaltyRover, SaltyTank (same rail profile).
---
## A. Rail Hardware
| # | Description | Spec | Qty (per robot) | Notes |
|---|-------------|------|-----------------|-------|
| R1 | Aluminium bar stock | 50×12 mm, 6061-T6, 200 mm length | 12 | Preferred over printed rail for 2 kg load rating. CNC mill or route dovetail slot per `payload_rail.dxf` profile. |
| R2 | M4×10 FHCS | Stainless, countersunk | 48 | Rail to adapter plate (or direct to deck); FHCS sits flush below rail bottom face |
| R3 | M4 heat-set insert | M4×5.7 L, Ø5.6 OD | 48 | Into deck adapter plate |
| R4 | Detent ball bearing | Ø6 mm, chrome steel (GCr15) | 2 per module | Module spring detent; standard bearing ball |
| R5 | Detent spring | Ø5.5 mm OD, 12 mm free length, ~2 N/mm | 2 per module | Lee Spring LC 055A 06 S or equivalent; behind ball in plunger |
| R6 | M4 thumbscrew (knurled) | M4×12, knurled head Ø14 mm | 1 per module | Safety lock; threads into M4 nut pressed into module side |
| R7 | M4 hex nut | DIN 934, stainless | 1 per module | Captured in module body for thumbscrew |
## B. Power + Data Connector
| # | Description | Spec | Qty (per rail) | Notes |
|---|-------------|------|----------------|-------|
| C1 | Pogo pin | P75-E2 style, Ø2 mm, 6 mm travel, rated 2 A | 4 | Rail-side spring contacts. AliExpress "P75-E2 pogo pin" or Mill-Max 0906 series. |
| C2 | Brass target pad | Ø4 × 1.5 mm disc | 4 per module | Module-side contact pads. Machine from Ø4 mm brass rod or order PCB pads. Press-fit with Loctite 603. |
| C3 | JST-XH 2.54 mm header | 4-pin, right-angle | 1 per rail | Rail-side connector to power harness |
| C4 | JST-XH housing + crimps | 4-pin female | 1 per robot | Wires from robot PSU (5 V, 12 V, GND, UART) |
| C5 | 20 AWG silicone wire | Red / black / yellow / white, 300 mm each | 4 | Rail connector to robot bus |
| C6 | Connector housing | `payload_connector_stl` | 1 | Press-fit into rail pocket |
### Pin Map
| Pin | Signal | Wire colour | Max current |
|-----|--------|-------------|-------------|
| 1 | GND | Black | Return |
| 2 | +5 V | Red | 2 A |
| 3 | +12 V | Yellow | 2 A |
| 4 | UART (3.3 V) | White | 0.5 A |
> **UART note**: Half-duplex (single wire). Module firmware connects to Jetson Orin NX UART2. Use RS-485 transceiver if module cable > 500 mm or multi-drop needed.
## C. Deck Adapters
| Part | File | Qty | Print | Mass est. |
|------|------|-----|-------|-----------|
| SaltyLab adapter | `payload_bay_rail.scad` `lab_adapter_stl` | 1 | PETG, 5 perims, 60% infill | ~30 g |
| SaltyRover adapter | `payload_bay_rail.scad` `rover_adapter_stl` | 1 | PETG, 5 perims, 60% infill | ~35 g |
| SaltyTank adapter | `payload_bay_rail.scad` `tank_adapter_stl` | 1 | PETG, 5 perims, 60% infill | ~35 g |
## D. Printed Parts
| Part | File | Qty | Print | Mass est. |
|------|------|-----|-------|-----------|
| Rail section (prototype) | `payload_bay_rail.scad` `rail_stl` | 1 | PETG, 5 perims, 60% infill, 0.2 mm layer | ~85 g |
| Connector housing | `payload_bay_rail.scad` `connector_stl` | 1 | PETG, 5 perims, 100% infill | ~4 g |
| Detent plunger | `payload_bay_rail.scad` `detent_plunger_stl` | 2 per module | PETG, 5 perims, 80% infill | ~2 g each |
| Module base (universal) | `payload_bay_modules.scad` `base_stl` | N | PETG, 5 perims, 60% infill | ~18 g |
| Cargo tray (200 mm) | `payload_bay_modules.scad` `cargo_tray_stl` | 1 | PETG, 4 perims, 30% infill | ~180 g |
| Camera boom | `payload_bay_modules.scad` `camera_boom_stl` | 1 | PETG, 5 perims, 50% infill | ~95 g |
| Cup holder | `payload_bay_modules.scad` `cup_holder_stl` | 1 | PETG, 4 perims, 25% infill | ~55 g |
---
## Dovetail Rail — CNC Specification
For aluminium production rail (preferred over printed for 2 kg rating):
```
Material: 6061-T6 aluminium
Stock: 50 mm × 12 mm flat bar, length to suit (200 mm, 300 mm, 400 mm)
Dovetail slot (top face, centred):
Slot open width at top: 37.2 mm
Slot width at bottom: 28.0 mm
Slot depth: 8.0 mm
Wall angle from vertical: 30.0° (60° included angle)
Surface finish: Ra 1.6 µm (smooth for low-friction sliding)
Detent dimples (slot floor):
Diameter: 4.9 mm (ball seats in)
Depth: 1.5 mm
Pitch: 50 mm
First dimple: 25 mm from each end
Safety-lock groove (both side faces, continuous):
Groove diameter: 4.5 mm
Depth: 1.5 mm
Z position: RAIL_T/2 - DOVE_H/2 = 8 mm from top face
(CNC with Ø4 mm ball-nose end mill, single pass at Z = -4 mm from top)
Mounting holes (bottom face, countersunk):
Diameter: 4.3 mm (M4 clearance)
C/sink: Ø8 mm × 82° (M4 FHCS)
Pitch: 50 mm
First hole: 25 mm from each end
Connector pocket (slot floor, centred in rail length):
Width: 26 mm (X), Depth: 8.4 mm (Y), Height: 7 mm (Z into slot floor)
Tolerance: +0.2 / 0 mm (press-fit housing)
DXF cross-section: export payload_rail.dxf for supplier drawing.
```
---
## Load Analysis
| Mode | Load | Safety factor | Method |
|------|------|---------------|--------|
| Static payload (detent only) | 0.5 kg | 2× | Ball detent retention force ~10 N |
| Static payload (thumbscrew locked) | 2.0 kg | 2× | Dovetail shear area ~800 mm² Al |
| Dynamic (robot motion, 2 m/s²) | 2.0 kg | 1.5× | Inertial force = 2 kg × 2 m/s² = 4 N; detent holds 10 N |
| Dovetail shear (PETG printed) | 1.2 kg | 1.5× | PETG tensile ~50 MPa; recommend Al rail for rated 2 kg |
> **⚠ For 2 kg payload: use machined aluminium rail. Printed PETG rail is prototype/light-duty only (<0.8 kg payload).**
---
## Module Developer Guide
### Adding a new module in 5 steps
1. **Copy the template** at the bottom of `payload_bay_modules.scad`.
2. **Set `MY_LEN`** — must be a multiple of 50 mm (detent pitch) for repeatable positioning.
3. **Call `_module_base(MY_LEN, n_detents)`** as the first statement in your module.
4. **Build payload geometry** starting at `Z = 0` (rail top face). Keep total height ≤ 200 mm for robot clearance under doorways.
5. **Verify connector alignment** — when module is slid to its operating position, the 4 target pads on the tongue bottom must align with `CONN_Y` on the rail (default: 100 mm from rail entry end). Adjust `conn_offset` if needed.
### Constraints
| Parameter | Limit |
|-----------|-------|
| Module length | Min 60 mm, max 400 mm |
| Module height above rail | Max 200 mm (clearance) |
| Payload mass | ≤ 2 kg (Al rail + thumbscrew locked) |
| Module width | Max 120 mm (robot shoulder clearance) |
| Connector draw | Max 2 A per power pin (5 V or 12 V) |
---
## Export Commands
```bash
# Rail DXF (for CNC / waterjet machining)
openscad payload_bay_rail.scad -D 'RENDER="rail_2d"' -o payload_rail_profile.dxf
# Rail STL (PETG prototype)
openscad payload_bay_rail.scad -D 'RENDER="rail_stl"' -o payload_rail_200mm.stl
# Rail accessories
openscad payload_bay_rail.scad -D 'RENDER="connector_stl"' -o payload_connector.stl
openscad payload_bay_rail.scad -D 'RENDER="detent_plunger_stl"' -o payload_detent_plunger.stl
# Deck adapters
openscad payload_bay_rail.scad -D 'RENDER="lab_adapter_stl"' -o payload_adapter_lab.stl
openscad payload_bay_rail.scad -D 'RENDER="rover_adapter_stl"' -o payload_adapter_rover.stl
openscad payload_bay_rail.scad -D 'RENDER="tank_adapter_stl"' -o payload_adapter_tank.stl
# Example modules
openscad payload_bay_modules.scad -D 'RENDER="cargo_tray_stl"' -o payload_cargo_tray.stl
openscad payload_bay_modules.scad -D 'RENDER="camera_boom_stl"' -o payload_camera_boom.stl
openscad payload_bay_modules.scad -D 'RENDER="cup_holder_stl"' -o payload_cup_holder.stl
openscad payload_bay_modules.scad -D 'RENDER="target_pad_2d"' -o payload_target_pad.dxf
```