saltylab-firmware/chassis/rover_chassis_r2_BOM.md
sl-mechanical 2fa72e169e feat: SaltyRover chassis Rev 2 — 4-wheel rover with spring suspension (#109)
New chassis design files for the SaltyRover rough-terrain variant:

• saltyrover_chassis_r2.scad — Deck plate (500×480×6mm Al, laser-cut DXF),
  4× M3-adjustable pivot brackets, 4× CSI corner camera mounts (45° outward,
  20° down), D435i front bracket (8° tilt), stem collar. All RENDER modes
  for STL and DXF export included.

• rover_spring_arm.scad — Trailing-arm spring suspension (×4). Pivot on M8
  bolt; captured 14mm OD compression spring (50mm free, ~5 N/mm); open-end
  axle dropout slot with retainer cap. Provides 25mm bump + 15mm droop travel.
  Bearing-seat recess for caliper-verified 37.8mm collar OD.

• rover_electronics_bay.scad — PETG electronics bay (240×200×80mm internal).
  FC standoffs 30.5×30.5mm M3 and Jetson Orin 58×49mm M3 — shared SaltyLab
  swappable pattern. Ventilation slots all 4 walls + lid. Lid integrates
  100mm RPLIDAR A1M8 tower (58mm BC, matched to rplidar_mount.scad).
  Split-print halves for 220mm beds included.

• rover_chassis_r2_BOM.md — Full BOM, mass estimate (frame ~2.15kg; reduce
  to <2kg by setting DECK_T=5), assembly sequence, critical dimensions.

Sensor positions: RPLIDAR top-centre on bay lid, D435i front, 4× IMX219 at
deck corners. Shares 30.5mm FC + 58mm Jetson + Ø25mm stem patterns with
SaltyLab for swappable electronics.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 08:42:44 -05:00

329 lines
12 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.

# SaltyRover Chassis Rev 2 — BOM & Assembly Notes
**Issue: #109 Agent: sl-mechanical Date: 2026-03-01**
---
## Overview
Rev 2 adds spring suspension, an enclosed electronics bay, and corner CSI cameras
to the SaltyRover platform (originally designed in issue #73).
Sensor head, RPLIDAR, D435i, and vertical stem are **shared with SaltyLab** — no changes.
```
Top view (schematic):
+Y (forward)
[CSI] ┌────┴────┐ [CSI]
◉──┤ ├──◉ ← front axles (suspension arms)
│ [Orin] │
│ [ Bay ] │
│ [RPLIDAR tower]
│ [ FC ] │
◉──┤ ├──◉ ← rear axles (suspension arms)
[CSI] └────┬────┘ [CSI]
D435i →
Deck footprint: 500 × 480 mm (Y × X)
Track (axle C/C): 540 mm
Wheelbase (axle C/C): 340 mm
Ground clearance: 55 mm (static sag; 30 mm at full compression)
Overall width (tyre edge to tyre edge): ~810 mm
Overall height (deck to RPLIDAR top): ~317 mm
```
---
## File Index
| File | Description | Part | Qty |
|------|-------------|------|-----|
| `saltyrover_chassis_r2.scad` | Deck plate + pivot brackets + sensor brackets | Laser cut + 3D print | See below |
| `rover_spring_arm.scad` | Spring suspension trailing arm + retainer cap | 3D print | 4× arm + 4× cap |
| `rover_electronics_bay.scad` | Electronics bay body + lid (with RPLIDAR tower) | 3D print | 1× body + 1× lid |
| `rover_motor_mount.scad` | Motor axle L-bracket (Rev 1, unchanged) | 3D print or CNC | 4× |
| `rover_battery_tray.scad` | Under-deck battery slide tray (Rev 1) | 3D print | 1× |
| `rover_stem_adapter.scad` | Stem-to-deck collar adapter (Rev 1) | 3D print | 1× |
| `rplidar_mount.scad` | RPLIDAR anti-vibration ring (shared) | 3D print | 1× |
| `realsense_mount.scad` | D435i bracket (integrated into chassis r2) | — | — |
| `imx219_mount.scad` | IMX219 radial arm on sensor_head (unchanged) | — | — |
---
## Part A — Deck Plate (`saltyrover_chassis_r2.scad` → `deck_2d`)
| # | Spec | Qty | Notes |
|---|------|-----|-------|
| A1 | 6 mm 5052-H32 aluminium, 500×480 mm blank | 1 | Waterjet or CNC router. 6 mm preferred (vs 8 mm Rev 1) for weight target. |
| A1-alt | 8 mm PETG FDM, split in two halves, joined with M5 lap bolts | 1 | Prototype only — expect 1.5× weight, 0.5× stiffness |
**Deck plate weight estimate:** 6 mm Al, ~50% lightening → **≈ 1.15 kg** ✓
Export DXF:
```bash
openscad saltyrover_chassis_r2.scad -D 'RENDER="deck_2d"' -o saltyrover_r2_deck.dxf
```
---
## Part B — Pivot Brackets (`saltyrover_chassis_r2.scad` → `pivot_bracket_stl`)
Each bracket provides: M8 pivot for suspension arm + spring guide boss + M3 adjustment slots.
| # | RENDER | Qty | Material | Settings |
|---|--------|-----|----------|----------|
| B1 | `pivot_bracket_stl` | 4 | PETG or PC | 5 perims, 60% gyroid |
| B1-alt | `pivot_bracket_2d` | 4 | 8 mm 6061-T6 Al | CNC router / waterjet |
CNC export:
```bash
openscad saltyrover_chassis_r2.scad -D 'RENDER="pivot_bracket_2d"' -o rover_pivot_bracket.dxf
```
**Fasteners — Bracket to Deck:**
| # | Spec | Qty | Use |
|---|------|-----|-----|
| B-f1 | M3×16 SHCS | 8 | Bracket to deck (2× per bracket) through slotted deck holes |
| B-f2 | M3 nyloc nut | 8 | Under-deck retention (accessible from below before deck install) |
| B-f3 | M3 flat washer | 16 | Both sides |
**Fasteners — Suspension pivot:**
| # | Spec | Qty | Use |
|---|------|-----|-----|
| B-f4 | M8×50 SHCS | 4 | Pivot pin (bracket clevis → trailing arm) |
| B-f5 | M8 nyloc nut | 4 | Pivot retention |
| B-f6 | M8 flat washer | 8 | Both sides of clevis |
| B-f7 | Flanged IGUS GFI-0810-10 bushing | 4 | Pivot arm bearing (optional, reduces wear) |
---
## Part C — Spring Suspension Arms (`rover_spring_arm.scad`)
| # | RENDER | Qty | Material | Settings |
|---|--------|-----|----------|----------|
| C1 | `arm_stl` | 4 | PC (Polycarbonate) recommended; PETG acceptable | 5 perims, 60% gyroid infill |
| C2 | `retainer_stl` | 4 | PETG | 4 perims, 40% infill |
Export:
```bash
openscad rover_spring_arm.scad -D 'RENDER="arm_stl"' -o rover_spring_arm.stl
openscad rover_spring_arm.scad -D 'RENDER="retainer_stl"' -o rover_spring_retainer.stl
```
**Compression Springs (×4):**
| # | Spec | Qty | Notes |
|---|------|-----|-------|
| C-s1 | OD 14 mm, wire Ø 1.5 mm, free length 50 mm, spring rate ~5 N/mm | 4 | Lee Spring LCI 014M 05 S or equivalent |
| C-s2 | *(Stiffer alternative)* OD 14 mm, rate ~8 N/mm | 4 | For heavier payloads >3 kg |
**Retainer fasteners:**
| # | Spec | Qty | Use |
|---|------|-----|-----|
| C-f1 | M3×12 SHCS | 8 | Retainer cap to arm (2× per arm; self-taps into PETG) |
---
## Part D — Electronics Bay (`rover_electronics_bay.scad`)
| # | RENDER | Qty | Material | Settings |
|---|--------|-----|----------|----------|
| D1 | `bay_stl` | 1 | PETG | 4 perims, 30% gyroid |
| D1-alt | `front_half` + `rear_half` | 1+1 | PETG | For 220 mm bed printers (split at Y=0 centreline) |
| D2 | `lid_stl` | 1 | PETG | 4 perims, 30% gyroid |
Export:
```bash
openscad rover_electronics_bay.scad -D 'RENDER="bay_stl"' -o rover_elec_bay.stl
openscad rover_electronics_bay.scad -D 'RENDER="lid_stl"' -o rover_elec_bay_lid.stl
# For 220 mm beds:
openscad rover_electronics_bay.scad -D 'RENDER="front_half"' -o rover_elec_bay_front.stl
openscad rover_electronics_bay.scad -D 'RENDER="rear_half"' -o rover_elec_bay_rear.stl
```
**Bay-to-deck fasteners:**
| # | Spec | Qty | Use |
|---|------|-----|-----|
| D-f1 | M3×12 SHCS | 10 | Bay body to deck through floor flanges |
| D-f2 | M3 flat washer | 10 | Under head |
| D-f3 | M3×8 BHCS | 4 | Lid retention (corner screws self-tap into bay rim) |
**Electronics internal (FC + Jetson standoffs — built into bay body):**
| # | Spec | Qty | Use |
|---|------|-----|-----|
| D-f4 | M3×8 SHCS | 8 | FC mount to bay standoffs (4×) + Jetson to bay standoffs (4×) |
| D-f5 | M3 flat washer | 8 | Under heads |
| D-f6 | Anti-vibration M3 grommet | 4 | FC isolation (silicone, M3, same as rplidar_mount.scad) |
---
## Part E — CSI Corner Camera Brackets (`saltyrover_chassis_r2.scad` → `csi_mount_stl`)
| # | RENDER | Qty | Material | Settings |
|---|--------|-----|----------|----------|
| E1 | `csi_mount_stl` | 4 | PETG | 4 perims, 30% infill |
Export:
```bash
openscad saltyrover_chassis_r2.scad -D 'RENDER="csi_mount_stl"' -o rover_csi_mount.stl
```
| # | Spec | Qty | Use |
|---|------|-----|-----|
| E-f1 | M2×6 SHCS | 8 | CSI camera PCB to bracket (2× per camera) |
| E-f2 | M3×8 SHCS | 8 | Bracket to deck (2× per bracket) |
| E-c1 | 200 mm CSI FPC flat cable | 4 | IMX219 to Jetson (extended) |
---
## Part F — D435i Front Bracket (`saltyrover_chassis_r2.scad` → `d435i_mount_stl`)
| # | RENDER | Qty | Material | Settings |
|---|--------|-----|----------|----------|
| F1 | `d435i_mount_stl` | 1 | PETG | 5 perims, 40% infill |
Export:
```bash
openscad saltyrover_chassis_r2.scad -D 'RENDER="d435i_mount_stl"' -o rover_d435i_mount.stl
```
| # | Spec | Qty | Use |
|---|------|-----|-----|
| F-f1 | 1/4-20 UNC hex nut | 1 | Captured in bracket face for D435i tripod socket |
| F-f2 | M4×14 SHCS | 2 | Bracket to deck front face |
---
## Mass Estimate — Frame Only (excl. motors, electronics, battery)
| Assembly | Material | Est. mass |
|----------|----------|-----------|
| Deck plate | 6 mm Al, lightened | ~1.15 kg |
| Pivot brackets × 4 | PETG | ~0.22 kg |
| Spring arms × 4 | PC | ~0.28 kg |
| Spring retainer caps × 4 | PETG | ~0.04 kg |
| Springs × 4 | Steel | ~0.04 kg |
| Electronics bay body | PETG | ~0.12 kg |
| Electronics bay lid + RPLIDAR tower | PETG | ~0.08 kg |
| CSI brackets × 4 | PETG | ~0.04 kg |
| D435i bracket × 1 | PETG | ~0.03 kg |
| Fasteners (M2M8) | Stainless | ~0.15 kg |
| **Frame total** | | **~2.15 kg** |
> ⚠ Target: <2 kg frame. Current estimate is 0.15 kg over.
> Options to reduce:
> 1. Switch deck from 6 mm Al → 5 mm Al saves ~0.19 kg ✓
> 2. Or: enlarge lightening holes from Ø55 → Ø65 mm (saves ~0.12 kg)
> 3. Electronics bay in 2 mm wall PETG (saves ~0.06 kg)
> Recommend option 1: change `DECK_T = 5.0` in `saltyrover_chassis_r2.scad`
> and re-verify with waterjet quotation.
---
## Assembly Sequence
### 1. Fabrication
1. Export DXF and send deck plate to waterjet / CNC. Specify 6 mm (or 5 mm) 5052-H32 Al.
2. Export and print all STL parts (settings per table above).
3. Source springs, fasteners, and hub motors per BOM.
### 2. Deck preparation
1. Deburr all deck holes. Tap stem-collar M4 holes if using threaded standoffs.
2. Press or thread M3 rivet-nuts into deck at battery-tray rail positions (from `rover_battery_tray.scad`).
3. Apply stem collar with 4× M4×16 FHCS; Loctite 243.
### 3. Pivot bracket installation
1. Slide pivot bracket through deck M3 slots (under-deck side first).
2. Fit M3 washers + nyloc nuts; snug but do not torque — leave adjustable.
3. Set all 4 brackets to nominal Y position (motor corner fore-aft CL).
4. Torque M3 bolts to 1.2 N·m once alignment is confirmed (step 6).
### 4. Suspension arm assembly
1. Drop spring into bracket spring-guide boss (compress by hand).
2. Slide trailing arm pivot boss over pivot bolt M8×50.
3. Fit IGUS bushing in pivot bore (if used).
4. Fit M8 washer + nyloc nut; torque to 6 N·m.
5. Snap retainer cap onto arm axle slot; thread 2× M3×12 by hand.
### 5. Motor installation
1. Slide hub motor axle into arm dropout slot.
2. Fit clamp plate (from `rover_motor_mount.scad`); tighten M4 bolts 1.5 N·m.
3. Thread axle lock nut; apply Loctite 243; torque to 30 N·m.
4. Route phase cables + hall wires through deck phase pass-through hole.
### 6. Geometry check and bracket torque
1. Set robot on flat surface; check that all 4 wheels contact ground.
2. Measure axle-to-ground on each corner. Nominal: 127 mm ± 5 mm.
3. Adjust pivot bracket fore-aft position if needed to correct height.
4. Torque all M3 bracket bolts to 1.2 N·m.
### 7. Electronics bay + wiring
1. Thread ESC/VESC harnesses through bay floor cable pass-throughs.
2. Place electronics bay body on deck; fasten 10× M3×12 SHCS.
3. Mount FC on bay standoffs: anti-vibration grommets + M3×8 SHCS.
4. Mount Jetson Orin on bay standoffs: M3×8 SHCS.
5. Route USB/UART cables internally; cable-tie to bay walls.
6. Fit lid (with RPLIDAR tower stub); 4× M3×8 BHCS at corners.
### 8. Sensor installation
1. **RPLIDAR A1M8**: Fit anti-vibration ring (`rplidar_mount.scad`) on tower top.
Bolt RPLIDAR with 4× M3×30 SHCS through ring.
2. **D435i**: Bolt to front bracket arm using captured 1/4-20 nut.
Confirm 8° downward tilt; tighten firmly.
3. **4× CSI cameras**: Plug CSI flex into Jetson CSI ports.
Thread M2×6 SHCS into each corner bracket PCB holes.
4. **Stem + sensor head**: Press stem through deck collar bore.
Fit stem adapter (`rover_stem_adapter.scad`); clamp at 550 mm height.
Attach sensor_head to stem top as per `sensor_head_assembly.md`.
### 9. Final checks
- [ ] All wheels spin freely without catching wiring
- [ ] Suspension compresses and rebounds on each corner
- [ ] RPLIDAR scans 360° without obstruction (check deck edge clearance)
- [ ] D435i USB connected and streaming
- [ ] CSI cameras initialised on Jetson boot (`v4l2-ctl --list-devices`)
- [ ] FC armed and IMU reading correctly
- [ ] E-stop functional
---
## Motors (unchanged from Rev 1)
| # | Part | Qty | Spec |
|---|------|-----|------|
| M1 | Hub motor | 4 | 10×2.125" pneumatic, 36 V, ~350 W; axle OD 16.11 mm (caliper) |
| M2 | Phase cable extension | 4 | 3-wire 12 AWG, 300 mm, XT30 to VESC |
| M3 | Hall cable extension | 4 | 6-pin JST-PH, 300 mm |
---
## Critical Dimensions
| Dimension | Nominal | Tolerance |
|-----------|---------|-----------|
| Track (axle C/C) | 540 mm | ±2 mm |
| Wheelbase (axle C/C) | 340 mm | ±2 mm |
| Axle CL height | 127 mm | ±3 mm |
| Pivot bracket M3 slot pitch | 32 mm | ±0.3 mm |
| FC hole pattern | 30.5×30.5 mm | ±0.2 mm |
| Jetson hole pattern | 58×49 mm | ±0.2 mm |
| Stem bore | Ø25.5 mm | +0.3/0 |
| Spring guide boss OD | Ø14 mm | ±0.1 mm |
---
## OpenSCAD Version Requirement
Requires **OpenSCAD 2021.01 or newer** (for `linear_extrude` + `minkowski` with `$fn` in difference).
Render command (full assembly):
```bash
openscad saltyrover_chassis_r2.scad &
```