@import url(http://kodlab.seas.upenn.edu/pub/skins/sinorca/basic.css); @import url(http://kodlab.seas.upenn.edu/pub/skins/sinorca/layout.css); @import url(http://kodlab.seas.upenn.edu/pub/skins/sinorca/sinorca.css);
Phillip Dupree, Columbia University (visiting scholar via the SUNFest program)
This synopsis documents the process of making a mobile robot autonomous by integrating a global positioning system (GPS) module. The ultimate goal of this autonomization is to have the mobile robot follow a breadcrumb path of GPS way points.
I first designed and simulated a linear control system. The linear control system decided upon is one in which only the orientation of the robot is controlled, and the velocity is assumed constant. The orientation is controlled by a simple equation with calculates the difference between the robot’s current orientation and the desired orientation (the angle from the robot’s current position to the destination point), multiplied by a gain. I then upgraded my control system to smoothly round corners, by adding a second phrase to my equation for the change in theta which takes into account the desired orientation of the waypoint after the one the robot is currently heading towards. The closer the robot moves towards the nth way point, the stronger the influence of the second part of the equation. The controller gently rounds corners, leading to a more efficient controller.
In order to use our control system, I then converted the latitude and longitude given by the GPS into Cartesian coordinates. The formulas draw the angular coordinates onto a flat, two dimensional plane that is, in reality, tangential to the earth’s surface. However, the linear control system could not be used directly by the robot; in order to be tested, the controller had to be adapted into a Python code that the robot could utilize. The Python code was only a rough approximation of the sophisticated controls detailed in the previous section.
The Python code that was eventually used to control the robot first calculated the robot’s orientation, theta, by basic trigonometry. It took the tangent of the difference on the y axis and the x axis of the robot s last two coordinates. It then calculated the optimal orientation theta star, the angle from the robot’s current position to the destination point, also utilizing basic trigonometry. If theta star was greater than theta the robot was commanded to turn by −1 (as quickly as possible) to the left, and vice versa. Also by simple trigonometry, the robot calculated the displacement from its current position to the destination point. Once some certain proximity to the destination point was reached, the robot would either start navigating toward the next way point, or sit down if the final way point had been reached. The necessary proximity was first set to five meters, then halved to two and a half meters. In both cases the robot reached this proximity and then continued on to the next way point.
The autonomization was ultimately a success. Using a GPS module, a linear control system, and basic trigonometry in the end, a code was designed that, given the absence of obstacles, could autonomously navigate a hexapodal robot from its current position to any set of multiple GPS way points.
Copyright Kodlab, 2017