# 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 & ```