# Wheel change plan: air-tyre hub motors (issue #18)

Study: research/air-tyre-hub-wheels.md (the evidence). Primary wheel: a 10 in single-shaft hoverboard-class hub motor,
10 x 2.125 pneumatic, 36 V 350 W, halls, D-shaft Ø16 / 13.5 flat x 76 mm, about 3.5 kg. Backup: the 8.5 in of the
same family. Drivers stay the Flipsky 75100s. No mechanical brake. Stairs are out of v1; 35-40 mm lips by rolling.

## Proposed decision D69 (for the main session to record)

- id: D69
- title: "The wheels are 10 in single-shaft hoverboard-class hub motors with 10 x 2.125 pneumatic tyres at 30-35 psi, on the Flipsky 75100s; the mass gate moves to 35.0 kg"
- decision: "Each wheel is a 36 V 350 W outer-rotor hub motor of the hoverboard family (15 pole pairs, halls, a hollow D-shaft Ø16 mm with a 13.5 mm flat, 76 mm long, clamped on one side in the wheel link's foot) with a 10 x 2.125 pneumatic tube tyre run at 30-35 psi; the backup is the same motor's 8.5 in version. Bought at a listed price (Robokits RKI-9013 Rs 3,256 plus a pneumatic tyre; e-gizmo 230300029; Alibaba/eBay/Amazon 10 in 36 V 350 W listings confirmed live before ordering); two are bought and measured (mass, Kv, R, L, shaft hardness, run-out) before the foot is cut. The wheel link's foot becomes a 45 mm split D-clamp (4 x M5, inserts; a SendCutSend steel clamp block if the print slips). The Flipsky 75100s drive them in FOC on halls with interpolation, 30 A motor max, 10 A continuous; the balance loop takes pitch from the VN-100 and blends the hall edges with the torque model for wheel speed; an AS5047P on the rotor's outer cover is the encoder upgrade if the bench shows a limit cycle. No mechanical or electromagnetic brake: the balance controller holds while powered (3.8 N m a wheel on 10 deg), the skids hold the sat-down robot, a passive phase-short relay is the add-on if P1 shows a roll-away during the fold. Ingress: the hub sealed (greased shaft bearing, silicone cover seam, sealed lead exit, a vent plug), Deutsch DT/DTP wheel connectors, the belly box at IP54; puddles to 40 mm. The ledger's as-built ceiling becomes 35.0 kg (design mass 35.5 kg, 17.75 kg a leg); the strength cases and the rig re-run at it. Stairs are not a v1 capability; the rolling step is 35-40 mm; a 100 mm kerb by jump is a later firmware milestone."
- why: "The user wants air tyres for suspension, puddles and steps. The rig at 18.05 kg a leg keeps every case under the RS-04's 120 N m (109 N m uncapped jump, the same as today) and the knee and axle loads inside the leg's FEA cases (the 150 mm drop's axle spike falls 15 %); the clash sweep is clean; the full-robot sim climbs 35-40 mm kerbs against 25 mm today. The cost is the jump (206 to 167 mm), +2.7-3.6 kg on a 32.27 kg ledger, and a 41 mm taller stance (or a 259 mm standing leg). No robot-grade 8-10 in air-tyre hub motor sells at a listed price (D40); the hoverboard family is single-sided by construction, 36 V like the bus, and proven on VESCs."
- source: {kind: user, quote: "for the wheels can we do something more like a 10\" hub motor with air filled tires? ... In general I want air tires."}

## Tasks

| # | Task | Files | Acceptance |
|---|---|---|---|
| W1 | **Buy two 10 in motors and measure them.** Confirm a live listing (Robokits RKI-9013 + a 10 x 2.125 tyre and tube; or an eBay/Amazon 10 in 36 V 350 W pneumatic unit shipping from the US), order two. Weigh; measure the shaft (Ø, flat, length, hardness by file or Rockwell), the hub width and cover diameter, run-out with a dial gauge; Kv by the drill test, R and L in VESC Tool; count magnets; tear one down for the hall board, a stator NTC and the seal plan. Catalog entry with the measured numbers; interfaces.json entry with the shaft as the mount. | catalog/wheel_motors.json (`hoverboard-10in-36v`), catalog/interfaces.json, references/vendor/hoverboard-10in/ (photos, a sketch), sim/wheel_candidates.json | the catalog row has a price, two sellers, measured mass, shaft, Kv, R, L, pole pairs, hall order and an IP note; `price_checked` dated; the interface has the shaft's dimensions and the hub's envelope from measurement, not a listing |
| W2 | **The wheel link's foot: a D-shaft clamp.** cad/fivebar.py `wheel_link()` and `botwheel()` read the new interface: a Ø16 D-bore 45 mm long with the flat on the load axis, split on the outer face, 4 x M5 x 30 in heat-set inserts (McMaster part numbers in catalog/hardware.json), the cable through the shaft's end into the existing Ø22 channel, the hub's cover 8 mm clear of the foot; a steel clamp-block option (SendCutSend 4130 or 1018, instant price) if the print's clamp slips in W6. Re-run the clash sweep and the cable check. | cad/fivebar.py, cad/build_leg.py, cad/wheel_fit.py, exports/leg/leg.json, catalog/hardware.json | `fivebar.clashes()` and `cable_check()` empty at every stance and stop pose; the foot's clamp torque at M5 preload holds 2 x the rig's peak axle moment (section 2.4 of the study) with mu 0.2 on the shaft; leg.json's mass updated |
| W3 | **Loads and strength at 17.75 kg a leg.** sim/leg_rig.py's WHEEL from the catalog (mass, radius, the pneumatic solref from the measured stiffness or 67 N/mm); rig-results.json and rig/run.py --predict at the new design mass; cad/leg_studies.py adds the shaft as a steel cantilever at the axle spike and the foot's clamp as a bolted joint; the body's mount-plane loads (cad/body_legloads.py) and cad/body_studies.py at 17.75 kg. | sim/leg_rig.py, exports/leg/rig-results.json, exports/rig/predictions.json, cad/leg_studies.py, exports/leg/fea/summary.json, exports/body/leg-loads.json, exports/body/fea/* | every rig case under 120 N m; every leg and body study passes its target (D39, D56) or carries a dated note; the shaft at SF >= 1.5 on yield in the capped jump's landing with the measured hardness; wheel_link R1w >= 1.2 |
| W4 | **The full robot with the new wheel.** sim/robot_v2.py: the wheel from the catalog, `H_RANGE` for the new skid contact (119 mm leg) and a standing height choice (259 mm leg for today's hip height, or 300 mm: pick, record); the designer's wheel; tools/simulate.py --v2 all scenarios plus kerb 35 mm at 0.6 m/s; the push and slope scenarios with the taller stance. Mass ledger at the measured wheel mass against the 35.0 kg gate. | sim/robot_v2.py, cad/body_layout.py, exports/body/mass.json, exports/body/sim-v2.json, designer/ | every scenario passes at the ledger's mass (or a dated note each); kerb 35 mm passes; the ledger <= 35.0 kg with the levers' status listed; mass_reconciles true |
| W5 | **Hall-only wheel speed in the balance loop.** sim/controller_v2.py reads a wheel speed quantised to 4 deg mechanical (90 edges a turn) with a 2 ms tick and a first-order blend with the commanded torque; stand, push, drive, slope re-run. If a scenario fails: the AS5047P bracket (W7) moves into v1. | sim/controller_v2.py, firmware/balance/ (the estimator), exports/body/sim-v2.json | stand and push pass with the quantised speed; the estimator's design in firmware/balance/README with the blend's time constant |
| W6 | **Bench: one wheel on a 75100.** VESC Tool set-up (FOC, halls, 15 pp, 30 A, regen -15 A, ERPM 15,000), hall detection, the drill-test Kv against VESC Tool's; torque against current at stall (a bar and a scale: Kt); phase-short brake torque at 1 m/s; the handbrake hold; clamp slip test at 2 x the peak axle moment; the stator temperature at 10 A for 20 min; the tyre's stiffness at 25/30/35/40 psi (the leg plan's bench test); a 40 mm puddle run after sealing (W8). | docs/wheel-bench-tests.md, exports/wheels/bench.json | each test's number recorded against the study's estimate (Kt 0.52, R 0.18, k 67 N/mm at 35 psi, 5.2 N m continuous) with a pass/fail and the sim re-run where it differs by more than 20 % |
| W7 | **Encoder upgrade (only if W5 or P1 asks).** AS5047P on the 75100's ENC port, a 6 x 2.5 mm diametric magnet on the rotor's outer cover, a printed arm and shroud from the foot; or an off-axis ring on the inner cover. | cad/fivebar.py (the arm), catalog/electronics.json, firmware | the VESC reads 14-bit position at standstill; the balance sim's quantisation step removed |
| W8 | **Sealing and connectors.** The hub's seal procedure (grease, silicone, lead exit, vent plug) written and done on both wheels; Deutsch DTP (phases) and DT (halls, NTC) at the wheel link's exit; the belly box's gasket, glands and vent; harness lengths in exports/leg/cables. | docs/wheel-change-plan.md (this file's section), docs/body-plan.md (belly box), catalog/connectors.json, exports/leg/cables | a 40 mm puddle run of 10 min with no water in the hub or the belly box; the connectors' part numbers and prices in the catalog |
| W9 | **Docs.** docs/body-plan.md (wheels, drivers' set-up, the belly box IP), docs/handoff.md, the build page (designer/build.html) with the new wheel, tyre, tube, clamp hardware and connectors; the user manual's envelope: 35-40 mm lips, 10 deg slopes, 40 mm puddles, no stairs. | docs/*, designer/build.html | the build page lists the wheel at its live price with two sellers; the envelope stated |

Order: W1 first (nothing is cut before the motor is measured); W2, W3 and W5 in parallel once W1's numbers are in;
W4 after W2; W6 as soon as a motor and a 75100 are on the bench; W7 only on demand; W8 with W6; W9 last.

## Open choices made here (change them in D69 if the main session disagrees)

- Standing leg length: 259 mm (today's hip height) is the default for the sim and the designer; 300 mm is the option
  for more ground clearance (181 mm) at a 41 mm taller stance.
- Tyre pressure: 30-35 psi (the landing loads rise 15 % at 50 psi).
- The mass gate: 35.0 kg as built; the 8.5 in backup if the ledger must stay under 34.5.
