sl-webui f71dad5344 feat(arch): migrate all STM32/Mamba/BlackPill refs to ESP32 BALANCE/IO + fix roslib@1.4.0
Architecture change (2026-04-03): Mamba F722S (STM32F722) and BlackPill
replaced by ESP32 BALANCE (PID loop) and ESP32 IO (motors/sensors/comms).

- Update CLAUDE.md, docs, chassis BOM/ASSEMBLY, pinout, power-budget,
  wiring-diagram, TEAM.md, AUTONOMOUS_ARMING.md, docker-compose
- Update all ROS2 package comments, config labels, launch args
  (stm32_port→esp32_port, /dev/stm32-bridge→/dev/esp32-bridge)
- Update WebUI: stm32Mode→esp32Mode, stm32Version→esp32Version,
  "STM32 State/Mode" labels → "ESP32 State/Mode" (ControlMode, SettingsPanel)
- Add TODO(esp32-migration) markers on stm32_protocol.py and mamba_protocol.py
  binary frame layouts — pending ESP32 protocol spec from max
- Fix roslib CDN 1.3.0→1.4.0 in all 11 HTML panels (fixes ROS2 Humble
  rosbridge "Received a message without an op" incompatibility)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 08:25:24 -04:00

8.1 KiB
Raw Blame History

IP54 Weatherproofing Kit BOM — Issue #144

Agent: sl-mechanical | Date: 2026-03-01

IP54-rated enclosures and sensor housings for all-weather outdoor robot operation.


A. Main Electronics Enclosure (ip54_enclosure.scad)

Purchased Hardware

# Description Spec Qty Source / Notes
E1 PG7 cable gland IP68, nylon, Ø36 mm cable range 4 Lapp Skintop® or equivalent
E2 PG9 cable gland IP68, nylon, Ø48 mm cable range 2 Lapp Skintop® or equivalent
E3 Silicone O-ring cord Ø2 mm cord, silicone 70 Shore A ~800 mm Cut to lid perimeter length; butt-join with silicone sealant
E4 40 mm axial fan 12 V DC, sleeve bearing, >10 CFM 1 Sunon MF40201VX or Noctua NF-A4x10
E5 Foam filter pad 40×40×5 mm open-cell PPI 30 2 Cut from foam sheet; replace when dirty
E6 Al heat sink pad — Jetson 60×40×2 mm, adhesive back 1 Bergquist GP3000 or Arctic Thermal Pad
E7 Al heat sink pad — ESC 50×30×2 mm, adhesive back 1 Same source as E6
E8 Thermal interface material 1 mm silicone pad, Rth ≤ 1.0 °C·cm²/W 2 Between board and heat sink pad
E9 Spring washer M10 For quarter-turn latch preload 4 DIN 127, stainless
E10 M3×8 SHCS Stainless 8 Fan + duct mounting
E11 M3×30 SHCS Stainless 4 Quarter-turn latch knob bolt
E12 M3×6 BHCS Stainless 16 PCB standoff mounting (Jetson×4, FC×4, ESC×8)
E13 M3 brass heat-set insert M3×4 L, Ø5.1 OD 16 Press into standoffs with soldering iron
E14 Silicone adhesive sealant Clear, weatherproof, Dowsil 732 or equivalent 1 tube Seal cable gland threads + O-ring cord join

Printed Parts

Part File Qty Print Mass est.
Enclosure body ip54_enclosure.scad body_stl 1 PETG, 5 perims, 40% infill, 0.25 mm layer ~320 g
Lid with fan mount ip54_enclosure.scad lid_stl 1 PETG, 5 perims, 40% infill ~185 g
Fan filter duct ip54_enclosure.scad fan_duct_stl 1 PETG, 4 perims, 30% infill ~28 g
Quarter-turn latch knob ip54_enclosure.scad latch_stl 4 PETG, 5 perims, 60% infill ~6 g each

Gasket DXF

File Description
ip54_gasket.dxf O-ring groove outline for laser-cut 2 mm silicone sheet (alternative to cord)

B. IMX219 Camera Dome (ip54_sensor_housings.scad)

# Description Spec Qty (per camera) Notes
C1 Clear PC dome cylinder Ø55×35 mm, 2 mm wall, clear polycarbonate 1 Vac-form custom OR source clear plastic sphere halves; DXF from imx219_dome_2d
C2 Silicone O-ring Ø55 mm ID, 2 mm cord 1 Seals dome to base ring
C3 Silica gel sachet 1 g, demountable 1 Anti-fog; replace yearly or when saturated
C4 M2×6 SHCS Stainless 4 PCB to standoffs
C5 M3×10 BHCS Stainless 4 Base ring to sensor rail bracket
C6 Anti-fog spray Rain-X interior or similar Apply to dome inner face during assembly
Printed Part Qty Print Mass est.
Dome base ring 4 (1 per camera) PETG, 5 perims, 60% infill ~22 g
Retainer ring 4 PETG, 4 perims, 40% infill ~8 g

C. D435i Sealed Housing (ip54_sensor_housings.scad)

# Description Spec Qty Notes
D1 IR-transparent PC window 88×22×3 mm, >85% T at 850 nm 1 Evonik PLEXIGLAS IR 8N or Altuglas IR; export profile from d435i_window_2d
D2 Silicone O-ring 2 mm cord, approx 230 mm perimeter 1 Seals window frame to housing front face
D3 Silicone O-ring 2 mm cord, rear cap seal 1
D4 PG7 cable gland Rear cap 1 For D435i USB-C cable
D5 M2.5×10 SHCS Window frame screws 4
D6 M3×6 SHCS Housing-to-bracket top 3
D7 1/4-20 UNC hex nut Captured in bottom 1 For tripod/bracket mount
Printed Part Qty Print Mass est.
D435i housing body 1 PETG, 5 perims, 40% infill ~65 g
Window retention frame 1 PETG, 5 perims, 60% infill ~18 g
Rear cap 1 PETG, 5 perims, 60% infill ~20 g

D. RPLIDAR Spinning Dome (ip54_sensor_housings.scad)

# Description Spec Qty Notes
R1 Clear PC cylinder Ø120 mm OD, 1.52 mm wall, 95 mm tall 1 Source: plastic cylinder tube or custom vac-form; spec from rplidar_dome_2d
R2 Clear PC disc cap Ø120 mm, 2 mm, clear PC 1 Seals dome top; laser-cut from rplidar_dome_cap_2d export
R3 Silicone O-ring Ø120 mm ID, 2 mm cord 1 Seals dome cylinder to base ring
R4 M3×6 captive bolt For dome retention clips 3 Press-fit into clip
R5 M4×8 BHCS Deck mounting 4 Base ring to deck plate
R6 M3×8 SHCS RPLIDAR to base ring 4 Standard RPLIDAR A1M8 M3 bolts
Printed Part Qty Print Mass est.
RPLIDAR dome base ring 1 PETG, 5 perims, 60% infill ~55 g
Dome retention clip 3 PETG, 5 perims, 60% infill ~4 g each

Thermal Management Summary

Component Thermal strategy Max junction Enclosure budget
Jetson Orin NX Al pad → lid → fan forced convection 95 °C Tj Target ≤ 60 °C case
FC (ESP32 BALANCE) Passive; FC has own EMI shield 85 °C <60 °C ambient OK
ESC × 2 Al pad → lid 100 °C Tj Target ≤ 60 °C
D435i Passive; housing vent gap on rear cap 45 °C surface

Fan spec: 40 mm, 12 V, ≥10 CFM at 0.1" H₂O static pressure. Thermal analysis (simplified): ΔT = Q/(m_dot × Cp) where Q = 15 W (Jetson 10 W + ESC 5 W), airflow = 10 CFM = 4.7 L/s. ΔT_air ≈ 15 / (4.7 × 1.2 × 1005) ≈ 2.7 °C rise over ambient. With conduction resistance (pad + wall): Tcase ≈ Tambient + 12 °C. At 40 °C ambient → 52 °C max. Within 60 °C target. ✓


Mass Summary

Assembly Mass est.
Enclosure (body + lid + duct + latches) ~560 g
4× IMX219 domes ~120 g
D435i housing (body + frame + cap) ~103 g
RPLIDAR dome assembly ~67 g
Hardware + glands ~80 g
Total kit ~930 g

IP54 Compliance Checklist

  • Box O-ring groove: 2 mm cord, 70% compression → IP54 ✓
  • Cable glands: PG7/PG9 IP68 rated — exceeds lid requirement ✓
  • Fan inlet: labyrinth duct prevents direct splash to fan bore ✓
  • Exhaust: double-baffle labyrinth on lid rear ✓
  • Camera domes: O-ring sealed to base ring ✓
  • D435i housing: O-ring on window frame + rear cap ✓
  • RPLIDAR dome: O-ring at dome-to-base seat ✓
  • ⚠ Verify O-ring cord continuity — no gaps at corners after cut-and-join
  • ⚠ Test after print — submerge base (static) in 200 mm water for 30 min (IP54 splash test)
  • ⚠ D435i IR window — confirm PC sheet IR transmission spec with supplier before ordering

Export Commands

# Enclosure
openscad ip54_enclosure.scad -D 'RENDER="body_stl"'     -o ip54_body.stl
openscad ip54_enclosure.scad -D 'RENDER="lid_stl"'      -o ip54_lid.stl
openscad ip54_enclosure.scad -D 'RENDER="fan_duct_stl"' -o ip54_fan_duct.stl
openscad ip54_enclosure.scad -D 'RENDER="latch_stl"'    -o ip54_latch.stl
openscad ip54_enclosure.scad -D 'RENDER="gasket_2d"'    -o ip54_gasket.dxf

# Sensor housings
openscad ip54_sensor_housings.scad -D 'RENDER="imx219_dome_stl"'  -o imx219_dome.stl
openscad ip54_sensor_housings.scad -D 'RENDER="imx219_dome_2d"'   -o imx219_dome_disc.dxf
openscad ip54_sensor_housings.scad -D 'RENDER="d435i_body_stl"'   -o d435i_body.stl
openscad ip54_sensor_housings.scad -D 'RENDER="d435i_window_2d"'  -o d435i_window.dxf
openscad ip54_sensor_housings.scad -D 'RENDER="d435i_frame_stl"'  -o d435i_frame.stl
openscad ip54_sensor_housings.scad -D 'RENDER="rplidar_base_stl"' -o rplidar_dome_base.stl
openscad ip54_sensor_housings.scad -D 'RENDER="rplidar_dome_2d"'  -o rplidar_dome_spec.dxf