A C++20 library and interactive application for building and simulating Dynamic Neural Field architectures in real time. Benchmarked 15–41% faster than the next fastest framework.


I spend my days solving problems through code — real-time simulation engines, evolutionary algorithms, and control software that has run on production robot cells. PhD researcher at the University of Minho and TU Eindhoven.
The libraries I architect and maintain, and the code behind the work below — built with the same CI, static analysis and test coverage I would expect from production code.
A C++20 library and interactive application for building and simulating Dynamic Neural Field architectures in real time. Benchmarked 15–41% faster than the next fastest framework.
Combines NEAT neuroevolution with Dynamic Neural Fields to evolve interpretable, neurally inspired control architectures.
Evolves Dynamic Neural Field control architectures for joint action, where the robot has to read its partner and contribute the complementary half of a shared task.
Cross-platform toolkit for building interfaces with Dear ImGui, ImPlot and the node editor.
A compact, well-tested kinematics solution for Universal Robots arms — small enough to read in five minutes.
A C++ interface and worked examples for driving CoppeliaSim simulations from native code.
Virtual-reality experiments showing that robots which anticipate human intention produce smoother collaboration and fewer collisions.
The ergonomic analysis, simulation models and control code behind the CE-certified UR10e work-cell that went into production.
Simulates progressive degeneration in a Dynamic Neural Field architecture and measures how far behaviour holds as connections are lost.
ROS simulation packages for the MiR mobile base — navigation, mapping and the launch files to drive it in Gazebo.
I develop neuroevolutionary methods that automatically design Dynamic Neural Field architectures for human–robot collaboration — letting a robot commit to a complementary action while a person is still reaching. Alongside the research I architect and maintain the open-source C++ libraries that make these models reproducible and deployable on real hardware.
Best Innovation in HRI — NeuroDesign Award, IEEE RO-MAN 2025.
A C++20 library and interactive application for building and simulating Dynamic Neural Field architectures in real time. Fields, kernels and couplings are assembled and re-parameterised while the simulation runs, with live plotting of the activation landscape — so a model can be inspected and adjusted rather than re-run from scratch. It is the engine the rest of my doctoral work is built on.
Benchmarked 15–41% faster than the next fastest framework across a cross-platform comparison of four Dynamic Field Theory implementations.






Dynamic Neural Fields are expressive but almost always hand-built: a designer picks the time constants, resting levels, kernel profiles, and how many fields couple to which. Because the dynamics are highly nonlinear and sensitive to those choices, that is slow, hard to transfer between tasks, and biased by whatever the designer already expects.
NEAT-DNFs extends NeuroEvolution of Augmenting Topologies to field architectures. Fields and their interactions become evolvable genes, so intrinsic parameters and network topology evolve together and continuous-time dynamics are discovered rather than tuned. Evaluated on a ladder of tasks — the core Dynamic Field Theory mechanisms of detection, working memory and selection, then harder problems that only succeed if new intermediate fields emerge. It reliably converges on compact, stable architectures, adding structural complexity only when the task demands it.


Taking NEAT-DNFs from benchmark tasks to a robot working alongside a person. The method synthesises field controllers for joint action — where the robot must read what its partner is doing and contribute the complementary half of a shared task — evolving both the field dynamics and the architecture that connects them, with no hand-designed controller.

A DNF cognitive architecture that builds a continuously evolving representation of human intent and acts on it before the person has finished moving. To find out whether that actually matters to the human, we ran a within-subjects virtual-reality pick-and-place study where each participant worked with both an anticipatory and a non-anticipatory robot.
Anticipation significantly raised perceived competence, warmth, predictability and collaboration, and lowered discomfort; participants described it as more adaptive and cooperative. Objectively, collisions fell significantly. Task duration and idle time did not differ — the benefit was in the quality of the coordination, not raw speed.


Biological cognition survives damage because of degeneracy — structurally different elements that can support the same function. If DNF models genuinely capture that property, they should degrade gracefully rather than fail. I tested this directly: a simulated sorting task subjected to progressive neuron loss and synaptic disruption, then a second experiment asking whether relearning can reorganise an already-damaged architecture.
The fields kept working across substantial degradation, and retraining recovered correct behaviour in architectures that had been degraded — quantitative evidence that the robustness is a real property of the formalism, not an assumption about it.



Taught Power Electronics, and Automation and Robotics, alongside the doctoral work.
Two collaborative robot cells, taken from analysis of the existing manual process through simulation, prototype, factory-floor deployment and CE certification. Both run in production.
Manual pre-assembly was causing real musculoskeletal strain, with glue application the most physically demanding task on the line. I analysed the existing station with three ergonomic methods — RULA, RSI and KIM-MHO — then designed and simulated candidate cells in CoppeliaSim, built a laboratory prototype, and deployed and certified the result on the factory floor. It was the first collaborative work-cell with a cobot installed at the client.
Productivity rose 7.11% — cycle time fell from 46.15 s to 42.87 s — while ergonomic risk dropped across every method: RULA tasks scoring above 3.5 went from three to one, all tasks became RSI-safe where gluing had been unsafe, and no task remained at KIM-MHO risk level IV. Because the cell uses a virtual reference frame driven from the UR controller, it is turnkey and can be re-taught to new part references and relocated to other lines.
This was also my MSc dissertation, supervised by Prof. Estela Bicho.




A UR10e arm riding a MiR200 mobile base, so the robot travels to the work rather than the work coming to it. It navigates between stations, docks, picks and palletises preforms, and sorts defective parts using HALCONmachine vision. Tooling swaps automatically through an OnRobot quick changer between a vacuum array and a two-finger gripper.
I built the control architecture as a set of ROS nodes — a task manager orchestrating a vision server, arm client, mobile-base client and a safety monitor — driven from a smartphone app talking to an industrial PC. Safety is enforced by Inxpect radar zones and infrared sensors rather than cages, which is what allows people and the robot to share the floor. I also wrote the cell's operation manual.




Universal Robots' own documentation was unclear and the published literature on their kinematics was thin — six papers between 2013 and 2019, most of them without any code to check against. So we wrote the analysis we wanted to exist: a forward solution on the modified Denavit–Hartenberg convention, an inverse solution derived geometrically, and a C++ library implementing both.
Correctness is established by round-trip rather than assertion. A random tip pose is generated, inverse kinematics solves it for all eight arm configurations, each solution is pushed back through forward kinematics, and the residual against the original pose is measured. The same models drive CoppeliaSim over its remote API and run as MATLAB scripts.
It is my most-starred repository, and carries the tooling I would expect of production code: CI, static analysis, coverage reporting and Doxygen documentation, building on Windows, Linux and macOS.


A differential-drive mobile robot built from nothing — chassis, electronics and control software. Navigation runs on non-linear attractor dynamics: heading is governed by a dynamical system whose attractors pull the robot toward a target while repellers push it clear of obstacles. Behaviours were validated in MATLAB and V-REP before deployment, with PID speed control closed over encoder feedback, odometry, and colour-based target detection from an onboard camera.
This is where the thread starts: V-REP is now CoppeliaSim — which I later wrote a C++ interface for — and attractor dynamics is the direct ancestor of the Dynamic Neural Field work in my PhD.

A sensor glove drives a five-finger robotic hand over a wireless link. An Arduino samples the flex sensors on a timer and buffers readings in a circular FIFO, then transmits them over Bluetooth. An STM32 receives and parses the stream, and generates a variable-duty-cycle PWM signal per finger to position each servo — so the hand mirrors the wearer's movement in real time.