Six disciplines.
6 disciplines, one room, and a set of machines whose specifications are printed below. Every claim on this page carries a number and an entry in the register that used it.
We model in Fusion 360 and design for the machines in the next room, which is the only reason a part can be drawn on Monday and measured on Wednesday. Interfaces that carry load or set a datum get a tolerance stack done by hand — worst case first, then RSS — and anything that has to stay stiff gets a static and modal check before it is cut.
Three-axis milling with a fourth-axis rotary, abrasive water jet, a toolroom lathe, SLA and FDM. Delrin and 6061 are what we cut most: Delrin because a prototype bearing block can be on the machine forty minutes after the CAD locks, 6061 because that is what the second one is made of.
KiCad for schematic and layout, two- and four-layer boards fabricated offshore and assembled here. We cut our own stencils, place by hand under a microscope and reflow on the bench, which makes a board spin a week rather than three and means a mistake costs a Sunday instead of a phase.
Bare-metal C on STM32 and RP2040, FreeRTOS when a project earns it, Zephyr when a client already runs one. The interrupt budget is written down before the code is, and anything that will not fit inside the control ISR moves to another processor rather than into the jitter.
Field-oriented control on the motors, cascaded current, velocity and position loops, and jerk-limited trajectories so a machine does not shake itself apart at the end of a move. System identification is a step response and a chirp fitted in NumPy; there is no Simulink here and there has not needed to be.
Global-shutter stereo calibrated here against a printed ChArUco target, and small single-class detectors trained on data we collect ourselves with our own rigs. We quantise to INT8 and run on device, because a perception loop that needs a desktop GPU is not a machine, it is a video of a machine.
What we can make, and to what tolerance
The disciplines are separated here because a table needs columns. In practice one person owns a mechanism from the tolerance stack through to the settling time, because the handoff between a mechanical drawing and a control loop is where most hardware schedules go to die.
Nothing below is a partnership, a network or a fabrication contact. If it is on this page, it happens here, and the person who quoted it is the person who cuts it.
MEC — Mechanical design
Most of what we draw is 6061, Delrin and printed PETG. Press fits are specified against hole sizes measured off our own mill rather than off a chart, because the chart is right about a machine we do not own.
| PROCESS | WORKING SPEC | TOOLS AND MATERIALS |
|---|---|---|
| Parametric assembly modelling | ≤ 600 parts | Fusion 360, imported STEP and Parasolid |
| Tolerance stack-up on machined interfaces | ± 0.05 mm | By hand, worst case and RSS |
| Static and modal FEA | ≥ 4 × loop bandwidth | Fusion simulation, hand-checked |
| Bearing selection and preload | 0.02 mm axial play | Thin-section and crossed-roller |
| Design for our own CAM | ≥ 3 mm internal radius | Fusion CAM, our post processor |
FAB — Fabrication and finishing
Deburr, tap and bead blast happen here. Anodising and plating go out. We do not paint a demonstrator that has to be opened twice a day — bare aluminium takes the abuse and shows the wear, which is information.
| PROCESS | WORKING SPEC | TOOLS AND MATERIALS |
|---|---|---|
| 3-axis milling, 4th-axis rotary | ± 0.05 mm | 6061, Delrin, brass, mild steel |
| Abrasive water jet | ± 0.10 mm | Plate stock, brackets, motor plates |
| Turning and boring | ± 0.02 mm | Toolroom lathe, collet and 4-jaw |
| SLA | 25 µm layers | Jigs, optical mounts, fit checks |
| FDM | 0.10 mm layers | PETG, ABS, PC — PLA for mock-ups only |
| Tapping and heat-set inserts | M2 – M8 | Hand and machine tap, printed bosses |
ELE — Electronics and PCB
Power stages get laid out before the connectors do: gate drive loop, shunt placement and thermal path first, silkscreen last. Anything carrying more than a few amps is measured with a current probe on the bench before firmware is allowed near it.
| PROCESS | WORKING SPEC | TOOLS AND MATERIALS |
|---|---|---|
| Schematic capture and 4-layer layout | 82 × 96 mm | KiCad 8, our own footprint library |
| Stencil, place and reflow | 0.4 mm pitch QFN | Benchtop reflow oven, stereo microscope |
| Hand rework | 0402 | Hot air, 0.2 mm tip, hot tweezers |
| Motor drive front end | 24 V, 15 A peak | Three-shunt FOC, isolated gate drive |
| Bring-up and power measurement | 200 MHz, 30 A | Scope, current probe, electronic load |
FRM — Firmware
We instrument first. Every loop we ship toggles a pin, so the period and its jitter are read off a logic analyzer rather than inferred from how the machine behaves.
| PROCESS | WORKING SPEC | TOOLS AND MATERIALS |
|---|---|---|
| Control ISR | 20 kHz, ± 2 µs | STM32G4, timer-triggered ADC, DMA |
| CAN and framed serial transport | 1 Mbit | Classic CAN, COBS-framed UART |
| USB HID and composite devices | 1 kHz | RP2040, TinyUSB, QMK fork |
| Field update over the bus | < 20 s | Dual-bank, CRC-checked, no bricking path |
| Timing verification | 500 MSa/s | Logic analyzer on a toggled pin |
CTL — Controls and motion
State estimation is a complementary filter until it stops being enough, then an EKF. We publish loop rates and measured settling times because those are the numbers that decide whether a mechanism works, and they are the first thing worth asking any shop for.
| PROCESS | WORKING SPEC | TOOLS AND MATERIALS |
|---|---|---|
| Field-oriented current control | 20 kHz | Three-shunt, sensored and sensorless |
| Velocity and position loops | 1 kHz | Cascaded PID with feed-forward |
| Trajectory generation | 3rd order | On target, no host in the loop |
| System identification | 0.1 – 500 Hz | Step and chirp, fitted in NumPy |
| Balancing and settle tuning | ± 20 mm | LQR on a measured model |
CV — Perception and learned models
ROS 2 when a client already runs it, plain C++ or Python nodes when they do not. Most of what makes a perception loop fast is not the detector — it is the capture path, the hardware sync, and deciding to do the geometry in forty lines of math instead of learning it.
| PROCESS | WORKING SPEC | TOOLS AND MATERIALS |
|---|---|---|
| Stereo calibration | 180 mm, < 0.3 px | OpenCV, printed ChArUco target |
| Hardware-synchronised capture | 120 fps, 1440 × 1080 | Global shutter, external trigger |
| Detector training and quantisation | INT8 | PyTorch, TensorRT, Jetson Orin |
| Dataset collection and labelling | 2 d | Our rigs, our labels, our lighting |
| ROS 2 integration | < 5 ms | Humble and Jazzy, DDS tuned |
The machines, and what they actually hold
The last column is the one worth reading. A manufacturer figure is the number on the datasheet and we have not re-verified it; a measured figure is one we checked on the granite plate and can show you the readings for. The tolerances we quote on work are the measured ones, which are looser.
| MACHINE | CAPACITY | STATED PERFORMANCE | WHERE THE FIGURE COMES FROM |
|---|---|---|---|
| Vertical mill, 3-axis with 4th-axis rotary | 460 × 250 × 400 mm | ± 0.013 mm repeatability | Manufacturer |
| Abrasive water jet | 1200 × 1200 mm | 25 mm mild steel | Manufacturer |
| Toolroom lathe | 300 mm swing, 700 mm centres | ± 0.02 mm on diameter | Measured here |
| SLA printer | 145 × 145 × 185 mm | 25 µm layers, 50 µm XY | Manufacturer |
| FDM printers, two | 256 × 256 × 256 mm | 0.4 mm nozzle, 0.10 mm layers | Manufacturer |
| Benchtop reflow oven | 340 × 340 mm board | 0.4 mm pitch QFN, leadless | Measured here |
| Hot-air rework and stereo microscope | 0402 and larger | 7 – 45 × | Manufacturer |
| Oscilloscope with current probe | 4 channels | 200 MHz, 2 GSa/s | Manufacturer |
| Logic analyzer | 8 channels | 500 MSa/s | Manufacturer |
| Motor dynamometer, built here | 1.5 kW, 6000 rpm | ± 2 % torque | Measured here |
| Granite plate and dial indicator | 600 × 400 mm | ± 0.002 mm | Measured here |
Ways to work with us
There is no account manager and no delivery lead. The person who answers your first email is the person holding the calipers, and that is the whole reason the durations in the top row are short.
| TERM | SCOPING STUDY | BUILD SPRINT | EMBEDDED |
|---|---|---|---|
| Duration | 1–2 weeks | 3–8 weeks typical | Monthly, minimum one day a week |
| Fee basis | Fixed, quoted up front | Fixed fee per phase, invoiced monthly | Day rate |
| What you receive |
|
|
|
| What we need | Whatever you already have — CAD, a broken prototype, a napkin. | A weekly hour, and someone who can make decisions. | Repository access and a seat in your standup. |
| Who you talk to | The engineer who writes it. | The two or three people building it. | Whoever is embedded. |
Who owns what
What we are good for
And what we are not
This list is not modesty. Each line is work we have either done badly or watched a shop our size do badly, and we would rather lose the enquiry than the quarter.