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
# 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:
- Loosen idler axle nut (M8) — block free to slide in slot.
- Turn tensioner M6 bolt CW to push block rearward → tighten track.
- Target: ~10 mm slack on upper track run (finger-press deflects 10 mm).
- 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
- Export DXFs; send deck and side frames to waterjet. Order HDPE skid to DXF.
- Print idler blocks, CSI/D435i brackets, stem collar.
- Source track belts, idler wheels, road wheels, hub motors.
- Install M4 rivet-nuts in deck plate (6× for skid; stem flange positions).
2. Side frame preparation
- Test-fit hub motor axle D-cut bore in side frame — adjust
SPROCKET_AXLE_D
and SPROCKET_AXLE_FLAT if caliper measurement differs.
- Press or Loctite M8 flange nuts into road wheel axle positions (optional).
3. Frame assembly
- Slide side frames into deck side edge slots (inner face flush with deck edge).
- Insert M5×20 SHCS from above through deck slots; fit nyloc nuts under deck.
- Snug only — leave adjustable for wheel alignment (step 6).
4. Drive motor installation
- Feed hub motor axle through rear bore in side frame (D-cut aligned to flat).
- Bolt sprocket plate to motor hub: 4× M5×16 SHCS, 2.5 N·m, Loctite 243.
- Fit axle lock nut; Loctite 243; torque 35 N·m.
- Route phase + hall cables through deck cable slot.
5. Road wheel installation
- Slide M8×80 bolt through side frame road wheel bore.
- Fit road wheel on axle (M8 flat washers both sides).
- Thread M8 nyloc; torque to 12 N·m.
- Verify wheel rotates freely.
6. Track belt installation (one side at a time)
- Install idler block in tensioner slot (tensioner bolt only finger-tight).
- Thread track belt around sprocket → road wheels → idler.
(Easier with motor temporarily removed — reinstall after threading.)
- Fit idler axle (M8×100) through idler block + idler wheel; nyloc finger-tight.
- Apply tension: tighten M6 tensioner bolt until ~10 mm slack on upper run.
- Torque idler axle nut to 12 N·m.
7. Geometry verification
- Set robot on flat surface; check all 4 road wheels contact ground through track.
- Measure track tension on both sides — should match within 2 mm.
- Spin motors briefly — verify tracks run straight without walking.
- Torque side-frame-to-deck M5 bolts to 4 N·m once alignment confirmed.
8. Skid plate
- Slide skid plate under deck; align M4 countersunk holes with rivet-nuts.
- Fasten 6× M4×12 FHCS from below; tighten evenly to 2.5 N·m.
9. Electronics, sensors, stem
- Mount electronics bay on deck (10× M3×12); route cables.
- Install CSI and D435i brackets on deck corners/front.
- Press stem through collar; install stem adapter + clamp.
- 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.
# Full assembly preview:
openscad saltytank_chassis.scad &