
Autonomous Rover
ROS 2 · SLAM · Navigation · 2026
- Role
- Navigation & Controls Software
- Timeline
- Jan 2026 – Apr 2026
- Team
- Team of 3
- Tools
- ROS 2, Python, C++, Arduino, Nav2, LiDAR SLAM
Built a ROS 2 rover that maps a room with LiDAR, localizes itself without drift, and navigates it autonomously.
The Problem
We wanted to build an autonomous mobile robot from the ground up. It had to localize itself and navigate an unknown space in real time, not rely on a pre-mapped route or a joystick.
My Approach
I worked with two teammates and built the ROS 2 stack bridging Python and C++ navigation nodes to low-level Arduino motor control, over a custom serial bridge I wrote myself. I integrated an SL LiDAR for 2D SLAM mapping, wrote dual-track encoder ISRs for wheel odometry, and tuned the PID motor controllers by hand. Nav2 handled path planning, and I built a joystick teleop mode for manual runs when we needed one.
Outcome
The rover localized without drift and built usable SLAM maps in real time. It navigated test environments autonomously through Nav2, no manual correction needed.
System Architecture
The rover runs a distributed ROS 2 graph bridging software to hardware: a joystick teleop node and the LiDAR driver publish over the DDS pub/sub layer, two custom bridge nodes translate that into the Arduino's serial protocol and timestamp-corrected scan data, and SLAM toolbox and the Arduino's own control loop consume them to build the map and drive the wheels. Hover over each node for details.
Teleop Node
teleop.py
LiDAR Driver
sllidar_ros2
ROS 2 DDS Middleware
Publish / Subscribe network
Scan Relay
scan_relay.py
Serial Bridge
serial_bridge.py
SLAM Toolbox
online_async_launch
Arduino Microcontroller
robot_controller.ino

