Robotics & AI Engineer
Humanoid, quadruped & mobile robotics Β· ROS 2 Β· NVIDIA Isaac Sim
Three robots. Three morphologies. One interface.
A deliberate series of projects testing whether a clean ROS 2 + Isaac Sim control
architecture transfers across robot types β wheeled (Jetbot), bipedal (Unitree H1),
and quadrupedal (Boston Dynamics Spot). Same external /cmd_vel + /odom
contract; different policies, different DOF counts, different motion capabilities.
A ROS 2 control stack for the Boston Dynamics Spot quadruped in NVIDIA Isaac Sim 5.1, built around NVIDIA's pre-trained flat-terrain walking policy. Spot autonomously navigates a configurable sequence of (x, y) goals using body-frame velocity control with full holonomic motion β linear.x, linear.y, and angular.z commanded simultaneously.
Third project in the architecture series. Unlike the H1 humanoid (forward-only kinematic), Spot's policy supports lateral strafe and reverse β so the waypoint controller projects the world-frame goal direction into the robot's body frame and commands all three velocities at once. No rotate-first state machine needed.
Representative navigation run. Path coloured by navigation state. Demonstrates closed-loop body-frame velocity control on /spot/odom feedback.
A ROS 2 control stack for the Unitree H1 humanoid in NVIDIA Isaac Sim 5.1, built around NVIDIA's pre-trained flat-terrain walking policy. The robot autonomously navigates a sequence of waypoints using a heading-first state machine (ROTATE β WALK β REACHED) wrapped around the policy's velocity interface.
Second project in the series. Same two-process architecture as the Spot and Jetbot projects;
external /cmd_vel + /odom contract identical. The interesting design
moment for this project was the OmniGraph bridge β see below.
Why OmniGraph for the bridge: Isaac Sim 5.1 ships Python 3.11; system
ROS 2 Jazzy is built for Python 3.12. The natural "import rclpy from a standalone script"
approach crashes inside Node.__init__ due to a C-extension ABI mismatch.
Solving this by moving all ROS pub/sub into OmniGraph keeps Python controllers in their
native environment and avoids fragile workarounds. This pattern was reused unchanged
for the Spot project.
Representative navigation run across a 2 m square. Path colour-coded by state (amber = rotating, blue = walking, green = reached).
First project in the Isaac Sim + ROS 2 architecture series
Mobile robotics origin point for the series β same two-process architecture, applied to a wheeled Jetbot with differential drive. Demonstrates closed-loop waypoint navigation with proportional control on heading and distance errors. The architectural decisions made here scaled cleanly to the H1 humanoid and Spot quadruped that followed.
Phase 2 β closed-loop waypoint navigation (left) Β· Phase 1 β basic motion control (right)
University of Hertfordshire Β· Jun 2024 β Sep 2024
Developed a real-time ROS-based control pipeline for a 25-DOF Shadow Robot Hand, integrating sEMG-driven ML inference for gesture-based manipulation.
My long-term goal is to develop affordable, real-world robotics systems that can learn from their environment through observation and interaction.
I'm particularly interested in learning-driven robots that improve their behaviour over time using perception and feedback β with a focus on practical, everyday applications.
The aim is to reduce complexity and cost while enabling intelligent robotic systems that can operate effectively in real-world environments.