Skip to content

Commit ffe53b1

Browse files
committed
Merge pull request #173 from squilter/add_gimbal_support
Add gimbal support
2 parents 14d5b3b + b93d62f commit ffe53b1

File tree

4 files changed

+62
-0
lines changed

4 files changed

+62
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.o3dr.android.client.apis.drone.camera;
2+
3+
import android.os.Bundle;
4+
5+
import com.o3dr.android.client.Drone;
6+
import com.o3dr.services.android.lib.model.action.Action;
7+
import static com.o3dr.services.android.lib.drone.action.GimbalActions.*;
8+
public class GimbalApi {
9+
10+
public static boolean setGimbalOrientation(Drone drone, double pitch, double roll, double yaw){
11+
Bundle params = new Bundle();
12+
params.putDouble(GIMBAL_PITCH, pitch);
13+
params.putDouble(GIMBAL_ROLL, roll);
14+
params.putDouble(GIMBAL_YAW, yaw);
15+
return drone != null && drone.performAsyncAction(new Action(ACTION_SET_GIMBAL_ORIENTATION, params));
16+
}
17+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.o3dr.services.android.lib.drone.action;
2+
3+
import com.o3dr.services.android.lib.util.Utils;
4+
5+
public class GimbalActions {
6+
public static final String GIMBAL_PITCH = "gimbal_pitch";
7+
public static final String GIMBAL_YAW = "gimbal_yaw";
8+
public static final String GIMBAL_ROLL = "gimbal_roll";
9+
10+
public static final String ACTION_SET_GIMBAL_ORIENTATION = Utils.PACKAGE_NAME + ".action.gimbal" +
11+
".SET_GIMBAL_ORIENTATION";
12+
13+
}

ServiceApp/src/org/droidplanner/services/android/api/DroneApi.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
import com.MAVLink.ardupilotmega.msg_mag_cal_progress;
1515
import com.MAVLink.ardupilotmega.msg_mag_cal_report;
1616
import com.MAVLink.enums.MAG_CAL_STATUS;
17+
import com.o3dr.android.client.apis.drone.camera.GimbalApi;
1718
import com.o3dr.services.android.lib.coordinate.LatLong;
1819
import com.o3dr.services.android.lib.coordinate.LatLongAlt;
1920
import com.o3dr.services.android.lib.drone.action.ConnectionActions;
2021
import com.o3dr.services.android.lib.drone.action.ExperimentalActions;
22+
import com.o3dr.services.android.lib.drone.action.GimbalActions;
2123
import com.o3dr.services.android.lib.drone.action.GuidedActions;
2224
import com.o3dr.services.android.lib.drone.action.ParameterActions;
2325
import com.o3dr.services.android.lib.drone.action.StateActions;
@@ -490,6 +492,13 @@ public void performAction(Action action) throws RemoteException {
490492
case CameraActions.ACTION_STOP_VIDEO_RECORDING:
491493
DroneApiUtils.stopVideoRecording(getDrone());
492494
break;
495+
496+
case GimbalActions.ACTION_SET_GIMBAL_ORIENTATION:
497+
double pitch = data.getDouble(GimbalActions.GIMBAL_PITCH);
498+
double roll = data.getDouble(GimbalActions.GIMBAL_ROLL);
499+
double yaw = data.getDouble(GimbalActions.GIMBAL_YAW);
500+
MavLinkDoCmds.setGimbalOrientation(getDrone(), pitch, roll, yaw);
501+
break;
493502
}
494503
}
495504

dependencyLibs/Core/src/org/droidplanner/core/MAVLink/command/doCmd/MavLinkDoCmds.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,27 @@ public static void setServo(Drone drone, int channel, int pwm) {
9898
drone.getMavClient().sendMavPacket(msg.pack());
9999
}
100100

101+
/**
102+
* Set the orientation of a gimbal
103+
*
104+
* @param drone target vehicle
105+
* @param pitch the desired gimbal pitch in degrees
106+
* @param roll the desired gimbal roll in degrees
107+
* @param yaw the desired gimbal yaw in degrees
108+
*/
109+
public static void setGimbalOrientation(Drone drone, double pitch, double roll, double yaw) {
110+
if (drone == null)
111+
return;
112+
113+
msg_command_long msg = new msg_command_long();
114+
msg.target_system = drone.getSysid();
115+
msg.target_component = drone.getCompid();
116+
msg.command = MAV_CMD.MAV_CMD_DO_MOUNT_CONTROL;
117+
msg.param1 = (int) (pitch * 100);
118+
msg.param2 = (int) (roll * 100);
119+
msg.param3 = (int) (yaw * 100);
120+
121+
drone.getMavClient().sendMavPacket(msg.pack());
122+
}
123+
101124
}

0 commit comments

Comments
 (0)