This video provides a technical overview of the system's architecture and a demonstration of its real-time tracking performance.
https://github.com/user-attachments/assets/d666da68-4de4-413b-ad2b-b3b17028fe75
This project demonstrates how multiple inexpensive camera nodes can be combined to provide capabilities that a single high-end sensor cannot, such as spatial triangulation and distributed coverage. The focus is on showing how system-level performance emerges from coordination between simple nodes rather than reliance on one centralized platform. This approach highlights a path toward scalable, cost-effective sensing systems under real-world constraints.
Repository layout
For parts, wiring, multimeter checks, and staged prototype assembly, start with the beginner assembly guide and bill of materials (polska wersja listy części). For the fastest first test, follow the MVP guide (Polish) with the ServoTracker firmware. The purchased servo hardware requires different motor control firmware from the stepper-based examples in this repository.
Quick start
Firmware builds use arduino-cli with versions pinned in the Makefile (ESP32 core 3.3.12, ESP32Servo 3.2.1). A GitHub workflow compiles all firmware on every push.
brew install arduino-cli
make setup # ESP32 core and libraries (about 6 GB), creates the secrets.h files
# enter your 2.4 GHz Wi-Fi in Hardware/Assembly/Sketches/*/secrets.h
make camera-sense # camera stream to the XIAO ESP32-S3 Sense (connect one board at a time)
make servo-s3 # ServoTracker to the XIAO ESP32-S3
make monitor # read the IP addresses, then enter them in Software/Python/YOLOProcessing.py
make run # Python tracker: 'a' arms, 'd' stops, 'q' quits
Run make help for all tasks. The MVP guide, section 9, gives each step.
For a visual walkthrough, open Hardware/Assembly/index.html in your browser. The offline animation includes step controls, highlighted breadboard holes, wiring, and measurement checkpoints for the bench prototype.
The guided servo test gives one instruction group at a time. Select a node and axis, enter meter readings, and record a 1500 → 1510 µs movement with the existing manual sketch. For a previously checked camera mount, mark a stationary target in two saved images to calculate pixel displacement. Records save locally and export as JSON. This first calibration lesson does not control hardware or measure angles or 3D accuracy. Read the lesson instructions before starting.
The workbench also includes LiPo commissioning and resistor placement, with recorded meter readings, individual-cell checks, pack selection, fault examples, and JSON/print export. Follow the battery circuit specification and hardware release requirements before connecting the 3S pack. The first battery build powers one unloaded servo; production hardware qualification remains open.
Firmware/– ESP32 C++ Code for respective nodesHardware/Cad/– .3fd file for Fusion360Hardware/STL/– STL files for 3D-printingMedia/Demo-Video/– One-minute project videoMedia/Prototypes/– Hardware evolution and early prototypesFirmware/– ESP32 firmware for each nodeSoftware/Python/– Video processing python fileSoftware/Unity/– Unity scripts for triangulation
Sincerely, Alisher Khojayev