BDRLABVANCOUVER · 49.28°N
BDR-26-04Rev △4INTERNAL● SHIPPED

TRASHCAN-CV_

A two-wheeled bin that watches the room, fits a ballistic trajectory to anything thrown toward it, and drives to the landing point before the object gets there.

Catch rate
84%
n = 250 throws, nine people, indoor, mixed lighting
Loop latency
41 ms
frame capture to motor command, median of 1000 cycles
Top speed
2.4 m/s
loaded, on vinyl tile
Build
31 d
Brief → Unattended 100-throw run
Revision history
△4 · 04-19
Reprinted the camera mast in PETG after two PLA masts crept in sunlight.
△3 · 04-08
Ballistic fit window 120 ms → 90 ms. Catch rate 79% → 84%.
△2 · 03-29
Moved the vision loop off the G4 onto the Orin. Steering wobble gone.
△1 · 03-25
Lid: servo flap → torsion spring with solenoid release. Commit point moved 200 ms later.
FIG. 1 — BDR-26-04-A · drag to orbitREV △4
Spec — as measured
Latency, p99
58 ms · same 1000 cycles
Mass
9.60 kg · scale, n=1
Parts
412
Machined here
38
Height
975 mm
Wheelbase
340 mm
Flight time
700 ms · 3 m throw, typical
Impact error
80 mm · predicted vs actual at 3 m, RMS over 250 throws
Disciplines: MEC FAB ELE FRM CTL CV — all six, one room.
§01 · Brief

What we were asked for.

We wanted a demonstrator that forced perception and motion to agree in real time, on a machine that fails visibly when it gets it wrong. A bin that catches thrown rubbish is unforgiving in a useful way: the object is in the air for about 700 ms, the answer has to be right the first time, and everyone in the room can see whether it worked.

The internal brief was one sentence and one number: catch a thrown object more often than not, from anywhere in a 4 × 4 m room, in under six weeks.

§02 · Constraints

The targets, and what we actually hit.

Constraints set at kickoff for BDR-26-04, with the measured result and the method.
ConstraintTargetAchievedHow measured
Detect-to-command budget< 50 ms41 mstimestamped at capture and at CAN frame, median of 1000
Arc needed for a usable fit≤ 100 ms90 msfit residual vs window length, swept offline
Traverse 1 m and settle< 350 ms380 msMissedencoder, settle band ±20 mm
Predicted impact error at 3 m± 120 mm± 80 mmmotion capture ground truth, n = 250
Mass< 12 kg9.6 kgscale
Runtime> 20 min continuous22 minfull-speed duty cycle to pack cutoff

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.

Two direct-drive hub motors, differential steering, and no casters — a caster at 2.4 m/s with a hard stop puts the whole mass into a shimmy we could not tune out. Instead the bin is a statically unstable two-wheeler held upright by the controller, which cost us a week of firmware and bought back 300 g and about 40 ms of settling time.

The lid is the part we got wrong twice. The first version was a servo-driven flap that had to be open before the object arrived, which meant committing to a catch 200 ms earlier than we wanted. The second used a torsion-spring lid released by a solenoid: 60 ms to fully open, no commitment until the last moment. That is the version in the drawing.

FIG. 3.1 — BDR-26-04-BRESERVED
Drive module, exploded. 14:1 planetary, thin-section bearing, printed cage.
§04 · Electronics

What it runs on.

One 4-layer board, 82 × 96 mm, carrying a dual field-oriented-control stage and the power tree. We split vision and control deliberately: an Orin Nano runs the detector, an STM32G4 closes the motion loop at 20 kHz, and they talk over CAN at 1 Mbit.

Putting the loop on the same processor as the model was tried and abandoned in week two — inference jitter was showing up as steering wobble.

Electronics subsystems on BDR-26-04.
SubsystemSpecification
Board4-layer, 82 × 96 mm, 2 spins
MCUSTM32G474, 170 MHz
Motor driveDual FOC, 20 kHz, 24 V, 15 A peak
ComputeJetson Orin Nano 8 GB
LinkCAN, 1 Mbit
Pack6S 3000 mAh, 22 min continuous
Bring-up to first spin4 days
§05 · Perception

How it sees.

Two global-shutter mono cameras at 120 fps, 1440 × 1080, baseline 180 mm, hard-synced. Rolling shutter was never an option: at 8 m/s a rolling sensor smears the object across enough rows to move the centroid by more than our capture window.

Detection is a small single-class detector trained on 11,000 frames we collected ourselves over two days with a throwing rig, quantised to INT8 and running at 120 fps with 9 ms of headroom. It only has to find one thing: an object in flight. Everything else — trajectory, impact point, whether to commit — is a ballistic fit over the first 90 ms with drag ignored, which is wrong in principle and accurate to ±80 mm in the room we care about.

Perception benchmarks for BDR-26-04, with method, conditions and sample size.
MetricValueMethodConditionsSample
Detector throughput120 fpsINT8, on-deviceOrin Nano, 1440×1080 mono, 9 ms headroom
Detection recall, in flight0.97held-out seteven lightingn = 1,400 frames
Detection recall, backlit0.81held-out setobject against a windown = 380 frames
Commit decision time90 ms after releaseballistic fit over first 90 msdrag ignored

Where it fails

  1. Backlit throws against a window: the detector loses the object about one throw in eight.
  2. Objects with lift — paper plates, flat lids — break the ballistic assumption entirely. We do not attempt them.
  3. Throws with an arc under 1.2 m arrive before the 90 ms fit window closes.
  4. Two objects in the air at once: it commits to the first and ignores the second.
§06 · Result

What it did.

250 recorded throws by nine people who were told to try to beat it. 210 caught. Of the 40 misses, 23 were the backlit-window case, 9 were objects with lift, and 8 were genuinely bad predictions.

It ran 100 throws unattended with three misses, which is the run we consider the deliverable. The traverse-and-settle target was missed by 30 ms and we left it missed — closing it means either more torque or less mass, and both were the wrong trade for a demonstrator.

FIG. 6.1 — BDR-26-04-CRESERVED
Reserved. Bench footage of the unattended 100-throw run.
31 d4 d7 d5 d7 d8 dBrief2026-03-02First drive test2026-03-06 — no lid, no visionDetector at 120 fps2026-03-13 — on the benchFirst catch2026-03-18Lid v2, torsion spring2026-03-25Unattended 100-throw run2026-04-02

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-26-04.
RevDateChangeBy
△42026-04-19Reprinted the camera mast in PETG after two PLA masts crept in sunlight.RM
△32026-04-08Ballistic fit window 120 ms → 90 ms. Catch rate 79% → 84%.RM
△22026-03-29Moved the vision loop off the G4 onto the Orin. Steering wobble gone.DZ
△12026-03-25Lid: servo flap → torsion spring with solenoid release. Commit point moved 200 ms later.DZ

What we would do next

The backlit failure is a sensor problem, not a model problem. We would put an IR-pass filter and an 850 nm illuminator on it before touching the training set again.

The single-object limitation is a tracker we did not write. A simple IOU tracker with a two-object cap is about a day.

We would move the ballistic fit off the Orin entirely. The whole prediction is forty lines of math and it does not need a GPU.

§08 · Record

Who built it, and when.

Record — as filed
Entry
INTERNAL
Status
● SHIPPED
Brief
2026-03-02
Demo
2026-04-02
Elapsed
31 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
CV
Perception and learned models
MEC · FAB · ELE · FRM · CTL · CV
§09 · Commission

Send us the thing that is not working.

We built TRASHCAN-CV in 31 days, brief to demo. Send us the problem you have and we will tell you what it takes.
Send us the problem →
Sheet BDR-26-04 · Rev △4 · 2026-04-19