So, I'm developing a ground station for iOS devices (iPhone/iPad) and after making a lot of progress, I came upon a major stumbling block. I can not wrap my head around how the mavlink protocol works. The iOS side of the project is easy but i'm stuck on how the messages are generated/formatted.
Btw, I already worked out how to send serial communications to and from the iPhone (Jailbroken) and I'm finishing up an xbee docking prototype that attaches to the back. I just don't have an ardupilot mega yet and won't have one for a couple months. I really want to start working on the program so I need any help that anyone can offer.
Thanks,
Andrew
Replies
I don't understand... why would you deal with a company that would try to rip you off like that? $10k to use the bluetooth device you already paid for?
hi there, I have interested in your project, and i have study Mavlink protocol by myself and also have some experiences of developing Obj-C, can i help you in your project?
Have you tried to connect to a APM yet? To see how the arduino handles the code.
This is me testing the iPhone serial port using two xbees and the arduino serial lcd example. It works like a champ! and now its time to keep working on the main app!
If you do an iOS app I'll be the first to buy it :-) But please include a Bluetooth-Serial option - I use Bluetooth-APC220 convertor (no need for a XBee dock) - the same can be done with XBee and it's much more universal (you can connect anything that has bluetooth - which is, well, everything :-))
Making a convertor costs $8, dock is clumsy and connector specific...
Thank you so so much!!!! its like a lightbulb just went off in my head!
But basically, I would interpret the heartbeat message using the parameters defined in all the xmls?
And I would write code for each type of message I receive? Like if i got a heartbeat message I would make make sure the GCS is setup for that type of aircraft and the type of autopilot? and set a timer so that if I don't get a heartbeat ever "x about of time" passed, I alert the user to take manual control immediately?
P.S.- I am planning on making the Xcode project open source on my website but do you think it would be asking too much to charge $0.99 or $1.99 for the prepackaged version on Cydia?
It may not help much, but I wrote a mavLink wrapper for android phones. Looking at that stripped down code might give you the insight you need to do the same on iphones
http://code.google.com/p/copter-gcs/source/browse/# copter-gcs/jni/
parseFunctions.h is a good start
The basic idea is that you receive a byte, and push it into mavlink, until it says good decode (gets you a mavlink_message_t& message), at which point you would (example is for a heartbeat packet):
message.msgid gives you a constant, i.e., MAVLINK_MSG_ID_HEARTBEAT so you know what type to decode
and read the appropriate fields from inp struct.
on the way out (to send), simply pass the fields as (again for a heartbeat):
and any remaining parameters are what is being sent out, as per the headers. After that you can just bang out the bytes over the xbee.
Anyway, might be worth a look, as it does exactly what you want, except it does it on android.
Looking forward to seeing a GCS for iOS:)
Cheers,
Bart.