Home
← Gradient

Gradient

Scanning robots

I built a large part of the scanning robot's software stack. Like the sorter, I also assembled many of their mechanical components and fully wired a few of them. One machine scans at around 2,000 cards an hour.

Scanning gantry above trays
  • 16,000cards / hr across 8 machines
  • 520 ppicapture resolution
  • Auto-pauseon ML audit signals

Microcontroller (C++)

Exactly the same stack as the sorter. See the sorter

Computer side (Python)

Also very similar to the sorter. Some differences:

  • Two Sony A7R IV cameras, captured through a custom wrapper I wrote around SmartShooter on Windows.
    • I replaced SmartShooter with a gphoto2 state machine per camera, but never deployed it, because we never migrated to Linux.
  • I wrote the lens intrinsics calibration routine: roughly twenty images of a chessboard through cv2.findChessboardCorners to recover the camera matrix.
  • I wrote the AprilTag and homography calibration routine.
  • I wrote every GUI element by hand in tkinter a long time ago. The visuals have stayed relevant since.
  • The machines call APIs for real-time inference: identification, cropping, rotation, blurriness. I did not write those models, but the machine talks to all of them.
  • It auto-pauses on conditions like blurriness or cards left behind, on a signal from those models.
Diagram of plates, rows, columns, scanner regions and trays with a coordinate origin
An early diagram to help with grid state / inventory software.

The calibration routine has its own write-up. Calibration and cropping

Pickup and placement
> 99.9% error-free
Blur detection
100% below 1 cm focal offset
Card integrity, 13,000 cycles
99.98%
← Back to Gradient