A* is traditionally implemented with using a g cost and an h cost. We modify the g cost by adding an occupancy cost using safe regions defined by the boundaries created by obstacles in 2D grid map space. Red x's represent obstacle locations as defined by a grid map structure. Purple x's are the immediate or strict safety region that has the same occupancy cost as the obstacles so that the robot will definitely plan and avoid obstacles completely. The yellow and cyan x's represent the allowable safety regions that have lower occupancy costs than the strict safety region and the obstacles. This allows A* to still plan within these regions if it needs to complete the path (also helps with very tight cases where there is very little space between obstacles.
All of the different colored * paths are start to goal implementations of A*. After doing that we implemented a method that reduces the A* full path into useful waypoints that still reflect the general path and allows us to use a PID controller to navigate the robot from the start to goal along the waypoint path. Currently we use the slope of points to determine whether each tuple of three consecutive points is collinear. The plot with the bluish-gray rectangle is the robot using PID control. I left the robot history on there to show that the robot still can be controlled easily with a PID controller using the reduced waypoint method mentioned earlier.
I was unable to upload the videos as they were very large files. Please standby for me to move my results to a better place as a portfolio.