Robotics · Machine tending in CNC machine shops
Breathing Room
A cobot machine-tending cell that recomputes its safety distance every control cycle, and shows what each safety strategy costs in parts per shift.
Overview
A simulated cobot loads a CNC machine from a two-position part drawer while an operator swaps the drawer, checks parts and works at the machine's control panel. Every 10 ms control cycle, the model measures the distance from the person's nearest tracked point to the robot's nearest point, and recomputes the protective separation distance after the ISO/TS 15066 speed-and-separation formula, using the stopping times and distances published by the maker of the cobot the model is sized after. The robot runs at the highest speed that keeps the person outside that distance, with an allowance for the time it takes to slow down. As the person comes closer, it slows and keeps working.
We ran one simulated 8-hour shift with 38 operator visits and compared two strategies on exactly the same visits. The first is a fixed stop zone around everywhere the robot moves during its task, sized following the ISO 13855 approach (S = K·T + C). The second is continuous speed scaling. With the fixed zone, every visit stopped the robot: 38 protective stops and 505 parts. With speed scaling, the robot ran slower for 34 minutes of the shift and stopped twice, both times on a fast reach, and made 530 parts. With nobody entering, the same cell makes 533.
This is a planning calculation, not a risk assessment, and no safety engineer has reviewed it. Sensor response time, detection capability and measurement uncertainty are stated assumptions, not datasheet values, and the operator's visits follow a modelled schedule. A different machining time, layout or sensor moves the numbers.
What we built
- A speed-and-separation engine. Each cycle it finds the nearest points between the tracked person (hand, chest, hips) and capsule models of the robot's links, and computes the required distance from the ISO/TS 15066 terms, with the published stopping data interpolated by speed.
- A stop-zone baseline: a static field around the robot's swept task envelope, sized S = K·T + C, with automatic restart one second after the field is clear.
- A cell model: a cobot arm with the published link lengths and joint speeds (simplified to four axes), a CNC machine cycle (45 s cut, door, chuck change), the robot program, and an operator schedule of drawer swaps, part checks and control-panel work.
- A 3D film rendered frame by frame from the engine's output. The dimension line, the required distance and the speed override on screen are computed values, not animation.
Tech stack
Python (NumPy) for the model and the simulated shift · three.js for the 3D scene · headless Chromium (Playwright) and ffmpeg for frame-exact video capture.
Numbers
| Number | How we measured it |
|---|---|
| 1,282 mm | required separation at full speed. Computed by the model from the maker's published stopping data (worst case of the three main joints, maximum payload, full extension) plus our stated sensor assumptions. |
| 530 vs 505 parts | in one simulated 8-hour shift: speed scaling vs the fixed stop zone, on the same 38 operator visits. The same cell makes 533 with no visits. |
| 2 vs 38 protective stops | in that same shift. |
Stopping data: Universal Robots UR10e User Manual (e-Series, software 5.6), Appendix A, "Stopping Time and Stopping Distance". Separation formula after ISO/TS 15066:2016; stop-zone sizing following the ISO 13855 approach.