ArduPilot successful flight simulation

A photo of successful flight as seen in Google Earth and X-plane:

Here is another ArduPilot simulation inspired by Jordi's simulation.

My simulation requires minimum additional hardware, all you need is ArduPilot connected by FTDI cable to PC.
Actual simulation runs in X-plane simulator. ArduPilot get simulated GPS data over serial, and it returns back proposed servo positions back over serial as part of telemetry info (servos can also move physically). ArduPilot also reports bunch of variables - lat/lot/alt, next waypoint, distance to it, etc.

What you need to repeat the simulation:
- Modified ArduPilot code from this blog post
- X-plane 9 demo (buy full version if you wish, but demo works just perfect, it only ignores joystick input after 10 minutes, but we control it other way so it really doesn't limit us)
- Google Earth
- ArduSimulator (developed by me), which is simple application that does following:
1) Connects to ArduPilot over serial for sending/receiving data
2) Connects to X-plane on localhost (same PC)
3) Reads data from X-plane (lat/lon/alt/course), sending these to ArduPilot as GPS sentences
4) Simulating FMA copilot stabilization on ailerons/elevator
5) Reads and displays telemetry and servo positions from ArduPilot
6) Sends servo positions to X-plane to control throttle and rudder
7) Records fly path and sends it to Google Earth to display

Here's how to repeat the simulation:
- Start X-plane, go to Menu->Settings->Net Connections, select tab Inet 3 and enable "IP of data receiver", change IP address to and port to 49001. It looks like this:

- Select Aircraft from folder Aircraft\Radio Control\GP_PT_60 (yes, we want to fly RC plane which has ail/elv/rud/thr controll)
- Select airport Innsbruck
- You can open this KML path: Innsbruck.kmz in Google Earth, which was my testing fly plan configured in ArduPilot; this will show you the waypoints
- upload compiled ArduPilot code to the board and leave it running; LOCK LED should keep flashing
- start ArduSim.exe (simulator tool); it will connect to serial port and X-plane; if it can't connect to serial, specify correct port and baudrate and press Start button
- click [Google Earth] button in ArduSim to make connection with GE
- hit B in X-plane to release brakes, and try keys A/W/C to choose various views
Now simulation should be running if everything is connected successfully, and you should see plane in X-plane to fly and visualization path & icon in Google Earth to move. Don't control plane in X-plane! ArduPilot will take-off and fly on its own.

Here's video how it all looks in action:

And complete flight path visualization for Google Earth: Flight.kmz
You can see original waypoints in white, and real fly path in yellow. And also final circulation over start point when all waypoints were visited...

Now about problems and future tasks:
- I have strong impression that controlling altitude by throttle with use of copilot stabilization doesn't work properly, this simulation showed me that plane didn't want to drop altitude from high point to lower one... see results in above flight path in GE. I'm not sure how real plane behaves (didn't went out to real world with this yet), we'll see.
- For this reason I plan to start playing with complete stabilization in ArduPilot, and controlling both elevator+throttle to get desired altitude.
- You can play with dozen of various parameters to control behavior, most obvious are PID settings for throttle/rudder in ArduPilot, but also PID values in stabilization (which is here provided by simulator tool, in real world it is FMA Copilot which you can control by its sensitivity setting). Then you can change maximal servo rotation for ArduPilot to work with. All these values make the plane fly smoother, make more precise turns, etc etc. And the settings seem to depend on actual aircraft and its physical behavior. So there won't be single settings working for everyone.
- It's somehow cumbersome to specify different altitude for various waypoints; while I converted waypoints from KML file out of Google Earth, I had to specify individual altitudes manually in waypoints.h file in ArduPilot code.

After all, I'm pretty happy to see the plane flying in simulator and doing the task! Note that it's ArduPilot doing the navigation work. And in a real airplane, this simulation allows to reuse the ArduSim application as a base station, getting telemetry from plane over Xbee modem and displaying what it does as well as showing path in Google Earth.

Views: 4844

3D Robotics
Comment by Chris Anderson on February 1, 2009 at 5:56pm
SWEET! Fantastic stuff, Michal. Can't wait to give it a go when I'm back home.
Comment by Saiful Azuwan on February 1, 2009 at 6:11pm
Thanks Michal B...
Comment by Reto on February 1, 2009 at 6:39pm
Michal, I see you went pretty fast with all this! I could not keep up. Thanks much for the work you're sharing here. I'll test it as soon as my AP board comes in.
Last thing we have to think about for a decent base station is how are we going to get Google Earth sat pics when we're in the field without any Internet access? Any idea?
Comment by Matt Fisher on February 1, 2009 at 7:34pm
Epic work! Thanks so much.

Comment by Jordi Muñoz on February 1, 2009 at 11:11pm
Excellent Michael!

Hey how you did to get the UDP data in the same PC? When i tried with Labview said "The port is currently in use". Any idea?
Comment by Michal B on February 1, 2009 at 11:54pm
Reto: Google Earth seems to work in offline mode if you have cached data. So configure bigger cache in GE, fly a bit around your waypoints, and it should run without Internet.

Jordi: It creates connectionless nonblocking socket which just listens to traffic or sends something there.

Comment by Jordi Muñoz on February 1, 2009 at 11:57pm
Ohh!! And about Google Earth, did you simulated a Server to display real time data?
Comment by Michal B on February 2, 2009 at 12:12am
Part with Google Earth works very simply - simulator opens GE with KML containing "network link" KML, refreshed every second. But the link is really to a local KML file, then I just write stuff to the KML file, and GE makes the work to re-read it (from file). Every second there's updated path and plane icon position.
Comment by Reto on February 2, 2009 at 12:13am
Good to know the cache can contains what's needed for GE to fly offline. Thanks.
Michal, by the way, in X-Plane demo, I can't get rid of the "Buy full reminder message" sticking in the middle of the screen when demo mode 10min joystick is over. Could you help me with this?

Comment by Jordi Muñoz on February 2, 2009 at 12:16am
Hoo!! Well i will try to understand it, many thanks!!


You need to be a member of DIY Drones to add comments!

Join DIY Drones

© 2018   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service