E-Lab-SFSU

RoboCam 3.1

A Python desktop application for automated well-plate imaging, driving a 3D-printer motion stage and a scientific camera through a PySide6 GUI — from single-well calibration to timing-accurate, laser-stimulus-synced raw bursts.

CI status MIT License Python 3.10+

What it does

Dual motion backends

Marlin (USB/serial) and Klipper (Moonraker HTTP API), plus a full hardware simulation mode for testing without a printer attached.

Multi-camera support

Player One astronomy cameras, Raspberry Pi cameras (true raw Bayer burst via Picamera2), and generic USB webcams.

4-corner calibration

Bilinear interpolation from four physical corners generates the full well map automatically, with save/load JSON profiles.

Raw-burst capture

Max-rate, per-frame-timestamped sensor bursts with laser stimulus synced precisely within Pre/ON/Post phases.

Post-processing pipeline

Converts raw .npy bursts into per-frame PNGs, a timing-accurate VFR MKV, and a display-friendly MP4.

Headless CLI

python -m robocam <command> for hardware testing and scripted workflows without launching the GUI.

Get it

git clone https://github.com/E-Lab-SFSU/RoboCam3.1.git
cd RoboCam3.1
bash setup.sh
bash start_robocam.sh

Status & roadmap

StatusItem
Bug (open)Raw burst capture on the Pi camera (Picamera2 backend) needs investigation — the Player One backend path is unaffected and verified on real hardware.
UntestedKlipper motion backend is implemented but not yet run against real Klipper hardware — only Marlin verified end-to-end.
UntestedMotion Profiles tab — feed-rate/acceleration/jerk read/write is implemented for Marlin (Klipper has no gcode equivalent), but not yet validated on real hardware, only in simulate mode.
PendingZ-hop during experiment travel — collision risk if the lens is close to the plate walls.
PlannedTemperature control widgets.
PlannedExtruder as pump/dispenser.

Verified working on real hardware: Player One raw-burst capture (including laser-timed Pre/ON/Post runs), the Processing tab's batch conversion, lgpio-based laser control on Pi 5, udev USB auto-installer, and multi-camera enumeration.

Lineage

RoboCam 3.1 is the third rebuild of a platform that started as FlyCam (Esquerra Lab, SFSU) — the original idea of using a 3D printer as an imaging stage.
  1. FlyCam (Esquerra Lab, SFSU) — original concept
  2. screamuch/RoboCam — base implementation
  3. RoboCam-Suite / RoboCam-Suite2.0 — Tkinter, then a modular PySide6 rewrite
  4. RoboCam 3.1 (this repo) — fresh GUI, expanded camera support, Klipper support
See the full history for details.

Credits

RoboCam 3.1 was developed and is maintained by Leonard Chau, continuing work from RoboCam-Suite and RoboCam-Suite2.0, itself inspired by the Esquerra Lab's original FlyCam. The project now lives under the E-Lab-SFSU organization for ongoing lab use and maintenance.

RoboCam 3.1 is the imaging platform underneath StentorCam, a wider effort by the Esquerra Lab (E-Lab) at San Francisco State University with collaborators at UC Santa Cruz and Knox College, through the Center for Cellular Construction. See the full Team page for everyone involved.