MACHINE LEARNING · IOT
E-Rain Inc.

Self-calibrating obstacle detection for a manufacturing line

Built the machine-learning layer that turns raw plant-floor sensor signals into a trustworthy warning, and replaced per-sensor manual tuning with calibration that runs itself and reports its own drift.

Context

A hardware startup had a working obstacle-detection device for manufacturing lines but no way to decide what its sensors were actually seeing. Specular multipath off steel guarding, vibration, particulate, and the machinery's own motion meant threshold-based detection produced a nuisance rate high enough that plants would bypass the device. Worse, every unit had to be threshold-tuned by hand at commissioning, and those settings went stale the first time the line was reconfigured — silently.

Constraint

The model had to run inside the existing hardware's compute and latency budget — no cloud round-trip in the warning path — no labelled data existed, so building the dataset was on the critical path, and calibration had to be unattended and field-team installable. The system is a warning layer and is not a certified functional-safety device: it sits alongside the line's light curtains, interlocks and safety PLC, and replaces none of them.

Approach

We built a labelled dataset from instrumented recording sessions across multiple live lines, then classified on temporal signatures over sliding windows rather than instantaneous readings — approach velocity, reflected-energy evolution, occupancy persistence, and the periodicity that separates a robot arm from a person. Class weighting encoded the real asymmetry: a nuisance alarm costs more than a borderline miss, because it is what gets the device switched off. On top of that we built a calibration that learns each unit's scene at commissioning, keeps that baseline current as the line changes, and escalates when it has drifted too far to absorb.

What shipped

A trained classifier running within the device's compute envelope, unattended per-sensor calibration with continuous baseline re-estimation and explicit drift alerting, a labelled dataset the client owns, and a re-runnable evaluation harness with line-disjoint splits and a standing dead-zone probe.

What didn't go to plan

Our self-calibration worked too well. Anything stationary for the length of the learning window was absorbed into the permanent-structure model — correct for a guard rail, dangerous for a worker standing at a station, who the unit learned into the background and went blind to. Line-disjoint testing caught it, not inspection. We rebuilt it with a two-timescale background model, evidence-based promotion instead of dwell time alone, and hazard apertures excluded from absorption by construction, then added a standing dead-zone probe to the evaluation harness. It cost roughly a week against the timeline, and we raised it the day the test showed it.

Measured outcome
Manual → unattended
per-sensor commissioning, replacing hand-tuned thresholds that went stale silently on the first line change
Industry

Industrial automation / worker safety, Canada

Stack
PythonGradient-boosted modelsSciPy signal processingEdge inference
Duration

6 weeks

Engagement

Fixed-scope sprint

Contact

Have a system worth building right?

Start a project →