RBE 3002 Unified Robotics IV: Mapping & Localization

For my Unified Robotics IV (RBE 3002) class, I programmed a ROS 2-powered TurtleBot3 to tackle autonomous navigation. We started by writing a custom kinematics controller in Python, prioritizing a predictable “rotate, move, rotate” approach to reliably hit target coordinates rather than overcomplicating the drive logic. From there, my team and I built an A* search algorithm from scratch that calculated the robot’s Configuration Space (C-Space), applying safety padding around walls so the robot could dynamically map out collision-free routes.

For the mapping phase of this project, my team and I integrated the ROS 2 slam_toolbox to generate a real-time 2D occupancy grid from LiDAR scans and odometry. The primary engineering challenge was autonomous exploration.

My team and I implemented a frontier exploration system that continuously analyzed the live SLAM map to identify frontiers, defined as the boundaries between known free space and unexplored areas. By calculating the Configuration Space (C-Space) on the fly and padding obstacles to account for the robot’s physical size, our system dynamically generated safe A* paths to these new frontiers. This drove the robot to systematically explore until the entire maze was completely mapped.

We stress-tested the system against the “kidnapped robot problem”. When the robot was manually moved to a random location, the navigation stack parsed the new LiDAR data against the existing map, re-localized its coordinates, and navigated to a specified destination. This required our team to integrate ROS 2 mapping tools with custom path-planning logic to build a fully autonomous, self-recovering system