From fc18dac90be3750c9d2690d234bb49829e29182d Mon Sep 17 00:00:00 2001 From: James Cotton Date: Sun, 5 Aug 2012 18:41:07 -0500 Subject: [PATCH] AndroidGCS: Joystick can now control UAV --- androidgcs/AndroidManifest.xml | 2 +- androidgcs/res/values/strings.xml | 2 +- .../org/openpilot/androidgcs/Controller.java | 44 +++++++++++++++---- .../openpilot/uavtalk/TelemetryMonitor.java | 2 +- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/androidgcs/AndroidManifest.xml b/androidgcs/AndroidManifest.xml index 3c99cff0d..132e91c39 100644 --- a/androidgcs/AndroidManifest.xml +++ b/androidgcs/AndroidManifest.xml @@ -23,7 +23,7 @@ - + OpenPilot GCS Home Browser + Controller PFD Map Logging @@ -25,6 +26,5 @@ Update Save Send - Controller Manual control values: diff --git a/androidgcs/src/org/openpilot/androidgcs/Controller.java b/androidgcs/src/org/openpilot/androidgcs/Controller.java index 91f046afa..d87bb5c06 100644 --- a/androidgcs/src/org/openpilot/androidgcs/Controller.java +++ b/androidgcs/src/org/openpilot/androidgcs/Controller.java @@ -11,6 +11,7 @@ import org.openpilot.uavtalk.UAVObjectField; import com.MobileAnarchy.Android.Widgets.Joystick.DualJoystickView; import com.MobileAnarchy.Android.Widgets.Joystick.JoystickMovedListener; +import com.MobileAnarchy.Android.Widgets.Joystick.JoystickView; import android.os.Bundle; import android.os.Handler; @@ -50,6 +51,18 @@ public class Controller extends ObjectManagerActivity { manualView.setText("Hello"); } + Observer settingsUpdated = new Observer() { + @Override + public void update(Observable observable, Object data) { + // Once we have updated settings we can active the GCS receiver mode + Log.d(TAG,"Got update from settings"); + activateGcsReceiver(); + UAVDataObject manualControlSettings = (UAVDataObject) objMngr.getObject("ManualControlSettings"); + if(manualControlSettings != null) { + manualControlSettings.removeUpdatedObserver(this); + } + } + }; @Override void onOPConnected() { @@ -60,16 +73,25 @@ public class Controller extends ObjectManagerActivity { if(manualControl != null) { manualControl.addUpdatedObserver(updatedObserver); } - - activateGcsReceiver(); - - DualJoystickView joystick = (DualJoystickView) findViewById(R.id.dualjoystickView); + + UAVDataObject manualControlSettings = (UAVDataObject) objMngr.getObject("ManualControlSettings"); + if(manualControlSettings != null) { + Log.d(TAG, "Requested settings update"); + manualControlSettings.addUpdatedObserver(updatedObserver); + manualControlSettings.updateRequested(); + } + + final double MOVEMENT_RANGE = 50.0; + DualJoystickView joystick = (DualJoystickView) findViewById(R.id.dualjoystickView); + joystick.setMovementConstraint(JoystickView.CONSTRAIN_BOX); + joystick.setMovementRange((int)MOVEMENT_RANGE, (int)MOVEMENT_RANGE); + // Hardcode a Mode 1 listener for now joystick.setOnJostickMovedListener(new JoystickMovedListener() { public void OnMoved(int pan, int tilt) { - pitch = -(double) tilt / 10.0; - yaw = (double) pan / 10.0; + pitch = (double) tilt / MOVEMENT_RANGE; + yaw = (double) pan / MOVEMENT_RANGE; updated = true; leftJoystickHeld = true; } @@ -78,8 +100,11 @@ public class Controller extends ObjectManagerActivity { public void OnReturnedToCenter() { } }, new JoystickMovedListener() { public void OnMoved(int pan, int tilt) { - throttle = (double) (tilt + 10) / 20.0; - roll = (double) pan / 10.0; + throttle = (double) (-tilt + (MOVEMENT_RANGE -5)) / (MOVEMENT_RANGE - 5); + throttle *= 0.5; + if (throttle < 0) + throttle = -1; + roll = (double) pan / MOVEMENT_RANGE; updated = true; rightJoystickHeld = true; } @@ -120,7 +145,7 @@ public class Controller extends ObjectManagerActivity { }); } }; - sendTimer.schedule(controllerTask, 500, 50); + sendTimer.schedule(controllerTask, 500, 100); } /** @@ -155,6 +180,7 @@ public class Controller extends ObjectManagerActivity { */ private void activateGcsReceiver() { UAVObject manualControlSettings = objMngr.getObject("ManualControlSettings"); + if (manualControlSettings == null) { Toast.makeText(this, "Failed to get manual control settings", Toast.LENGTH_SHORT).show(); return; diff --git a/androidgcs/src/org/openpilot/uavtalk/TelemetryMonitor.java b/androidgcs/src/org/openpilot/uavtalk/TelemetryMonitor.java index d1d7a9c44..5f80ff779 100644 --- a/androidgcs/src/org/openpilot/uavtalk/TelemetryMonitor.java +++ b/androidgcs/src/org/openpilot/uavtalk/TelemetryMonitor.java @@ -159,7 +159,7 @@ public class TelemetryMonitor extends Observable{ // objPending = null; if(!success) { - Log.e(TAG, "Transaction failed: " + obj.getName() + " sending again."); + //Log.e(TAG, "Transaction failed: " + obj.getName() + " sending again."); return; }