Skip to content

Commit 0341be4

Browse files
committed
Merge pull request #132 from DroidPlanner/feature_magnetometer_calibration
Feature magnetometer calibration
2 parents b3ae2b4 + 6b0ae07 commit 0341be4

29 files changed

+895
-553
lines changed

ClientLib/build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
22

33
ext {
44
PUBLISH_ARTIFACT_ID = 'dronekit-android'
5-
PUBLISH_VERSION = '2.3.13'
5+
PUBLISH_VERSION = '2.3.25'
66
PROJECT_DESCRIPTION = "Android DroneKit client library."
77
PROJECT_LABELS = ['3DR', '3DR Services', 'DroneAPI', 'Android', 'DroneKit']
88
PROJECT_LICENSES = ['Apache-2.0']
@@ -17,7 +17,7 @@ android {
1717
defaultConfig {
1818
minSdkVersion 14
1919
targetSdkVersion 21
20-
versionCode 20313
20+
versionCode 20325
2121
versionName PUBLISH_VERSION
2222
}
2323

@@ -40,7 +40,7 @@ android {
4040
variant.outputs.each { output ->
4141
def file = output.outputFile
4242
if (file != null && file.name.endsWith('.aar')) {
43-
output.outputFile = new File(file.parent, "${PUBLISH_ARTIFACT_ID}.${PUBLISH_VERSION}.aar")
43+
output.outputFile = new File(file.parent, "${PUBLISH_ARTIFACT_ID}.${PUBLISH_VERSION}.aar")
4444
}
4545
}
4646
}

ClientLib/src/main/java/com/o3dr/android/client/Drone.java

+20-61
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.o3dr.android.client;
22

3+
import android.content.Context;
34
import android.os.Bundle;
45
import android.os.Handler;
56
import android.os.IBinder;
@@ -20,6 +21,7 @@
2021
import com.o3dr.services.android.lib.coordinate.LatLong;
2122
import com.o3dr.services.android.lib.drone.attribute.AttributeEvent;
2223
import com.o3dr.services.android.lib.drone.attribute.AttributeType;
24+
import com.o3dr.services.android.lib.drone.calibration.magnetometer.MagnetometerCalibrationStatus;
2325
import com.o3dr.services.android.lib.drone.camera.GoPro;
2426
import com.o3dr.services.android.lib.drone.connection.ConnectionParameter;
2527
import com.o3dr.services.android.lib.drone.connection.ConnectionResult;
@@ -109,7 +111,11 @@ public void binderDied() {
109111
private long startTime = 0;
110112
private long elapsedFlightTime = 0;
111113

112-
public Drone(){}
114+
private final Context context;
115+
116+
public Drone(Context context){
117+
this.context = context;
118+
}
113119

114120
void init(ControlTower controlTower, Handler handler){
115121
this.handler = handler;
@@ -232,7 +238,7 @@ public <T extends Parcelable> T getAttribute(String type) {
232238
}
233239

234240
if (carrier != null) {
235-
ClassLoader classLoader = getAttributeClassLoader(type);
241+
ClassLoader classLoader = this.context.getClassLoader();
236242
if (classLoader != null) {
237243
carrier.setClassLoader(classLoader);
238244
attribute = carrier.getParcelable(type);
@@ -317,59 +323,10 @@ private <T extends Parcelable> T getAttributeDefaultValue(String attributeType)
317323
case AttributeType.GOPRO:
318324
return (T) new GoPro();
319325

320-
case AttributeType.CAMERA:
321-
default:
322-
return null;
323-
}
324-
}
325-
326-
private ClassLoader getAttributeClassLoader(String attributeType) {
327-
switch (attributeType) {
328-
case AttributeType.ALTITUDE:
329-
return Altitude.class.getClassLoader();
330-
331-
case AttributeType.GPS:
332-
return Gps.class.getClassLoader();
333-
334-
case AttributeType.STATE:
335-
return State.class.getClassLoader();
336-
337-
case AttributeType.PARAMETERS:
338-
return Parameters.class.getClassLoader();
339-
340-
case AttributeType.SPEED:
341-
return Speed.class.getClassLoader();
326+
case AttributeType.MAGNETOMETER_CALIBRATION_STATUS:
327+
return (T) new MagnetometerCalibrationStatus();
342328

343329
case AttributeType.CAMERA:
344-
return CameraProxy.class.getClassLoader();
345-
346-
case AttributeType.ATTITUDE:
347-
return Attitude.class.getClassLoader();
348-
349-
case AttributeType.HOME:
350-
return Home.class.getClassLoader();
351-
352-
case AttributeType.BATTERY:
353-
return Battery.class.getClassLoader();
354-
355-
case AttributeType.MISSION:
356-
return Mission.class.getClassLoader();
357-
358-
case AttributeType.SIGNAL:
359-
return Signal.class.getClassLoader();
360-
361-
case AttributeType.GUIDED_STATE:
362-
return GuidedState.class.getClassLoader();
363-
364-
case AttributeType.TYPE:
365-
return Type.class.getClassLoader();
366-
367-
case AttributeType.FOLLOW_STATE:
368-
return FollowState.class.getClassLoader();
369-
370-
case AttributeType.GOPRO:
371-
return GoPro.class.getClassLoader();
372-
373330
default:
374331
return null;
375332
}
@@ -527,18 +484,16 @@ public void arm(boolean arm) {
527484
DroneStateApi.arm(this, arm);
528485
}
529486

530-
public void startMagnetometerCalibration(double[] startPointsX, double[] startPointsY, double[] startPointsZ) {
531-
CalibrationApi.startMagnetometerCalibration(this, startPointsX, startPointsY, startPointsZ);
532-
}
533-
534-
public void stopMagnetometerCalibration() {
535-
CalibrationApi.stopMagnetometerCalibration(this);
536-
}
537-
487+
/**
488+
* @deprecated Use {@link CalibrationApi#startIMUCalibration(Drone)} instead.
489+
*/
538490
public void startIMUCalibration() {
539491
CalibrationApi.startIMUCalibration(this);
540492
}
541493

494+
/**
495+
* @deprecated Use {@link CalibrationApi#sendIMUAck(Drone, int)} instead.
496+
*/
542497
public void sendIMUCalibrationAck(int step) {
543498
CalibrationApi.sendIMUAck(this, step);
544499
}
@@ -597,6 +552,10 @@ public void run() {
597552
}
598553

599554
void notifyAttributeUpdated(final String attributeEvent, final Bundle extras) {
555+
//Update the bundle classloader
556+
if(extras != null)
557+
extras.setClassLoader(context.getClassLoader());
558+
600559
if (AttributeEvent.STATE_UPDATED.equals(attributeEvent)) {
601560
getAttributeAsync(AttributeType.STATE, new OnAttributeRetrievedCallback<State>() {
602561
@Override

ClientLib/src/main/java/com/o3dr/android/client/apis/gcs/CalibrationApi.java

+28-13
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
import com.o3dr.android.client.Drone;
66
import com.o3dr.services.android.lib.model.action.Action;
77

8+
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.ACTION_ACCEPT_MAGNETOMETER_CALIBRATION;
9+
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.ACTION_CANCEL_MAGNETOMETER_CALIBRATION;
810
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.ACTION_SEND_IMU_CALIBRATION_ACK;
911
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.ACTION_START_IMU_CALIBRATION;
1012
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.ACTION_START_MAGNETOMETER_CALIBRATION;
11-
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.ACTION_STOP_MAGNETOMETER_CALIBRATION;
1213
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.EXTRA_IMU_STEP;
13-
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.EXTRA_MAGNETOMETER_START_X;
14-
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.EXTRA_MAGNETOMETER_START_Y;
15-
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.EXTRA_MAGNETOMETER_START_Z;
14+
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.EXTRA_RETRY_ON_FAILURE;
15+
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.EXTRA_SAVE_AUTOMATICALLY;
16+
import static com.o3dr.services.android.lib.gcs.action.CalibrationActions.EXTRA_START_DELAY;
1617

1718
/**
1819
* Created by Fredia Huya-Kouadio on 1/19/15.
@@ -37,22 +38,36 @@ public static void sendIMUAck(Drone drone, int step) {
3738

3839
/**
3940
* Start the magnetometer calibration process.
40-
*
41-
* @param startPoints points to start the calibration with.
4241
*/
43-
public static void startMagnetometerCalibration(Drone drone, double[] pointsX, double[] pointsY, double[] pointsZ) {
42+
public static void startMagnetometerCalibration(Drone drone) {
43+
startMagnetometerCalibration(drone, false, true, 0);
44+
}
45+
46+
/**
47+
* Start the magnetometer calibration process
48+
* @param drone vehicle to calibrate
49+
* @param retryOnFailure if true, automatically retry the magnetometer calibration if it fails
50+
* @param saveAutomatically if true, save the calibration automatically without user input.
51+
* @param startDelay positive delay in seconds before starting the calibration
52+
*/
53+
public static void startMagnetometerCalibration(Drone drone, boolean retryOnFailure, boolean saveAutomatically,
54+
int startDelay){
4455
Bundle params = new Bundle();
45-
params.putDoubleArray(EXTRA_MAGNETOMETER_START_X, pointsX);
46-
params.putDoubleArray(EXTRA_MAGNETOMETER_START_Y, pointsY);
47-
params.putDoubleArray(EXTRA_MAGNETOMETER_START_Z, pointsZ);
56+
params.putBoolean(EXTRA_RETRY_ON_FAILURE, retryOnFailure);
57+
params.putBoolean(EXTRA_SAVE_AUTOMATICALLY, saveAutomatically);
58+
params.putInt(EXTRA_START_DELAY, startDelay);
4859

4960
drone.performAsyncAction(new Action(ACTION_START_MAGNETOMETER_CALIBRATION, params));
5061
}
5162

63+
public static void acceptMagnetometerCalibration(Drone drone) {
64+
drone.performAsyncAction(new Action(ACTION_ACCEPT_MAGNETOMETER_CALIBRATION));
65+
}
66+
5267
/**
53-
* Stop the magnetometer calibration is one if running.
68+
* Cancel the magnetometer calibration is one if running.
5469
*/
55-
public static void stopMagnetometerCalibration(Drone drone) {
56-
drone.performAsyncAction(new Action(ACTION_STOP_MAGNETOMETER_CALIBRATION));
70+
public static void cancelMagnetometerCalibration(Drone drone) {
71+
drone.performAsyncAction(new Action(ACTION_CANCEL_MAGNETOMETER_CALIBRATION));
5772
}
5873
}

ClientLib/src/main/java/com/o3dr/services/android/lib/drone/attribute/AttributeEvent.java

+10-9
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,21 @@ public class AttributeEvent {
2626
public static final String AUTOPILOT_MESSAGE = PACKAGE_NAME + ".AUTOPILOT_MESSAGE";
2727

2828
/**
29-
* Signals the start of magnetometer calibration.
29+
* Event to signal cancellation of the magnetometer calibration process.
3030
*/
31-
public static final String CALIBRATION_MAG_STARTED = PACKAGE_NAME +
32-
".CALIBRATION_MAG_STARTED";
31+
public static final String CALIBRATION_MAG_CANCELLED = PACKAGE_NAME + ".CALIBRATION_MAG_CANCELLED";
32+
3333
/**
34-
* Signals a magnetometer calibration fitness update.
34+
* Signals completion of the magnetometer calibration.
35+
* @see {@link AttributeEventExtra#EXTRA_CALIBRATION_MAG_RESULT}
3536
*/
36-
public static final String CALIBRATION_MAG_ESTIMATION = PACKAGE_NAME +
37-
".CALIBRATION_MAG_ESTIMATION";
37+
public static final String CALIBRATION_MAG_COMPLETED = PACKAGE_NAME + ".CALIBRATION_MAG_COMPLETED";
38+
3839
/**
39-
* Signals completion of the magnetometer calibration.
40+
* Provides progress updates for the magnetometer calibration.
41+
* @see {@link AttributeEventExtra#EXTRA_CALIBRATION_MAG_PROGRESS}
4042
*/
41-
public static final String CALIBRATION_MAG_COMPLETED = PACKAGE_NAME +
42-
".CALIBRATION_MAG_COMPLETED";
43+
public static final String CALIBRATION_MAG_PROGRESS = PACKAGE_NAME + ".CALIBRATION_MAG_PROGRESS";
4344

4445
public static final String CALIBRATION_IMU = PACKAGE_NAME + ".CALIBRATION_IMU";
4546
public static final String CALIBRATION_IMU_ERROR = PACKAGE_NAME + ".CALIBRATION_IMU_ERROR";

ClientLib/src/main/java/com/o3dr/services/android/lib/drone/attribute/AttributeEventExtra.java

+7-25
Original file line numberDiff line numberDiff line change
@@ -28,34 +28,16 @@ public class AttributeEventExtra {
2828
public static final String EXTRA_CALIBRATION_IMU_MESSAGE = PACKAGE_NAME + ".CALIBRATION_IMU_MESSAGE";
2929

3030
/**
31-
* Used to access the points used to start the magnetometer calibration.
31+
* Used to access the magnetometer calibration progress.
32+
* @see {@link com.o3dr.services.android.lib.drone.calibration.magnetometer.MagnetometerCalibrationProgress}
3233
*/
33-
public static final String EXTRA_CALIBRATION_MAG_POINTS_X = PACKAGE_NAME + "" +
34-
".CALIBRATION_MAG_POINTS_X";
35-
public static final String EXTRA_CALIBRATION_MAG_POINTS_Y = PACKAGE_NAME + "" +
36-
".CALIBRATION_MAG_POINTS_Y";
37-
public static final String EXTRA_CALIBRATION_MAG_POINTS_Z = PACKAGE_NAME + "" +
38-
".CALIBRATION_MAG_POINTS_Z";
39-
/**
40-
* Used to access the magnetometer calibration fitness value.
41-
*/
42-
public static final String EXTRA_CALIBRATION_MAG_FITNESS = PACKAGE_NAME + "" +
43-
".CALIBRATION_MAG_FITNESS";
44-
/**
45-
* Used to access the magnetometer calibration fit center values.
46-
*/
47-
public static final String EXTRA_CALIBRATION_MAG_FIT_CENTER = PACKAGE_NAME + "" +
48-
".CALIBRATION_MAG_FIT_CENTER";
49-
/**
50-
* Used to access the magnetometer calibration fit radii values.
51-
*/
52-
public static final String EXTRA_CALIBRATION_MAG_FIT_RADII = PACKAGE_NAME + "" +
53-
".CALIBRATION_MAG_FIT_RADII";
34+
public static final String EXTRA_CALIBRATION_MAG_PROGRESS = PACKAGE_NAME + ".CALIBRATION_MAG_PROGRESS";
35+
5436
/**
55-
* Used to access the magnetometer calibration final offset values.
37+
* Used to access the result from the magnetometer calibration.
38+
* @see {@link com.o3dr.services.android.lib.drone.calibration.magnetometer.MagnetometerCalibrationResult}
5639
*/
57-
public static final String EXTRA_CALIBRATION_MAG_OFFSETS = PACKAGE_NAME + "" +
58-
".CALIBRATION_MAG_OFFSETS";
40+
public static final String EXTRA_CALIBRATION_MAG_RESULT = PACKAGE_NAME + ".CALIBRATION_MAG_RESULT";
5941

6042
/**
6143
* Used to access the mavlink version when the heartbeat is received for the first time or

ClientLib/src/main/java/com/o3dr/services/android/lib/drone/attribute/AttributeType.java

+6
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,10 @@ public class AttributeType {
9797
* @see {@link com.o3dr.services.android.lib.drone.camera.GoPro}
9898
*/
9999
public static final String GOPRO = PACKAGE_NAME + ".GOPRO";
100+
101+
/**
102+
* Used to retrieve the status of the currently or last running magnetometer calibration.
103+
* @see {@link com.o3dr.services.android.lib.drone.calibration.magnetometer.MagnetometerCalibrationStatus}
104+
*/
105+
public static final String MAGNETOMETER_CALIBRATION_STATUS = PACKAGE_NAME + ".MAGNETOMETER_CALIBRATION_STATUS";
100106
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.o3dr.services.android.lib.drone.calibration.magnetometer;
2+
3+
parcelable MagnetometerCalibrationProgress;

0 commit comments

Comments
 (0)