Robotics & Embodied AI

Robbie is an ongoing open-source robot, split into separate repositories for the agent, the control system, the mechanical design and the motion model.

Robbie

Open-source agentic robot

A low-cost desktop robot with a moving head and two round LCD eyes, designed to engage with people in group settings such as shops, events and meetings. Current work modernises its LLM-driven personality and agent framework, and rewrites its kinematics and controller.

  • Rust
  • Python
  • LLM agents
  • Docker

robbie_ros

ROS 2 control and simulation

Robbie's control system as a ROS 2 stack. It deploys to a Raspberry Pi 4 or runs against a MuJoCo simulation on the desktop, with Rerun visualisation and a design-space study of the neck mechanism.

  • ROS 2
  • MuJoCo
  • Python
  • C++
  • Raspberry Pi

robbie_openscad

Parametric mechanical design

Robbie's body, moved from Fusion 360 to OpenSCAD so the design stays open and maintainable. The neck is a 3-DOF Stewart platform driven by three motorised sleds circling a collar, giving roll, pitch and full 360° yaw from only three motors.

  • OpenSCAD
  • BOSL2
  • 3D printing

look_around

Natural gaze motion library

Generates natural-looking "look at" motion for anything that can look around: people, robots or animals. A cascade of eye, head, torso and heading transforms is configured from one JSON file, accepts feedback, and suits both animation rigs and PID control loops.

  • Python
  • Kinematics
  • Control

Hardware, CAD & Fabrication

Electronics, embedded firmware and parametric CAD for parts that get built and used.

CD Changer Robot

Reverse-engineered disc-imaging robot

A "parts only" Nistec ALW-501 disc-publishing robot, rebuilt as a bulk CD-imaging machine. After reverse engineering the motor driver board, I replaced the dead mainboard with an Arduino Mega controller and drove it from a PC with a Python harness.

  • Arduino
  • PlatformIO
  • Python
  • Reverse engineering

Parametric Fastener Library

OpenSCAD screw-hole library

Better self-tapping screw holes for 3D prints. Common brand-name screws don't quite match the UTS standard, so the library adds a second size model fitted to measured screws, plus more complex hole geometry.

  • OpenSCAD
  • BOSL2
  • 3D printing

ShiftRegisterOfDoom

KiCad breakout board

A TPIC6B595 power shift-register breakout board for driving higher-current loads from a microcontroller, designed in KiCad, with accompanying Arduino libraries.

  • KiCad
  • PCB design
  • Arduino

WDArduinoLib

Arduino testing and graphing

A collection of Arduino helpers, including on-device unit testing and GNUPlot-based graphing of live sensor data streamed over serial.

  • C++
  • Arduino
  • GNUPlot

Software, Data & Reverse Engineering

Tools, datasets, and recovering how undocumented legacy software works.

pingthing

htop for your local network

A live, zero-configuration terminal view of every device on a home or small-office network: latency statistics, uptime and outages, host names, MAC vendor lookup and a quick port summary. Cross-platform, with continuous integration.

  • Python
  • Networking
  • TUI

Stronghold Reborn

Reverse engineering a 1993 DOS game

An engine remake of SSI's Stronghold (1993) in Rust for Windows, Linux and macOS, built by reverse engineering the original executable. It also explores how real-time strategy games might have evolved from Stronghold's early design ideas.

  • Rust
  • Ghidra
  • Unicorn
  • Reverse engineering

wikitionary_redux

English dictionary dataset

An English dictionary derived from Wiktionary and published as newline-delimited JSON: one record per word sense, 1.24 million records across 27 files, ready for NLP, games and tooling.

  • Data engineering
  • NLP
  • JSON

OpenXeen

Game engine rewrite

A Java rewrite of the Might and Magic: World of Xeen engine, including loaders for the original's proprietary data formats.

  • Java
  • File-format reversing
  • Graphics