go back

fr8

@theo_michel42 and I spent three months at FR8 in Helsinki building a self-governed mini factory. It was inspired by Vending-Bench, and we wanted to see how well agents could orchestrate a physical process: talk to customers, schedule jobs on specific machines and handle real-life robot errors. We called it the Paperclip Factory.

hardware builds

Factory floors integrate multiple machines and robots into a single coherent system. We wanted to emulate a factory, but didn't have the budget to buy industrial equipment, so we built some of the hardware ourselves.

The first addition was simply a modified LeKiwi robot with a clip-on, 3D-printed cover to hold and transport boxes. It was controlled over ZMQ and used to transport parts between stations in the factory.

Afterwards, we built a delta robot and belt-driven linear gantry from scratch.

We had a bunch of NEMA 17 stepper motors available, so we used them as the brawn of the system. Cheap open-loop steppers can skip steps under load, so to protect the hardware we used 3:1 belt reductions that could slip if the arms hit their mechanical stops.

To let it pick parts, we added a stereo camera and YOLO model to locate objects in 3D. A host computer handled inverse kinematics and trajectory planning, then sent motion commands over serial to an ESP32. The ESP32 ran custom C++ firmware, built and flashed with PlatformIO, and generated STEP/DIR signals for four DRV8825 stepper drivers.

Sometimes the delta motors would lose torque entirely for a few seconds. We figured out that, despite using heatsinks, the DRV8825s were overheating. So we added a computer fan and made the system's control stack look like a PSU.

We used an ESP32 rather than a PLC with EtherCAT because we already had the parts and only needed to control four steppers and a gripper. The ESP32 gave us enough real-time control for local motion; a PLC/EtherCAT stack would've added cost and setup time without helping the experiment. For a production machine, we'd probably make the opposite trade-off for better diagnostics, maintainability and deterministic networking.

Finally, I spent some time building a simple PCB to reduce the wiring clutter and make the system more robust.

Besides our builds from scratch, we also wanted to control a Bambu Lab X1C 3D printer, so we built an MQTT/FTP wrapper around the unofficial bambulabs-api. It let an agent submit prints, track progress and surface errors from the machine.

bimanual assembly

The Makiina team were kind enough to lend us the first prototypes of their bimanual manipulators, making us their first external users. Their VR teleoperation setup provided low-latency retargeting, delta control and a fine-control mode, which let us collect precise demonstrations for assembly.

We split the task of assembling a Raspberry Pi into its case—the first task our factory would do—into four subtasks and compared Diffusion Policy, π0.5 and ACT on each one. We then chained the subtasks into a demo of the Makiina arms assembling a Raspberry Pi into its case.

agentic architecture

The system used a node-based agent architecture on top of MQTT, a lightweight pub/sub protocol often used to connect industrial devices and software. For the picker and transporter, a standalone factory_edge.py bridged the local controls with the factory's MQTT protocol. Each edge ran a deterministic state machine, published state and errors, and accepted commands.

The factory-level agent sat on top: it spoke with customers and translated their requests into jobs, while a rule-based orchestrator routed each step to the right machine. Machine-specific agents handled errors. The agents could make decisions in real time, but homing, motion and safety stayed inside the lower-level controllers.

experience

We let everyone at FR8 use the factory agent for a month to operate the 3D printer, and it delivered 70 prints with Theo and me as operators. We would've used the complete factory, but were highly time-limited.

We finished with live demonstrations at Fr8, then presented the factory to 250 investors. I shared the original build videos and notes in this thread.