Cleanup and fixes to accelerometer class
authorRikhard Kuutti <rikhard.kuutti@fudeco.com>
Thu, 18 Mar 2010 11:29:10 +0000 (13:29 +0200)
committerRikhard Kuutti <rikhard.kuutti@fudeco.com>
Thu, 18 Mar 2010 11:29:10 +0000 (13:29 +0200)
Fixed smoothdata method

Client/accelerometer.cpp
Client/accelerometer.h

index fc67b2f..8daf06f 100644 (file)
@@ -2,26 +2,18 @@
  * Accelerometer class to access the device accelerometer
  *
  * @author      Rikhard Kuutti <rikhard.kuutti@fudeco.com>
- * @author      Kai Rasilainen 
+ * @author      Kai Rasilainen <kai.rasilainen@fudeco.com>
  * @copyright   (c) 2010 Speed Freak team
  * @license     http://opensource.org/licenses/gpl-license.php GNU Public License
  */
 
 #include "accelerometer.h"
 
-#include "math.h"
-
-#include <QFile>
-#include <QString>
-#include <QRegExp>
-#include <QTimer>
 #include <QDBusConnection>
 #include <QDBusInterface>
 #include <QDBusPendingReply>
 
-#define kFilteringFactor    0.2
-
-static int sampleIndex = 0;
+#define kFilteringFactor 0.2
 
 /**
  * Default constructor for Accelerometer class
@@ -29,27 +21,6 @@ static int sampleIndex = 0;
  */
 Accelerometer::Accelerometer()
 {
-    calculate = new Calculate();
-
-    timer = new QTimer(this);
-    connect(timer, SIGNAL(timeout()), this, SLOT(processData()));
-    sampleRate = 40;
-    initValues();
-}
-
-/**
- * Constructor for Accelerometer class that takes accelerometer sample rate as parameter
- *
- * @param p_SampleRate the desired sample rate of accelerometer in milliseconds
- */
-Accelerometer::Accelerometer(int p_SampleRate)
-{
-    calculate = new Calculate();
-
-
-    timer = new QTimer(this);
-    connect(timer, SIGNAL(timeout()), this, SLOT(processData()));
-    sampleRate = p_SampleRate;
     initValues();
 }
 
@@ -62,45 +33,14 @@ Accelerometer::~Accelerometer()
 }
 
 /**
- * Start measuring
- *
- */
-void Accelerometer::start()
-{
-    initValues();
-    //calibrate();
-    timer->start(sampleRate);
-    now.restart();
-}
-
-/**
  * Init class members
  *
  */
 void Accelerometer::initValues()
 {
-    calculate->reset();
-    accelerationX = 0;
-    accelerationY = 0;
-    accelerationZ = 0;
-    trueAccelerationX = 0;
-    trueAccelerationY = 0;
-    trueAccelerationZ = 0;
     previousAccelerationX = 0;
     previousAccelerationY = 0;
     previousAccelerationZ = 0;
-    previousSpeed = 0;
-    currentSpeed = 0;
-    currentAcceleration = 0;
-    previousAcceleration = 0;
-    totalAcceleration = 0;
-    intervalTime = 0;
-    totalTime = 0;
-    distanceTraveled = 0;
-    lastDistanceTraveled = 0;
-    averageSpeed = 0;
-    sampleRate = 0;
-    firstRun = true;
     calibrationX = 0;
     calibrationY = 0;
     calibrationZ = 0;
@@ -131,95 +71,33 @@ void Accelerometer::calibrate(void)
     calibrationX = calibrationX/1024;  // division by 1024
     calibrationY = calibrationY/1024;
     calibrationZ = calibrationZ/1024;
-
-}
-
-/**
- * Stop measuring
- *
- */
-void Accelerometer::stop()
-{
-    timer->stop();
 }
 
 /**
- * Processes Accelerometer data
- *
- * Opens the accelerometer value file for reading and reads and parses accelerometer values.
- * Forwards data to Calculate class for processing
+ * Smooths Accelerometer data by applying a low pass filter to data
  *
+ * @param x accelerometer's x-axis input
+ * @param y accelerometer's y-axis input
+ * @param z accelerometer's z-axis input
  */
-/*
-void Accelerometer::processData()
+void Accelerometer::smoothData(qreal &x, qreal &y, qreal &z)
 {
-    getAcceleration(accelerationX, accelerationY, accelerationZ);
-    //smoothData(accelerationX, accelerationY, accelerationZ);
-
-    // Apply calibration
-    accelerationX = accelerationX - calibrationX;
-    accelerationY = accelerationY - calibrationY;
-    accelerationZ = accelerationZ - calibrationZ;
-
-    // If the function is run the first time, make sure that there
-    // are no differences with previous and current acceleration
-    if (firstRun) {
-        previousAccelerationX = accelerationX;
-        previousAccelerationY = accelerationY;
-        previousAccelerationZ = accelerationZ;
-        firstRun = false;
-    }
-
-    // Calculate the current acceleration for each axis
-    trueAccelerationX = (accelerationX - previousAccelerationX);
-    trueAccelerationY = (accelerationY - previousAccelerationY);
-    trueAccelerationZ = (accelerationZ - previousAccelerationZ);
-
-    previousAccelerationX = accelerationX;
-    previousAccelerationY = accelerationY;
-    previousAccelerationZ = accelerationZ;
-
-    currentAcceleration = sqrt((trueAccelerationX * trueAccelerationX) +
-                               (trueAccelerationY * trueAccelerationY) +
-                               (trueAccelerationZ * trueAccelerationZ));
+    x = (previousAccelerationX * (1 - kFilteringFactor)) + (x * kFilteringFactor);
+    y = (previousAccelerationY * (1 - kFilteringFactor)) + (y * kFilteringFactor);
+    z = (previousAccelerationZ * (1 - kFilteringFactor)) + (z * kFilteringFactor);
 
-    // Discrimination window for currentAcceleration
-    if ( fabs(currentAcceleration) < 0.10 ) { currentAcceleration = 0; }
-
-    // Measure time interval
-    intervalTime = now.restart();
-    intervalTime = intervalTime/1000; // millisecs to secs
-    totalTime = totalTime + intervalTime;
-
-    // Using calculate class to calculate velocity and distance etc.
-    calculate->calculateParameters(currentAcceleration,intervalTime );
-
-    currentSpeed = calculate->getCurrentSpeed();
-    distanceTraveled = calculate->getDistanceTraveled();
+    previousAccelerationX = x;
+    previousAccelerationY = y;
+    previousAccelerationZ = z;
 }
-*/
+
 /**
- * Smooths Accelerometer data
+ * Gets the raw acceleration data from accelerometer
  *
  * @param x accelerometer's x-axis input
  * @param y accelerometer's y-axis input
  * @param z accelerometer's z-axis input
  */
-void Accelerometer::smoothData(qreal &x, qreal &y, qreal &z)
-{
-    accelerationX = x;
-    accelerationY = y;
-    accelerationZ = z;
-
-    if (sampleIndex > 0)
-    {
-        accelerationX = ((previousAccelerationX) * (1-kFilteringFactor)) + (accelerationX * kFilteringFactor);
-        accelerationY = ((previousAccelerationY) * (1-kFilteringFactor)) + (accelerationY * kFilteringFactor);
-        accelerationZ = ((previousAccelerationZ) * (1-kFilteringFactor)) + (accelerationZ * kFilteringFactor);
-    }
-    sampleIndex++;
-}
-
 void Accelerometer::getAcceleration(qreal &x, qreal &y, qreal &z)
 {
     QDBusConnection connection(QDBusConnection::systemBus());
@@ -235,100 +113,30 @@ void Accelerometer::getAcceleration(qreal &x, qreal &y, qreal &z)
 }
 
 /**
- * Set the sample rate of accelerometer
+ * Get the x calibration component
  *
- * @param pSampleRate desired sample rate
+ * @return calibrationX x calibration component
  */
-void Accelerometer::setSampleRate(int pSampleRate)
+qreal Accelerometer::getCalibrationX()
 {
-    sampleRate = pSampleRate;
+    return calibrationX;
 }
 
 /**
- * Get the sample rate of accelerometer
+ * Get the y calibration component
  *
- * @return sampleRate the sample rate of the accelerometer in milliseconds
+ * @return calibrationY y calibration component
  */
-int Accelerometer::getSampleRate()
-{
-    return sampleRate;
-}
-
-qreal Accelerometer::getCurrentAcceleration()
-{
-    return currentAcceleration;
-}
-
-qreal Accelerometer::getPreviousTotalAcceleration()
-{
-    return previousAcceleration;
-}
-
-qreal Accelerometer::getTotalAcceleration()
-{
-    return totalAcceleration;
-}
-
-qreal Accelerometer::getDistanceTraveled()
-{
-    return distanceTraveled;
-}
-
-qreal Accelerometer::getLastDistanceTraveled()
-{
-    return lastDistanceTraveled;
-}
-
-qreal Accelerometer::getAverageSpeed()
-{
-    return averageSpeed;
-}
-
-qreal Accelerometer::getTrueAccelerationX()
-{
-    return trueAccelerationX;
-}
-
-qreal Accelerometer::getTrueAccelerationY()
-{
-    return trueAccelerationY;
-}
-
-qreal Accelerometer::getTrueAccelerationZ()
-{
-    return trueAccelerationZ;
-}
-
-qreal Accelerometer::getPreviousSpeed()
-{
-    return previousSpeed;
-}
-
-qreal Accelerometer::getCurrentSpeed()
-{
-    return currentSpeed;
-}
-
-qreal Accelerometer::getIntervalTime()
-{
-    return intervalTime;
-}
-
-qreal Accelerometer::getTotalTime()
-{
-    return totalTime;
-}
-
-qreal Accelerometer::getCalibrationX()
-{
-    return calibrationX;
-}
-
 qreal Accelerometer::getCalibrationY()
 {
     return calibrationY;
 }
 
+/**
+ * Get the z calibration component
+ *
+ * @return calibrationZ z calibration component
+ */
 qreal Accelerometer::getCalibrationZ()
 {
     return calibrationZ;
index cd0c2ef..46e31da 100644 (file)
@@ -2,7 +2,7 @@
  * Accelerometer class to access the device accelerometer
  *
  * @author      Rikhard Kuutti <rikhard.kuutti@fudeco.com>
- * @author      Kai Rasilainen 
+ * @author      Kai Rasilainen
  * @copyright   (c) 2010 Speed Freak team
  * @license     http://opensource.org/licenses/gpl-license.php GNU Public License
  */
@@ -22,70 +22,20 @@ class Accelerometer : public QObject
     Q_OBJECT
 public:
     Accelerometer();
-    Accelerometer(int p_SampleRate);
     ~Accelerometer();
 
     void getAcceleration(qreal &x, qreal &y, qreal &z);
     void smoothData(qreal &x, qreal &y, qreal &z);
     void calibrate();
-
-    void start();
-    void stop();
-
     void initValues();
 
-    void setSampleRate(int pSampleRate);
-    int getSampleRate();
-
-    qreal getTrueAccelerationX();
-    qreal getTrueAccelerationY();
-    qreal getTrueAccelerationZ();
-
-    qreal getPreviousSpeed();
-    qreal getCurrentSpeed();
-
-    qreal getDistanceTraveled();
-    qreal getLastDistanceTraveled();
-    qreal getAverageSpeed();
-
-    qreal getCurrentAcceleration();
-    qreal getTotalAcceleration();
-    qreal getPreviousTotalAcceleration();
-
     qreal getCalibrationX();
     qreal getCalibrationY();
     qreal getCalibrationZ();
 
-    qreal getIntervalTime();
-    qreal getTotalTime();
-
-    Calculate *calculate;
-
-private slots:
-    //void processData();
-
-
 private:
-    qreal accelerationX, accelerationY, accelerationZ;
-    qreal trueAccelerationX,trueAccelerationY,trueAccelerationZ;
-    qreal previousAccelerationX,previousAccelerationY,previousAccelerationZ;
-    qreal previousSpeed, currentSpeed;
-    qreal currentAcceleration, previousAcceleration, totalAcceleration;
+    qreal previousAccelerationX, previousAccelerationY, previousAccelerationZ;
     qreal calibrationX, calibrationY, calibrationZ;
-
-    QTime now;
-    QTimer *timer;
-
-    double intervalTime;
-    double totalTime;
-    double distanceTraveled;
-    double lastDistanceTraveled;
-    double averageSpeed;
-    double sampleRate;
-
-    bool firstRun;
-
 };
 
 #endif // ACCELEROMETER_H
-