saltylab-firmware/chassis/saltytank_BOM.md
sl-mechanical d93919e26f feat: SaltyTank tracked chassis — drive sprockets, tensioners, skid plate (#121)
Three new chassis design files for the SaltyTank continuous-track variant:

• saltytank_chassis.scad — Deck plate (500×360×8mm Al, DXF export), 2×
  side track frames (6mm Al, CNC/laser), idler tensioner sliding block,
  4× CSI corner camera mounts (45°/20°), D435i front bracket (8° tilt),
  stem collar (Ø25mm shared).  Drive sprocket mounts accept hoverboard hub
  motors with caliper-verified D-cut bore (16.11mm/13mm flat) + 52mm BC
  hub flange bolt pattern.  M6 tensioner bolt adjusts idler ±15mm for
  track tension. Shared FC 30.5×30.5mm + Jetson 58×49mm M3 patterns.
  Electronics bay footprint matches rover_electronics_bay.scad exactly.

• saltytank_skid_plate.scad — Sacrificial underside skid panel (360×500mm).
  4mm HDPE (DXF) or PETG print; countersunk M4 FHCS bolt-on.  4× drain/
  inspection slots; optional printed ribs (RIB_PRINT=true).  Ground
  clearance of hull between tracks: 90mm (exceeds 50mm requirement).

• saltytank_BOM.md — Full BOM: deck plate, side frames, drive sprockets,
  idler wheels + tensioners, road wheels (2/side), track belts (1109mm
  circumference calc), skid plate, sensor brackets, electronics bay
  (rover_electronics_bay.scad reused unchanged). Frame mass ≈ 2.98 kg
  (just under 3 kg target). Assembly sequence and track tensioning
  procedure included.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 09:20:41 -05:00

384 lines
15 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.

# SaltyTank Chassis — BOM & Assembly Notes
**Issue: #121 Agent: sl-mechanical Date: 2026-03-01**
---
## Overview
SaltyTank is the tracked variant of the SaltyLab robot family.
Rubber or metal continuous tracks replace wheels for rough-terrain capability.
The electronics bay, RPLIDAR, D435i, stem, and sensor head are **shared with
SaltyLab and SaltyRover** — no modifications required.
```
Side view (schematic):
← +Y forward
Sensor head + RPLIDAR
┌──────────────────────────── deck (Z=0) ───────────────────────────┐
│ [Electronics Bay] [Stem collar] │
└──────────────────────────────────────────────────────────────────┘
│ [Side frame - 90 mm tall] │
│ ◎ idler (Ø80) ◎ road wheel ◎ road wheel ◎ drive (Ø66)│
│───────────────────── track belt (rubber, 80 mm wide) ─────────────│
(ground)
Top view (schematic):
+Y (forward)
[track] ┌──────┴───────┐ [track]
│ [Electronics │
│ Bay + │
│ RPLIDAR] │
[track] └──────┬───────┘ [track]
D435i →
Key dimensions:
Deck: 500 mm (L) × 360 mm (W)
Track belt centres: 360 + 6 + 80 = 446 mm left-right CL to CL
Overall robot width (outer track edge): 446 + 80 = 526 mm
Ground clearance (hull between tracks): 90 mm ← exceeds 50 mm req.
Height: deck to RPLIDAR scan plane: ~330 mm (with 550 mm stem option)
```
---
## File Index
| File | Description | RENDER → Output |
|------|-------------|-----------------|
| `saltytank_chassis.scad` | Deck plate + side frames + idler block + CSI/D435i mounts | See table below |
| `saltytank_skid_plate.scad` | Underside skid plate (bolt-on, sacrificial) | `skid_2d` → DXF; `skid_stl` → STL |
| `rover_electronics_bay.scad` | Electronics bay body + lid + RPLIDAR tower | **Unchanged** — reuse rover part |
| `rover_motor_mount.scad` | (Not used — drive sprockets mount directly to side frame) | — |
| `rover_stem_adapter.scad` | Stem adapter (shared) | Unchanged |
| `rplidar_mount.scad` | RPLIDAR anti-vibration ring (shared) | Unchanged |
### RENDER map
| RENDER value | Output | Qty | Process |
|---|---|---|---|
| `"deck_2d"` | `saltytank_deck.dxf` | 1 | Waterjet / CNC, 8 mm Al |
| `"side_frame_2d"` | `saltytank_side_frame.dxf` | 2 | CNC / laser, 6 mm Al (cut 2×, flip 1) |
| `"side_frame_stl"` | `saltytank_side_frame.stl` | 2 | PETG print (prototype) |
| `"idler_block_stl"` | `saltytank_idler_block.stl` | 2 | PETG print |
| `"csi_mount_stl"` | `saltytank_csi_mount.stl` | 4 | PETG print |
| `"d435i_mount_stl"` | `saltytank_d435i_mount.stl` | 1 | PETG print |
| `"skid_2d"` | `saltytank_skid.dxf` | 1 | Waterjet / CNC, 4 mm HDPE |
| `"skid_stl"` | `saltytank_skid.stl` | 1 | PETG print (prototype) |
### Export commands
```bash
# Deck plate DXF:
openscad saltytank_chassis.scad -D 'RENDER="deck_2d"' -o saltytank_deck.dxf
# Side frame DXF (cut 2×, flip one):
openscad saltytank_chassis.scad -D 'RENDER="side_frame_2d"' -o saltytank_side_frame.dxf
# Side frame STL (print 2×, mirror right in slicer):
openscad saltytank_chassis.scad -D 'RENDER="side_frame_stl"' -o saltytank_side_frame.stl
# Idler tensioner block STL (×2):
openscad saltytank_chassis.scad -D 'RENDER="idler_block_stl"' -o saltytank_idler_block.stl
# CSI bracket STL (×4):
openscad saltytank_chassis.scad -D 'RENDER="csi_mount_stl"' -o saltytank_csi_mount.stl
# D435i bracket STL (×1):
openscad saltytank_chassis.scad -D 'RENDER="d435i_mount_stl"' -o saltytank_d435i_mount.stl
# Skid plate DXF (4 mm HDPE, preferred):
openscad saltytank_skid_plate.scad -D 'RENDER="skid_2d"' -o saltytank_skid.dxf
# Skid plate STL (prototype):
openscad saltytank_skid_plate.scad -D 'RENDER="skid_stl"' -o saltytank_skid.stl
```
---
## Part A — Deck Plate
| # | Spec | Qty | Material | Process | Notes |
|---|------|-----|----------|---------|-------|
| A1 | 8 mm 5052-H32 Al, 500×360 mm blank | 1 | Aluminium | Waterjet | Preferred |
| A1-alt | 6 mm 6061-T6 Al | 1 | — | CNC router | Saves 0.3 kg |
| A1-proto | 8 mm PETG FDM, 2 halves lap-jointed | 1 | — | Print | Prototype only |
**Deck fasteners:**
| # | Spec | Qty | Use |
|---|------|-----|-----|
| A-f1 | M5×20 SHCS | 8 | Side frame to deck side edge (4 per side) |
| A-f2 | M5 T-nut or rivet nut | 8 | Captured in deck edge (installed before frame) |
| A-f3 | M4×16 FHCS | 4 | Stem collar to deck (4× M4 countersunk) |
| A-f4 | M3×12 SHCS | 10 | Electronics bay to deck |
| A-f5 | M4×12 FHCS | 6 | Skid plate to deck (countersunk from below) |
| A-f6 | M4 rivet-nut | 6 | Installed in deck for skid plate bolts |
---
## Part B — Side Frames (×2)
| # | RENDER | Qty | Material | Process | Notes |
|---|--------|-----|----------|---------|-------|
| B1 | `side_frame_2d` | 2 | 6 mm 6061-T6 Al | CNC router or waterjet | Cut 2× same DXF; flip 1 (mirror) |
| B1-alt | `side_frame_stl` | 2 | PETG | Print | 5 perims, 60% gyroid; prototype only |
> ⚠ **Hub motor flange bolt circle:** Default is 52 mm BC × 4× M5.
> **Measure your motor hub** before cutting the side frame — adjust `HUB_FLANGE_BC`
> in `saltytank_chassis.scad` if needed.
**Side frame fasteners:**
| # | Spec | Qty | Use |
|---|------|-----|-----|
| B-f1 | M5×20 SHCS | 8 | Frame-to-deck attachment (4 per frame, through slotted holes) |
| B-f2 | M5 nyloc | 8 | Under deck |
| B-f3 | M5×16 SHCS | 8 | Hub motor flange to side frame (2× M5 per motor hub face) |
| B-f4 | M8×60 hex bolt | 2 | Road wheel axle bolts (1 per wheel × 2 per side) |
| B-f5 | M8 nyloc | 4 | Road wheel axle retention |
| B-f6 | M8 flat washer | 8 | Both sides of each road wheel |
---
## Part C — Drive Sprockets + Hub Motors
SaltyTank reuses the same hoverboard hub motors as SaltyLab/SaltyRover.
A laser-cut sprocket plate bolts to the motor hub and engages the track belt.
| # | Part | Qty | Spec | Notes |
|---|------|-----|------|-------|
| C1 | Hub motor | 2 | 10×2.125" tire, 36 V, ~350 W; axle OD 16.11 mm (caliper) | **Only 2 motors — rear drive** |
| C2 | Drive sprocket plate | 2 | 5 mm 6061-T6 Al, laser-cut | 10-tooth, 20 mm pitch, PCD ≈ 64.7 mm; Ø52 mm hub bolt holes (verify) |
| C3 | Motor phase cable | 2 | 12 AWG, 300 mm, XT30 | Left + right rear |
| C4 | Hall sensor cable | 2 | 6-pin JST-PH, 300 mm | — |
> **Sprocket plate design** (separate file to be made if needed):
> 10 teeth, pitch = 20 mm → PCD = 20 / sin(18°) ≈ 64.7 mm → R ≈ 32.4 mm.
> Hub bolt circle = 52 mm, 4× M5 at 90°. Verify against actual motor hub.
> Sprocket tooth profile: ISO/DIN standard for roller chain or custom for belt track.
**Motor fasteners:**
| # | Spec | Qty | Use |
|---|------|-----|-----|
| C-f1 | M5×16 SHCS | 8 | Sprocket plate to motor hub flange (4 per sprocket) |
| C-f2 | Hub motor axle nut | 2 | M16×1.5 (verify axle thread); torque 3540 N·m |
| C-f3 | Loctite 243 | — | On axle nut and flange bolts |
---
## Part D — Idler Wheels + Tensioners
| # | RENDER | Qty | Material | Notes |
|---|--------|-----|----------|-------|
| D1 | `idler_block_stl` | 2 | PETG | Tensioner sliding block, 1 per side |
| # | Part | Qty | Spec | Notes |
|---|------|-----|------|-------|
| D2 | Idler wheel | 2 | Ø80 mm, 80+ mm wide, M8 bore, flanged | Off-shelf: e.g. polyurethane track idler |
| D3 | M8×100 SHCS | 2 | Stainless | Idler axle through block + wheel + outer bearing |
| D4 | M8 nyloc nut | 2 | — | Axle retention |
| D5 | M8 flat washer | 4 | — | Both sides of idler wheel |
| D6 | M6×40 SHCS | 2 | — | Tensioner adjustment bolt (threads into idler block lug) |
| D7 | M6 nyloc nut | 2 | — | Captured in block; lock bolt position |
**Track tensioning procedure:**
1. Loosen idler axle nut (M8) — block free to slide in slot.
2. Turn tensioner M6 bolt CW to push block rearward → tighten track.
3. Target: ~10 mm slack on upper track run (finger-press deflects 10 mm).
4. Tighten M8 axle nut to 12 N·m. Check tension after first 5-minute run.
---
## Part E — Road Wheels (2 per side, 4 total)
| # | Part | Qty | Spec | Notes |
|---|------|-----|------|-------|
| E1 | Road wheel | 4 | Ø60 mm × 80+ mm wide, M8 bore | Polyurethane or HDPE; must fit inside track width |
| E2 | M8×80 SHCS | 4 | Stainless | Road wheel axle through side frame |
| E3 | M8 nyloc | 4 | — | — |
| E4 | M8 flat washer | 8 | — | — |
---
## Part F — Track Belts
| # | Part | Qty | Spec | Notes |
|---|------|-----|------|-------|
| F1 | Rubber track belt | 2 | 80 mm wide, 20 mm pitch, ~1040 mm circumference | Circumference: 2 × (sprocketidler CL) + π × (sprocket_D + idler_D)/2 ≈ 2 × 440 + π × 72 ≈ 1106 mm; order next standard size up |
| F1-alt | Metal link track | 2 | 80 mm wide, 20 mm pitch, adjustable length | Higher durability; heavier (~0.8 kg/belt); louder |
> **Track circumference calculation:**
> `C = 2 × span + π × (D_sprocket + D_idler) / 2`
> ` = 2 × 440 + π × (66 + 80) / 2`
> ` = 880 + π × 73`
> ` = 880 + 229 ≈ 1109 mm`
> Order **1120 mm** (next standard rubber track pitch × N links).
---
## Part G — Skid Plate
| # | RENDER | Qty | Material | Process | Notes |
|---|--------|-----|----------|---------|-------|
| G1 | `skid_2d` | 1 | 4 mm HDPE (white) | Waterjet / CNC | Preferred — lightweight, low friction |
| G1-alt | `skid_2d` | 1 | 2 mm 304 stainless | Laser-cut | Heavy but extreme durability |
| G1-proto | `skid_stl` | 1 | PETG | Print | Prototype — 2 halves if bed <500 mm |
| # | Spec | Qty | Use |
|---|------|-----|-----|
| G-f1 | M4×12 FHCS | 6 | Skid plate to deck (countersunk flush) |
| G-f2 | M4 rivet-nut (short) | 6 | Pre-installed in deck plate |
---
## Part H — Sensor Brackets
| # | RENDER | Qty | Material | Notes |
|---|--------|-----|----------|-------|
| H1 | `csi_mount_stl` | 4 | PETG | CSI corner brackets (45° outward, 20° down) |
| H2 | `d435i_mount_stl` | 1 | PETG | D435i front arm (8° nose-down) |
| # | Spec | Qty | Use |
|---|------|-----|-----|
| H-f1 | M2×6 SHCS | 8 | CSI camera PCB to bracket |
| H-f2 | M3×8 SHCS | 8 | CSI bracket to deck |
| H-f3 | M4×14 SHCS | 2 | D435i bracket to deck front face |
| H-f4 | 1/4-20 UNC hex nut | 1 | Captured in D435i bracket face |
| H-c1 | 200 mm CSI FPC cable | 4 | IMX219 to Jetson |
---
## Part I — Electronics Bay (reuse from rover)
The `rover_electronics_bay.scad` bay fits the SaltyTank deck directly the
deck bolt pattern is identical. Print or reuse existing bay + lid.
| # | Part | Qty | Notes |
|---|------|-----|-------|
| I1 | Electronics bay body | 1 | `rover_electronics_bay.scad` `bay_stl` |
| I2 | Electronics bay lid | 1 | Includes RPLIDAR tower |
| I3 | M3×12 SHCS | 10 | Bay to deck |
| I4 | M3×8 BHCS | 4 | Lid to bay |
---
## Part J — Stem + Sensor Head (shared, unchanged)
Same stem adapter, RPLIDAR, D435i, and IMX219 sensor head as SaltyLab.
Recommended stem length for SaltyTank: **500 mm** (lower than SaltyBot mast for
stability; RPLIDAR at ~635 mm from ground with 98 mm deck height).
---
## Mass Estimate — Frame Only
| Assembly | Material | Est. mass |
|----------|----------|-----------|
| Deck plate (8 mm Al, ~45% lightened) | Al | ~1.55 kg |
| Side frames ×2 (6 mm Al, ~35% lightened) | Al | ~0.52 kg |
| Skid plate (4 mm HDPE, solid) | HDPE | ~0.56 kg |
| Idler tensioner blocks ×2 | PETG | ~0.06 kg |
| CSI brackets ×4 + D435i bracket | PETG | ~0.07 kg |
| Stem collar | PETG | ~0.04 kg |
| Fasteners (M4M8 SS) | Steel | ~0.18 kg |
| **Frame total** | | **~2.98 kg** |
> **Just under the 3 kg target.**
> To save weight: switch side frames from 6 mm to 5 mm Al → saves ~0.09 kg.
> Set `FRAME_T = 5.0` in `saltytank_chassis.scad` and re-export DXF.
---
## Assembly Sequence
### 1. Fabricate / source parts
1. Export DXFs; send deck and side frames to waterjet. Order HDPE skid to DXF.
2. Print idler blocks, CSI/D435i brackets, stem collar.
3. Source track belts, idler wheels, road wheels, hub motors.
4. Install M4 rivet-nuts in deck plate (6× for skid; stem flange positions).
### 2. Side frame preparation
1. Test-fit hub motor axle D-cut bore in side frame adjust `SPROCKET_AXLE_D`
and `SPROCKET_AXLE_FLAT` if caliper measurement differs.
2. Press or Loctite M8 flange nuts into road wheel axle positions (optional).
### 3. Frame assembly
1. Slide side frames into deck side edge slots (inner face flush with deck edge).
2. Insert M5×20 SHCS from above through deck slots; fit nyloc nuts under deck.
3. **Snug only** leave adjustable for wheel alignment (step 6).
### 4. Drive motor installation
1. Feed hub motor axle through rear bore in side frame (D-cut aligned to flat).
2. Bolt sprocket plate to motor hub: 4× M5×16 SHCS, 2.5 N·m, Loctite 243.
3. Fit axle lock nut; Loctite 243; torque 35 N·m.
4. Route phase + hall cables through deck cable slot.
### 5. Road wheel installation
1. Slide M8×80 bolt through side frame road wheel bore.
2. Fit road wheel on axle (M8 flat washers both sides).
3. Thread M8 nyloc; torque to 12 N·m.
4. Verify wheel rotates freely.
### 6. Track belt installation (one side at a time)
1. Install idler block in tensioner slot (tensioner bolt only finger-tight).
2. Thread track belt around sprocket road wheels idler.
*(Easier with motor temporarily removed — reinstall after threading.)*
3. Fit idler axle (M8×100) through idler block + idler wheel; nyloc finger-tight.
4. Apply tension: tighten M6 tensioner bolt until ~10 mm slack on upper run.
5. Torque idler axle nut to 12 N·m.
### 7. Geometry verification
1. Set robot on flat surface; check all 4 road wheels contact ground through track.
2. Measure track tension on both sides should match within 2 mm.
3. Spin motors briefly verify tracks run straight without walking.
4. Torque side-frame-to-deck M5 bolts to 4 N·m once alignment confirmed.
### 8. Skid plate
1. Slide skid plate under deck; align M4 countersunk holes with rivet-nuts.
2. Fasten 6× M4×12 FHCS from below; tighten evenly to 2.5 N·m.
### 9. Electronics, sensors, stem
1. Mount electronics bay on deck (10× M3×12); route cables.
2. Install CSI and D435i brackets on deck corners/front.
3. Press stem through collar; install stem adapter + clamp.
4. Mount sensor head + RPLIDAR on stem top.
---
## Critical Dimensions
| Dimension | Nominal | Tolerance |
|-----------|---------|-----------|
| Deck length × width | 500 × 360 mm | ±1 mm |
| Frame height | 90 mm | ±0.5 mm |
| Frame length | 500 mm | ±0.5 mm |
| Drive axle bore OD | 16.11 mm | +0.4/0 (round section) |
| Drive axle flat chord | 13.00 mm | +0.4/0 |
| Bearing seat recess OD | 37.80 mm | +1.5/0 |
| Hub motor flange BC | 52 mm | ** verify caliper** |
| Tensioner slot height | 10.5 mm | ±0.2 mm |
| Tensioner travel | ±15 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 |
| Track belt width | 80 mm | ±1 mm |
| Sprocket PCD | 64.7 mm | ±0.5 mm |
| Idler OD | 80 mm | ±1 mm |
| Road wheel OD | 60 mm | ±1 mm |
---
## OpenSCAD Version
Requires OpenSCAD **2021.01 or newer**.
```bash
# Full assembly preview:
openscad saltytank_chassis.scad &
```