About the Project
University of Maryland - Summer 2026
Course: ENPM 808 Independent Study (faculty-sponsored, ten-week build)
A 3D-printed four-wheel-drive robot that maps an indoor space with 2D lidar SLAM, navigates it with Nav2, and drives a looped waypoint patrol unattended for 20 minutes at a time. The whole stack runs on a single Raspberry Pi 5 under ROS 2 Jazzy, with no offboard compute. I built the chassis, the electronics, the Arduino firmware, and the ROS 2 software.

Project Highlights
- Lidar SLAM with slam_toolbox (5 cm grid) and Nav2 navigation using the Regulated Pure Pursuit controller, plus a separate AMCL localization mode against a saved map
- robot_localization EKF fusing wheel odometry with MPU-6050 IMU yaw rate; with EKF-fused odometry feeding SLAM, the robot closed a tape-measured 1 m square to within 4.7 cm in the map frame, versus 1.37 m with encoder-only odometry, which lost localization at the second turn (one run each)
- ros2_control hardware interface in C++ that bridges serial commands to Arduino Nano Every firmware running per-side velocity PID, encoder odometry, and a 500 ms command watchdog
- Patrol node with a Patrol action, waypoint selection, and typed run metrics (goals sent, failures, operator overrides, skipped legs) so the no-intervention claim is measurable
- Found with a tape measure that wheel odometry under-read distances by a factor of two, an error the automated tests had not caught because the constant cancelled out of every internal check, and recalibrated to within 0.1%
- Nine-package ROS 2 workspace with a Docker build-and-test pipeline, KiCad schematics, a 3D-printed chassis, and step-by-step setup guides for the Pi 5 and firmware
Results
Twenty-minute unattended patrol acceptance test: 1201 s of operation, 37 of 38 navigation goals succeeded and none failed (the last goal was still in flight when the timer stopped), zero operator overrides, 88.7 m driven.
Technologies Used
- ROS 2 Jazzy, C++, Python
- slam_toolbox, Nav2, robot_localization (EKF), ros2_control
- Raspberry Pi 5, Ubuntu Server 24.04
- Arduino Nano Every (PlatformIO firmware)
- RPLIDAR A2M12, MPU-6050 IMU
- Docker, KiCad, 3D printing
← Back to All Projects