Inspiration

In a burning building, the first question is: is anyone still inside, and where? Today firefighters answer it by crawling through smoke, where eyes and cameras are nearly useless. Radio waves on the other hand, do not care about smoke , and a moving person changes how these waves bounce around a room. Since WiFi is a radio wave, we wanted to see whether a few cheap WiFi microcontrollers could sense people through smoke and send an autonomous robot to locate them before a human has to go in.

What it does

IRONA finds a moving person using only WiFi signals, then sends a robot to them.

  • Sensing: four ESP32-C5 boards around the search area ping each other 50 times a second. Each board measures the channel state information (CSI) of every other board's packets, so 12 radio links criss-cross the room. In a real building, robots would drop these boards as breadcrumbs as they go.
  • Locating: a person moving disturbs the links near them. Our server scores each link against its own calm baseline, combines the disturbed links into a heatmap, and estimates the person's (x, y), shown live in a 3D view.
  • Responding: the nearest robot, a 3-wheel omni base run by a Raspberry Pi, plans a path around the walls and drives to the person, re-aiming as they move. When it reaches them, the spot is marked FOUND.
  • No camera ever looks at a person. (An overhead camera is only for the demo to track the robots, standing in for the onboard localization a real robot would have.)

How we built it

  • Firmware (C, ESP-IDF): custom firmware for the ESP32-C5, with RuView's edge DSP code vendored in (RuView only supports the S3 and C6). Boards talk over ESP-NOW with no router. Each board relays its measurements inside its own packets, so one board on USB delivers all 12 links.
  • Detection (Python): a per-link "wander" detector modelled on Espressif's esp-radar. It measures how far each packet's CSI shape departs from its 2-second average, divided by that link's own calm level. We chose it by replaying recorded walks through every candidate. It flagged a person walking inside 94% of the time, someone just outside 7%, and 0% with nobody there. The next best, ESPectre, scored 86 / 48 / 0.
  • Locating: radio tomographic imaging. Each disturbed link adds weight on an ellipse around its path, a Kalman filter smooths the result, and a three.js 3D view displays it live.
  • Robot tracking: an overhead Logitech C922 and OpenCV read SSL-Vision-style coloured tops (a blue centre plus 4 dots give identity and heading), corrected for the height of the robot tops.
  • Planning and control:
    • A* on a 5 cm grid, keeping 13 cm clear of walls.
    • Omni drive-to-point, so the robot never needs to turn.
    • A mission state machine: sentry → follow → found.
    • A Pi controller that speaks a one-line UDP protocol, with a 300 ms safety stop.

Challenges we ran into

  • Losing hardware mid-hackathon: the robots' ESP32s died, leaving 4 boards in total, and our router failed. We ported the robot firmware to Python on a Raspberry Pi overnight, using the same protocol so nothing on the laptop changed, and moved to a phone hotspot. The Pi 4 then refused to join the iPhone's WPA2/WPA3 network until we forced WPA2-PSK.
  • Too much noise: boards flagged everyone walking past the area. We had to reduce sensitivity and retune the system to ignore false positives
  • A "numb" gateway: the USB board hears its own links at about 45 packets/s, but relayed links arrive at about 16/s, so its side of the room under-reacted. Thinning its links to a matched rate nearly quadrupled detections on that side (2.8% → 10.8% of the time).
  • Hype vs. signal: on our recordings, RuView's built-in features couldn't tell a person inside the area from one outside it (AUC ≈ 0.5), and its breathing and heart-rate outputs were noise. We built and validated our own detector instead (AUC 0.99).

Accomplishments that we're proud of

  • During this hackathon, and using real hardware, we beat the top 2 repos that defined this technology. Most data was in theory and simulation. We turned it into a working project.
  • An end-to-end loop: WiFi signals → a person's (x, y) → a path around the walls → a robot at their side.
  • Zero false alarms with nobody present, using nothing but WiFi.
  • Every tuning decision came from replaying real recordings, not guesswork. Each module has tests, plus an end-to-end simulation with a rendered camera and simulated robots.
  • Recovering from dead hardware and a dead router without losing the demo.

What we learned

  • Placement beats algorithms: board height and a clear zone mattered more than any detector setting.
  • CSI sees motion, not presence: a person lying completely still is nearly invisible to our detector.
  • Test claims on your own data, including popular open-source ones.
  • Tiny protocols pay off: robot commands are single lines of UDP text, so swapping an ESP32 for a Pi took zero laptop changes.

What's next for IRONA

  • Robots carry the sensing boards and drop them as breadcrumbs while exploring, so no pre-placed equipment is needed.
  • Onboard localization (floor optical flow plus a ring of ultrasonic sensors) to replace the overhead camera. Ultrasonics also keep working in smoke.
  • Detecting still or unconscious people from breathing-scale signal changes.
  • Multiple robots splitting routes through unknown buildings.
  • Guiding the person out and sending their location to responders.

Built with: esp32-c5 esp-idf esp-now c python numpy opencv raspberry-pi three.js ruview

Built With

Share this project:

Updates

Submission history