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>
384 lines
15 KiB
Markdown
384 lines
15 KiB
Markdown
# 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 &
|
||
```
|