overseer - a take on surveillance
project overseer is a small robotic art piece inspired by George Orwell and his novel 1984. the idea was to build something that literally watches back, to make the abstract threat of surveillance a bit more tangible.


the robot tracks human faces in real time. the software runs a simple loop to keep the arm pointed at the closest face.
software driver
the control program does this over and over.
- capture a frame from the camera.
- detect all faces in the frame.
- pick the closest face.
- calculate the movement and update the arm position.
setbacks
the tricky part was figuring out the servo rotation from a target’s coordinates. at first the software only knew how much the camera needed to turn, which is not enough to command the motors directly.

the problem was geometric. with only one known angle and one known side of the triangle formed by the camera, target, and joint, the math is underdetermined.
we fixed it mechanically by aligning the motor axis with the camera’s rotation axis so they intersect at the lens. that made the calculations work, but it also made the hardware a lot more complicated.

as the build went on we added adjustable target tolerance, rectangles drawn around detected faces, and an auto-centering routine that runs after the arm sits idle for a while.

CPU compatibility
the original plan was to run everything on a Raspberry Pi Zero W, small enough to hide inside the main enclosure. but we used OpenCV4 (v4.3.0) for face detection, and that needs an ARMv7+ processor. so we had to switch to the Raspberry Pi 3B+ with its ARMv8 CPU.
the bigger board meant adding a second enclosure to the assembly, and we lost the original idea of a self-contained wall-mounted unit.
assembly

we built the frame from lightweight particleboard so the motors could move the arm quickly. the wood turned out weaker than expected, so we had to reinforce a few spots.
the electrical housings are cardboard, and thin laminated boards form the main technical enclosures. we kept the colors muted so the message would do the talking.

cable management was a pain. loose wires kept snagging in the arms and joints, so we zip-tied them along the frame.

testing and refinement
in the final stretch we tuned parameters, lowered the frame rate and image quality to keep processing smooth, and added a fan to keep the CPU from overheating during long runs.

the finished piece does exactly what we set out to do. it tracks faces, moves the arm, and hopefully makes people think twice about being watched.
components used
2x Servo Motors Waveshare MG996R
- Torque: 9 kg/cm (4.8V), 11 kg/cm (6V)
- Speed: 0.19s/60° (4.8V), 0.18s/60° (6V)
- Rotation: 180°
- Voltage: 4.8V ~ 6V
- Weight: 55g
- Dimensions: 40.7 × 19.7 × 42.9mm
Raspberry Pi 3 Model B+
- CPU: 1.4GHz 64-bit quad-core ARM Cortex-A53
- CPU Architecture: ARMv8-A (64/32-bit)
- GPU: Broadcom VideoCore IV @ 250MHz
- SDRAM: 1GB
- Weight: 45g
- Dimensions: 85.60 × 56.5 × 17mm
Raspberry Pi Camera V2
- Video FPS: 1080p30, 720p60
- Sensor: 8MP Sony IMX219 CCD
- Connector: CSI
- Field of View: 62.2° x 48.8°
- Weight: 3g
- Dimensions: 25 × 20 × 9mm
Raspberry Pi Fan with 30cm Cable
- Consumption: 0.35W
- Power: 5V (reduced to 3.3V)
- Noise: 22dBA (5V)
- Dimensions: 35 x 35 x 10mm
Power Supply 5.1V⎓3A
- Power: 15.3W
- Voltage: 5.1V
- Current: 3A