- Design specification: 24V DC power delivery (upgraded from 5V Issue #159) - ArUco marker ID 42 (15cm frame) for precision alignment - Spring-loaded contact pads with V-channel guide rails - Comprehensive BOM for 24V PSU, wiring, LED status circuit - Compatible with docking node #489 (ROS2 integration) - 3D-printable PETG frame (base, back wall, guide rails, brackets) - Electrical: 240W Mean Well IRM-240-24 PSU, 20A current capacity - Safety: Fused output, varistor protection, soft-start capable - Integration: MQTT status reporting, GPIO LED control (Jetson Orin NX) Files: - ISSUE_505_CHARGING_DOCK_24V_DESIGN.md: Complete design spec (mechanical, electrical, assembly) - charging_dock_505_BOM.csv: Procurement list with sourcing info Next: CAD implementation (charging_dock_505.scad, receiver variant) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
24 KiB
Issue #505: 24V Charging Dock Hardware Design
Agent: sl-mechanical Status: In Progress Date Started: 2026-03-06 Related Issues: #159 (5V dock), #489 (docking node)
Design Overview
Upgraded charging dock system for 24V DC power delivery with improved reliability, higher power capacity, and integrated ArUco marker (ID 42) for precision alignment.
Key Specifications
| Parameter | Specification | Notes |
|---|---|---|
| Voltage | 24 V DC | Upgrade from 5V (Issue #159) |
| Power capacity | 480 W (20 A @ 24V) | Supports battery charging + auxiliary systems |
| Contact type | Spring-loaded brass pads (Ø12 mm, 2 pads) | 20 mm CL-to-CL spacing |
| Alignment method | V-channel rails + ArUco marker ID 42 | Precision ±15 mm tolerance |
| Docking nodes | Compatible with Issue #489 (ROS2 docking node) | MQTT status reporting |
| Frame material | PETG (3D-printable) | All parts exportable as STL |
| Contact height | 35 mm above dock floor (configurable per robot) | Same as Issue #159 |
Subsystem Design
A. Power Distribution
PSU Selection (24V upgrade)
Primary: Mean Well IRM-240-24 or equivalent
- 240W / 10A @ 24V, open frame
- Input: 100-240V AC 50/60Hz
- Output: 24V ±5% regulated
- Recommended alternatives:
- HLK-240M24 (Hi-Link, 240W, compact)
- RECOM R-120-24 (half-power option, 120W)
- TDK-Lambda DRB-240-24 (industrial grade)
Specifications:
- PCB-mount or chassis-mount (via aluminum bracket)
- 2× PG7 cable glands for AC input + 24V output
- Thermal shutdown at 70°C (add heatsink if needed)
Power Delivery Cables
| Component | Spec | Notes |
|---|---|---|
| PSU to pogo pins | 12 AWG silicone wire (red/black) | 600V rated, max 20A |
| Cable gland exits | PG7, M20 thread, 5-8 mm cable | IP67 rated |
| Strain relief | Silicone sleeve, 5 mm ID | 150 mm sections at terminations |
| Crimp terminals | M3/M4 ring lug, 12 AWG | Solder + crimped (both) |
Contact Resistance & Safety
- Target contact resistance: <50 mΩ (brass pad to pogo pin)
- Transient voltage suppression: Varistor (MOV) across 24V rail (14-28V clamping)
- Inrush current limiting: NTC thermistor (10Ω @ 25°C) or soft-start relay
- Over-current protection: 25A fuse (slow-blow) on PSU output
B. Mechanical Structure
Dock Base Plate
Material: PETG (3D-printed) Dimensions: 300 × 280 × 12 mm (L×W×H) Ballast: 8× M20 hex nuts (4 pockets, 2 nuts per pocket) = ~690 g stabilization
Features:
- 4× M4 threaded inserts (deck mounting)
- 4× ballast pockets (underside, 32×32×8 mm each)
- Wiring channel routing (10×10 mm), PSU mounting rails
- Cable exit slot with strain relief
Back Wall / Pogo Housing
Material: PETG Dimensions: 250 × 85 × 10 mm (W×H×T) Contact face: 2× pogo pin bores (Ø5.7 mm, 20 mm deep)
Features:
- Pogo pin spring pre-load: 4 mm travel (contact engage at ~3 mm approach)
- LED status bezel mount (4× 5 mm LED holes)
- Smooth contact surface (0.4 mm finish to reduce arcing)
V-Guide Rails (Left & Right)
Material: PETG Function: Self-aligning funnel for robot receiver plate
Geometry:
- V-channel depth: 15 mm (±7.5 mm from centerline)
- Channel angle: 60° (Vee angle) for self-centering
- Guide length: 250 mm (front edge to back wall)
- 2.5 mm wall thickness (resists impact deformation)
Design goal: Robot can approach ±20 mm off-center; V-rails funnel it to ±5 mm at dock contact.
ArUco Marker Frame
Design: 15 cm × 15 cm frame (150×150 mm outer), marker ID 42
Frame mounting:
- Material: PETG (3D-printed frame + acrylic cover)
- Marker insertion: Side-slot, captures 100×100 mm laminated ArUco label
- Position: Dock entrance, 1.5 m height for camera visibility
- Lighting: Optional white LED ring around frame for contrast
Marker specs:
- Dictionary:
cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_250) - Marker ID: 42 (uint8, fits DICT_4X4_250: 0-249)
- Printed size: 100×100 mm
- Media: Glossy photo paper + 80 µm lamination (weather protection)
PSU Bracket
Material: PETG Attachment: 4× M4 SHCS to base rear, bolts through PSU flanges
Features:
- Mounting pads for PSU feet
- Cable routing guides (AC input + 24V output)
- Thermal airflow clearance (30 mm minimum)
- Optional DIN-rail adapter (for rackmount variant)
LED Status Bezel
Material: PETG Function: 4× LED indicator display (charging state feedback)
LEDs & Resistors:
| LED | Color | State | Vf (typ) | Resistor | Notes |
|---|---|---|---|---|---|
| L1 | Red | SEARCHING | 2.0 V | 180 Ω | No robot contact |
| L2 | Yellow | ALIGNED | 2.1 V | 180 Ω | Contact made, BMS pre-charge |
| L3 | Blue | CHARGING | 3.2 V | 100 Ω | Active charging |
| L4 | Green | FULL | 2.1 V | 180 Ω | Trickle/float mode |
Current calculation (for 24V rail):
- Red/Yellow/Green: R = (24 − Vf) / 0.020 ≈ 1000 Ω (use 1.0 kΩ 1/4W)
- Blue: R = (24 − 3.2) / 0.020 = 1040 Ω (use 1.0 kΩ)
Control:
- Jetson Orin NX GPIO output (via I2C LED driver or direct GPIO)
- Pulldown resistor (10 kΩ) on each GPIO if using direct drive
- Alternative: TP4056 analog output pins (if in feedback path)
C. Robot Receiver (Mating Interface)
Cross-variant compliance: Same receiver design works for SaltyLab, SaltyRover, SaltyTank with different mounting interfaces.
Contact Pads
- Material: Bare brass (10-12 mm OD, 2 mm thick)
- Pressing: 0.1 mm interference fit into PETG housing
- Polarity marking: "+" slot on right side (+X), "-" unmarked on left
- Solder lug: M3 ring lug on rear face (connects to robot BMS)
V-Nose Guide
- Profile: Chamfered 14° V-nose (30 mm wide)
- Function: Mates with dock V-rails for alignment funnel
Mounting Variants
| Robot | Mount Type | Fastener | Height Adjustment |
|---|---|---|---|
| SaltyLab | Stem collar (split, 2×) | M4 × 16 SHCS (2×) | Tune via firmware offset |
| SaltyRover | Deck flange (bolt-on) | M4 × 16 SHCS (4×) | 20 mm shim if needed |
| SaltyTank | Skid plate (bolt-on) | M4 × 16 SHCS (4×) | 55 mm ramp shim recommended |
3D-Printable Parts (STL Exports)
All parts print in PETG, 0.2 mm layer height, 40-60% infill:
| Part | File | Qty | Infill | Est. Mass | Notes |
|---|---|---|---|---|---|
| Dock base | charging_dock_505.scad (base_stl) |
1 | 60% | ~420 g | Print on large bed (300×280 mm) |
| Back wall + pogo | charging_dock_505.scad (back_wall_stl) |
1 | 40% | ~140 g | Smooth face finish required |
| V-rail left | charging_dock_505.scad (guide_rail_stl) |
1 | 50% | ~65 g | Mirror for right side in slicer |
| V-rail right | (mirror of left) | 1 | 50% | ~65 g | — |
| ArUco frame | charging_dock_505.scad (aruco_frame_stl) |
1 | 30% | ~35 g | Slot accepts 100×100 mm marker |
| PSU bracket | charging_dock_505.scad (psu_bracket_stl) |
1 | 40% | ~45 g | — |
| LED bezel | charging_dock_505.scad (led_bezel_stl) |
1 | 40% | ~15 g | — |
| Receiver (Lab) | charging_dock_receiver_505.scad (lab_stl) |
1 | 60% | ~32 g | Stem collar variant |
| Receiver (Rover) | charging_dock_receiver_505.scad (rover_stl) |
1 | 60% | ~36 g | Deck flange variant |
| Receiver (Tank) | charging_dock_receiver_505.scad (tank_stl) |
1 | 60% | ~42 g | Extended nose variant |
Bill of Materials (BOM)
Electrical Components
Power Supply & Wiring
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|---|---|---|---|---|---|---|
| E1 | PSU — 24V 10A | Mean Well IRM-240-24 or Hi-Link HLK-240M24 | 1 | ~$40–60 | ~$50 | Digi-Key, Amazon |
| E2 | 12 AWG silicone wire | Red + black, 600V rated, 5 m spool | 1 | ~$15 | ~$15 | McMaster-Carr, AliExpress |
| E3 | PG7 cable gland | M20 thread, IP67, 5–8 mm cable | 2 | ~$3 | ~$6 | AliExpress, Heilind |
| E4 | Varistor (MOV) | 18–28V, 1 kA | 1 | ~$1 | ~$1 | Digi-Key |
| E5 | Fuse — 25A | T25 slow-blow, 5×20 mm | 1 | ~$0.50 | ~$0.50 | Digi-Key |
| E6 | Fuse holder | 5×20 mm inline, 20A rated | 1 | ~$2 | ~$2 | Amazon |
| E7 | Crimp ring terminals | M3, 12 AWG, tin-plated | 8 | ~$0.20 | ~$1.60 | Heilind, AliExpress |
| E8 | Strain relief sleeve | 5 mm ID silicone, 1 m | 1 | ~$5 | ~$5 | McMaster-Carr |
Pogo Pins & Contacts
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|---|---|---|---|---|---|---|
| C1 | Pogo pin assembly | Spring-loaded, Ø5.5 mm OD, 20 mm, 20A rated, 4 mm travel | 2 | ~$8–12 | ~$20 | Preci-Dip, Jst, AliExpress |
| C2 | Brass contact pad | Ø12 × 2 mm, H68 brass, bare finish | 2 | ~$3 | ~$6 | Metal supplier (Metals USA, OnlineMetals) |
| C3 | Solder lug — M3 | Copper ring, tin-plated | 4 | ~$0.40 | ~$1.60 | Heilind, Amazon |
LED Status Circuit
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|---|---|---|---|---|---|---|
| L1 | 5 mm LED — Red | 2.0 V, 20 mA, diffuse | 1 | ~$0.30 | ~$0.30 | Digi-Key |
| L2 | 5 mm LED — Yellow | 2.1 V, 20 mA, diffuse | 1 | ~$0.30 | ~$0.30 | Digi-Key |
| L3 | 5 mm LED — Blue | 3.2 V, 20 mA, diffuse | 1 | ~$0.50 | ~$0.50 | Digi-Key |
| L4 | 5 mm LED — Green | 2.1 V, 20 mA, diffuse | 1 | ~$0.30 | ~$0.30 | Digi-Key |
| R1–R4 | Resistor — 1 kΩ 1/4W | Metal film, 1% tolerance | 4 | ~$0.10 | ~$0.40 | Digi-Key |
| J1 | Pin header 2.54 mm | 1×6 right-angle | 1 | ~$0.50 | ~$0.50 | Digi-Key |
Current Sensing (Optional)
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|---|---|---|---|---|---|---|
| S1 | INA219 I2C shunt monitor | 16-bit, I2C addr 0x40, 26V max | 1 | ~$5 | ~$5 | Adafruit, Digi-Key |
| S2 | SMD resistor — 0.1 Ω | 1206, 1W | 1 | ~$1 | ~$1 | Digi-Key |
Mechanical Hardware
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|---|---|---|---|---|---|---|
| M1 | M20 hex nut | Steel DIN 934, ~86 g | 8 | ~$0.80 | ~$6.40 | Grainger, Home Depot |
| M2 | M4 × 16 SHCS | Stainless A4 DIN 912 | 16 | ~$0.30 | ~$4.80 | Grainger |
| M3 | M4 × 10 BHCS | Stainless A4 DIN 7380 | 8 | ~$0.25 | ~$2.00 | Grainger |
| M4 | M4 heat-set insert | Brass, threaded, M4 | 20 | ~$0.15 | ~$3.00 | McMaster-Carr |
| M5 | M3 × 16 SHCS | Stainless, LED bezel | 4 | ~$0.20 | ~$0.80 | Grainger |
| M6 | M3 hex nut | DIN 934 | 4 | ~$0.10 | ~$0.40 | Grainger |
| M7 | M8 × 40 BHCS | Zinc-plated, floor anchors (optional) | 4 | ~$0.50 | ~$2.00 | Grainger |
| M8 | Rubber foot | Ø20 × 5 mm, self-adhesive | 4 | ~$0.80 | ~$3.20 | Amazon |
ArUco Marker & Frame
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|---|---|---|---|---|---|---|
| A1 | ArUco marker print | 100×100 mm, ID=42, DICT_4X4_250, glossy photo paper | 2 | ~$1.50 | ~$3.00 | Print locally or AliExpress |
| A2 | Lamination pouch | A4, 80 µm thick | 2 | ~$0.40 | ~$0.80 | Amazon, Staples |
| A3 | Acrylic cover sheet | Clear, 3 mm, 150×150 mm | 1 | ~$3 | ~$3.00 | McMaster-Carr |
Consumables & Assembly
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|---|---|---|---|---|---|---|
| X1 | Solder wire | 63/37 Sn/Pb or lead-free, 1 m | 1 | ~$3 | ~$3.00 | Digi-Key |
| X2 | Flux paste | No-clean, 25 mL | 1 | ~$4 | ~$4.00 | Digi-Key |
| X3 | Loctite 243 | Thread-locker (medium strength), 10 mL | 1 | ~$4 | ~$4.00 | Grainger |
| X4 | Epoxy adhesive | Two-part, 25 mL | 1 | ~$6 | ~$6.00 | Home Depot |
Assembly Procedure
Phase 1: Preparation
-
Print all PETG parts (see STL export list above)
- Base: 0.3 mm layer, 60% infill (heavy/stable)
- Back wall: 0.2 mm, 40% infill
- Rails & brackets: 0.2 mm, 40-50% infill
- Support removal: slow, avoid pogo bore damage
-
Prepare ballast nuts
- Sort 8× M20 hex nuts (stack in 4 pockets, 2 per pocket)
- Optional: fill pockets with epoxy to prevent rattling
-
Press brass contact pads
- Apply 0.1 mm interference press-fit into receiver housing bores
- Use arbor press @ ~2 tons force
- Or use slow manual press (avoid chipping brass edges)
Phase 2: Base Assembly
-
Install heat-set M4 inserts into base plate
- Back wall attach points (3×)
- Guide rail attach points (4× each side)
- ArUco mast feet (4×)
- PSU bracket mount (4×)
- Use soldering iron (350°C) or insert tool, press vertically
-
Ballast installation
- Insert M20 hex nuts into base pockets (from underside)
- Verify pockets are flush, no protrusions into wiring channel
- Optional: epoxy-lock nuts with 5-minute epoxy
-
Install pogo pins into back wall
- Press spring-loaded pins from front face into Ø5.7 mm bores (20 mm deep)
- Flange seats against counterbore shoulder at 1.5 mm depth
- Apply small drop of Loctite 243 to bore wall (prevents rotation)
Phase 3: Electrical Assembly
-
Solder wires to pogo pin terminals
- 12 AWG red wire → POGO+ pin
- 12 AWG black wire → POGO- pin
- Solder both in & out of lug for redundancy
- Add ~50 mm strain relief sleeve over each joint
-
Route pogo wires through base wiring channel
- Guide down channel (10×10 mm trough)
- Exit through cable gland slot on rear
-
Assemble PSU bracket
- Bolt Mean Well IRM-240-24 (or equivalent) to bracket pads
- 4× M4 fasteners through bracket to base rear
- Orient PSU exhaust away from dock (for ventilation)
-
Connect 24V wiring
- Pogo+ wire (red) → PSU V+ terminal
- Pogo- wire (black) → PSU COM/GND terminal
- Observe polarity strictly (reverse = short circuit)
-
Install power protection
- Fuse holder in-line on PSU V+ output (25A slow-blow)
- Varistor (MOV, 18–28V) across V+/COM rails (clamp transients)
- Optional: NTC thermistor (10Ω @ 25°C) in series for soft-start
-
Wire AC mains input (if not pre-assembled)
- Route AC input through cable gland on PSU bracket
- Connect to PSU AC terminals (L, N, PE if applicable)
- Ensure all connections are soldered + crimped
Phase 4: LED Assembly
-
Install LED bezel into back wall
- 4× 5 mm LEDs press-fit into bezel holes (bodies recessed ~2 mm)
- Solder resistors (1 kΩ 1/4W) to LED anodes on rear
- Connect all LED cathodes to common GND line (black wire to PSU COM)
- Wire LED control lines to Jetson Orin NX GPIO (via I2C expander if needed)
-
Connect LED header
- 2.54 mm pin header (1×6) plugs into LED control harness
- Pin 1: LED1 (red, SEARCHING)
- Pin 2: LED2 (yellow, ALIGNED)
- Pin 3: LED3 (blue, CHARGING)
- Pin 4: LED4 (green, FULL)
- Pins 5–6: GND, +24V (power for LED feedback monitoring)
Phase 5: Mechanical Assembly
-
Bolt back wall to base
- 3× M4×16 SHCS from underside of base
- Tighten to ~5 Nm (snug, don't overtighten plastic)
- Back wall should be perpendicular to base (verify with level)
-
Attach V-guide rails
- Left rail: 4× M4 fasteners into base inserts (front & rear attach)
- Right rail: Mirror (flip STL in slicer) or manually mirror geometry
- Verify V-channels are parallel & symmetrical (±2 mm tolerance)
-
Mount ArUco marker frame
- Bolt 4× M4×10 fasteners to frame feet (attach to base front)
- Insert laminated 100×100 mm ArUco marker (ID 42) into frame slot
- Verify marker is flat & centered (no curl or shadow)
-
Attach rubber feet (or floor anchors)
- 4× self-adhesive rubber feet on base underside corners
- OR drill M8 holes through base (optional: permanent floor mounting)
Phase 6: Robot Receiver Assembly
-
Assemble robot receiver (per variant)
- SaltyLab: 2-piece stem collar (M4×16 clamps Ø25 mm stem)
- SaltyRover: Single flange piece (4× M4 to deck underbelly)
- SaltyTank: Single piece w/ extended nose (4× M4 to skid plate)
-
Press brass pads into receiver
- Ø12 mm pads press into 0.1 mm interference bores
- Apply Loctite 603 retaining compound to bore before pressing
- Manual arbor press @ ~1-2 tons force; pads should be proud 0.2 mm
-
Solder receiver wires
- 12 AWG wires (red/black) solder to M3 solder lugs on pad rear
- Route wires through wire channel on mount face
- Terminate to robot BMS/charging PCB input
Wiring Diagram (24V System)
┌─────────────────────────────────────────────────────────────┐
│ MAINS INPUT (AC) │
│ 110/220 V AC │
└────────────┬────────────────────────────────────────────────┘
│
▼
┌──────────────┐
│ IRM-240-24 │ 24V / 10A out (240W)
│ PSU │ ±5% regulated, open-frame
└──┬───────┬───┘
+24V │ │ GND
│ │
┌────┴┐ ┌─┴────┐
│ [F] │ │ [F] │ Fuse holder (25A slow-blow)
│ │ │ │
│ +24 │ │ GND │ 12 AWG silicone wire to back wall
│ │ │ │
└────┬┘ └─┬────┘
│ │
+24V│ │GND
▼ ▼
┌─────────────────┐
│ Back wall │
│ ┌───────────┐ │
│ │ POGO+ │ │ Spring-loaded contact pin (+24V)
│ │ POGO- │ │ Spring-loaded contact pin (GND)
│ └────┬──────┘ │
│ │ │
│ ┌─────┴─────┐ │
│ │ LED 1-4 │ │ Red, Yellow, Blue, Green indicators
│ │ Resistors│ │ 1 kΩ limiting resistors (×4)
│ │ [GPIO] │ │ Control from Jetson Orin NX I2C
│ └───────────┘ │
└─────┬───────────┘
│
═════╧════════ DOCK / ROBOT AIR GAP (≤50 mm) ═════════════
│
▼
┌──────────────────┐
│ Robot Receiver │
│ ┌────────────┐ │
│ │ Contact + │ │ Brass pad (Ø12×2 mm) [+24V]
│ │ Contact - │ │ Brass pad (Ø12×2 mm) [GND]
│ └──┬──┬──────┘ │
│ │ │ │
│ 12 AWG wires │ Red/black to BMS
│ │ │ │
│ ┌──▼──▼──┐ │
│ │ Robot │ │
│ │ BMS │ │
│ │Battery │ │ Charging current: 0–15A (typical)
│ └────────┘ │
└──────────────────┘
OPTIONAL — CURRENT SENSING (Diagnostic)
│ +24V
┌────┴────┐
│[INA219] │ I2C current monitor (0.1Ω sense resistor)
│ I2C 0x40│ Jetson reads dock current → state machine
└────┬────┘
│ GND
LED STATE MACHINE CONTROL (from docking_node.py):
State GPIO/Signal LED Output
─────────────────────────────────────────
SEARCHING GPIO H Red LED ON (20 mA, 1 kΩ)
ALIGNED GPIO H Yellow LED ON (pre-charge active)
CHARGING GPIO H Blue LED ON (>1 A charging)
FULL/COMPLETE GPIO H Green LED ON (float mode)
GPIO driven via Jetson Orin NX I2C LED driver (e.g., PCA9685)
or direct GPIO if firmware implements bitbang logic.
Integration with ROS2 Docking Node (#489)
Docking node location: ./jetson/ros2_ws/src/saltybot_docking/docking_node.py
MQTT Topics
Status reporting (outbound):
saltybot/docking/status → { state, robot_id, contact_voltage, charge_current }
saltybot/docking/led → { red, yellow, blue, green } [0=OFF, 1=ON, blink_hz]
Command subscriptions (inbound):
saltybot/docking/reset → trigger dock reset (clear fault)
saltybot/docking/park → move robot out of dock (e.g., after full charge)
Firmware Integration
State machine (4 states):
- SEARCHING — No robot contact; dock waits for approach (ArUco marker detection via Jetson camera)
- ALIGNED — Contact made (BMS pre-charge active); dock supplies trickle current (~100 mA) while robot capacitors charge
- CHARGING — Main charge active; dock measures current via INA219, feedback to BMS
- FULL — Target voltage reached (≥23.5 V, <100 mA draw); dock holds float voltage
Current sensing feedback:
- INA219 I2C shunt on 24V rail monitors dock-to-robot current
- Jetson polls at 10 Hz; state transitions trigger LED updates & MQTT publish
- Hysteresis prevents flickering (state valid for ≥2 sec)
Testing Checklist
-
Electrical safety
- 24V output isolated from mains AC (< 2.5 kV isolation @ 60 Hz)
- Fuse 25A blocks short-circuit (verify blow @ >30 A)
- Varistor clamps transient overvoltage (check 28V limit)
- All crimps are soldered + crimped (pull test: no slippage @ 10 lbf)
-
Mechanical
- Base level on 4 rubber feet (no rocking)
- V-rails parallel within ±2 mm across 250 mm length
- Back wall perpendicular to base (level ±1°)
- Pogo pins extend 4 mm from back wall face (spring preload correct)
-
Contact alignment
- Robot receiver pads contact pogo pins with ≥3 mm contact face overlap
- Contact resistance < 50 mΩ (measure with multimeter on lowest ohm scale during light press)
- No visible arcing or pitting (inspect pads after 10 charge cycles)
-
Power delivery
- 24V output at PSU: 23.5–24.5 V (under load)
- 24V at pogo pins: ≥23.5 V (< 0.5 V droop @ 10 A)
- Robot receives 24V ± 1 V (measure at BMS input)
-
LED status
- Red (SEARCHING) steady on before robot approach
- Yellow (ALIGNED) turns on when pads make contact
- Blue (CHARGING) turns on when charge current > 500 mA
- Green (FULL) turns on when current drops < 100 mA (float mode)
-
ArUco marker
- Marker ID 42 is readable by Jetson camera from 1.5 m @ 90° angle
- No glare or shadow on marker (add diffuse lighting if needed)
- Marker detected by cv2.aruco in < 100 ms
-
MQTT integration
- Dock publishes status every 5 sec (or on state change)
- LED state matches reported dock state
- Current sensing (INA219) reads within ±2% of true dock current
Firmware/Software Requirements
Jetson Orin NX (Docking controller)
Python dependencies:
pip install opencv-contrib-python # ArUco marker detection
pip install adafruit-circuitpython-ina219 # Current sensing
pip install rclpy # ROS2
pip install paho-mqtt # MQTT status reporting
Key Python modules:
cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_250)→ ArUco ID 42 detectionAdafruit_INA219→ I2C current monitoring @ 0x40- GPIO library → LED control (via I2C LED driver or direct GPIO)
ROS2 node: saltybot_docking/docking_node.py (already present, Issue #489)
- Subscribes to
/docking/approach_request - Publishes to
/docking/status,/docking/led_state - MQTT gateway for legacy systems
Files to Commit
New files for Issue #505:
chassis/
├── charging_dock_505.scad [Main dock 24V design]
├── charging_dock_receiver_505.scad [Robot receiver 24V variant]
├── ISSUE_505_CHARGING_DOCK_24V_DESIGN.md [This file]
├── charging_dock_505_BOM.csv [Excel-friendly BOM export]
└── charging_dock_505_WIRING_DIAGRAM.md [Detailed wiring guide]
docs/
└── Issue_505_Assembly_Guide.md [Step-by-step assembly photos + text]
Revision History
| Date | Version | Changes |
|---|---|---|
| 2026-03-06 | 1.0 | Initial design (24V upgrade from Issue #159) |
Next Steps
- ✅ Design specification (this document)
- ⏳ OpenSCAD CAD files (
charging_dock_505.scad,charging_dock_receiver_505.scad) - ⏳ BOM export (CSV format for procurement)
- ⏳ 3D-printed prototype testing
- ⏳ Electrical integration with Jetson docking node
- ⏳ ArUco marker calibration & documentation
- ⏳ PR submission & merge to
main
Designer: sl-mechanical Date: 2026-03-06 Status: Design Specification Complete — Awaiting CAD Implementation