User Tools

Site Tools


workgroup:dronecodesdk:start

This is an old revision of the document!


Dronecode SDK WG

Overview

The Dronecode SDK WG is tasked to develop a Drone Application Development SDK. This SDK should allow developers to create drone “applications” that can run on mobile devices (tablets, phones) and on-board companion computers, and that can also seamlessly integrate drones with cloud-based services. The SDK should ideally support Python, C++ and Android Developer APIs, including options like ROS, Cloud etc., and also integration with any simulation environment.

Currently we are evaluating existing developer APIs.

Some requirements include:

  • Robust, SDK solution for commercial deployments of PX4, and other compliant flight controllers
  • First Pass should include: Dronecode SDK with : basic onboard / basic mobile / basic cloud (RESTful) APIs implemented

Monthly WG Meetings

Bi-weekly meeting: Tuesday 8 AM PST.

Join the call: www.uberconference.com/lf-dronecode Dial in number: 415-891-1494 No PIN needed

Comparative Analysis of existing SDKs

Note: Essentially Mobile SDK is same as onBoard SDK with an additional wrapper layer and remote connection support

Mobile SDKs:

Type Features DJI Parrot FlytOS DroneKit
Flight High and Low Level Flight Control Yes Yes Yes Yes
Aircraft state through telemetry and sensor data Yes Yes Yes Yes
Obstacle Avoidance Yes No Yes No
Camera Camera and gimbal control Yes Yes Yes Yes
Live Video Feed Yes Yes Yes No
Remote access to media stored on Camera Yes Yes Yes Yes
Missions Define custom missions Yes Yes Yes Yes
Predefined Missions: Waypoint, HotPoint, FollowMe Yes No Yes Yes
Subsystems State information and control of Battery and Remote Control Yes Yes Yes Yes
VR Support No Yes No No
Cloud API Support No Yes Yes No

OnBoard SDK:

Type Features DJI Parrot FlytOS DroneKit AirLib
Flight High and Low Level Flight Control Yes NA Yes Yes Yes
Aircraft state through telemetry and sensor data Yes NA Yes Yes Yes
Obstacle Avoidance Yes NA Yes No Yes(minimal)
Camera Camera and gimbal control Yes NA Yes Yes No
Live Video Feed Yes NA Yes No No
Missions Define custom missions Yes NA No Yes No
Predefined Missions: Waypoint, HotPoint, FollowMe Yes NA Yes No No
Subsystems State information and control of Battery and RemoteControl Yes NA Yes Yes No
Cloud API Support No No No No No

SDK WG Meeting Minutes - July 18th

  • Considering the current options available for SDK, we have two options for dronecode SDK – AirLib, DroneLink
  • Licenses: AirLib – MIT; DroneLink – BSD 3
  • Presented the comparison for both AirLib and Dronelink from app developer’s perspective (included sample as well) – This included architectural discussion too
  • Unordered List ItemLorenz suggested for more use-case level discussion

o Lorenz - to share the User stories (PX4 user's feedback) o Anitha – has requested UX team to share the user's feedback on SDK expectations perspective, which would be shared by July 26th

  • Unordered List ItemDroneserver - > Lorenz mentioned AirLib had some assumption to go with this architecture, which needs more discussion. Need to get some details about his view on this case.
  • Unordered List ItemDiscussed purpose of RPC in Airlib. As per Microsoft developer it is required to make application code independent of vehicle (Simulator or actual vehicle with any flight controller).
  • Above purpose can be achieved even without RPC by having abstract base class in SDK.

Lorenz mentioned about DJI SDK, Currently DJI is leading market. So try to recreate the same user experience that DJI is providing - all SDK variants (mobile, onboard). → DJI SDK has been considered as one our reference SDKs during comparative analysis.

Next steps:

  • Explore towards usage of Cloud SDK
  • Current gaps in supporting Cloud APIs/requirements in the SDKs we are considering
  • Planning to run apps on the real platforms, as we have only run on simulators for now

SDK WG - June 20th

→ Comparative analysis of existing SDKs (listed above) was discussed in brief

→ Mark:

  • Licensing information to be added
  • API/Interfaces available as part parrot SDK could be considered as reference
  • Need to consider both Commercial and industrial applications/use cases

→ AirLib → SDK from Microsoft

  • MIT License
  • It has both CPP and Python Interfaces
  • Cross flight stack friendly and not only MAVLink tied (it has provided flexibility to add non mavlink protocols too)
  • Supports UDP, UART, TCP connection.
  • No support for Android and iOS
  • Supports only clang compiler
  • Mavlink library is ported to CPP. With this object oriented approach - makes easy to have pack/unpack function for each MAVlink message
  • Allows apps to configure drone connection parameters; so apps can choose which drone it wanna talk to.
  • msr::airlib::takeoff(float limit) takes altitude param; so every takeoff can be tuned.

→ DroneLink - > CPP Library provided by PX4 (Julian)

  • Only CPP support for now
  • BSD 3 License
  • Tightly coupled with PX4 and Mavlink like there are px4 custom modes support in source code.
  • Supports only UDP connection for now, TCP and Serial connection not implemented for now
  • REST Interface support - on going - to be shared
  • Wrapper for iOS and Android - To be implemented and shared (However, build infrastructure for Android and iOS is present)
  • Auto detects the tool chain on the current platform
  • Uses discovery model so that apps binds to a well-known port used by MAVROS (14540).(Author mentioned this as part of code that either this SDK or mavros can be used)
  • DroneLink::Action::takeoff() doesn't take altitude as parameter, rather it uses altitude set by default.

Quick Observations/Issues DroneLink:

  • Suggested Documentation changes related to App development - resolved by Julian.
  • Raised an issue regarding Example app build error - resolved by Julian.

Plan/Next Steps:

  • Offline discussion with other relevant stakeholders who could not attend the call (on Slack maybe) and capture the inputs/suggestions and update on WG Wiki
  • Julian to share his road map for DroneLink implementation
  • Progress/updates could be shared on wiki
  • To evaluate efforts on supporting Android and iOS on AirLib
  • To figure out on collecting inputs/suggestion by the application developers

Observations on Dronesmith SDK:

  • Dronesmith SDK is not opensource SDK
  • It is specific to Luci hardware, though they support MAVLink
  • Luci hardware is combination of Edison and STM32F427 Cortex which acts as Flight controller.
  • Luci runs a customized fork of PX4 Firmware to handle the flight control.
  • Dronesmith Engine is been provided as release binaries which runs on Edison board and host webserver.
  • Support for Cloud APIs and local REST APIs(Which onBoard apps can use) is been provided.

Observations from developers:

AirLib DroneLink Dronekit
Setup/Infrastructure Easy to setup. Just follow wiki instructions and the HelloDrone application will work. Minor changes had to be done to setup (fixed now) Easy setup
Ease of use Easy to use, as user needs to include RPC client and rest will happen in background. PythonClient provides RPC facilities without app's knowledge. Its free for Python apps! APIs are well categorized and easy to use Easy to use
Extensibility Easy to extend, could add mission planning feature easily Uses compile-time plugs. Need to get more understanding
Feature Delta
Language bindings Cpp/Python Cpp/Java/Objective-C Python/Java
Supported platforms Windows/inux Linux/Mac/Windows/iOS/Android Linux/Mac OS/Windows
Code Structure Excellent Simple and Good Good
Communication compatibility Cross-protocol (as of now MavLink, ways to extend to other protocols) MAVLink MAVLink
AutoPilot Compatibility All AutoPilots that support MAVLink PX4 All AutoPilots that support MAVLink. Most compatible with ArduPilot, less to others.
Cloud Support No No Partial (Store, Share and access vehicle and flight log info)
Features More Navigation APIs Comparatively less Good
Mission management No Yes Yes

Current Status:

Building AirLib SDK for Android

  1. Built RpcLib, AirLib and MavlinkCom individually. There were linker errors (-lpthread) while building apps.
  2. Now, using Android Ninja build system for the same - In progress.
  3. Android has slightly different implementation of pthreads. So, we may have to make changes in AirLib sdk source code for Android under a flag.
  4. Posted queries in GitHub::Airsim on SDK architecture which happens to be in their TODO list.
  5. Shared HelloDrone example source for both AirLib and DroneLink sdks in Slack #sdk group. Examples are tested on jMAVsim.
workgroup/dronecodesdk/start.1500909025.txt.gz · Last modified: 2017/07/24 15:10 by Anitha Suresh