Autonomous Mobile Robot Navigation in ROS 2
My completed final-year thesis project. It implements autonomous path planning for a mobile robot in a ROS 2 (Jazzy) and Gazebo simulation environment.
The robot plans across a 2D occupancy grid that is built dynamically from sensor data, where cells can flip between free and occupied at runtime. The design is split in two: a dependency-free, pure-Python Core library of classic search algorithms — A*, Dijkstra, BFS, and DFS behind one common interface — and a ROS 2 integration layer built around it. The weighted planners (A* and Dijkstra) honour a per-cell gradient costmap and disallow corner-cutting, so paths stay realistic for a robot with physical width.
A clean adapter layer converts between ROS nav_msgs (OccupancyGrid ↔ Path) and the Core data structures, keeping Core pure and unit-tested. Correctness is validated with unit tests, ROS-free line / C-obstacle / maze scenarios, and behavioural checks in Gazebo.
The GitHub repositories below hold the finished thesis version, public and complete; I am carrying the work further beyond the thesis scope on GitLab.