Android Question DJI gimbal rotation with Java Object

shb777

Active Member
Licensed User
Longtime User
In my DJI Mobile app, I want to rotate the gimbal in the roll axis, so I can level the horizon.
I'm trying to do this with a JavaObject.

I dimention my JavaObject in Process_Globals, and assign them values in Activity_Create,
since I figure I'm going to be using them a lot in my program.
B4X:
Sub Process_Globals

    Dim AircraftInstance As JavaObject
    Dim AirlinkInstance As JavaObject
    Dim GimbalInstance As JavaObject

sub AfterAircraftConnected

        AircraftInstance=aircraft
        GimbalInstance=AircraftInstance.RunMethod("getGimbal", Null)
        AirlinkInstance=AircraftInstance.RunMethod("getAirLink", Null)

I want to have a sub that rotates the gimbal like this:


Sub RotateGimbal(direction,degrees)



GimbalInstance.RunMethod("rotate",Array(??????))

this is the java method void rotate(@NonNull final Rotation rotation, @Nullable final CompletionCallback callback)
' Rotation is a class

End Sub

But I don't know how to pass rotate's parameters to it with java object?
How do these parameters (@NonNull final Rotation rotation, @Nullable final CompletionCallback callback) go in Array(??????)



Steve
 
Last edited:

Erel

B4X founder
Staff member
Licensed User
Longtime User
Try this untested code:
B4X:
Sub RotateGimbal (roll As Float)
   Dim aircraftjo As JavaObject = aircraft
   Dim gimbal As JavaObject = aircraftjo.RunMethod("getGimbal", Null)
   If gimbal.IsInitialized Then
     Dim cc As Object = gimbal.CreateEventFromUI("dji.common.util.CommonCallbacks$CompletionCallback", "callback", Null)
     gimbal.RunMethod("rotate", Array(CreateRotation(roll), cc))
     Wait For (gimbal) Callback_Event (MethodName As String, Args() As Object)
     If Args(0) = Null Then
       Log("Gimbal rotated successfully.")
     Else
       Log("Error setting rotation: " & Args(0))
     End If
   Else
     Log("Gimbal not available.")
   End If
End Sub

Sub CreateRotation (RollAngle As Float) As JavaObject
   Dim builder As JavaObject
   builder.InitializeNewInstance("dji.common.gimbal.Rotation.Builder", Null)
   Dim time As Double = 2 'seconds
   builder.RunMethod("mode", Array("ABSOLUTE_ANGLE"))
   builder.RunMethod("time", Array(time))
   builder.RunMethod("roll", Array(RollAngle))
   Return builder.RunMethodJO("build", Null)
End Sub
 
Upvote 0

shb777

Active Member
Licensed User
Longtime User
I passed it 10.0 and 0.5. both times I got error setting rotation: param illegal steve
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
Try to set the other values as well:
B4X:
Sub CreateRotation (RollAngle As Float) As JavaObject
   Dim builder As JavaObject
   builder.InitializeNewInstance("dji.common.gimbal.Rotation.Builder", Null)
   Dim time As Double = 2 'seconds
   Dim pitch = 0, yaw = 0 As Float
   builder.RunMethod("mode", Array("ABSOLUTE_ANGLE"))
   builder.RunMethod("time", Array(time))
   builder.RunMethod("roll", Array(RollAngle))
   builder.RunMethod("pitch", Array(pitch))
   builder.RunMethod("yaw", Array(yaw))
   Return builder.RunMethodJO("build", Null)
End Sub
 
Upvote 0

shb777

Active Member
Licensed User
Longtime User
Try to set the other values as well:
B4X:
Sub CreateRotation (RollAngle As Float) As JavaObject
   Dim builder As JavaObject
   builder.InitializeNewInstance("dji.common.gimbal.Rotation.Builder", Null)
   Dim time As Double = 2 'seconds
   Dim pitch = 0, yaw = 0 As Float
   builder.RunMethod("mode", Array("ABSOLUTE_ANGLE"))
   builder.RunMethod("time", Array(time))
   builder.RunMethod("roll", Array(RollAngle))
   builder.RunMethod("pitch", Array(pitch))
   builder.RunMethod("yaw", Array(yaw))
   Return builder.RunMethodJO("build", Null)
End Sub
I tried that and got same error. steve
 
Upvote 0

shb777

Active Member
Licensed User
Longtime User
it's so big, i'm gonna have to add code to write it to a file before i can send it to you, but it starts with {ROLL_MOTOR_CONTROL_STRENGTH=dji.common.util.DJIParamMinMaxCapability@227c26b,YAW_LEFT_ENDPOINT=dji.common.util ...
 
Upvote 0

DonManfred

Expert
Licensed User
Longtime User
log(themap) will probably look nicer and better readable
 
Upvote 0

shb777

Active Member
Licensed User
Longtime User
I can't use log when I'm testing my app, because I have to be connected to the drone, not my computer here's all


{PITCH_DOWN_ENDPOINT=dji.common.util.DJIParamMinMaxCapability@fde1478, PITCH_MOTOR_CONTROL_STRENGTH=dji.common.util.DJIParamMinMaxCapability@89b7751, ROLL_MOTOR_CONTROL_STRENGTH=dji.common.util.DJIParamMinMaxCapability@232abb6, YAW_MOTOR_CONTROL_PRE_CONTROL=dji.common.util.DJIParamMinMaxCapability@4a8c0b7, YAW_MOTOR_CONTROL_GYRO_FILTERING_FACTOR=dji.common.util.DJIParamMinMaxCapability@b1c0024, ADJUST_ROLL=dji.common.util.DJIParamMinMaxCapability@2cf378d, YAW_CONTROLLER_SMOOTHING_FACTOR=dji.common.util.DJIParamMinMaxCapability@935cd42, PITCH_RANGE_EXTENSION=dji.common.util.DJIParamMinMaxCapability@37eb153, PITCH_MOTOR_CONTROL_PRE_CONTROL=dji.common.util.DJIParamMinMaxCapability@2afa90, ROLL_MOTOR_CONTROL_GYRO_FILTERING_FACTOR=dji.common.util.DJIParamMinMaxCapability@604bf89, PITCH_SMOOTH_TRACK_DEADBAND=dji.common.util.DJIParamMinMaxCapability@f577b8e, PITCH_SMOOTH_TRACK_ACCELERATION=dji.common.util.DJIParamMinMaxCapability@db90faf, PITCH_UP_ENDPOINT=dji.common.util.DJIParamMinMaxCapability@aed2fbc, ADJUST_PITCH=dji.common.util.DJIParamMinMaxCapability@2f0cb45, ROLL_MOTOR_CONTROL_PRE_CONTROL=dji.common.util.DJIParamMinMaxCapability@ad3c29a, MOVEMENT_SETTINGS=dji.common.util.DJIParamCapability@e90f7cb, PITCH_SMOOTH_TRACK_SPEED=dji.common.util.DJIParamMinMaxCapability@13b8ba8, PITCH_MOTOR_CONTROL_GYRO_FILTERING_FACTOR=dji.common.util.DJIParamMinMaxCapability@6d7d6c1, PITCH_CONTROLLER_DEADBAND=dji.common.util.DJIParamMinMaxCapability@79b6e66, YAW_SMOOTH_TRACK_ACCELERATION=dji.common.util.DJIParamMinMaxCapability@1b545a7, YAW_SMOOTH_TRACK_SPEED=dji.common.util.DJIParamMinMaxCapability@b91ba54, PITCH_MOTOR_CONTROL_STIFFNESS=dji.common.util.DJIParamMinMaxCapability@4ca1dfd, PITCH_SMOOTH_TRACK_ENABLED=dji.common.util.DJIParamCapability@de00af2, YAW_CONTROLLER_SPEED_COEFFICIENT=dji.common.util.DJIParamMinMaxCapability@4e69543, YAW_RIGHT_ENDPOINT=dji.common.util.DJIParamMinMaxCapability@c7a27c0, YAW_MOTOR_CONTROL_STIFFNESS=dji.common.util.DJIParamMinMaxCapability@69f9cf9, YAW_CONTROLLER_DEADBAND=dji.common.util.DJIParamMinMaxCapability@55fe43e, PITCH_CONTROLLER_SPEED_COEFFICIENT=dji.common.util.DJIParamMinMaxCapability@753429f, YAW_SMOOTH_TRACK_ENABLED=dji.common.util.DJIParamCapability@2b9ffec, YAW_LEFT_ENDPOINT=dji.common.util.DJIParamMinMaxCapability@1b40fb5, YAW_SMOOTH_TRACK_DEADBAND=dji.common.util.DJIParamMinMaxCapability@172064a, PITCH_CONTROLLER_SMOOTHING_FACTOR=dji.common.util.DJIParamMinMaxCapability@2b369bb, ROLL_MOTOR_CONTROL_STIFFNESS=dji.common.util.DJIParamMinMaxCapability@23d2ed8, YAW_MOTOR_CONTROL_STRENGTH=dji.common.util.DJIParamMinMaxCapability@b62f231, ADJUST_YAW=dji.common.util.DJIParamMinMaxCapability@1d23d16}
 
Upvote 0

shb777

Active Member
Licensed User
Longtime User
this is what dji told me

I said:. the mavic pro can rotate the gimbal in the roll axis. that's how you level the horizon


2017-8-24 14:08
Reply Edit Management
DJI SDK Support
But our sdk doesn't support the user to rotate the roll on the Mavic pro as a feature.
 
Last edited:
Upvote 0

shb777

Active Member
Licensed User
Longtime User
I found out the Litchi program allows the user to do this. Just press the C2 button, and rotate the right dial. I tested it, and it works. So it must be in the SDK. I sent this to the dji support forum.
 
Upvote 0
Top