updated sensors and filter to current code version
removed KLib stuff added new activity filter is uncommand! at the moment, the app is not able to load new maps and breaks using old maps
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
|
||||
#include <Indoor/sensors/radio/WiFiGridEstimator.h>
|
||||
#include <Indoor/sensors/radio/setup/WiFiOptimizerLogDistCeiling.h>
|
||||
#include <Indoor/sensors/radio/model/WiFiModel.h>
|
||||
|
||||
#include <Indoor/Assertions.h>
|
||||
|
||||
@@ -73,12 +74,12 @@ Controller::Controller() {
|
||||
//writer->start(file);
|
||||
|
||||
// start the sensors
|
||||
SensorFactory::get().getAccelerometer().start();
|
||||
SensorFactory::get().getGyroscope().start();
|
||||
SensorFactory::get().getBarometer().start();
|
||||
SensorFactory::get().getWiFi().start();
|
||||
SensorFactory::get().getGPS().start();
|
||||
SensorFactory::get().getCompass().start();
|
||||
SensorFactory::get().getAccelerometer().start();
|
||||
SensorFactory::get().getGyroscope().start();
|
||||
SensorFactory::get().getBarometer().start();
|
||||
SensorFactory::get().getWiFi().start();
|
||||
SensorFactory::get().getGPS().start();
|
||||
SensorFactory::get().getCompass().start();
|
||||
|
||||
}
|
||||
|
||||
@@ -189,6 +190,55 @@ void buildGridOnce(Grid<MyGridNode>* grid, Floorplan::IndoorMap* map, const std:
|
||||
|
||||
}
|
||||
|
||||
void buildWiFiModelOnce(WiFiModel* wifiModel, Floorplan::IndoorMap* map, const std::string& fpFile, const std::string& wifiModelFile){
|
||||
|
||||
// ask questions
|
||||
const QMessageBox::StandardButton replyWiFiFP = QMessageBox::question(nullptr, "WiFi", "Use Fingerprints for WiFiCalibration?\n\nYes: Use fingerprints and num-optimize AP-Params\nNo: Use APs from the map.xml (pos+params)", QMessageBox::Yes|QMessageBox::No);
|
||||
|
||||
// WiFi setup
|
||||
wifiModel = new WiFiModelLogDistCeiling(map);
|
||||
if (replyWiFiFP == QMessageBox::Yes) {
|
||||
|
||||
std::ifstream inp(wifiModelFile, std::ifstream::binary);
|
||||
|
||||
if (!inp.good() || (inp.peek()&&0) || inp.eof()) {
|
||||
|
||||
Log::add("Controller", "Create new WiFiModel");
|
||||
WiFiCalibrationDataModel mdl(fpFile);
|
||||
Assert::isFalse(mdl.getFingerprints().empty(), "no fingerprints available!");
|
||||
WiFiOptimizer::LogDistCeiling opt(map, Settings::WiFiModel::vg_calib);
|
||||
for (const WiFiFingerprint& fp : mdl.getFingerprints()) {
|
||||
opt.addFingerprint(fp);
|
||||
}
|
||||
|
||||
const WiFiOptimizer::LogDistCeiling::APParamsList res = opt.optimizeAll(opt.NONE);
|
||||
for (const WiFiOptimizer::LogDistCeiling::APParamsMAC& ap : res.get()) {
|
||||
const WiFiModelLogDistCeiling::APEntry entry(ap.params.getPos(), ap.params.txp, ap.params.exp, ap.params.waf);
|
||||
((WiFiModelLogDistCeiling*)wifiModel)->addAP(ap.mac, entry);
|
||||
}
|
||||
|
||||
wifiModel->saveXML(wifiModelFile);
|
||||
|
||||
} else {
|
||||
|
||||
Log::add("Controller", "Use existing WifiModel");
|
||||
// load WiFiModel from file. The factory will create the correct instance
|
||||
//WiFiModel->loadXML(setup.wifiModel);
|
||||
WiFiModelFactory fac(map);
|
||||
wifiModel = fac.loadXML(wifiModelFile);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
Log::add("Controller", "Read AP from File");
|
||||
// load all APs from the floorplan and use same TXP/EXP/WAF for all of them
|
||||
((WiFiModelLogDistCeiling*)wifiModel)->loadAPs(map, Settings::WiFiModel::TXP, Settings::WiFiModel::EXP, Settings::WiFiModel::WAF);
|
||||
Assert::isFalse(wifiModel->getAllAPs().empty(), "no AccessPoints stored within the map.xml");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Controller::on3DButton() {
|
||||
|
||||
static bool use3D = false;
|
||||
@@ -264,8 +314,9 @@ void Controller::loadGrid(QDir dir) {
|
||||
void Controller::loadNavMesh(QDir dir) {
|
||||
|
||||
QFile fMap(dir.path() + "/map.xml");
|
||||
QFile fGrid(dir.path() + "/grid.dat");
|
||||
QFile fGrid(dir.path() + "/grid.dat");
|
||||
QFile fWiFiFP(dir.path() + "/wifi_fp.dat");
|
||||
QFile fWiFiModel(dir.path() + "/wifimodel.dat");
|
||||
|
||||
Assert::isTrue(fMap.exists(), "map.xml missing");
|
||||
|
||||
@@ -274,24 +325,27 @@ void Controller::loadNavMesh(QDir dir) {
|
||||
im = Floorplan::Reader::readFromString(str.toStdString());
|
||||
|
||||
const std::string sWiFiFP = fWiFiFP.fileName().toStdString();
|
||||
const std::string sWiFiModel = fWiFiModel.fileName().toStdString();
|
||||
|
||||
// create navmesh
|
||||
if (navMesh) {delete navMesh; navMesh = nullptr;}
|
||||
NM::NavMeshSettings settings;
|
||||
NM::NavMeshFactory<NM::NavMeshTriangle> fac(navMesh, settings);
|
||||
fac.build(im);
|
||||
buildWiFiModelOnce(wifiModel, im, sWiFiFP, sWiFiModel);
|
||||
|
||||
// create navmesh
|
||||
if (navMesh) {delete navMesh; navMesh = nullptr;}
|
||||
NM::NavMeshSettings settings;
|
||||
NM::NavMeshFactory<NM::NavMeshTriangle> fac(navMesh, settings);
|
||||
fac.build(im);
|
||||
|
||||
// create a new navigator
|
||||
if (nav) {delete nav; nav = nullptr;}
|
||||
nav = new MeshBased::NavControllerMesh(this, im, navMesh);
|
||||
nav = new MeshBased::NavControllerMesh(this, im, navMesh, wifiModel);
|
||||
|
||||
WiFiCalibrationDataModel* wifiCalib = new WiFiCalibrationDataModel(sWiFiFP);
|
||||
|
||||
getMapView3D()->setMap(im);
|
||||
getMapView2D()->setMap(wifiCalib, im);
|
||||
|
||||
getMapView3D()->showGridImportance(grid);
|
||||
getMapView2D()->showGridImportance(grid);
|
||||
getMapView3D()->showGridImportance(grid);
|
||||
getMapView2D()->showGridImportance(grid);
|
||||
|
||||
getMapView3D()->setVisible(false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user