APM is the new name of ArduPilot which was the first Arduino based autopilot which won some award and became popular. It actually runs on a small STM32 processor now and with the help of 3DRobotics the Pixhawk arrived (I don’t know the history completely, if 3DR made the Arduino thing too, perhaps).
Anyway, since then we’re on the next next generation and even Pixhawk is “old”. The original Arduino based boards (APM 2.x) are officially no longer supported. And 3DR appear to be going in the direction of DJI, making expensive, consumer (plug and play) drones, namely the “Solo”. The Solo actually is something like a Navio, and that brings us here…
So all the APM guys are left a bit high and dry here… 3DR making their 1000 euro non open source drone. With Navio and other Linux based autopilots, APM seems to have a next gen future even if 3DR don’t release any open source successor to the Pixhawk.
So DJI announce a software development kit, and not surprisingly 3DR follow with “DroneKit”. This is totally designed for their Solo I think from a marketing perspective at least. I really have no idea if 3DR want or allow this to run on Pixhawk. Now there are two firmwares for Pixhawk, the one from 3DR and the one from the open source APM team.
So I’d guess DroneKit only runs on 3DR’s Pixhawk firmware if it runs on Pixhawk at all. Anyone else know that?
To be honest, I totally avoided all the “DroneKit” stuff as soon as I relealized is is just a marketing trick. I mean if you have a truly open source autopilot you should be able to hack right down as low as you want. DJI is a closed product and their API seems like an attempt to claim some kind of open source.
So really, what do you think? Do you really want to use some commercial “API” they “allow access to functions” rather than directly programming something and deciding if you interact with MAVLink or direct code in a “hook”.
So MAVLink… is the only real low level API besides the HAL. The HAL is just to get APM running on different hardware. MAVLink is like a publisher/subscriber API where you send it a message to register for events then it keeps sending you back information at the required interval. So it’s used for OSDs, ground station and everything like that. It also has a limited command set (but already quite powerful) so you can tell the quadcopter what to do. But it doesn’t cover all scenarios, e.g. telling it what an external sensor value is, it presumes all the data is already on the inside and you are just listening or sending a few commands (e.g. go to position, change mode, etc…).
MAVLInk is extremely easy to get into, because it’s a very basic protocol and you can connect via serial or network. But if you really need to inject data in which MAVLink has no command for, or you need to listen to data so fast that too much processor time is lost converting to/from MAVLink messages, the HAL “hook” appears to be the last resort.