B4A Library DJI Drones

Status
Not open for further replies.
DJI Drones are very popular and advanced drones. DJI provides an Android app that is used during flights to control the drone.
The Android device connects to the remote controller with a USB cable (USB debug mode should be enabled).

DJI are also providing a feature-rich SDK that allows us, developers, to create alternative applications to control the drone. It is quite amazing to be able to easily program a drone to do all kinds of sophisticated tasks.

The following video is an example created with B4A and the DJI library. On the left side you can see the drone camera feed and various parameters. On the right side there is a standard Google Map. Touching on a point in the map starts a hotspot mission. The drone will rotate automatically around the spot.


How to use

1. Register with DJI: https://developer.dji.com/ and create an app in the User Center page. You will see an App Key that you need to add to the manifest editor.
The bundle identifier must match your app package name.
2. Add this code to the manifest editor:
B4X:
AddReplacement($DJI_KEY$, XXXXXXXXX)
CreateResourceFromFile(Macro, DJI.DJI)
Replace XXXXXXXXXX with your App key.
3. Add to the main activity code:
B4X:
#BridgeLogger: true
#MultiDex: true
#AdditionalJar: dji-sdk-provided-4.15, ReferenceOnly

4. You might need to install a few components with B4A Sdk Manager.
5 Initialize the SDK when the application starts. The RegisteredResult event will be raised. If successful then call sdk.StartConnectionToProduct to start a connection.
6. The ProductConnected event will be raised. If AircraftData is not Null then you are good to go and can initialize the DJIAircraft object and the other features (see how it is done in the example).
7 Most of the operations are asynchronous. They are built to work with the Wait For keyword.
8. Expect disconnections and other errors.
9. New: See the Activity_Resume code in the example. It is needed to handle reconnections.

See the attached example.

Tips & Notes

- Make sure that you are able to connect to the drone with the DJI app. Not all Android devices have proper support for USB connected devices.
- You will see a dialog that asks you whether you always want to start the DJI app when the USB is connected. Click on "This time only". Otherwise you will need to uninstall the DJI app as it will get an exclusive permission to use the USB device.
- Use B4A-Bridge to connect the IDE to the Android device.
- Supported drones: https://developer.dji.com/mobile-sd.../product_introduction.html#supported-products
- Use the simulator to test your app. It works well.
https://developer.dji.com/mobile-sd...on-development-workflow/workflow-testing.html

- Don't fly the drone indoors.
- Check the GPS status. All the nice automatic features will fail without the GPS. Should be 4 or 5.
- Make sure that the home location is set before flight.
- Always be prepared to manually control the drone.


Download the native libraries and copy them to the additional libraries folder:
www.b4x.com/android/files/dji_additional.zip
Note that only 64 bit binary is included inside dji-sdk-4.15.aar. You can download the full aar with both 32 bit and 64 bit binaries here:

During development it will be faster to use the smaller aar file.

Download the attached library and copy it as well.

Updates

- 4.70: Based on SDK 4.15. Check the updated example and don't miss the Activity_Resume code.
- 4.60: It is based on DJI SDK v4.14-trial1.
It requires B4A v10.2+
The minimum Android version is 5.0.

Start with the attached example. Note that the hotspot mission calls ExitApplication. You must configure a reasonable coordinate before you test it (and remove the ExitApplication).
 

Attachments

  • DJI_library.zip
    39.3 KB · Views: 131
  • DJI_Example.zip
    12.8 KB · Views: 141
Last edited:

shb777

Active Member
Licensed User
I'm getting many errors when trying to execute waypoint missions. More than 50% of the time. I notice in your waypoint mission project,
you don't do anything if this fails.
B4X:
Wait For (WaypointOperator.StartMission) WaypointOperator_Result (Success As Boolean, ErrorMessage As String)
        Log("Start: " & Success & ", " & ErrorMessage)
        MissionState(True)

Is this intentional, and have you gotten errors executing waypoint missions yourself? Three errors I'm getting are:


the execution could not be executed

error uploading: execution of this process timed out.

error uploading: the system is too busy to execute the action
 

Erel

Administrator
Staff member
Licensed User
DJI v4.41 is released. It requires B4A v8+ which wasn't yet released.
It is based on the latest version of DJI SDK and it supports the new activation requirement. Note that if you are using it from China then the activation process is more complicated. Activation from China was not tested.

A few changes are required:
1. Add to the manifest editor:
B4X:
SetApplicationAttribute(android:name, "anywheresoftware.b4a.objects.BaseApplication")
2. Add to main module:
B4X:
#AdditionalJar: dji-sdk-provided-4.4.1, ReferenceOnly
3. There is a new SDK_ActivationStateChanged event and SDK.ActivationState and SDK.AircraftBindingState properties.

The aircraft should be activated automatically. Without activation the flight distance will be limited to 100 meters.
 

DonManfred

Expert
Licensed User

Roberto P.

Well-Known Member
Licensed User
Hi

I'm considering buying this DJI N1328 Phantom 4 Pro Plus drone and would like to understand if the libraries and examples of this post are compatible with this model?

Given that it is the first drone I purchase, I wanted to know if anyone has already had experience with this model and what do you think?

thank in advance
 

Roberto P.

Well-Known Member
Licensed User
It is supported.
I'm using the Phantom 4 and it is a very nice product.

great.

Erel, excuse the inexperienced question!

What integration can you do with an android system? What are the advantages of developing a drone application?

thank you
 

Erel

Administrator
Staff member
Licensed User
An Android or iOS device is connected to the flight controller and is used to control the drone. Instead of using DJI app you can a custom app. There are no advantages if you just want to fly it.
You can however use it to implement more sophisticated solutions. Litchi is an example of an alternative app: https://play.google.com/store/apps/details?id=com.aryuthere.visionplus&hl=en
 

Roberto P.

Well-Known Member
Licensed User

shb777

Active Member
Licensed User
Hi

I'm considering buying this DJI N1328 Phantom 4 Pro Plus drone and would like to understand if the libraries and examples of this post are compatible with this model?

Given that it is the first drone I purchase, I wanted to know if anyone has already had experience with this model and what do you think?

thank in advance


you should get a mavic pro platinum or wait for the new mavic pro 2. they fold up and are more portable.
 

PABLO2013

Active Member
Licensed User
@Erel: I've previously wrote that it wasn't updated yet. I was wrong. V4.41 which is available in the first post is the updated library and should work properly



I do not know ... but I understood that it had not been updated ... but I read this and I know that if it was updated ...
 
Status
Not open for further replies.
Top