# 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 (M2–M8) | 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 & ```