Self Guided Rover
It is a self guided rover which is work based on GPS data. In this rover no need to control rover by any external device.
Story
Driver-assistance systems and fully autonomous vehicles could address the global challenges of traffic congestion and reduced road capacity. Although the field of autonomous transportation is growing rapidly, system complexity and cost have delayed progress. This project attempts to mitigate these issues through the development of a scale model robot that utilizes the sensors for autonomous navigation. Designing a model robotic system is simpler and more cost-effective than developing one for a full-sized vehicle. The system utilizes the Arduino IDE software framework, which provides a library of modular and customizable components. Further work is needed to confirm the feasibility of using these sensors. Ideally, as smartphones continue to improve in computational power and sensor accuracy, it will be possible to use them as integral components in autonomous systems.
A small rover is designed to drive directly to a GPS waypoint. Critical to the project, a small GPS unit is mounted on the rover’s surface. Location data is converted to a usable form and a path calculated. The car makes an estimate of how far to turn, then re-calibrates its location. This process continues until the car has reached its destination. The project utilizes the Haversine formula to calculate the distance between two latitude and longitude points. Using the heading determined by the GPS proved highly inaccurate; I chose to mount a compass module to the car, reducing the need to constantly re-calibrate to correctly estimate the car’s heading.
Schematics
Hardware
Arduino uno:Arduino is an open-source electronics platform based on easy-to-use hardware and software. Arduino boards are able to read inputs - light on a sensor, a finger on a button, or a Twitter message - and turn it into an output - activating a motor, turning on an LED, publishing something online. You can tell your board what to do by sending a set of instructions to the microcontroller on the board. To do so you use the Arduino programming language (based on Wiring), and the Arduino Software (IDE), based on Processing.
GPS:- The Global Positioning System (GPS) is a worldwide radio-navigation system. The GPS receiver gets a signal from each GPS satellite. The satellites transmit the exact time the signals are sent. By subtracting the time the signal was transmitted from the time it was received, the GPS can tell how far it is from each satellite. The GPS receiver also knows the exact position in the sky of the satellites, at the moment they sent their signals. So given the travel time of the GPS signals from three satellites and their exact position in the sky, the GPS receiver can determine your position in three dimensions – east, north and altitude.
Magnetometer:- A magnetometer is used as a compass in Mobiles Phones, Navigation systems in vehicles to indicate directions. A magnetometer is used for measurement of magnetic field direction in space. Most navigation systems use electronic compasses to determine heading direction. It has several types such as fluxgate, magnetoresistive, magneto-inductive and others.
Motor Driver (L298N):- The L298N is a dual H-Bridge motor driver which allows speed and direction control of two DC motors at the same time. The module can drive DC motors that have voltages between 5 and 35V, with a peak current up to 2A. It also control the back EMF of DC motor.
Convert Compass Data Into Heading
We get compass data in the form of axis: x-axis, y-axis, z-axis. So we have to convert that data in to Heading using Haversin Formula. This Heading value is in degree.
Heading = atan2(x, y) / 0.0174532925
Convert Compass Data & GPS Into Bearing
To send rover at destination we have to give GPS Coordinates to rover. This Coordinates are in form of Bearing. We will do this by converting GPS and Compass data in to Bearing by Haversin Formula.
x = cos(latd)*sin(deltalog);
y = (cos(latc)*sin(latd))-(sin(latc)*cos(latd)*cos(deltalog));
bearing = (atan2(x, y))*(180/3.14);
Heading To Bearing Retio:- This is a retio of Heading value to Bearing value which use to deside in which direction roverhas to take turn. According to Final value rover will turn either left or right. If retio is in between 0 to 1 rover will go forward.
Finalv = heading/bearing;