Production work · JABAS.AI navigation stack
A GPS-free navigation stack for agricultural robot fleets
JABAS.AI spun out of the University of Lincoln and Ceres Agri-Tech in 2026 to provide autonomy-as-a-service for farm robots. The problem is real and close to home. On soft-fruit farms, up to a fifth of the work is moving trays of picked fruit, often under polytunnel plastic where GPS can't be trusted. Our stack lets robots from different manufacturers do that job without GPS. It runs on the AgileX Hunter, Dynium Gophar and Dogtooth platforms from one codebase, in simulation and on hardware, and is in on-farm trials with commercial growers.
The most rewarding part of the work is the short loop between a derivation on the whiteboard and a robot driving a real polytunnel row, with the field logs showing what to improve next.
nav2_costmap_row_controller
Author
A Nav2 controller plugin for Ackermann robots in polytunnel rows. It finds the row boundaries in the costmap or point cloud, infers corridor width on its own, and keeps going when it can only see one side. It travels the exact planned distance even when localization drifts. Validated with a deterministic harness that runs the real Nav2 costmap code: 18 runs and 6,338 control cycles.
C++ · Nav2 plugin API · costmap_2d · GitHub Actions CI
nav2_mppi_controller
Lead
Nav2's latest MPPI controller, backported into the stack with a new four-wheel-steering motion model for the Gophar platform, with tests. It includes "MPPI Control Room", a web UI for live telemetry, velocity monitoring and critic tuning on the robot.
C++ · xtensor · MPPI · JavaScript
navstack_bringup
Author
Launch and orchestration for the whole stack. It covers GNSS, LIO, point-cloud preprocessing, Nav2, EKF/NavSat fusion, topological navigation, metrics and command safety guards. One codebase handles three platforms on both real hardware and Gazebo, with per-platform Docker devcontainers.
Python launch · Docker · robot_localization · tmule
topological_navigation
Core contributor
Contributor to LCAS's open-source topological planner, which has 1,700+ commits. Contributions include the ROS 2 port, per-route-segment metric maps, occupancy-grid publishing, edge actions that set ROS 2 parameters on any node, and topomap editing and image-export tools.
Python · ROS 2 actions · Nav2
autonomy_metrics_logger
Author
Tracks autonomous and manual distance, interventions and collisions, and logs each event to MongoDB with a full system snapshot. It reports mean distance between interventions (MDBI) and is the source of truth for distance-based billing. If MongoDB goes down, the node keeps running and reconnects in the background.
Python · MongoDB · YAML-driven config
pointcloud_processing
Author
Reusable composable nodes for LiDAR preprocessing: transform, crop-box, voxel downsampling, and Patchwork++ ground and outlier removal. They feed both the costmaps and the row controller.
C++ · PCL · rclcpp_components · Patchwork++
livox_mid360_gz
Author
A Gazebo Harmonic system plugin that reproduces the Livox Mid-360's non-repetitive scan pattern on a GPU lidar backend. It keeps simulated sensor data close enough to the real sensor for LIO and controller testing.
C++ · Gazebo Sim · ROS 2 Jazzy
Kalman pole tracker
Author
Tracks polytunnel poles through occlusion and noisy detections. The tracks give row boundaries for in-row planning and stabilise localization where GPS is unavailable.
C++ · Kalman filtering · data association