All Projects

Case Study

AGV Fleet System — Toyota SA Manufacturing

Designed and deployed an end-to-end AGV and fleet management system at Toyota SA Manufacturing, with a scalable architecture designed to support further line expansion. Built the full software stack including kinematic modelling, SMACC2 state machines, embedded Linux customisation, low-level C++ CANOpen drivers, IMU/LiDAR fusion, and Zenoh-based fleet communication.

RoboticsROS2C++CANOpen
01

Problem

A South African automotive manufacturer needed a production AGV fleet to move parts across multiple assembly lines, on an accelerated delivery schedule. The system had to run reliably on a factory floor shared with human operators, integrate cleanly with existing plant infrastructure, and be extensible so that additional lines could be brought online without rewriting the software stack.

I joined BATTALION Technologies under a senior engineer and progressively took ownership of technical decisions during my first year. After the senior engineer departed, I led the company's technical practice for the remaining eight months — responsible for the architecture, the embedded stack, controls, DevOps, client engagement and team development carrying this deployment to production.

02

Approach

The brief was less about a single AGV and more about a fleet-capable platform — so the guiding principle from day one was that the software had to be modular, configurable, and reusable across hardware variants rather than hand-tuned to one chassis.

I architected the full stack around ROS2 as the runtime backbone, with SMACC2 state machines coordinating autonomous, manual and error-recovery modes, and Zenoh handling real-time coordination between vehicles and the fleet layer. Configuration was lifted out of code so that the same stack could be reconfigured for different AGV variants without touching the application logic.

Alongside the robotics stack I defined the team's engineering practice — version control strategy, code review standards, containerised testing and CI/CD — so that the growing codebase stayed reliable as multiple engineers and contractors contributed in parallel.

03

Technical Details

The stack spanned kernel to cloud. At the embedded layer I customised Linux builds for industrial controller hardware and wrote low-level C++ drivers for motor controllers and sensors over CANOpen, including protocol work against limited vendor documentation. Sensor fusion combined 2D/3D LiDAR, magnetic line sensors and IMU data for accurate localisation and navigation.

Higher up, the motion stack included forward and inverse kinematics, path-following controllers and motion planning; SMACC2 orchestrated the behaviour modes and error-recovery flows. Zenoh provided the real-time communication fabric between vehicles and the fleet coordinator. For the operator side I designed and shipped a ReactJS dashboard in two weeks — real-time fleet status, position, battery and sensor health — to give plant operators visibility into what the fleet was doing.

On the tooling side I built internal CLI utilities to automate system bring-up and to bridge mechanical CAD outputs into the ROS2 simulation environment, closing the loop between the mechanical team and the software stack.

04

Outcome

Delivered an end-to-end production AGV and fleet management system at Toyota SA Manufacturing on an accelerated schedule, with an architecture designed to scale across further assembly lines. In parallel I maintained and upgraded a legacy AGV deployment at a Toyota parts distribution centre, including on-site debugging under production pressure, a full operating system and firmware migration across the deployed fleet, and network infrastructure upgrades to improve fleet communication reliability.

Beyond the deployment itself, I represented the company as its technical face — presenting to senior management at Toyota and demonstrating laser-guided AGV systems at national automotive innovation events attended by Ford, VW and Isuzu — and mentored a junior engineer plus remote contract engineers through the build-out.

Tech Stack

ROS2SMACC2ZenohC++PythonCANOpenEmbedded LinuxLiDARIMUSensor FusionReactJSDockerGitHub Actions