Built by Team Pandava (Team 12) at the 2026 Embedded World North America Edge AI Hackathon, Robotics Challenge sponsored by Quilter.

Team Members: 

The Python files are uploaded with an _ac suffix (for arm_control) so they're easy to tell apart on this page. To run them, remove the suffix (for example, main_ac.py becomes main.py), because the files import each other by their original names.

arm_robotic/
├── esp32_firmware/                    ESP32 Max V1.0 (real-time control)
│   └── main_esp.ino                    Servo PWM, joystick control, home pose, kill switch

└── arm_control/                           Arduino UNO Q, Debian side (Python, fully offline)
    │
    ├── Setup
    │   ├── setup_ac.sh                   One-time install: venv, OpenCV, pyserial, serial/camera permissions
    │   ├── cam_setup_ac.sh           Locks C270 exposure and white balance for stable colours
    │   ├── requirements_ac.txt       Python libraries
    │   └── config_ac.py                   Every tunable value: camera, colours, arm dimensions, step          |                                                    sizes
    │
    ├── Calibration and testing tools
    │   ├── vision_server_ac.py         Browser tool (port 8000): ArUco calibration, background
    │   │                                               capture, colour readout, path preview
    │   ├── vision_core_ac.py            Detection helpers used by the browser tool
    │   ├── cam_ac.py                       Camera helpers used by the browser tool
    │   ├── markers_mm_ac.json      Real-world positions (mm) of the 4 ArUco markers
    │   └── probe_ac.py                    Quick camera check: resolution and frame rate
    │
    ├── Perception
    │   ├── camera_ac.py                  C270 capture that always returns the newest frame
    │   ├── homography_ac.py          Pixel <-> millimetre mapping and work-area masks
    │   ├── marker_ac.py                   Finds the Crayola marker by colour
    │   ├── path_trace_ac.py             Turns the Sharpie line into ordered waypoints
    │   └── obstacle_ac.py                 Obstacle detection (background subtraction, TFLite-ready)
    │
    ├── Planning and control
    │   ├── kinematics_ac.py             Inverse kinematics and conversion to servo angles
    │   ├── planner_ac.py                  Guarded Move: 5 mm steps with obstacle detours
    │   ├── state_machine_ac.py       Full task: home → find → grasp → trace → return → home
    │   └── arm_link_ac.py                 Serial link to the ESP32 (plus a simulated arm for dry runs)
    │
    └── main_ac.py                    Entry point (python main.py, or --dry-run to simulate)


Run order on the UNO Q: setup.sh, then cam_setup.sh, then probe.py, then vision_server.py (calibrate, capture the background, check the path), then main.py --dry-run, and finally main.py

Where to look