diff --git a/chassis/ISSUE_505_CHARGING_DOCK_24V_DESIGN.md b/chassis/ISSUE_505_CHARGING_DOCK_24V_DESIGN.md new file mode 100644 index 0000000..cb1eb6b --- /dev/null +++ b/chassis/ISSUE_505_CHARGING_DOCK_24V_DESIGN.md @@ -0,0 +1,619 @@ +# 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 + +1. **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 + +2. **Prepare ballast nuts** + - Sort 8× M20 hex nuts (stack in 4 pockets, 2 per pocket) + - Optional: fill pockets with epoxy to prevent rattling + +3. **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 + +4. **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 + +5. **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 + +6. **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 + +7. **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 + +8. **Route pogo wires through base wiring channel** + - Guide down channel (10×10 mm trough) + - Exit through cable gland slot on rear + +9. **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) + +10. **Connect 24V wiring** + - Pogo+ wire (red) → PSU V+ terminal + - Pogo- wire (black) → PSU COM/GND terminal + - Observe polarity strictly (reverse = short circuit) + +11. **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 + +12. **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 + +13. **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) + +14. **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 + +15. **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) + +16. **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) + +17. **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) + +18. **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 + +19. **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) + +20. **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 + +21. **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):** +1. **SEARCHING** — No robot contact; dock waits for approach (ArUco marker detection via Jetson camera) +2. **ALIGNED** — Contact made (BMS pre-charge active); dock supplies trickle current (~100 mA) while robot capacitors charge +3. **CHARGING** — Main charge active; dock measures current via INA219, feedback to BMS +4. **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:** +```bash +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 detection +- `Adafruit_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 + +1. ✅ Design specification (this document) +2. ⏳ OpenSCAD CAD files (`charging_dock_505.scad`, `charging_dock_receiver_505.scad`) +3. ⏳ BOM export (CSV format for procurement) +4. ⏳ 3D-printed prototype testing +5. ⏳ Electrical integration with Jetson docking node +6. ⏳ ArUco marker calibration & documentation +7. ⏳ PR submission & merge to `main` + +--- + +**Designer:** sl-mechanical +**Date:** 2026-03-06 +**Status:** Design Specification Complete — Awaiting CAD Implementation diff --git a/chassis/charging_dock_505_BOM.csv b/chassis/charging_dock_505_BOM.csv new file mode 100644 index 0000000..f3a9f1b --- /dev/null +++ b/chassis/charging_dock_505_BOM.csv @@ -0,0 +1,41 @@ +Item,Description,Specification,Quantity,Unit Cost,Total Cost,Source Notes +E1,Power Supply,Mean Well IRM-240-24 / Hi-Link HLK-240M24 (24V 10A 240W),1,$50.00,$50.00,Digi-Key / Amazon +E2,12 AWG Silicone Wire,Red + Black 600V rated 5m spool,1,$15.00,$15.00,McMaster-Carr / AliExpress +E3,PG7 Cable Gland,M20 IP67 5-8mm cable,2,$3.00,$6.00,AliExpress / Heilind +E4,Varistor (MOV),18-28V 1kA,1,$1.00,$1.00,Digi-Key +E5,Fuse 25A,T25 Slow-blow 5x20mm,1,$0.50,$0.50,Digi-Key +E6,Fuse Holder,5x20mm inline 20A rated,1,$2.00,$2.00,Amazon +E7,Crimp Ring Terminals,M3 12 AWG tin-plated,8,$0.20,$1.60,Heilind / AliExpress +E8,Strain Relief Sleeve,5mm ID silicone 1m,1,$5.00,$5.00,McMaster-Carr +C1,Pogo Pin Assembly,"Spring-loaded Ø5.5mm 20mm 20A 4mm travel",2,$10.00,$20.00,Preci-Dip / Jst / AliExpress +C2,Brass Contact Pad,Ø12x2mm H68 brass bare,2,$3.00,$6.00,OnlineMetals / Metals USA +C3,Solder Lug M3,Copper ring tin-plated,4,$0.40,$1.60,Heilind / Amazon +L1,5mm LED Red,2.0V 20mA diffuse,1,$0.30,$0.30,Digi-Key +L2,5mm LED Yellow,2.1V 20mA diffuse,1,$0.30,$0.30,Digi-Key +L3,5mm LED Blue,3.2V 20mA diffuse,1,$0.50,$0.50,Digi-Key +L4,5mm LED Green,2.1V 20mA diffuse,1,$0.30,$0.30,Digi-Key +R1-R4,Resistor 1kΩ 1/4W,Metal film 1% tolerance,4,$0.10,$0.40,Digi-Key +J1,Pin Header 2.54mm,1x6 right-angle,1,$0.50,$0.50,Digi-Key +S1,INA219 I2C Shunt Monitor,16-bit I2C 0x40 26V max (Optional),1,$5.00,$5.00,Adafruit / Digi-Key +S2,SMD Resistor 0.1Ω,1206 1W (Optional current sense),1,$1.00,$1.00,Digi-Key +M1,M20 Hex Nut,Steel DIN 934 ~86g,8,$0.80,$6.40,Grainger / Home Depot +M2,M4x16 SHCS,Stainless A4 DIN 912,16,$0.30,$4.80,Grainger +M3,M4x10 BHCS,Stainless A4 DIN 7380,8,$0.25,$2.00,Grainger +M4,M4 Heat-Set Insert,Brass threaded,20,$0.15,$3.00,McMaster-Carr +M5,M3x16 SHCS,Stainless,4,$0.20,$0.80,Grainger +M6,M3 Hex Nut,DIN 934,4,$0.10,$0.40,Grainger +M7,M8x40 BHCS,Zinc-plated floor anchor,4,$0.50,$2.00,Grainger +M8,Rubber Foot,Ø20x5mm self-adhesive,4,$0.80,$3.20,Amazon +A1,ArUco Marker Print,"100x100mm ID=42 DICT_4X4_250 glossy photo (qty 2)",2,$1.50,$3.00,Print locally / AliExpress +A2,Lamination Pouch,A4 80µm,2,$0.40,$0.80,Amazon / Staples +A3,Acrylic Cover Sheet,Clear 3mm 150x150mm,1,$3.00,$3.00,McMaster-Carr +X1,Solder Wire,63/37 Sn/Pb lead-free 1m,1,$3.00,$3.00,Digi-Key +X2,Flux Paste,No-clean 25mL,1,$4.00,$4.00,Digi-Key +X3,Loctite 243,Thread-locker 10mL,1,$4.00,$4.00,Grainger +X4,Epoxy Adhesive,Two-part 25mL,1,$6.00,$6.00,Home Depot +P1,PETG Filament (3D Print),"Natural/White 1kg ±15% waste factor",2.5,$20.00,$50.00,Prusament / Overture +,,,,, +SUBTOTAL (Electrical + Hardware + Consumables),,,,,,$234.00,excludes 3D printing +SUBTOTAL (With 3D filament @ $20/kg),,,,,,$284.00,all materials +LABOR ESTIMATE (Assembly ~4-6 hrs),,,,,,$150-225,tecnico time +TOTAL PROJECT COST (Material + Labor),,,,,,$434-509,per dock