A modular autonomous ground robot: one mobile base, interchangeable tool modules — named for a lathe turret, one machine with indexed tooling.
Status (2026-08-23): simulation phase. No hardware has been purchased or assembled yet. Strategy is to simulate everything — kinematics, sensing, navigation, coverage — before buying a single part.
| Module | Status |
|---|---|
| 1 — Lawn mowing | In development (current focus) |
| 2 — Pressure washing (tethered, pump at base) | Planned |
| 3 — Snow blowing | Planned |
Sim is treated as a falsification tool, not a validation tool — it's used to catch design mistakes cheaply (bad kinematics, TF errors, unstable inertias, coverage-planner bugs), not to certify real-world performance. Things sim structurally cannot validate (RTK fix quality, grass as a sensing/traction surface, ESC electrical noise on GNSS) are called out explicitly in the design log rather than assumed away.
- Drive: 2WD differential drive + 2 heavy-duty swivel casters (not skid-steer) — lower turf scrub, less tether/hose drag.
- Sensing: Livox Mid-360-class LiDAR mounted inverted to shrink the near-field blind zone; forward parallel stereo camera pair for depth and visual odometry.
- Obstacle detection: geometry-first (RANSAC ground-plane fit), semantics second (DNN classifier for stop/wait/proceed decisions) — the classifier is never the only thing between the blade and a foot.
- Localization: REP-105
map → odom → base_linkchain — an EKF (wheel odom + IMU + stereo VO) for smooth local motion, RTAB-Map for event-driven loop closure and relocalization. - Safety: three layers, hardware at the bottom — a wireless/latching e-stop that works with the compute board unplugged, a microcontroller watchdog independent of ROS, then the autonomy stack.
Full reasoning, physics derivations, and open questions live in docs/design-log.md.
ROS 2 Jazzy Jalisco · Gazebo Harmonic · Jetson Orin Nano Super (target compute) · Nav2 + opennav_coverage · RTAB-Map · robot_localization
Incremental: add one thing, prove one property, move on.
| Stage | Adds | Proves |
|---|---|---|
| S0 | URDF/xacro, RViz only | TF topology, frame conventions |
| S1 | Spawn in empty world | Physics stability, sane inertias |
| S2 | Diff drive + teleop | Kinematics, odom signs |
| S3 | IMU | Noise model, use_sim_time |
| S4 | LiDAR | Mount pose, self-occlusion |
| S5 | Stereo pair | Rectification, measured vs. predicted depth error |
| S6 | RTAB-Map | Map quality, relocalization after restart |
| S7 | GNSS fault injection | EKF / geofence survivability |
| S8 | Nav2 + coverage | Boustrophedon path over a polygon |
| S9 | Behaviour tree | Low battery, rain, e-stop recovery |
Current stage: see docs/design-log.md for up-to-date status.
turret_description/ # URDF/xacro, meshes (not yet created)
turret_bringup/ # launch files (not yet created)
turret_control/ # controllers, behaviour trees (not yet created)
docs/design-log.md # running design/debugging/decision log
CLAUDE.md # dev environment + conventions reference
MIT — see LICENSE.