I was tasked to create an Autonomous Delivery Robot, serving the purpose of delivering/retrieving "packages" to and from set locations. The robot would need to be able to traverse over any sort of rough terrain (grass, woodchips, gravel, uneven surfaces etc.), while having the capabilities to navigate through a maze, and to avoid obstacles along its path.
The name chosen for my robot is "BOTZILLA"!
The initial iteration of Botzilla focused on achieving accurate dimensioning and ensuring seamless integration of all components onto the robot.
The second iteration integrated ultrasonic sensors, and mechanical bumpers for maze navigation/obstacle avoidance
The final iteration focused on optimizing the robot. New wheels were designed and 3D Printed, mechanical bumbers were redesigned to be smooth, implementation of a DC-DC buck converter, incorporation of a larger LiPo battery, and upgrading to higher torque motors.
A PID controller was implemented to allow for precise wall following and obstacle avoidance. The P-proportional, I-integral and D-derivative gains were tuned in concurrence with real life testing to find the precise values to keep the robot on path, achieving an almost perfect 90% success rate of robot staying on the path of least resistance.
P - Proportional: Kp*error;
P, is the response to the current error, increasing it can make the system respond more quickly, but can also cause overshoot
I - Integral: Ki*(+=error);
I, is the response to the accumulated error past over time, and helps to reduce steady-state-error. An anti integral windup was implemented to set a cap on the integral term, as it can continue to accumulate error even after the robot is back on track
D-Derivative: Kd*(error-previous_error);
D, is the response rate to changes in error. This gain provides a damping to overshoots/oscillations. However, if too high, the derivative gain can amplify the noise from the system.