Overview
Lupin is an autonomous greenhouse robot, Nav2 autonomy, AprilTag + YOLO perception, a live digital twin, and a voice-controlled mission console, all on ROS 2.
Lupin is an autonomous greenhouse robot built on the MIRTE Master V2 (a holonomic 4-mecanum base with a 4-DOF arm). It explores and patrols the rows with Nav2, reads climate data off AprilTags, finds and grades flowers with YOLO, and streams everything into a live digital twin you can drive from a browser, or by voice.
It is a ROS 2 Humble workspace organised as nine packages, and the same code runs in Gazebo and on the real robot, only the deployment branch and a single drive topic change.
This site documents the hardware branch, where most of the implementation runs.
Commands are split into Simulation and Hardware tabs wherever they differ.
How it works
Lupin turns an empty map into a queryable model of a greenhouse in one pipeline:
Explore ──▶ Navigate ──▶ Perceive ──▶ Twin ──▶ HMI / Voice
(frontier (Nav2 MPPI) (AprilTag (/twin/ (:8090
cells) + YOLO) state) console)A mission orchestrator frontier-explores the live SLAM map until it has discovered N AprilTag stations, drives an approach pose at each, reads its climate tag and assesses its flowers, and publishes every reading as a typed observation. A digital-twin node aggregates those observations into a latched world snapshot and an on-demand sensor heatmap, which the web console renders live.
Start here
Quickstart
Bring Lupin up in simulation in one command, then point it at the real robot.
Architecture
The node/topic graph, the sim ↔ hardware boundary, and how the packages fit together.
Design decisions
The why behind the load-bearing choices: MPPI over DWB, twist_mux, latched twin, presets over MoveIt.
War stories
The failure-mode sagas: dead controllers, DDS dropouts, thermal trips, and how each was tracked down.
The stack, page by page
- Hardware, the MIRTE Master V2 platform: 4-mecanum base, 4-DOF arm, Orbbec depth, RPLidar, IMU, and the quirks that bite.
- Navigation, Nav2 tuned for a mecanum base: MPPI controller, Omni motion model, narrow-aisle costmaps, AMCL/SLAM modes.
- Mission orchestrator, the hierarchical state machine: exploration → monitoring, per-tag approach poses, pause/E-stop policy.
- Perception, AprilTag detection (OpenCV ArUco), YOLO flower detection, and the aggregator that fuses them.
- Digital twin,
/twin/stateaggregation and the inverse-distance-weightedget_fieldheatmap service. - Greenhouse bridge, the ROS wrapper around the course environmental simulator.
- Simulation, the Gazebo story: the same stack in low-gravity, the P3D drive quirk, and the controller-manager overlay fix.
- Web HMI & voice, the browser mission console and its 23-tool voice agent.
- Teleop & manual control, gamepad/keyboard driving, arm presets, the
twist_muxcommand-arbitration bus.
Reference
- Interfaces, every
lupin_msgsmessage and service, 11 messages and 11 services. - Operations, the hard-won runbook: bring-up order, failure modes, recovery.
- War stories, the deep-dive postmortems behind the runbook entries, traced end to end.
- Deploy & networking, systemd units and the laptop ↔ robot DDS setup.
- Demos, the recorded runs and the facility-visit footage from Tulpen.nl.
Lupin is a student project for RO47007 MDP (TU Delft). The robot source lives on a private GitLab; this documentation site is the open-source, public face of the project.