# 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 35–40 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 × (sprocket–idler 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 (M4–M8 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 &
```
