Robot Navigation Final Project

Phases 1 and 1.5

        Over the course of the term, I worked on a simulation of a turtlebot navigating a known maze in Gazebo and Nav2. I implemented forward and inverse kinematics, acceleration and deceleration control, A* path planning using a Euclidian-distance heuristic along with a "distance + proximity to obstacle" edge cost, and a planned path simplifier to allow the robot to smoothly drive diagonally through alternating pathways. ROS2 was critical in this project, and allowed for simple communication between the robot and my laptop as well as between each of the robot's seperate nodes.

        During the final project, I worked with two teammates. We implemented SLAM for the robot to use its LIDAR to map the maze and localize itself within the maze. We implemented a frontied identification algorithm that looked at unknown grid cells on the map that were near known, safe grid cells and identified them as frontiers. We then gathered frontiers into "chunks" so we could implement a decision algorithm to explore larger, closer frontier chunks before smaller, farther ones. Additionally, we added a risk map to the robot's navigation so A* would avoid walls with clearance and path around tight areas that could result in wall collisions when it can. Finally, the robot autonomously concludes when it has "solved" or fully explored the maze when the frontier count drops below a calibrated value, and uses A* to path to the point it was dropped in at, its "home" position.

        In parallel with its homing, the robot saved the complete map to a .pgm and .yaml file to our laptop for later reference. Another notable accomplishment is that we were in the top 10 fastest teams to complete Phases 1 and 1.5.

Phase 2

        Phase 2 of the final project was to solve the "Kidnapping Problem" where the robot loses its localization and needs to re-localize itself within its known environment. To simulate this the lab staff would pick up the robot and place it in a random location within the maze. We would then be required to make the robot re-localize itself and path to a goal location that the course staff would select using nav2 on our laptop.

        We implemented AMCl, to run the robot's localization. AMCL uses a particle filter to localize the robot within a known map. Which is why we saved the map from Phase 1. AMCL uses the robot's odometry and LIDAR to update the particles and converge on a location. We implemented a separate program for the kinapping problem that would start AMCL and a custom program that would spin the robot in a circle until AMCL converged on a location, and listened for a goal pose from our laptop.

        Our algorithm and calibration for Phase 2 worked so well that we were able to complete the phase in about 30 seconds, which was the fastest time in the class. We were also able to complete Phase 2 with a 100% success rate, and our record time was under 20 seconds.