Teaching robots to say what they mean, and to know when they can't.
I build the systems that make robots worth trusting. Benchmarks that prove how LLM planners fail. Verifiers that stop unsafe plans before hardware moves. Humanoids that communicate their intentions clearly.
MSc AI & Robotics (Commendation) · University of Hertfordshire
Engineer first. Researcher by conviction.
I work at the boundary between robotics research and shipped engineering. My academic work asks how humanoid robots should communicate so that people trust them appropriately, not too little, not too much. My applied work has been building the embedded systems and edge AI pipelines that make robots, and the products around them, actually work in the field.
That combination shapes how I think about every project: a result only matters once it survives contact with real hardware, real users, and conditions nobody designed for in the lab. I bring the same standard to a fresh dataset on a humanoid platform as I do to firmware shipping in a safety-critical product.
MSc AI & Robotics
BEng Mechatronics Engineering
Reliable planners, legible robots
Two research lines and the engineering underneath them: how language model planners fail, measured against machine-checked ground truth, and how humanoid robots should communicate so people can calibrate their trust. Every figure is backed by committed data a stranger can re-run, every card says where its claims stop, and the commit dates come live from GitHub.
legible-motion-bench
A benchmark that measures legibility against path cost against constraint satisfaction, computed exactly, with no human rater and no model judge anywhere in the loop. Asked to plan in the same worlds, three language models claimed legibility for 116 of 120 trajectories, including all 25 that were not physically possible. Three models at one temperature is a pilot, not a finding. Next on the bench: whether this metric tracks what people actually perceive.
The model pilot, measured
| Over 40 decodes each | Qwen 2.5 7B | Llama 3.3 70B | Gemini 3.6 Flash |
|---|---|---|---|
| called legible by the model | 40 | 40 | 36 |
| physically possible | 26 | 29 | 40 |
| clearer than the shortest path | 10 | 20 | 30 |
| over the stated path budget | 9 | 15 | 0 |
| entered a keep-out zone | 7 | 7 | 0 |
116 of the 120 decodes claimed to be legible, including all 25 that were not physically possible. The stated path budget is a constraint for one model and text for the other two: the third threads a route at 1.08 to 1.11 times the optimal path cost and enters no keep-out zone, while the other two return the same modal trajectory whatever budget the prompt names. Three models at one temperature is a pilot, and the founding paper already notes that legibility pushes trajectories towards obstacles, so this narrows existing work rather than opening new ground. The frontier table and the budget sweep →
legibility-bounds
The benchmark above measures what a planner achieved. This certifies what nothing could achieve: an upper bound that quantifies over every admissible trajectory rather than the ones somebody tried. All 32 world and budget pairs hold with zero violations, and the narrowest gap anywhere is 0.0064. Six pages, submitted to IEEE RA-L in August 2026, preprint at DOI 10.5281/zenodo.21834955. Next: where the remaining width in obstacle worlds actually lives.
The certified intervals
| World | Budget | Achieved | Bound | Gap |
|---|---|---|---|---|
| fan_middle | 1.25 | 0.4343 | 0.4909 | 0.0567 |
| narrow_gap | 1.50 | 0.7584 | 0.8041 | 0.0456 |
| fan_outer | 1.10 | 0.6410 | 0.6692 | 0.0282 |
| door_pair | 1.50 | 0.8507 | 0.8776 | 0.0269 |
| wall_choice | 1.10 | 0.5787 | 0.5915 | 0.0128 |
All 32 world and budget pairs hold, with zero violations. Each row shows the world at the budget where its interval is widest, and the narrowest gap anywhere is 0.0064. The upper end quantifies over every admissible trajectory rather than the ones somebody tried, so no better optimiser weakens it; the lower end is constructed rather than searched for, and beats the vendored local search in 13 of 32 cases, by up to 0.1485.
One claim here has been withdrawn. A loose constant in the obstacle argument was named as the highest-leverage improvement outstanding and then sharpened, and it was worth 1.6 per cent; but its looseness had been measured against the wrong quantity, and corrected it never binds in any world tested. So where the width in obstacle worlds lives is open again. The honest ceiling on all of it: the observer model is exactly reproducible and has never been validated against people, so these are certified bounds on a stated objective, not on what a human watching would actually infer. The full argument →
plan-failure-bench: A Machine-Checkable Benchmark of How Language Model Planners Fail
Every instruction either admits a valid plan or plants exactly one trap, and every ground-truth label carries a mechanical proof re-verified in CI on each commit. A deterministic checker, differentially tested against an independent PDDL toolchain, scores every response with no human or LLM judge anywhere, and detection is never reported without its paired false positive count. Across an 18-run grid over four models the failures are distinct and stable: a frontier reasoning model survives full semantic obfuscation on both environments, one sequencing seed short of perfect, while smaller models split between silent compliance and surface-anchored refusal.
Enhancing Human-Robot Companionship: Comparing Verbal and Non-Verbal Communication Cues in Humanoid Robots
A full sim-to-real pipeline on the JD humanoid, from an Isaac Sim digital twin through ROS2 hardware integration, built so that a gestural and a spoken condition could be delivered identically to 20 participants. Counterbalanced, RoSAS-validated, under UH ethical approval cSPECS/CL/UH/05098. The scenario was deliberately mundane: the robot had to communicate that it needed recharging. Speech conveyed intent significantly more clearly than gesture, while engagement and warmth held comparable across both, and every gestural failure was a failure of joint attention rather than of communication. That is why the design target is hybrid rather than either one alone.
Built, deployed, measured
Eight more, two of them deployed in the field: firmware in a commercial intrusion-detection prototype, and a portal running an institute day to day.
llm-nav-shield: Detect, Recover, or Halt
ROS2 Autonomous Navigation & Deterministic Planning
ROS2 LLM Safety Verifier
exact-predicates: When Floating Point Lies
degregorio-blowup: Two Ways to Become Infinite
toolcall-contract: Tool Calls That Silently Aren't Right
ESP32-CAM Motion Detector
Safina Portal: School Management System
Ten projects, explained without the jargon
Written for someone who has never read a research paper. The same numbers, the same stated limits, and the same claims I have withdrawn, without the vocabulary.
Research output
Enhancing Human-Robot Companionship: Comparing Verbal and Non-Verbal Communication Cues in Humanoid Robots
Certified Bounds on Achievable Legibility under a Path Cost Budget
plan-failure-bench: A Machine-Checkable Benchmark of How Language Model Planners Fail
The Frozen Blowup Profile of the Okamoto, Sakajo and Wunsch Family: A Control Variate for its Spectral Exponent
From lab to deployed hardware
Full-Stack Software Engineer
- Sole engineer of the institute's live platform, Safina Portal, in production across seven user roles and 33 audited tables.
Visiting Lecturer, AI & Robotics
- Designed and teach an ML curriculum for 30+ students with no prior background, taking teams through training and evaluating their own classifiers on custom tasks.
Embedded Systems Engineer
- Engineered deterministic C++ firmware for real-time image processing on ESP32 for a commercial intrusion-detection prototype.
- Architected the LoRa mesh protocol that carried alerts off the device. It stays the company's property, and the field-trial figures this entry used to quote are retracted.
Robotics Integration Specialist
- Built the gesture recognition and motion planning pipeline for the JD humanoid in Unity and C++, integrated through ROS2, and deployed PyTorch non-verbal communication models onto its real-time control loop. The study that ran on it measured a significant clarity effect, d = 0.58.
Research Associate
- Fine-tuned and optimised TensorFlow models for real-time inference on the Unitree Go1 quadruped, then integrated them into the platform's control loop. The work was inference latency and runtime stability, to the budget a walking controller leaves for perception.
Embedded Systems Intern
- Optimised bare-metal C firmware for embedded controllers at the national robotics centre, validated across 100+ safety-critical test cycles.
Tools I ship with
- C++20
- Python
- ROS2 (Nav2, Plugin Dev)
- Git & CI/CD
- Docker
- Isaac Sim
- MuJoCo
- Gazebo
- Unity
- Sim-to-Real Transfer
- PyTorch
- TensorFlow
- TensorRT
- Computer Vision
- LLM Integration
- JD Humanoid
- Unitree Go1
- Jetson Nano
- ESP32 & LoRa
- Bare-Metal C/C++
In the room, and what they say
AI & Robotics in Education Conference
Hands-On Robotics & ML Workshop
Let's build
something real.
Open to PhD research collaboration in HRI and AI reliability, and to robotics and AI engineering roles in the UK, EU, and USA.