This robot counts with a multiplataform PCB that allow the programming to be done with Arduino Uno R3 or with STM32 Nucleo.

An Ulstrasonic Range measurement module was mounted in a 9g servo to be possible to detect obstacles in front, left or right of the robot. An inertial measurement unit (IMU - MPU9255) was used for localization in map and the ESP8266 was used to send the data path to an UDP server in LabVIEW.

A map made of old boxes was constructed to test the algorithms and the results shows pretty good.

The three bug algorithms are described below:

******************************************************************************************************

Algorithm one - Bug2


Bug-2[1] is a classical bug algorithm version. First, the robot traces a line 'M-line' towards the goal 'G' and follows the line until the goal is reached or an obstacle is detected, the point that the robot has detected the obstacle are the hit point 'H'. The robot then change his behavior to follow-the-boundary until one of the following conditions occurs:


i: The robot reached 'G', the process stops.
ii: The robot returns to 'M-line'.
iii: The robot has done a closed loop and returns to 'H', the objective is unreachable and the process stops.


If the second condition is true, the robot leaves the object boundary and comes back to follow 'M-line'. The process repeats indefinitely. 

****************************************************************************************************

Algorithm two - DistBug


The main difference of Dist Bug[2] algorithm in relation of Bug-2 is that the robot must have a maximum range sense detection to predict if the path towards  'G' is free or if there is a wall blocking the path. When the system starts, the robot assumes move-to-goal behavior until it faces an obstacle just like the previous one. 
The main difference is that while the robot behaves boundary-following, it will sense if there is an obstacle towards 'G'. While no obstacle is sensed, the robot starts to calculate the actual distance to 'G' and the distance of the next step to 'G'. If the path towards 'G' it is free and the distance of the next step is bigger than the actual distance, the robot change his behavior to move-to-goal. The step length is a predefined constant. 

***************************************************************************************************

Algorithm three - Intelligent Bug Algorithm


The Intelligent Bug Algorithm 'IBA' [3] is an optimization of the Dist-Bug algorithm. The condition of Dist-Bug which compares the next step distance to goal with the actual distance to goal can takes the robot far away from the goal, the 'IBA' solve this problem. As well as the Dist-Bug algorithm, the robot starts behaves move-to-goal until it faces an obstacle, then it change to boundary-following behavioral and continues to check if the path towards 'G' is unblocked, if no obstacle is sensed, the robot recalculates the minimum path and change his behavior to move-to-goal.

[1] Lumelsky, Vladimir J., and Alexander A. Stepanov. "Path-planning strategies for a point mobile automaton moving amidst unknown obstacles of arbitrary shape.", Algorithmica 2.1-4 (1987): 403-430.

[2] Yufka, Alpaslan, and Osman Parlaktuna. "Performance Comparison of the BUG’s Algorithms for Mobile Robots.", International Symposium on INnovations in Intelligent Systems and Applications (INISTA'09). 2009.

[3] Zohaib, Muhammad, et al. "Intelligent bug algorithm (iba): A novel strategy to navigate mobile robots autonomously.", arXiv preprint arXiv:1312.4552 (2013).