Mavlink Basics

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.



You need to be a member of diydrones to add comments!

Join diydrones

Email me when people reply –


  • the dock connector requires root access and apple charges tens of thousands of dollars to have a iPhone bluetooth device but wifi is allowed

    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? 

     <message name="HEARTBEAT" id="0">
         The heartbeat message just shows that a system is present.
         <field name="type" type="uint8_t">Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM)</field>
         <field name="autopilot" type="uint8_t">Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM</field>

    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 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


    mavlink_heartbeat_t inp;

    mavlink_msg_heartbeat_decode(&message, &inp)

    and read the appropriate fields from inp struct.

    on the way out (to send), simply pass the fields as (again for a heartbeat):

    mavlink_message_t& msg

    uint8_t system_id = 255;

    uint8_t component_id = 0;


    mavlink_msg_heartbeat_pack(system_id, component_id, &msg,type, autopilot);" where 


    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:)



This reply was deleted.


DIY Robocars via Twitter
7 hours ago
DIY Robocars via Twitter
8 hours ago
DIY Robocars via Twitter
RT @breadcentric: Bingo card for AWS DeepRacer Finale, starting in 10 minutes on ! #AWSDeepRacer #DeepRacer #Machin…
11 hours ago
DIY Robocars via Twitter
RT @NVIDIAEmbedded: It's #NanoFriday - the RB-0 uses the same suspension concept as #NASA's newer differential-bar rovers. This educational…
11 hours ago
DIY Robocars via Twitter
RT @chr1sa: On May 22, we're returning to in-person AI @DIYRobocar racing at @circuitlaunch. The Amazon @awscloud DeepRacer team will be pr…
DIY Robocars via Twitter
RT @breadcentric: On my CV: Hobbies: Training bananas to race on tracks #AWSDeepRacer #DeepRacer
DIY Robocars via Twitter
RT @breadcentric: See how the April AWS DeepRacer races have ended and a couple bits of news: #AWSDeepRacer #Machin…
DIY Robocars via Twitter
RT @sunilmallya: Representation Learning +Instance Transfer to learn new reward functions along with advantage based filtering of new exper…
DIY Robocars via Twitter
Apr 27
DIY Robocars via Twitter
Apr 27
DIY Robocars via Twitter
RT @f1tenth: Sliding (autonomously) into the weekend like ... 🤖😎 #f1tenth #robots #AutonomousVehicles @OpenRoboticsOrg @NVIDIAEmbedded @Aut…
Apr 25
DIY Robocars via Twitter
RT @chr1sa: One of the problems with autonomous car racing is that watching software drive is not a very exciting spectator sport. To help…
Apr 25
DIY Robocars via Twitter
RT @SmallpixelCar: Replaced AGX Xavier with @NVIDIAEmbedded Jetson Xavier NX. Now both cars look fast and clean
Apr 25
DIY Robocars via Twitter
RT @chr1sa: Yesterday we had a record number of competitors (36) in our monthly @DIYRobocars virtual autonomous car race. We kept it going…
Apr 25
DIY Robocars via Twitter
Apr 16
DIY Drones via Twitter
RT @chr1sa: After more than a year of only virtual races, @DIYRobocars returns to the newly renovated @circuitlaunch on May 22 for the resu…
Apr 11