C++ SDK for ANAFI

I’ve been searching the forums for information about a C/C++ SDK for the ANAFI drones and I’ve found a few responses from @ndessart regarding the fact that Olypme is built on top of libarsdk and libarsdkctrl.

That said, is there documentation that will help me develop my application on top of that or am I left to reading the source for those libraries and Olympe?

FYI - I’m brand new to the Parrot ecosystem, having spent all my time with ArduPilot/PX4 drones.

Thanks for the help!

Are you building an app for Windows specifically?

No, this is a Linux application. We’ve got a lot of other autonomy code that is C++ based that we’d like to use with the Parrot and are looking for the best way to integrate it.

So, the best option is Python via Olympe for command and control + some bridge to your C++ libs, or you can try using arsdk natively in your app, but that’s a lot of work.

Jerome - if we were to go the arsdk route is there documentation anywhere on the protocol, etc.? Or is my best bet again to look at the Olympe source code?

Does a C/C++ SDK exist for Windows applications? If so I wonder if I could start with it and port that to Linux…

Documentation is the source code itself :slight_smile:
As we do not support Windows officially, there is no app to my knowledge.

MAVSDK has a MAVLINK library for C++. but does the ANAFI drone support MAVLINK?

We support some MAVLink commands for live piloting and some MAVLink commands for automated mission piloting.

How can these be received by the drone? Can I just send them to <ANAFI_IP>:<ANAFI_MAVLINK_PORT>? Or do we have to send them via the GroundSDK?

Does the ANAFI publish any information out over Mavlink?

Is there any documentation for the live piloting commands? Can it receive live piloting commands and missions via UDP? Are these points possible via UDP over radio:

  • Receiving telemetry from the drone via MAVLink.
  • Sending live piloting commands via MAVlink.
  • Sending missions via MAVLink.
  • Video stream & capture via MAVLink.

Check this list :

We are updating our documentation

2 Likes

Jerome,
What port do I communicate with the ANAFI in for Mavlink? The standard 14560? Do I need to enable this somehow or is it always there?

Thanks!

This is very handy, thanks! What ports to the ANAFI run mavink on? I cannot seem to detect any outgoing MAVLINK packages on any ports when running Sphinx. Must it be enabled somehow?

Hi all,

Listening port on anafi firmware side is 14551.

For the mavlink protocol to be active, a wifi interface is needed on the pc running the simulator and this wifi interface needs to be active for the simulated drone firmware.
See How to connect to the simulated drone — Parrot-Sphinx 1.2.1 documentation for details.

Regards

So i need two wifi-interfaces to gain access to the MAVLINK traffic? I have done this previously with one wifi-interface and i do not see any MAVLINK messages. Is is possible to get access to the traffic on the stolen interface?

What about for a real ANAFI? Any special requirements to get things setup and running with Mavlink on it?

Nope, it’s a built-in feature.

Do you have a how-to or some tips on getting this to work? I.e running mavlink traffic on the host simulating the drone? Having two wifi-interfaces on a linux machine is not an easy task without some tinkering. @Jerome Do you know why the MAVLINK protocol does not run on the Vitrtual Ethernet interface of the simulated drone? This should definitely be a feature for the Sphinx simulator.

Finally got it working: Added an extra wifi-interface to the host computer, connected it to the AP created on the stolen interface and eureka, got a bunch of MAVLINK heartbeats from the drone!

1 Like

So I am seeing the heartbeat broadcast from the drone, but none of the other messages at the link you provided…

When I subscribe to a message (a COMMAND_LONG with MAV_CMD_SET_MESSAGE_INTERVAL) I see the requested message at the desired rate for a few seconds, then it stops sending the message. In fact, I request just SYS_STATUS at 1 Hz and I see a whole lot more traffic on the network with tcpdump…

Any ideas why it stops sending messages? Do I need to continuously ask for them to be sent? Where am I going wrong?

Thanks!