# Fleet RL

WEIRD Lab · Sep 2026 – present
Tools: Python, OpenCV, AprilTags, SO-101
Page: https://ericjgoossen.com/projects/fleet-rl/
Links: [GitHub](https://github.com/knightnemo/fleet_so101_infra)

Summary: Twelve low-cost robot arms learning one task together, with resets that need no human.
Lines of code Eric wrote: 7,208 (the sum of the entries below)

![Panorama of the fleet lab, with orange and blue low-cost robot arms at workstations along three walls, each under an aluminium frame holding its cameras, and a desk with a monitor in the foreground](https://ericjgoossen.com/projects/fleet-rl/images/fleet-panorama.jpg)

## Overview

We're building a system in which twelve robot arms with diverse embodiments learn together: every arm's experience trains one shared policy. With the arms learning from each other, we expect more than a twelvefold improvement over a single arm. Online reinforcement learning only works if the arms can keep practising without a person resetting every trial, so my part so far is the automatic reset.

## Entries (1, newest first)

### Resetting the peg without a person (featured)

Date: 2026-10-01 · URL: https://ericjgoossen.com/projects/fleet-rl/#automatic-reset
Summary: A reset that finds the peg with AprilTags, plans a pick and place, and puts it back, so the arms can run online RL without a person.
Lines of code Eric wrote: 7,208 | Language: Python | Tools: AprilTags, MuJoCo | Hardware: SO-101 arm | Role: Lead | Status: On the robot
Skills: Robot learning, Motion planning, Python
Links: [Code](https://github.com/knightnemo/fleet_so101_infra/tree/7aa4d7f)

In online RL an arm practises a task over and over, so after every try something has to put the peg back where the task starts. I built that reset for the peg-insertion task. A teammate and I designed the tagging together, and they wrote the code that reads it: ten AprilTags on the peg's faces, from which the scene camera solves the peg's full pose. I calibrated each camera with a ChArUco board, first its lens (the intrinsics), then its pose relative to the arm (the extrinsics). For the second, a calibration script has the arm set the tagged peg down at a grid of spots on the board and fits the arm's joint zeros and the camera's pose to where the arm thought the peg was against where the camera saw it. With that, the reset finds the peg anywhere in the workspace, works out how it is lying, and plans every waypoint of the pick and the place before the arm moves, choosing the grasp the arm can reach with the least travel within its joint limits. It then checks where the peg landed. This lets the teammate's automatic success detection score each try, so the arms can run online RL on their own. The reset has run on a real arm; the clip shows the same planner in simulation.

Video: A simulated SO-101 arm on a dark table picks up an orange peg lying on its side in four different places, carries it to a marked spot, and stands it upright there
File: https://ericjgoossen.com/projects/fleet-rl/images/auto-reset-sim.mp4; still frame (an image you can view): https://ericjgoossen.com/projects/fleet-rl/images/auto-reset-sim.jpg
Caption: Four resets from four scrambled spots, planned by the reset code and shown in simulation at 2× speed.

![Four views of the square peg with a tag on the top, the bottom and two on each side face, numbered 0 to 9, with a red arrow marking each tag's top edge](https://ericjgoossen.com/projects/fleet-rl/images/peg-tag-guide.png)
Caption: Where the ten tags go on the peg.

