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
On the bench right now
Active research, updated as it lands. The latest commit is fetched live from GitHub, so the freshness claim checks itself.
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 →
Two research lines: reliable planners, legible robots
How language model planners fail, measured against machine-checked ground truth; and how humanoid robots should communicate so people can calibrate their trust.
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. The headline artefact is the confusion matrix between planted trap and observed verdict.
Across an 18-run grid over four models, the models fail in distinct, stable ways: 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. Every gestural failure was a failure of joint attention rather than of communication, which is why the design target is hybrid rather than either one alone.
Research output
Enhancing Human-Robot Companionship: Comparing Verbal and Non-Verbal Communication Cues in Humanoid Robots
plan-failure-bench: A Machine-Checkable Benchmark of How Language Model Planners Fail
Certified Bounds on Achievable Legibility under a Path Cost Budget
The Frozen Blowup Profile of the Okamoto, Sakajo and Wunsch Family: A Control Variate for its Spectral Exponent
Built, deployed, measured
Every project here is backed by committed data and code a stranger can re-run, and says in its own words where its claims stop. Two are deployed in the field: firmware in a commercial intrusion-detection prototype, and a portal running an institute day to day. Each one also has a short plain-language guide, written for readers outside the field.
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, all without the vocabulary. Each guide is committed alongside the code it describes, so it cannot drift from the project it explains.
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 in the field. It stays the company's property rather than part of the public firmware, and the field-trial figures this entry used to quote are retracted along with the rest.
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.