Go Down

Topic: Arduino GPS waypoints nav for UAVS FINAL!!! (Read 34735 times) previous topic - next topic


Jan 22, 2008, 07:15 pm Last Edit: Jan 22, 2008, 08:20 pm by jordi Reason: 1

You should read the manual of the GPS device: http://www.ohararp.com/files/EB-85A_UserManual.pdf

It has no temp sensor, no gyro and no pressure sensor. You need to get separate items. The GPS can give you information about where it is. The Arduino is fast enough to handle the GPS information, but doing all these things (ie. Kalman filter, etc...) requires probably a lot more memory (program space)

Thanks jds  ::)

SOrry if i confused any body, i trying to do my best to explain this, but remember that is not my first language.

I never said the GPS is build in with gyros, pressure sensors, etc. etc.  :-?

I tried to said that if you want a super precision navigation for a helicopter (to void random movements), you need to add kalman filters to the GPS +Magnometers+Gyros+Accelerometer. (gyros need to be compensated if temp changes occurs, gyros have a build in temp sensor) to reduce error.

"Why gyros + accelerometers + GPS + magnetometer? It is possible to do a stability augmentation system (Helicopter) with just the two gyros and two accelerometers (as we have done), but for control of all axes (attitude, altitude and position), more sensors are required. The error in a pure inertial position estimate is huge over time, but fairly good for short term (less than one second) solutions. The GPS position is reasonable and DGPS is fairly good, but the update frequency is very slow (1 Hz) and high-latency (> 1 second). Using both of these together allows for a better solution than either alone."

This is just if you want to make a fully automated Helicopter. The Arducopter project is just to make a semi-autonomous helicopter. Using just gyros+acceletometer+Kalman, to make it easy to fly to everyone.  But i will continue with this project letter, maybe in 1 or 2 years. Right now i working in arduplane.

But read this carefully: You don't need GPS+Magnometers+Gyros+Accelerometer, to use it successfully in an airplane.
You only need Acceleromter+GYros+KalmanFIlters to have good virtual horizon. And arduino can handle it easily. The GPS is used apart, for speed, and heading (to obtain heading in degrees you need to be in movement, helicopters usually are stop in the air, so that is the reason way you need a magnetic compass in that case)  and coordinates. The coordinates tell to arduino the currently position in the world and with some math tell us the direction we need to head to reach our destination, and we can program arduino to do it all automatically like a real autopilot.
Gps give us the altitude too... but is not accurate (error +-10Meters), thats the reason why i going to use a pressure sensor (error less than a meter), and program arduino to hold altitude, bu we need the IMU.

IMU = Accelerometer(hardware)+gyros(hardware)+kalmanFilters (software), is used to create a virtual horizon to arduino.
A real airplane use it for this:

But arduino Can't see, only read numbers in degrees (30 Degrees to the left, etc).
We need it to stabilize the airplane, and give "eyes" to arduino to be able to make turns with out crashing (obviously) to reach our heading target.



but since it can handle only gps, i can make a gps only controlled helicopter, considering i dont put anything else in the plane ( maybe except for an altimiter, so it doesent try to fly on the ground ).

does that sound right?

and maybe i can just send the coordinates to a lcd just to see where i am...



but since it can handle only gps, i can make a gps only controlled helicopter, considering i dont put anything else in the plane ( maybe except for an altimiter, so it doesent try to fly on the ground ).

does that sound right?

and maybe i can just send the coordinates to a lcd just to see where i am...

Are you making a plane or helicopter?

You probably want an engine/motor, some control systems, some fuel/batteries...

In all seriousness, it would be a pretty challenging and expensive project.


Jan 29, 2008, 03:35 am Last Edit: Jan 29, 2008, 03:35 am by zitron Reason: 1

This looks like a very ambitious project. I'm working on something similar. I've just finished designing and building (from scratch) a 1.6m glider that I ultimately want to turn into a UAV. I optimized the plane performance for long duration cruise, and carry moderate payload (I did aerodynamics in uni). It works ok so far, I am still in the process of getting used to flying it!

I'm taking much smaller steps toward my goal of an UAV. I'm still on step 1: make sure the plane flies! The next step will be a simple automatic control project. I was thinking about using a single accelerometer mounted so that it senses acceleration along the wing axis, acting like the side slip indicator in a full scale airplane, and using that information to actuate the rudder to cancel the side slip - therefore you'd have a "automatic rudder". Perhaps I can even mix in the RC transmitter rudder signal for full fly-by-wire.

Now, for the cheapest (perhaps simplest) proper auto pilot you would need the following information:

1. Air speed: for this, the GPS will not be adequate, because it gives you GROUND SPEED. The GPS might tell you your speed is zero, but in fact you are flying at 30kph against a 30kph head wind, or if you could be going straight up at Mach 3! You can get airspeed by using a pitot tube and a pressure sensor, or some kind of a spinning propeller thingie with a tachometer (obviously more drag).

2. Altitude: maybe the GPS is good enough for this, I don't know but I'm a bit skeptical, since it goes up and down 20m sitting on my table. I got a MPX2102 pressure sensor and built an opamp circuit for it, it's much more sensitive even using arduino's 10 bit A/D (tested it in an elevator!), but the problem is that it drifts over time, not sure if it's cause by atmospheric pressure changes or just bad circuit design. If you differentiate altitude over time, you get climb rate, if you combine airspeed and climb rate, you can "kind of" figure out pitch attitude.

3. Yaw rate: you don't technically need to know the roll angle, since there is a simple equation to calculate the roll angle from your air speed and yaw rate. For this, it will help to use the accelerometer to do the automatic rudder to make sure the turn is fully coordinated. To get yaw rate, you can simply differentiate the GPS heading over time, or even better use a gyro for much faster response. This will not work if you go into a steep bank, or inverted flight, so don't command the plane to do that!

4. Heading: for this GPS should do, if you want the plane to go somewhere instead of just holding level flight.

All together, one would need a GPS, 2 pressure sensors, a gyro and an accelerometer. I think this should be doable within $200. No complicated IMU, Kalman filtering and such!

Oh, and what's this 55 channel GPS? Did I miss something? I thought there are only 24 satellites in the sky, with half of them behind the earth at all times, what's the point of 55 channels?



Feb 01, 2008, 02:40 am Last Edit: Feb 01, 2008, 02:49 am by jordi Reason: 1
ABout 50 channel GPS:

"50 channels like ublox some people say that is less than 2 meters of error. (but letter this GPS is going to be more accurate, because is build in with the new GPS technology called Galileo from Europe: http://en.wikipedia.org/wiki/Galileo_positioning_system )."

i mean someday we gonna have more satellites , so ublog is a good investment for the future  :D .

Nice, can you share your altimeter??? just to see.

I thought about pitot tubes, but is difficult for me  ;D. So maybe with ground speed is enough, because the average of time ill fly in straight line, not making acrobatics.

About your altimeter you need a temp compensation maybe? About my altimeter i don't want to reinvent the wheel, so ill use the sparkfun altimeter with temp compensation  ;).

Read this, maybe help you:



Great job on this project Jordi! From the looks of it, you wont have to worry about money forever, when someone offers you an Engineering Job!  :D

This is very inspitational!


jordi, the site where you have all the code (google pages?) isn't working, it says   "" This site has been disabled for violations of our Program Policies. If you feel this disabling was in error, please visit our contact page to let us know.  Contact Us""



I haven't seen Jordi here for a while. I guess he has 'left the building'. Maybe you can contact him at http://www.diydrones.com


i need a code for IMU 5 DOF for kalman filter.
i only need X and Y axis degrees for balancing something.
if its on the table x-y 0 degree, if its on the wall only x or y is 90 degrees.
something like that.
anybody has a code for that? i can pay for it please


Uhh long time! Ok I have found one of the links for the WP math:


Let me search the other files, I will let you know if i can find it...


Hey, I am just trying to output GPS messages onto the serial monitor and I am wondering if you can help me Jordi. The GPS I am using is the MN5010HS.



@knuckles904 Thank you very much. This is exactly what I need.


I have another issue. I understand the code and got it to compile correctly and I ran the static_test example to understand the messages; however, I am now trying to edit the gps_test example to fit my MN5010HS GPS. I suck terribly at hardware so I do don't get anything to output except the messages in the setup function. So for any hardware adept people this is the datasheet http://www.sparkfun.com/datasheets/GPS/MN5010HS_DS_080905.pdf and for my connections I have tried TX to TX and RX to RX and TX to RX and RX to TX with VCC at 3.3 and ground at ground.

Go Up