Installation, a tour of the six GUI tabs, and the headless CLI. For deeper architecture notes, see the full README on GitHub.
Requires Python 3.10+. Raspberry Pi OS Bookworm is recommended, but any Linux system works.
git clone https://github.com/E-Lab-SFSU/RoboCam3.1.git
cd RoboCam3.1
bash setup.sh
Creates .venv (with --system-site-packages on a detected Raspberry Pi), installs requirements.txt, and — on a Pi — additionally installs lgpio, RPi.GPIO, and picamera2. Finishes by downloading and patching the Player One SDK (safe to skip if you don't have that camera). Windows: run setup.bat instead.
bash start_robocam.sh
start_robocam.bat on Windows.
New to a run? Read New well plate → calibration → experiment data first — it walks the tabs in the order you actually use them, instead of tab-by-tab reference order.
Reference for each tab individually. All tabs except Experiment are disabled while an experiment is running.
Scan and pick a camera (Player One, Picamera2, or OpenCV); configure the printer backend (Marlin serial or Klipper HTTP); configure the laser/GPIO output; watch live connection and homing status.
Read, tune, and save feed-rate (M203), acceleration (M201), and jerk (M205) on Marlin, with slow/medium/fast presets. Klipper has no gcode equivalent, so the tab shows "not supported" for that backend. Untested on real Marlin hardware so far.
Jog to the four physical corners of the well plate and click Set for each — the well map auto-generates once all four are set. Choose grid dimensions and scan pattern (Raster or Snake), then save the calibration as JSON. Quick Capture grabs a still or short raw burst directly from this tab.
Pick a calibration and capture mode (Image or Raw Burst, with optional laser stimulus split into Pre/ON/Post phases), select wells on the grid, and run. Auto-process can hand the finished output straight to the Processing tab.
Direct hardware control outside of an experiment: homing, stepper disable, jog pad, go-to by coordinate, manual laser toggle, and a raw G-code sender.
Batch-converts one or more experiment folders' .npy bursts into PNG image sequences and/or video (MP4 + VFR MKV), with per-well and overall progress.
Test hardware or script workflows without launching the GUI:
source .venv/bin/activate
python -m robocam status
python -m robocam motion pos
python -m robocam motion home
python -m robocam motion move --x 50 --y 50
python -m robocam motion gcode G28
python -m robocam camera info
python -m robocam camera capture --output frame.jpg
python -m robocam config show
python -m robocam config set paths.output_dir /mnt/ssd/outputs
# Simulation mode (no hardware required)
python -m robocam --simulate status
Run after an experiment (or use the Processing tab) to produce per-frame images and video from the raw .npy burst:
# All wells in an experiment directory
python scripts/reconstruct_vfr.py outputs/20260625_133324_my_experiment/
# Images only
python scripts/reconstruct_vfr.py outputs/exp/ --no-video
# Video only
python scripts/reconstruct_vfr.py outputs/exp/ --no-images
# Lossless video
python scripts/reconstruct_vfr.py outputs/exp/ --codec ffv1
Hardware-free unit tests (pytest): calibration bilinear interpolation, config persistence, and CLI argument parsing.
pip install -e ".[dev]"
pytest
See TESTING.md for the manual hardware checklist used on a live Raspberry Pi session.