BDRLABVANCOUVER · 49.28°N
BDR-25-04Rev △3CLIENT◍ DELIVERED

GANTRY-3_

A materials lab was moving sample coupons between a furnace, a scale and a camera by hand, one coupon at a time, for runs that lasted nine hours. They wanted the moves automated without rewriting the Python they already trusted.

Repeatability
0.05 mm
dial indicator at nine points in the envelope, 30 returns each
X travel
900 mm
Pick cycle
3.40 s/pick
median of 500 picks, 180 mm move, median of the acceptance run
Build
39 d
Brief → Handover on site
Revision history
△3 · 10-02
Soft limits added on all three axes after a scripted move drove the gripper into the furnace door.
△2 · 09-17
Published the nine-point accuracy map, including the ±0.18 mm miss, in the handover pack.
△1 · 09-05
Z head rebuilt on two rails at 90 mm centres. Droop at full Y extension 0.30 mm → 0.02 mm.
FIG. 1 — BDR-25-04-AREV △3

BDR-25-04-A — reserved. Welded steel frame, ballscrews on X and Y. The frame is the accuracy argument, not the motors.

Spec — as measured
Position accuracy
0.18 mm · against gauge blocks at the same nine points, 270 moves total
Y travel
600 mm
Z travel
220 mm
Settle
120 ms · encoder, ±0.05 mm band, median of 500 moves
Payload
1.20 kg · calibrated masses at the worst-case Y extension
Parts
214
Machined here
22
Disciplines: MEC FAB ELE FRM CTL.
§01 · Brief

What we were asked for.

Sample coupons were being moved between a furnace, a scale and a camera by hand. The runs are nine hours long, the interesting part is at the end, and the person doing the moving was a graduate student who had to be in the room the whole time.

The constraint that shaped everything was not mechanical. They had years of Python that drives the furnace and logs the scale, and they were clear that a machine which required them to abandon it was worse than no machine.

§02 · Constraints

The targets, and what we actually hit.

Constraints set at kickoff for BDR-25-04, with the measured result and the method.
ConstraintTargetAchievedHow measured
Return repeatability± 0.05 mm± 0.05 mmdial indicator, nine points, 30 returns each
Absolute accuracy across the envelope± 0.10 mm± 0.18 mmMissedgauge blocks at nine points, uncompensated ballscrew pitch
Working envelope900 × 600 × 200 mm900 × 600 × 220 mmsoft limits, measured with a height gauge
Pick cycle< 4 s3.4 smedian of 500 picks over a 180 mm move
Driven from the lab’s existing PythonNo rewrite of their run scriptsFour function calls addedtheir nine-hour furnace script ran unmodified apart from the calls
Nine-hour unattended runNo interventionNo intervention, three consecutive runslogged on site during handover week

Targets were set at kickoff, before the first part was cut. A target we missed stays on the sheet with the number we actually got.

§03 · Mechanism

How it moves.

Ballscrews on X and Y, a belt on Z, on a welded steel frame rather than extrusion. Extrusion would have been three days faster and we would have spent those three days back on accuracy — a 900 mm extrusion span with a 1.2 kg load hanging off a Y carriage racks by more than our whole error budget.

The Z axis started as a belt and stayed a belt, but the head was rebuilt: the first version drooped 0.3 mm under payload at full extension because we cantilevered the gripper off one linear rail. The second version uses two rails 90 mm apart and the droop is gone.

FIG. 3.1 — BDR-25-04-BRESERVED
Z head, second version. Two rails at 90 mm centres in place of the cantilevered single rail.
§04 · Electronics

What it runs on.

Off-the-shelf closed-loop steppers and a controller we wrote, rather than a motion card. The reason is the interface: they needed a documented serial protocol they could call from Python, and every industrial controller we priced wanted its own language in the middle.

Electronics subsystems on BDR-25-04.
SubsystemSpecification
MotorsClosed-loop stepper, 1.8°, 1000 count encoder
DriveX and Y ballscrew 5 mm pitch, Z belt 2 mm pitch
ControllerSTM32F4, 8 kHz trajectory update
InterfaceSerial, documented, plus a 210-line Python client
GripperPneumatic, two-finger, 1.2 kg rated
HomingInductive, repeatable to 0.02 mm
§06 · Result

What it did.

Delivered in 39 days and accepted on a 500-pick run at 3.4 s per pick. Repeatability held at ±0.05 mm, which is the number that matters for returning a coupon to the same spot on the scale.

Absolute accuracy missed its target: ±0.18 mm against ±0.10 mm. The error is dominated by uncompensated ballscrew pitch and it is systematic, so we measured it at nine points, gave them the map, and told them a compensation table would close most of it in an afternoon. They decided repeatability was what they actually needed and did not want to pay for the afternoon. We think they were right.

39 d8 d9 d8 d11 d3 dBrief2025-08-11Frame up, axes dry2025-08-19All three axes under closed loop2025-08-28Python client talking to the controller2025-09-05Acceptance run, 500 picks2025-09-16Handover on site2025-09-19 — two days, both of us

Elapsed days between recorded milestones, drawn to scale from the dates. The overall dimension runs from the brief to the last entry.

§07 · Revisions

What changed since.

Revision history for sheet BDR-25-04.
RevDateChangeBy
△32025-10-02Soft limits added on all three axes after a scripted move drove the gripper into the furnace door.RM
△22025-09-17Published the nine-point accuracy map, including the ±0.18 mm miss, in the handover pack.RM
△12025-09-05Z head rebuilt on two rails at 90 mm centres. Droop at full Y extension 0.30 mm → 0.02 mm.DZ

What we would do next

Ship the pitch compensation table as part of commissioning rather than as an option. It costs one measurement pass and it would have made the accuracy row read as a hit.

The pneumatic gripper needs shop air, which meant running a line across their lab. An electric gripper is heavier and slower and we would take it, to delete the hose.

We would build the Python client first and the machine second. It was the risk in the brief and it was the last thing we wrote.

§08 · Record

Who built it, and when.

Record — as filed
Entry
CLIENT
Client
A university materials lab, six people, publicly funded — named parts withheld under NDA
Status
◍ DELIVERED
Brief
2025-08-11
Demo
2025-09-19
Elapsed
39 d
Built by
DZ, RM
Disciplines on this sheet
MEC
Mechanical design
FAB
Fabrication and finishing
ELE
Electronics and PCB
FRM
Firmware
CTL
Controls and motion
MEC · FAB · ELE · FRM · CTL
§09 · Commission

Send us the thing that is not working.

We built GANTRY-3 in 39 days, brief to demo. Send us the problem you have and we will tell you what it takes.
Send us the problem →
Sheet BDR-25-04 · Rev △3 · 2025-10-02