====== 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 Schedule===== 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 Bi-Weekly Meeting Minutes ** * [[https://docs.google.com/document/d/1mB5oppWv0FhtbP1K-nmdEI_ppzdnrPPujSw0w2xv3dI/edit|21 Nov, 2017]] * [[https://docs.google.com/document/d/1oyI8lIHmhKF7c5HzAbOsvbpJctG7FvaO_5yZ-1aefxQ/edit|07 Nov, 2017]] * [[https://docs.google.com/document/d/1qmmbpal6k8QYL2jGSRdpB1owIw9LU56EREuezfQbzN4/edit|24 Oct, 2017]] * [[https://docs.google.com/document/d/1U9x3kXiVatU1mROoVJy9SqbaMYGc1Wac4KmfRRlfixw/edit#heading=h.qj4hb1qx76h8|10 Oct, 2017]] * [[https://docs.google.com/document/d/1bLb713cIZmntQ7euiAizAwnqGYcb5x0yP6_vpYx6rIM/edit|29 Aug, 2017]] * [[https://docs.google.com/document/d/1DfUB-QJuXzB__5Uf5KwamKMyf_SYuZdWp53ldMTcZCA|18 Jul, 2017]] **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. -> 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) 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 | === Building AirLib SDK for Android === - Built RpcLib, AirLib and MavlinkCom individually. There were linker errors (-lpthread) while building apps. - Now, using Android Ninja build system for the same - In progress. - Android has slightly different implementation of pthreads. So, we may have to make changes in AirLib sdk source code for Android under a flag. - Posted [[https://github.com/Microsoft/AirSim/issues/308|queries]] in GitHub::Airsim on SDK architecture which happens to be in their TODO list. - Shared **HelloDrone** example source for both AirLib and DroneLink sdks in Slack #sdk group. Examples are tested on jMAVsim. ===== Current Status: ===== * DroneLink is chosen as Dronecode SDK and is renamed as **DroneCore** with the necessary architectural changes to suit the purpose. * Brainstorming the Intuitive, On-demand and compelling applications for the user - Ongoing and WIP ===== App features Categories ===== * Geo-fencing * Flight control * Mission planning * Networking * Photography / Video * VR/AR * Object Tracking * 2D/3D Mapping, etc. * Intuitive User interface ==== Drone application features (spread across above categories) available in iOS/Android: ==== - Providing detailed wind and weather information to help user decide if it’s safe to fly. - Feed the app with parameters of your drone and indicate whether or not today is the day to fly. App should make sure whether the weather favours flying. - Hourly forecast on a range of piloting info is provided, including wind speed and direction, wind chill and temperature, cloud cover, visibility and more are available for a week. - Provides mapping with visible no-fly zones. - Provides news feed from various drone websites. - Lets user notify nearby airports that he is flying a drone. - Should alert user on any unmanned aircraft flying nearby. - Lets user plan the flight and do the survey autonomously. - Lets user capture images at a specific time say sunrise or sunset or with different shades of light. - User can view augmented reality projections of the sun and moon paths, pinpoint the time the sun or moon will be at a particular location in the sky, predict and plan for the golden hour, blue hour and every sunrise, sunset, moonrise and moonset and prepare night photography shots. - Users get to know the drone Pilots nearby and socialize during fly. - Should help user find who is flying in neighbourhood by letting them know of any user-submitted (other user) flying spots nearby, and the profiles of the people who fly there. - Allows user to post a their profile and share any inspiring photos of popular spots with other fliers. - Enable user to keep the frame fixed on a tracking object. - Should keep an eye on local air traffic, warn user if any manned aircraft are flying nearby. - Should allow user to blur object out of the point of interest area thereby promoting the object in focus. - Should offer intuitive and powerful waypoint mission engine with seamless mission syncing across all personal devices of the user. - Provide features like VR, panorama, Orbit, Follow Me modes. - Provide fancy modes to user like mimic, intercept, etc. In mimic mode, when you tilt your device in any direction, the aircraft will mimic the tilting motion of the device to the directed pitch and roll. In Intercept mode, when you Point your device in any direction as if it were a laser pointer, the aircraft will intersect the imaginary laser created by your device. - Provide you with real-time information about thousands of aircraft around the world to avoid close encounters. It lets user know before falling close to a manned/ unmanned aircraft. - Provides advanced flight planning and autonomous control for your drone. Select a path of coordinates and watch your drone fly the route, have the app control camera exposure on the go. - Capture enough data while the drone is flying, which is useful if user has a technical problem and want to know where the problem lies. - Controlling the direction that the camera is pointing and controlling when video is recorded. - Provide option to save pre-planned flights and reload them at any time, which is useful if user wants to take seasonal or construction videos. - Provide 2D/3D mapping feature that automatically creates a flight path for your drone; then uploads the video and flight data to remote servers. User can then use these servers or your desktop PC to crunch through this data, turning the images and location of the drone into a 3D model of whatever user were flying over. - Allow a second user to view the wireless video from the camera that's attached to the drone. The second user should also be able to control the camera, panning and tilting it around as the pilot controls the drone itself. In effect, that person should be able to work as the camera operator while the pilot keeps the drone flying. - Reproducing the feel and experience of flying a drone. Should provide multiple viewpoints including the ground — plus a normal camera on the drone and a stabilized gimbal.