Multi Roomba Rover
a remake of my RoombaRover project with a decentralized and embedded approach supports multiple roombas
on each roomba:
- a raspberry pi zero 2 w
- a raspberry pi camera
- roomba's serial port hooked up to the built in serial port on the raspberry pi
pi provisioning:
- enable serial port
- disable wifi powersave
- disable bluetooth
Repo layout
pi/roverd: tiny Go daemon that bridges the Create 2 serial port, BRC pin, and the control server via WebSockets.server: Node.js process that terminates rover sockets, relays commands to/from the Socket.IO UI, and servespublic/.pi/systemd/pi/mediamtx: ready-to-drop systemd units and a minimal mediaMTX config for WebRTC publishing (roverd can optionally supervise the mediamtx service).docs/pi-deployment.md: per-rover build + install instructions (cross-compiling on Fedora 43, deploying roverd + mediaMTX).
Quick start
# build the Pi agent (armv7)
cd pi/roverd
mkdir -p ../../dist
make pi-build
# start the server + UI
cd ../../server
npm install
npm run start
Deploy a rover by copying the repo + dist/roverd to the Pi and running the helper (it will also fetch mediaMTX when --mediamtx is set):
cd ~/MultiRoombaRover
sudo ./pi/install_roverd.sh --mediamtx
Then point each rover's /etc/roverd.yaml at ws://<server>:8080/rover, enable the sensor stream from the UI, and drive with WASD.
Use the “Restart Camera” button if you enable media management so roverd can bounce the mediamtx service remotely.
Heads-up: the BRC pulser currently hits /sys/class/gpio/export, so the service needs root privileges on Raspberry Pi OS. Until it’s switched to libgpiod, set brc.gpioPin: -1 if you prefer to run unprivileged (the Create will then nap unless something else keeps it awake).