# MB01 - modular two-wheel robot base

**Revision 0.1 is a hardware packaging prototype. It is not a purchase or manufacturing release.**
The motors are currently a sourcing hold, bought parts are simplified envelopes,
and wiring / PCB design are intentionally deferred. The display belongs to the
removable upper body, not to the common base.

## Files to review

Generated files are in `../../outputs/modular_base/`:

- `MB01_complete_assembly.step`: named, coloured solids for the base and upper hardware carrier.
- `MB01_common_base.step`: base alone, including electronics and drive hardware.
- `MB01_complete_assembly.FCStd`: FreeCAD document with named components, descriptions and dimensions.
- `MB01_review.blend`: editable Blender scene, model in metres, studio and camera.
- `parts/`: individual STEP files and STL files at their assembly coordinates.
- `print/`: only the authored printable parts, centred on the build plate with minimum Z = 0.
- `01_base_perspective.png`, `02_base_rear.png`: outside views.
- `03_base_open.png`, `04_drivetrain.png`: component packaging and lower drive system.
- `05_complete_hardware.png`: upper display, shoulder servos and audio carrier.
- `06_base_exploded.png`: common base service layers.
- `manifest.json`, `validation.json`, `export_validation.json`, `freecad_validation.json`: verification.

FreeCAD contains imported B-reps, **not** an editable sketch/feature history or
kinematic assembly constraints. The parametric master is `build.py`, with readable
parameters and placement coordinates. STL is not the source of truth.

## Geometry and architecture

| Property | Current design |
| --- | --- |
| Footprint including drive wheels | 98 mm long x 49 mm wide |
| Base shell roof / hidden key tips above floor | 57.5 / 61.3 mm |
| Complete generic upper carrier height | 125.4 mm |
| Drive wheels | 36 mm diameter, 4 mm TPU tread width |
| Axle / caster coordinates | Axle Y +18, Z 18; rear caster Y -38 |
| Ground clearance | 3 mm nominal beneath shell; wheels and caster touch Z 0 |
| External corner treatment | 12 mm plan radius, 0.9 mm shell edge fillet |
| Wall and floor thickness | Nominal 2.0 mm wall / 1.8 mm floor |
| Body interface | Four M2 positions, 32 x 44 mm pattern |
| Alignment | Asymmetric 4 mm and 3 mm diameter keys; 0.25 mm radial socket clearance |
| Connector reservation | 12 x 8 mm opening, mating connector not selected |

Coordinates: X is left/right, +Y is forward, Z is up, all dimensions in mm.
The rear ball caster leaves the forward face available for an optional distance
sensor and the tail available for the charger. Neither front nor rear caster is
universally more stable; this placement is justified by the current component layout.

The shell is an elongated rounded oval rather than a 100 mm circular donut because
the 50 mm maximum width remains a firm requirement. The reference informed the
covered drive arrangement, rounded enclosure and hidden body dock. This first
packaging version is taller than the reference. A compact carrier PCB may reduce
the board-stack height later, but that reduction has not been demonstrated.

## Hardware placement

| Layer | Contents and reason |
| --- | --- |
| Lower drive bay | Two Pololu 1124 right-angle motor envelopes on their sides; their length runs fore/aft, preserving the narrow footprint |
| Rear lower bay | Pololu 950 ball caster, USB-C charger above it, boost converter in tail recess |
| Middle, Z 34-39 | Protected 1200 mAh battery, low in the assembly, on a removable tray |
| Deck, Z 43.5-53.5 | XIAO ESP32-S3 Plus, DRV8833, LSM6DS3TR-C IMU, MAX98357A amplifier |
| Forward wall | Optional VL53L0X module behind an uncovered optical aperture |
| Removable upper carrier | ST7789 display, two SG92R-class servos, SPH0645 microphone and 30 x 20 mm speaker |

The shoulder servos are staggered fore/aft by 18 mm so their horizontal output axes
can point outward without the two housings overlapping. This is a deliberate
packaging compromise, not a final arm design. Arm links, travel envelopes, servo
mounting holes and the character body need their own iteration. The carrier is a
generic review fixture, not a cosmetic body. Screen eyes in the renders are display
graphics only and have no mechanical role.

## Mounting, assembly and printing

The top shell and bottom shell separate at Z 30.5/30.7. Four underside M2 case
fasteners locate at X +/-19, Y +/-40. Pilot bores are nominal 1.7 mm; case clearance
bores are 2.3 mm. Final screw lengths, thread engagement and printed hole allowance
must be verified on a coupon. Four hidden M2 body screws hold the adapter; removing
the body does not require opening the electronics enclosure.

Proposed assembly order:

1. Fit caster and motors into the lower shell; test motor clamp retention.
2. Fit wheel hubs and TPU tires; confirm free rotation and floor contact.
3. Install rear charger/boost modules, then battery tray and battery with soft padding/strap.
4. Populate the slotted electronics deck, install top shell, then close the case from below.
5. Attach the keyed upper adapter/carrier and connect the future keyed body connector.

Trays have adjustable slots, not tight PCB pockets. Board standoffs, adhesive pads
or clips, upper servo brackets and the boost converter fastening remain fit-development
items. The simplified electronics blocks include height allowances but no connector
or wire bend volumes. They should not be printed as functional electronic parts.

Use PLA/PETG for fit studies, with TPU for tires. The supplied print STLs have their
bottom at Z 0; wheel axes are rotated vertical. The top shell may print better inverted
with supports for dock details; motor bridge clamps should be oriented for useful
layer strength. Slicing/orientation/supports are not validated. The tire/hub has
0.15 mm intentional radial interference; actual material and printer determine grip.
Do not force a tight hub onto a gearbox shaft. Pouch cells must not be rigidly compressed.

## Verification and open decisions

The source checks each part for valid single-solid geometry and reports all pairwise
solid intersections. The two tire-to-hub press-fit volumes are intentional. A separate
check reimports the STEP assembly, verifies its dimensions/solid count, checks wheel
rotation against both shells at 12 positions, tests dock holes/key clearance and
confirms the three contact surfaces share a floor plane. FreeCAD separately verifies
each STEP volume and reopens its saved document.

The mass / centre of gravity / tipping figures are **illustrative estimates**. They
exclude real wiring, connectors, fasteners, arms and the final character. No payload
rating, speed limit, dynamic stability, motor torque margin or traction rating is
established. Future bodies must respect a measured centre-of-gravity and mass envelope.

Before manufacturing release:

- Resolve motor supply. Pololu 1124 is a geometry reference with no confirmed stock.
  Another motor can require a mount, wheel, power and enclosure redesign.
- Measure purchased components, especially motor flange/shaft, caster, servo ears/horns,
  display thickness, USB ports and board connectors. Downloaded vendor outlines are references.
- Complete current budgeting and power architecture. Battery 258 is a packaging candidate;
  simultaneous actuator stalls exceed the assumed safe power budget. No runtime claim is made.
- The Adafruit 4410 charger is not a power-path controller. This prototype charges only
  with robot loads disconnected/OFF; do not parallel its charger with the XIAO charger.
- Select the body connector, exact fasteners and retention details; design wiring/PCB.
- Provide acoustic paths for microphone and speaker, antenna clearance and thermal assessment.
- Print fit coupons before a complete enclosure, then test real three-point support.

## Rebuild

From the `cad/` directory:

```bash
./bin/cad build models/modular_base/build.py
./bin/cad build models/modular_base/verify.py
./bin/cad freecad-run models/modular_base/freecad_assembly.py
./bin/cad blender-run models/modular_base/render.py
```

The priced BOM is `../../output/pdf/modular_robot_bom.pdf`, with JSON and CSV in
`../../outputs/bom/`. It distinguishes source prices from project allowances and
marks procurement/electrical holds. All prices and component selections are provisional.

## Sources

Component purchase links and dimension provenance are in the BOM. Principal mechanical
references are the [Pololu motor dimension drawing](https://www.pololu.com/file/0J822/mini-plastic-gearmotor-90-degree-dimension-diagram.pdf),
[caster 950](https://www.pololu.com/product/950),
[battery 258](https://www.adafruit.com/product/258) and
[Waveshare 1.3-inch display](https://www.waveshare.com/product/displays/lcd-oled/1.3inch-lcd-module.htm).
No Otto geometry or code has been copied into this model; its modular concept was a reference.
