robotics + AI · UW–Madison CS '28 · Madison, WI

AADIT
SINGAL

I build feedback loops: robotics, AI, and software that sense, decide, act, and improve.

Most recently: a natural-language control stack for ROS 2 robots, and an iPhone + Watch training platform I shipped to the App Store. Behind that, three summers of applied ML and consulting. Multi-agent systems, multilingual NLP, computer vision in production.

fig 0 · the loop. click a block to navigate

01

Two systems, one mechanism

FIELD DEPLOYMENT · SOLO · FEB 2026 – PRESENT

Versus Training

The training loop, shipped. Live on the App Store, 50 people still logging on it

hrv · sleep · check-in healthkit
readiness engine plan
training session

I train MMA, lift, walk incline, stretch, and play pickup ball. No app could hold all of that in one place without breaking, so I built one: a native Swift iPhone + Apple Watch app with five sport-specific loggers (combat, lifting, endurance, sport, hybrid) writing into one unified training history.

  • One schema, five sports. A round of sparring and a set of squats are different shapes of data. The hard design problem was a single session schema they all normalize into, so history and load calculations work across every modality. Voice logging feeds it: one freeform transcript becomes discipline, session type, rounds, RPE, techniques, and submissions. Imports from Hevy, Strong, Fitbod, Strava and Garmin land in the same shape.
  • Readiness is personal. The score weighs how you feel (40%), HRV deviation from your own 30-day geometric-mean baseline (35%), and last night's sleep (25%). No population averages, no generic thresholds. Every training modality feeds into one number that reflects your actual recovery, not just your workload.
  • "Sensei". A RAG-based coach on Claude, grounded in the athlete's last 30 sessions, current camp, readiness, and PRs. It suggests context-aware exercise substitutions, backed by Supabase, and it is what the Elite tier sells at $14.99/mo while readiness itself stays free for everyone.Real example: when my chest gains stalled while back kept growing, I asked Sensei why. It flagged that my logged RPE and technique notes on incline press pointed to front-delt dominance. Swapping to flat bench and pec-deck isolation broke the plateau in weeks.
READINESS · TRY THE ACTUAL WEIGHTS 72 MODERATE
72
65
80

this is the real formula from the app. move the signals; the score follows.

app store ↗ versus24.net ↗ 50 active users · Swift · TypeScript · RAG · Supabase

Versus Training iPhone home screen: a readiness ring reading 78, READY, with score, load and balance tiles below.
Versus Training Apple Watch face showing a readiness ring reading 74 and a Run quick-start row.
fig 1.0 · readiness score, iPhone + Apple Watch
TurtleBot3 in Webots / Foxglove view
fig 2.0 · Webots · TurtleBot3 Burger, LiDAR stop at 0.45 m

SOLO BUILD · JUN – AUG 2026

Natural-Language Robot Control

Say it in English and the robot does it, safely

tf2 pose · /scan odom→base_link
parser + executor /cmd_vel
wheel velocities

A ROS 2 (Jazzy) stack that turns English into robot motion, with a local model doing the parsing: no API keys, no network. A Python parser emits declarative intent; a C++ node executes it as closed-loop TF2 motion on turtlesim or a Webots TurtleBot3.

  • Closed loop, not a stopwatch. Every action runs against measured pose: the executor stores the start pose, then at 20 Hz reads odom→base_link and checks the stop condition. The open-loop version (duration = distance / speed, then sleep) is wrong the moment reality disagrees, and its error compounds into every command after it.
  • The model never touches the actuator. The action schema compiles into a generation grammar, so malformed output is never sampled and there is no retry loop in the repo. Physical sanity is a separate pass: "go forward 400" is schema-valid nonsense, rejected before it reaches the robot.With reasoning left on, qwen3:8b spent 13.4 s on "make a square" and returned an empty string: thinking tokens come out of the same budget as the answer. No error, just a command the robot ignores.
  • One binary, two simulators. The executor reads odom→base_link through TF2, so moving from turtlesim to a Webots TurtleBot3 with a real LDS-01 laser deletes the faked odometry rather than replacing it. Verified there: commanded forward 1.0 m, the LiDAR halted it 0.45 m from a wall, and because safety vetoes the motion rather than the position, a turn-then-forward recovered instead of deadlocking.
PARSE LATENCY · RUN IT YOURSELF
"stop" 0 actions · 0.3 s
"turn right 90 degrees" 1 action · 0.9 s
"go forward 400" rejected · 1.0 s
"make a square" 8 actions · 4.7 s

measured on qwen3:8b, warm, inside the container. bars run at real speed. parsing sits on a worker thread, so a 4.7 s decomposition never stalls the 20 Hz control loop.

source ↗ ROS 2 Jazzy · C++ · Python · Ollama · Docker · Webots

02

Log: industry & research

MAR – JUN 2026
INDUSTRY

Tech Consulting Intern PwC India · Gurgaon

Built agentic workflows for service-ticket automation, including a ModernBERT pipeline that classifies multilingual Workday tickets, Arabic support requests included.

shipped: multilingual ticket-classification pipeline

MAY – JUL 2025
INDUSTRY

Tech Consulting Intern Ernst & Young · Gurgaon

Led a 3-intern team building a LangGraph multi-agent POC for Unilever. I owned the system design: agent routing, schema-aware NL-to-SQL tools, RAG over internal documentation, and 30+ demo scenarios spanning forecasting, stock-outs, and SKU/vendor views.

shipped: multi-agent POC · 30+ demo scenarios

JAN – APR 2025
RESEARCH

Research Assistant Informatics Skunkworks · UW–Madison

ML experiments in Python and MAST-ML for materials informatics.

logged: weekly experimental findings, model training + tuning

MAY – JUL 2023
INDUSTRY

Machine Learning Intern Keysight Technologies · Gurgaon

CNN-based computer vision classifying electronic components in high-resolution images at >90% accuracy.

shipped: CNN component classifier · >90% accuracy

03

Also built

FashionistAI.Team hackathon build (3 devs). Built the React Native frontend and GPT-based outfit recommendation logic for an AI wardrobe app that classifies clothing and suggests fits by context.React Native · Flask · GPT

04

Toolkit

PRIMARYC++ · Python · Swift · TypeScript
ROBOTICSROS 2 · TF2 · Webots · Foxglove · OpenCV
ML SYSTEMSPyTorch · Hugging Face · LangGraph · ChromaDB · Ollama

Plus Docker, Linux, Git, and whatever the problem needs.

05

Education

University of Wisconsin–Madison

B.S. Computer Science · expected May 2028

gap semester spring 2026 → PwC India internship + building Versus
on track for May 2028
coursework: linear algebra · multivariable calc · algorithms · discrete math · statistics