W-01 · Xihelm, London · 2023–24
Cacao packing robot
Packing soft produce is still largely manual, because the hard part is not the handling — it is the judgement. Grading a truss, deciding where to cut it, and hitting a pack weight to the gram, fast enough to hold line rate.
Led by — Software integration engineer
Deployed at — Flavourfresh Salads
The brief, in numbers
- Concept to machine
- 9 months
- Gross profit margin
- 30%
- Target punnet weight
- 220 g ±10%
- Run average
- 220–240 g

How the line works
- 01
Bulk unload and truss detection
Trays arrive unprocessed and are tipped at the head of the line. A tilting table flips the tray and a vibrating table brings the trusses into single file. A colour-thresholding detector finds fruit on the moving bed and triggers the quality assurance service as each truss passes.
- 02
Quality assurance
The QA camera decides three things about every truss: whether the crop has split on it, how many tomatoes it carries, and how long it is. Trusses below standard are rejected. Those carrying fewer than three fruit are not rejected but reclassified as loose fruit, which the packing stage uses later. The measured length is what the next stage cuts against.
- 03
Cut planning and subdivision
Trusses too long for a punnet are subdivided, using the length measured at QA to decide where the cut should fall. This customer preferred two trusses per punnet, since they sit better in the tray.
- 04
Cutting
A damage-prevention camera feeds the cutter, so the blade takes only the vine and never a tomato.
- 05
Weighing
Each subdivided piece travels on and is weighed independently, one after the other. That weight is what every packing decision downstream is made against.
- 06
Punnet top-up
Two turntables hold eight punnets each. As each weighed truss arrives, the system decides which punnet it should go into so that the punnet lands closest to 220 g. Where a punnet is still short, up to three loose tomatoes — roughly 10 g each — top it up into spec. When a punnet reaches target the turntable indexes it out, and a robot arm sets an empty one in its place. Two turntables rather than one is what keeps the line moving: while one is being ejected and reloaded, the other is packing.
- 07
Denesting
Empty punnets are fed to the arm automatically from a stack, so the reset never waits on an operator.
- 08
Flow wrapping
Finished punnets run through a flow wrapper, which seals them in plastic and applies the label and date code.
- 09
Trayising
A robot arm takes the final weight, discards anything outside spec, and arranges compliant punnets into a tray ready for distribution. When the tray is full the operator is prompted to bring the next one.
How it's wired
- Digital I/O
- Brainboxes ED-588, driven from Python inside ROS
- Cameras
- GigE over Ethernet, which lifts the camera-count ceiling a USB controller imposes and allows task-specific lenses
- Scales
- RS232 into the Raspberry Pi, one weight per truss
- Motion
- Pi to Arduino over ROSserial, Arduino to the turntable controllers over I²C
- Host link
- TCP/IP between the PC and the Pi
On the line



Got a line that needs this?
Vision, motion and the mechanical side of a cell, under one roof. Half an hour is usually enough to say whether it's worth doing.