Acceleration sensor control and basic vision framework
authorKate Alhola <kate.alhola@nokia.com>
Thu, 6 Jan 2011 10:20:02 +0000 (12:20 +0200)
committerKate Alhola <kate.alhola@nokia.com>
Thu, 6 Jan 2011 10:20:02 +0000 (12:20 +0200)
13 files changed:
mardrone/ConfigDialog.qml
mardrone/JoyStick.qml
mardrone/Makefile
mardrone/ardrone.qml
mardrone/dronecontrol.cpp
mardrone/dronecontrol.h
mardrone/mardrone
mardrone/mardrone.pro
mardrone/navdata.cpp
mardrone/navdata.h
mardrone/video.cpp
mardrone_0.0.1_armel.changes
mardrone_0.0.1_armel.deb

index a4fed33..31690fc 100644 (file)
@@ -21,7 +21,7 @@ Page {
         anchors.left:parent.left;anchors.right:parent.right
           anchors.leftMargin:50;anchors.rightMargin:50
 
-           spacing: 30
+           spacing: 40
            Text {
               width:400
               text: "Drone IP"
@@ -45,7 +45,17 @@ Page {
         //      onEnabledChanged:{drone.confFullScreen=enabled;}
               onCheckedChanged:{drone.confFullScreen=checked;}
            }
-
+           Text {
+              text: "Acceleration Sensor for controll"
+           }
+           Switch {
+              id: useAccelSw
+          //    enabled:drone.confUseAccel
+              checked:drone.confUseAccel
+              anchors.right:parent.right
+//              onEnabledChanged:{drone.confUseAccel=enabled;}
+              onCheckedChanged:{drone.confUseAccel=checked;}
+           }
            Text {
               text: "Show debug"
            }
@@ -83,7 +93,7 @@ Page {
            }
 
            Text {
-              text: "Forward gain"
+              text: "Forward/backward gain"
            }
 
            Slider {
@@ -95,6 +105,7 @@ Page {
               value:drone.confForwardGain
               onValueChanged:{drone.confForwardGain=value;}
            }
+           /*
            Text {
               text: "Backward gain"
            }
@@ -122,9 +133,9 @@ Page {
               value:drone.confLeftGain
               onValueChanged:{drone.confLeftGain=value;}
            }
-
+*/
            Text {
-              text: "Right gain"
+              text: "Right/Left gain"
            }
 
            Slider {
@@ -136,7 +147,19 @@ Page {
               value:drone.confRightGain
               onValueChanged:{drone.confRightGain=value;}
            }
+           Text {
+              text: "accel ctrl treshold"
+           }
 
+           Slider {
+              id: ctrlTreshold
+              anchors.right:parent.right
+         //    maximumValue:25.0
+         //     stepSize:0.01
+         //     steps:1
+              value:drone.confCtrlTrsh
+              onValueChanged:{drone.confCtrlTrsh=value;}
+           }
           }
        }
      }
index 858c214..ad4e7b1 100644 (file)
@@ -4,6 +4,7 @@ Item {
         id:joystick
         property int xv:(knob.x-(width-knob.width)/2)*(200/(width-knob.width))
         property int yv:(knob.y-(height-knob.height)/2)*(200/(height-knob.height))
+        property bool pressed:mouse_area.pressed
         width: 200
         height: 200
 
@@ -29,7 +30,9 @@ Item {
             drag.maximumX:parent.width-knob.width
             drag.maximumY:parent.height-knob.height
             drag.target:knob;
-            onReleased:{knob.x=parent.width/2-knob.width/2;knob.y=parent.height/2-knob.height/2
+            onReleased:{
+                knob.x=parent.width/2-knob.width/2;
+                knob.y=parent.height/2-knob.height/2;
             }
         }
   }
index a31cd76..620a705 100644 (file)
@@ -1,6 +1,6 @@
 #############################################################################
 # Makefile for building: mardrone
-# Generated by qmake (2.01a) (Qt 4.7.0) on: Wed Dec 22 12:56:25 2010
+# Generated by qmake (2.01a) (Qt 4.7.0) on: Wed Jan 5 16:02:29 2011
 # Project:  mardrone.pro
 # Template: app
 # Command: /usr/bin/qmake -o Makefile mardrone.pro
@@ -13,10 +13,10 @@ CXX           = g++
 DEFINES       = -DQT_GL_NO_SCISSOR_TEST -DQT_DEFAULT_TEXTURE_GLYPH_CACHE_WIDTH=1024 -DQT_NO_DEBUG -DQT_DECLARATIVE_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
 CFLAGS        = -pipe -O3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wall -W -D_REENTRANT $(DEFINES)
 CXXFLAGS      = -pipe -O3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -Wall -W -D_REENTRANT $(DEFINES)
-INCPATH       = -I/targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/linux-g++-maemo5 -I. -I/targets/FREMANTLE_ARMEL/usr/include/QtCore -I/targets/FREMANTLE_ARMEL/usr/include/QtNetwork -I/targets/FREMANTLE_ARMEL/usr/include/QtGui -I/targets/FREMANTLE_ARMEL/usr/include/QtDeclarative -I/targets/FREMANTLE_ARMEL/usr/include -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/Soft/Common -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/VP_SDK -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/VP_SDK/VP_Os/linux -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/VP_SDK/VP_Os -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/Soft/Lib -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/VLIB -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib -I.
+INCPATH       = -I/targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/linux-g++-maemo5 -I. -I/targets/FREMANTLE_ARMEL/usr/include/QtCore -I/targets/FREMANTLE_ARMEL/usr/include/QtNetwork -I/targets/FREMANTLE_ARMEL/usr/include/QtGui -I/targets/FREMANTLE_ARMEL/usr/include/QtDeclarative -I/targets/FREMANTLE_ARMEL/usr/include -I/targets/FREMANTLE_ARMEL/usr/include/QtSensors -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/Soft/Common -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/VP_SDK -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/VP_SDK/VP_Os/linux -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/VP_SDK/VP_Os -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/Soft/Lib -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib/VLIB -I../../../../ARDrone_SDK_1_5_Version_20101004/ARDroneLib -I/targets/FREMANTLE_ARMEL/usr/include -I.
 LINK          = g++
-LFLAGS        = -Wl,-rpath-link,/usr/lib -Wl,-O1 -Wl,--hash-style=gnu
-LIBS          = $(SUBLIBS)  -L/usr/lib -lQtComponents -L/home/kathy/ARDrone_SDK_1_5_Version_20101004/lib -lvlib -lsdk -lQtDeclarative -L/usr/lib -L/usr/X11R6/lib -lQtScript -lQtSvg -lQtSql -lQtXmlPatterns -lQtOpenGL -lQtGui -lQtNetwork -lQtDBus -lQtXml -lQtCore -lpthread 
+LFLAGS        = -Wl,-rpath-link,/usr/lib -Wl,-O1 -Wl,--hash-style=gnu -Wl,-rpath,/usr/lib
+LIBS          = $(SUBLIBS)  -L/usr/lib -lQtComponents -L/home/kathy/ARDrone_SDK_1_5_Version_20101004/lib -lvlib -lsdk -L/usr/lib -lQtSensors -lQtDeclarative -L/usr/X11R6/lib -lQtScript -lQtSvg -lQtSql -lQtXmlPatterns -lQtOpenGL -lQtGui -lQtNetwork -lQtDBus -lQtXml -lQtCore -lpthread 
 AR            = ar cqs
 RANLIB        = 
 QMAKE         = /usr/bin/qmake
@@ -80,6 +80,7 @@ DIST          = /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/common/unix.conf
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/default_pre.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/release.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/default_post.prf \
+               /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/mobility.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/warn_on.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/qt.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/unix/thread.prf \
@@ -131,6 +132,7 @@ Makefile: mardrone.pro  /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/linux-g++
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/default_pre.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/release.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/default_post.prf \
+               /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/mobility.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/warn_on.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/qt.prf \
                /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/unix/thread.prf \
@@ -162,6 +164,7 @@ Makefile: mardrone.pro  /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/linux-g++
 /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/default_pre.prf:
 /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/release.prf:
 /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/default_post.prf:
+/targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/mobility.prf:
 /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/warn_on.prf:
 /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/qt.prf:
 /targets/FREMANTLE_ARMEL/usr/share/qt4/mkspecs/features/unix/thread.prf:
@@ -326,6 +329,16 @@ uninstall_target:  FORCE
        -$(DEL_DIR) $(INSTALL_ROOT)/opt/usr/bin/ 
 
 
+install_icon64: first FORCE
+       @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/usr/share/icons/hicolor/64x64/apps/ || $(MKDIR) $(INSTALL_ROOT)/usr/share/icons/hicolor/64x64/apps/ 
+       -$(INSTALL_FILE) /home/kathy/sb/harmattan/mardrone/mardrone/mardrone.png $(INSTALL_ROOT)/usr/share/icons/hicolor/64x64/apps/
+
+
+uninstall_icon64:  FORCE
+       -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/share/icons/hicolor/64x64/apps/mardrone.png
+       -$(DEL_DIR) $(INSTALL_ROOT)/usr/share/icons/hicolor/64x64/apps/ 
+
+
 install_desktopfile: first FORCE
        @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/usr/share/applications/hildon/ || $(MKDIR) $(INSTALL_ROOT)/usr/share/applications/hildon/ 
        -$(INSTALL_FILE) /home/kathy/sb/harmattan/mardrone/mardrone/mardrone.desktop $(INSTALL_ROOT)/usr/share/applications/hildon/
@@ -336,9 +349,9 @@ uninstall_desktopfile:  FORCE
        -$(DEL_DIR) $(INSTALL_ROOT)/usr/share/applications/hildon/ 
 
 
-install:  install_target install_desktopfile  FORCE
+install:  install_target install_icon64 install_desktopfile  FORCE
 
-uninstall: uninstall_target uninstall_desktopfile   FORCE
+uninstall: uninstall_target uninstall_icon64 uninstall_desktopfile   FORCE
 
 FORCE:
 
index 2d8af42..183d743 100644 (file)
@@ -37,6 +37,14 @@ Window {
             opacity:0.5
             width:640;height:480;
         }
+        Text {
+            y:100
+            visible:drone.confUseAccel
+            color: "#00FF00"
+            id: droneCtrlValues
+            font.pixelSize:20
+            text: "cmd:pitch=" + Math.round(drone.pitch) + " roll= " +  Math.round(drone.roll) + " yaw=" + Math.round(drone.yaw) + " vv= " +  Math.round(drone.vVelocity)
+        }
 
         Text {
             y:115
@@ -65,6 +73,7 @@ Window {
             }
         }
         Image {
+            visible: !drone.confUseAccel
             x:10;y:200
             width:280;height:280;
             source: "joybox.png"
@@ -88,8 +97,9 @@ Window {
                 id:rj
                 anchors.fill:parent
                 anchors.margins:50
-                onYvChanged:{drone.vVelocity=yv;}
+                onYvChanged:{drone.vVelocity=-1*yv;}
                 onXvChanged:{drone.yaw=xv;}
+                onPressedChanged: { drone.ctrlActive=pressed;}
             }
         }
         Row {
index cbc4f23..03862f9 100644 (file)
@@ -35,13 +35,34 @@ DroneControl::DroneControl():QObject()
     connect(droneThread->navData(),SIGNAL(navDataUpdated()),this,SLOT(navDataUpdated()));
     connect(droneThread->navData(),SIGNAL(stateUpdated()),this,SLOT(statusUpdated()));
     droneSettings=new QSettings("katix.org","ardrone");
+    m_ctrlActive=false;
     m_pitch=0;
     m_roll=0;
     m_yaw=0;
     m_vv=0;
+    m_useAccel=droneSettings->value("useAccel",false).toBool();
+    m_ctrlTrsh=droneSettings->value("ctrlTreshold",10.0).toFloat();
+    rSensor=new QRotationSensor();
+    rSensor->start();
+    connect(rSensor,SIGNAL(readingChanged()),this,SLOT(rotationReadingsChanged()));
     droneThread->setDroneGain(confForwardGain(),confBackwardGain(),confLeftGain(),confRightGain());
 
 }
+
+void DroneControl::rotationReadingsChanged()
+{
+    if(m_useAccel && m_ctrlActive) {
+        m_pitch=rSensor->reading()->x()-m_rotRefX;
+        m_roll =rSensor->reading()->y()-m_rotRefY;
+        m_pitch=(fabs(m_pitch)<m_ctrlTrsh ) ? 0:(m_pitch>0 ? m_pitch-m_ctrlTrsh:m_pitch+m_ctrlTrsh);
+        m_roll =(fabs(m_roll )<m_ctrlTrsh ) ? 0:(m_roll>0  ? m_roll- m_ctrlTrsh:m_roll+ m_ctrlTrsh);
+        droneThread->setDroneControl(m_pitch,m_roll,m_yaw,m_vv);
+        emit pitchRollChanged();
+        //m_rotRefZ=rSensor->reading()->z();
+        //qDebug("setCtrlActive ref(%3.1f,%3.1f,%3.1f)",m_rotRefX,m_rotRefY,m_rotRefZ);
+    }
+}
+
 void DroneControl::navDataUpdated()
 {
     emit navDataChanged();
@@ -68,14 +89,16 @@ void DroneControl::setRoll(float val_)
     droneThread->setDroneControl(m_pitch,m_roll,m_yaw,m_vv);
 };
 float DroneControl::roll() {return m_roll;};
-void DroneControl::setYaw(float val_) {
-    m_yaw=val_;
- //   qDebug() << "setYaw=" << val_;
+void DroneControl::setYaw(float val) {
+    m_yaw=val;
+ //   qDebug() << "setYaw=" << val;
+    if(m_useAccel && m_ctrlActive) m_yaw=(fabs(m_yaw)<(m_ctrlTrsh*2) ) ? 0:(m_yaw>0 ? m_yaw-(m_ctrlTrsh*2):m_yaw+(m_ctrlTrsh*2));
     droneThread->setDroneControl(m_pitch,m_roll,m_yaw,m_vv);
 };
 float DroneControl::yaw() {return m_yaw;};
-void DroneControl::setVVelocity(float val_) {
-    m_vv=val_;
+void DroneControl::setVVelocity(float val) {
+    m_vv=val;
+    if(m_useAccel && m_ctrlActive) m_vv=(fabs(m_vv)<(m_ctrlTrsh*2) ) ? 0:(m_vv>0? m_vv-(m_ctrlTrsh*2):m_vv+(m_ctrlTrsh*2));
 //    qDebug() << "setVv=" << val_;
     droneThread->setDroneControl(m_pitch,m_roll,m_yaw,m_vv);
 };
@@ -86,6 +109,27 @@ void DroneControl::setAltitude(float val_) {
 float DroneControl::altitude() {return m_altitude;};
 void DroneControl::setEnabled(int val_) { m_enabled=val_;};
 int DroneControl::enabled() {return m_enabled;};
+
+bool DroneControl::ctrlActive()
+{
+    return m_ctrlActive;
+};
+void DroneControl::setCtrlActive(bool val_)
+{
+    if(val_ && !m_ctrlActive) { // Ctrl switched to active
+        m_rotRefX=rSensor->reading()->x();
+        m_rotRefY=rSensor->reading()->y();
+        m_rotRefZ=rSensor->reading()->z();
+        qDebug("setCtrlActive ref(%3.1f,%3.1f,%3.1f)",m_rotRefX,m_rotRefY,m_rotRefZ);
+    }
+    m_ctrlActive=val_;
+    if(!m_ctrlActive) { m_pitch=0;m_roll=0; };
+    droneThread->setDroneControl(m_pitch,m_roll,m_yaw,m_vv);
+    emit pitchRollChanged();
+
+};
+
+
 void DroneControl::setFly(bool val_)
 {
     m_fly=val_;
@@ -188,11 +232,13 @@ void DroneControl::setConfShowGauges(bool val)
 };
 bool DroneControl::confUseAccel()
 {
-    return droneSettings->value("useAccel",false).toBool();
+    //return droneSettings->value("useAccel",false).toBool();
+    return m_useAccel; // return cached value
 };
 void DroneControl::setConfUseAccel(bool val)
 {
     droneSettings->setValue("useAccel",val);
+    m_useAccel=val;
     emit configChanged();
 };
 bool DroneControl::confUseJoyStick()
@@ -225,7 +271,16 @@ void DroneControl::setConfForwardGain(float val)
     droneThread->setDroneGain(confForwardGain(),confBackwardGain(),confLeftGain(),confRightGain());
     emit configChanged();
 };
-
+float DroneControl::confCtrlTrsh()
+{
+    return m_ctrlTrsh;
+};
+void DroneControl::setConfCtrlTrsh(float val)
+{
+    droneSettings->setValue("ctrlTreshold",val);
+    m_ctrlTrsh=val;
+    emit configChanged();
+};
 
 float DroneControl::confBackwardGain()
 {
@@ -338,6 +393,7 @@ void DroneThread::navDataReady()
         break;
     case initialized:
         sendCmd("AT*CTRL=0\r");
+        sendCmd("AT*CONFIG=%1,\"detect:detect_type\",\"2\"\r");
         state=ready;
         break;
     case ready:    
index 9b6a3a2..057833f 100644 (file)
@@ -9,21 +9,25 @@
 #include <QThread>
 #include <QTimer>
 #include <QSettings>
+#include <QRotationSensor>
 #undef _GNU_SOURCE // just get rid of error message double definition
 #include <navdata.h>
 
 class DroneThread;
 
+QTM_USE_NAMESPACE
+
 class DroneControl : public QObject
 {
     Q_OBJECT
-    Q_PROPERTY(float pitch READ pitch WRITE setPitch)
-    Q_PROPERTY(float roll  READ roll  WRITE setRoll)
-    Q_PROPERTY(float yaw   READ yaw   WRITE setYaw)
+    Q_PROPERTY(float pitch READ pitch WRITE setPitch NOTIFY pitchRollChanged)
+    Q_PROPERTY(float roll  READ roll  WRITE setRoll NOTIFY pitchRollChanged)
+    Q_PROPERTY(float yaw   READ yaw   WRITE setYaw NOTIFY pitchRollChanged)
     Q_PROPERTY(float altitude  READ altitude WRITE setAltitude)
-    Q_PROPERTY(float vVelocity READ vVelocity WRITE setVVelocity)
+    Q_PROPERTY(float vVelocity READ vVelocity WRITE setVVelocity NOTIFY pitchRollChanged)
     Q_PROPERTY(int   enabled   READ enabled WRITE setEnabled)
     Q_PROPERTY(bool  fly READ fly WRITE setFly)
+    Q_PROPERTY(bool  ctrlActive READ ctrlActive WRITE setCtrlActive)
     Q_PROPERTY(float dronePitch READ dronePitch NOTIFY navDataChanged)
     Q_PROPERTY(float droneRoll READ droneRoll NOTIFY navDataChanged)
     Q_PROPERTY(float droneYaw READ droneYaw NOTIFY navDataChanged)
@@ -49,6 +53,7 @@ class DroneControl : public QObject
     Q_PROPERTY(float confBackwardGain READ confBackwardGain WRITE setConfBackwardGain NOTIFY configChanged)
     Q_PROPERTY(float confLeftGain     READ confLeftGain     WRITE setConfLeftGain     NOTIFY configChanged)
     Q_PROPERTY(float confRightGain    READ confRightGain    WRITE setConfRightGain    NOTIFY configChanged)
+    Q_PROPERTY(float confCtrlTrsh     READ confCtrlTrsh     WRITE setConfCtrlTrsh     NOTIFY configChanged)
 
 public:
     explicit DroneControl();
@@ -62,6 +67,7 @@ public:
     int   enabled() ; void setEnabled(int val_) ;
     bool  emergency();void setEmergency(bool val_) ;
     bool  fly() ;     void setFly(bool val_) ;
+    bool  ctrlActive();void setCtrlActive(bool val_) ;
 
 // Read only telemetry and drone status
     QString decodedStatus();
@@ -76,25 +82,27 @@ public:
     float droneVBat();
 
 //Config variables
- QString confDroneIp();   void setConfDroneIp(QString ip);
+ QString confDroneIp();      void setConfDroneIp(QString ip);
  bool    confShowDebug();    void setConfShowDebug(bool val);
  bool    confShowHorizon();  void setConfShowHorizon(bool val);
  bool    confShowGauges();   void setConfShowGauges(bool val);
  bool    confUseAccel();     void setConfUseAccel(bool val);
- bool    confFullScreen();void setConfFullScreen(bool val);
+ bool    confFullScreen();   void setConfFullScreen(bool val);
  bool    confUseJoyStick();  void setConfUseJoyStick(bool val);
  float   confForwardGain();  void setConfForwardGain(float val);
  float   confBackwardGain(); void setConfBackwardGain(float val);
  float   confLeftGain();     void setConfLeftGain(float val);
  float   confRightGain();    void setConfRightGain(float val);
-
+ float   confCtrlTrsh();     void setConfCtrlTrsh(float val);
 signals:
     void navDataChanged();
     void statusChanged();
     void configChanged();
+    void pitchRollChanged();
 public slots:
     void navDataUpdated();
     void statusUpdated();
+    void rotationReadingsChanged();
 private:
 
     float m_pitch;     // pitch in horizon
@@ -102,10 +110,16 @@ private:
     float m_yaw;       // low value to display
     float m_vv;        // Verticl velocity
     float m_altitude;  // altitude
+    float m_rotRefX;   // Rotation zero reference
+    float m_rotRefY;
+    float m_rotRefZ;
     int   m_enabled;   // Enable flag
     bool  m_emergency; // Emergency flag
     QString _emgReason; // Reason of emergency
     bool  m_fly;       // Fly flag
+    bool  m_ctrlActive;
+    bool  m_useAccel;
+    float m_ctrlTrsh;  // accel controll treshold
 
     QTcpSocket *ctlSock;  // TCP port for control/config data
     QUdpSocket *navSock;  // Navigation data receive socket port 5554
@@ -113,6 +127,7 @@ private:
 
     DroneThread *droneThread;
     QSettings *droneSettings;
+    QRotationSensor *rSensor; // used for controllind drone with device rotation
 };
 
 
index 8607320..4d08ee7 100755 (executable)
Binary files a/mardrone/mardrone and b/mardrone/mardrone differ
index 92169f8..84c7ae2 100644 (file)
@@ -8,6 +8,7 @@ QT       += core gui declarative network
 
 
 CONFIG += mobility
+MOBILITY += sensors
 TARGET = mardrone
 TEMPLATE = app
 AR_DRONE_SDK= $$(HOME)/ARDrone_SDK_1_5_Version_20101004
@@ -65,6 +66,9 @@ unix:!symbian {
     desktopfile.files = $${TARGET}.desktop
     maemo5 {
         desktopfile.path = /usr/share/applications/hildon
+        icon64.path = /usr/share/icons/hicolor/64x64/apps
+        icon64.files = $${TARGET}.png
+        INSTALLS += icon64
     } else {
         desktopfile.path = /usr/share/applications
     }
index 5954c93..85011b4 100644 (file)
@@ -112,8 +112,8 @@ void NavData::parseOption(navdata_option_t *op)
                 current_motor4=npwm->current_motor4;
                 pwm_motor4=npwm->motor4;
                 emit navDataUpdated();
-                qDebug("pwm1=%3d I1=%4f pwm2=%3d I2=%4f pwm3=%3d I3=%4f pwm4=%3d I4=%4f",
-                       pwm_motor1,current_motor1,pwm_motor2,current_motor2,pwm_motor3,current_motor3,pwm_motor4,current_motor4);
+         //       qDebug("pwm1=%3d I1=%4f pwm2=%3d I2=%4f pwm3=%3d I3=%4f pwm4=%3d I4=%4f",
+         //              pwm_motor1,current_motor1,pwm_motor2,current_motor2,pwm_motor3,current_motor3,pwm_motor4,current_motor4);
                  }
                 break;
         case NAVDATA_ALTITUDE_TAG: //10
@@ -129,6 +129,19 @@ void NavData::parseOption(navdata_option_t *op)
         case NAVDATA_TRACKERS_SEND_TAG:
                 break;
         case NAVDATA_VISION_DETECT_TAG: //16
+            {
+                _navdata_vision_detect_t *nvisd=(_navdata_vision_detect_t*)op;
+                qDebug("nb_detected=%d type=%d xc=%d yc=%d width=%d height=%d dist=%d",nvisd->nb_detected,nvisd->type[0],nvisd->xc[0],nvisd->yc[0],
+                       nvisd->width[0],nvisd->height[0],nvisd->dist[0]);
+                for(int i=0;i++;i<4) {
+                    tags[i].type=nvisd->type[i];
+                    tags[i].xc=nvisd->xc[i];
+                    tags[i].yc=nvisd->yc[i];
+                    tags[i].height=nvisd->height[i];
+                    tags[i].width=nvisd->width[i];
+                    tags[i].dist=nvisd->dist[i];
+                }
+           }
                 break;
         case NAVDATA_WATCHDOG_TAG:
                 break;
index 8707766..f46ed61 100644 (file)
@@ -6,6 +6,15 @@
 #include <navdata_common.h>
 #include "config.h"
 
+struct tag_t {
+    unsigned int type;
+    unsigned int xc;
+    unsigned int yc;
+    unsigned int width;
+    unsigned int height;
+    unsigned int dist;
+};
+
 class NavData : public QObject
 {
     Q_OBJECT
@@ -34,6 +43,7 @@ public:
     int pwm_motor2;
     int pwm_motor3;
     int pwm_motor4;
+    tag_t tags[4];
 signals:
     void navDataUpdated();
     void stateUpdated();
index a535999..ae261ea 100644 (file)
@@ -103,7 +103,6 @@ void VideoThread::run()
     picture.cr_line_size  = pictureWidth / 2;
     picture.y_pad         = 0;
     picture.c_pad         = 0;
-    qDebug() << "videoThread::run() 3";
     video_codec_open(&controller, (codec_type_t)UVLC_CODEC);
     //stateTimer->start(1000);
     qDebug() << "videoThread::run() initialized";
@@ -137,7 +136,7 @@ void VideoThread::videoDataReady()
    quint16 port;
    videoData.resize(videoSock->pendingDatagramSize ());
    l=videoSock->readDatagram(videoData.data(),videoData.size(),&host,&port);
-   qDebug() << "videoThread::videoDataReady" <<" l=" << l << "from"  << host ;
+//   qDebug() << "videoThread::videoDataReady" <<" l=" << l << "from"  << host ;
    decodeTransform(videoData);
 }
 
@@ -157,7 +156,7 @@ void VideoThread::decodeTransform(QByteArray &videoData)
     //video_decode_picture( &controller, &picture, &stream, &got_image );
     if( got_image )
         {
-            qDebug() <<"VideoThread::decodeTransform got image" << picture.width << picture.height << image->byteCount() << image->bytesPerLine();
+          //  qDebug() <<"VideoThread::decodeTransform got image" << picture.width << picture.height << image->byteCount() << image->bytesPerLine();
           // we got one picture
           // out->size = 1;
           picture.complete     = 1;
@@ -165,7 +164,7 @@ void VideoThread::decodeTransform(QByteArray &videoData)
           vp_stages_YUV420P_to_RGB565(NULL,&picture,image->bits(),image->bytesPerLine());
 
 
-          qDebug() << "pic " << num_picture_decoded;
+       //   qDebug() << "pic " << num_picture_decoded;
         }
 
 
index d24e187..7cdbb68 100644 (file)
@@ -15,6 +15,6 @@ Changes:
  .
    * Initial Release.
 Files: 
- 1591b907efe219822b1d5394e97f543e 269 user/hidden optional mardrone_0.0.1.dsc
- 08c0e35f2b10481131ba0f08a8c28115 1373656 user/hidden optional mardrone_0.0.1.tar.gz
- 898cfeb09dd6c616a146ac6b1869607b 103972 user/hidden optional mardrone_0.0.1_armel.deb
+ c19e2d3cccf5dcc764da734d0127d6a7 269 user/hidden optional mardrone_0.0.1.dsc
+ 0552a460cc8b4b7d7413e5637e4be22c 1379887 user/hidden optional mardrone_0.0.1.tar.gz
+ f097693f6af6d6e2785d3f8d282100a9 107678 user/hidden optional mardrone_0.0.1_armel.deb
index c14d5a8..5c16f7b 100644 (file)
Binary files a/mardrone_0.0.1_armel.deb and b/mardrone_0.0.1_armel.deb differ