a lot!!! of changes

added main menu
added debug display
many debug widgets for plotting live data
worked on android live sensors
added offline-data sensor feeding
some dummy data sensors
worked on the map display
added ui debug for grid-points, particles and weights
added a cool dude to display the estimation
added real filtering based on the Indoor components
c++11 fixes for android compilation
online and offline filtering support
new resampling technique for testing
map loading via dialog
This commit is contained in:
kazu
2016-09-16 19:30:04 +02:00
parent d910e88220
commit 075d8bb633
90 changed files with 4735 additions and 624 deletions

View File

@@ -51,6 +51,6 @@ public:
};
#endif ANDROID
#endif // ANDROID
#endif // ACCELEROMETERSENSORANDROID_H

View File

@@ -0,0 +1,55 @@
#ifndef BAROMETERSENSORANDROID_H
#define BAROMETERSENSORANDROID_H
#ifdef ANDROID
#include <sstream>
#include "../BarometerSensor.h"
#include <QtSensors/QPressureSensor>
#include "../AccelerometerSensor.h"
class BarometerSensorAndroid : public BarometerSensor {
private:
QPressureSensor baro;
/** hidden ctor. use singleton */
BarometerSensorAndroid() {
;
}
public:
/** singleton access */
static BarometerSensorAndroid& get() {
static BarometerSensorAndroid baro;
return baro;
}
void start() override {
auto onSensorData = [&] () {
BarometerData data(baro.reading()->pressure());
informListeners(data);
};
baro.connect(&baro, &QPressureSensor::readingChanged, onSensorData);
baro.start();
}
void stop() override {
throw "TODO";
}
};
#endif
#endif // BAROMETERSENSORANDROID_H

View File

@@ -0,0 +1,59 @@
#ifndef GYROSCOPESENSORANDROID_H
#define GYROSCOPESENSORANDROID_H
#ifdef ANDROID
#include <sstream>
#include "../GyroscopeSensor.h"
#include <QtSensors/QGyroscope>
#include "../AccelerometerSensor.h"
class GyroscopeSensorAndroid : public GyroscopeSensor {
private:
QGyroscope gyro;
/** hidden ctor. use singleton */
GyroscopeSensorAndroid() {
;
}
public:
/** singleton access */
static GyroscopeSensorAndroid& get() {
static GyroscopeSensorAndroid gyro;
return gyro;
}
float degToRad(const float deg) {
return deg / 180.0f * M_PI;
}
void start() override {
auto onSensorData = [&] () {
GyroscopeData data(degToRad(gyro.reading()->x()), degToRad(gyro.reading()->y()), degToRad(gyro.reading()->z()));
informListeners(data);
};
gyro.connect(&gyro, &QGyroscope::readingChanged, onSensorData);
gyro.start();
}
void stop() override {
throw "TODO";
}
};
#endif // ANDROID
#endif // GYROSCOPESENSORANDROID_H

View File

@@ -0,0 +1,41 @@
#ifndef SENSORFACTORYANDROID_H
#define SENSORFACTORYANDROID_H
#ifdef ANDROID
#include "../SensorFactory.h"
#include "WiFiSensorAndroid.h"
#include "AccelerometerSensorAndroid.h"
#include "GyroscopeSensorAndroid.h"
#include "BarometerSensorAndroid.h"
/**
* sensor factory that provides real hardware sensors from
* an android smartphone that fire real data values
*/
class SensorFactoryAndroid : public SensorFactory {
public:
WiFiSensor& getWiFi() override {
return WiFiSensorAndroid::get();
}
AccelerometerSensor& getAccelerometer() override {
return AccelerometerSensorAndroid::get();
}
GyroscopeSensor& getGyroscope() override {
return GyroscopeSensorAndroid::get();
}
BarometerSensor& getBarometer() override {
return BarometerSensorAndroid::get();
}
};
#endif
#endif // SENSORFACTORYANDROID_H

View File

@@ -0,0 +1,20 @@
#ifdef ANDROID
#include "WiFiSensorAndroid.h"
extern "C" {
/** called after each successful WiFi scan */
JNIEXPORT void JNICALL Java_indoor_java_WiFi_onScanComplete(JNIEnv* env, jobject jobj, jbyteArray arrayID) {
(void) env; (void) jobj;
jsize length = env->GetArrayLength(arrayID);
jboolean isCopy;
jbyte* data = env->GetByteArrayElements(arrayID, &isCopy);
std::string str((char*)data, length);
env->ReleaseByteArrayElements(arrayID, data, JNI_ABORT);
WiFiSensorAndroid::get().handle(str);
}
}
#endif

View File

@@ -40,7 +40,7 @@ public:
void handle(const std::string& data) {
// to-be-constructed sensor data
WiFiSensorData sensorData;
WiFiMeasurements sensorData;
// parse each mac->rssi entry
for (int i = 0; i < (int)data.length(); i += 17+1+2) {
@@ -49,7 +49,7 @@ public:
const int8_t pad1 = data[i+18];
const int8_t pad2 = data[i+19];
if (pad1 != 0 || pad2 != 0) {Debug::error("padding error within WiFi scan result");}
sensorData.entries.push_back(WiFiSensorDataEntry(bssid, rssi));
sensorData.entries.push_back(WiFiMeasurement(AccessPoint(bssid), rssi));
}
// call listeners
@@ -60,20 +60,7 @@ public:
};
extern "C" {
/** called after each successful WiFi scan */
JNIEXPORT void JNICALL Java_indoor_java_WiFi_onScanComplete(JNIEnv* env, jobject jobj, jbyteArray arrayID) {
(void) env; (void) jobj;
jsize length = env->GetArrayLength(arrayID);
jboolean isCopy;
jbyte* data = env->GetByteArrayElements(arrayID, &isCopy);
std::string str((char*)data, length);
env->ReleaseByteArrayElements(arrayID, data, JNI_ABORT);
WiFiSensorAndroid::get().handle(str);
}
}
#endif