added new tex comments/details

worked on evaluation
stair sanitizing
added stair-plotting (for debug)
This commit is contained in:
2016-02-06 15:06:47 +01:00
parent 716b004f3c
commit 004d1f48fd
11 changed files with 452 additions and 107 deletions

View File

@@ -71,8 +71,6 @@ public:
for (const Line2& l : f.getObstacles()) {
const K::GnuplotPoint3 p1(l.p1.x, l.p1.y, height.cm());
const K::GnuplotPoint3 p2(l.p2.x, l.p2.y, height.cm());
//if (l.p1.x > 3000) {continue;}
//if (l.p1.y > 3000) {continue;}
floors.addSegment(p1, p2);
}

View File

@@ -27,72 +27,10 @@ public:
pf = new K::ParticleFilter<MyState, MyControl, MyObservation>( MiscSettings::numParticles, std::unique_ptr<MyInitializer>(new MyInitializer(grid, 1120, 150, 3*350, 90)) );
std::vector<int> wp = path1;// std::reverse(wp.begin(), wp.end());
MyGridNode& start = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[wp.front()]) );
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[wp.back()]) );
//GridWalkRandomHeadingUpdate<MyGridNode>* walk = new GridWalkRandomHeadingUpdate<MyGridNode>();
//GridWalkRandomHeadingUpdateAdv<MyGridNode>* walk = new GridWalkRandomHeadingUpdateAdv<MyGridNode>();
//GridWalkPushForward<MyGridNode>* walk = new GridWalkPushForward<MyGridNode>();
//GridWalkLightAtTheEndOfTheTunnel<MyGridNode>* walk = new GridWalkLightAtTheEndOfTheTunnel<MyGridNode>(grid, DijkstraMapper(grid), end);
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
//GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
// path1
sr = new SensorReader("./measurements/path1/1/1454345312844.csv"); // forward
srt = new SensorReaderTurn("./measurements/path1/1/Turns.txt");
srs = new SensorReaderStep("./measurements/path1/1/Steps2.txt");
// sr = new SensorReader("./measurements/path1/2/1454345421125.csv"); // backward
// srt = new SensorReaderTurn("./measurements/path1/2/Turns.txt");
// srs = new SensorReaderStep("./measurements/path1/2/Steps2.txt");
// path2
// sr = new SensorReader("./measurements/path2/1/1454345775306.csv"); // forward
// srt = new SensorReaderTurn("./measurements/path2/1/Turns.txt");
// srs = new SensorReaderStep("./measurements/path2/1/Steps2.txt");
//sr = new SensorReader("./measurements/path2/2/1454346071347.csv"); // backward
//srt = new SensorReaderTurn("./measurements/path2/2/Turns.txt");
//srs = new SensorReaderStep("./measurements/path2/2/Steps2.txt");
// path3
// sr = new SensorReader("./measurements/path3/1/1454345546308.csv"); // forward
// srt = new SensorReaderTurn("./measurements/path3/1/Turns.txt");
// srs = new SensorReaderStep("./measurements/path3/1/Steps2.txt");
// sr = new SensorReader("./measurements/path3/2/1454345622819.csv"); // backward
// srt = new SensorReaderTurn("./measurements/path3/2/Turns.txt");
// srs = new SensorReaderStep("./measurements/path3/2/Steps2.txt");
// path4
// sr = new SensorReader("./measurements/path4/1454595382218.csv"); // forward
// srt = new SensorReaderTurn("./measurements/path4/Turns.txt");
// srs = new SensorReaderStep("./measurements/path4/Steps2.txt");
gtw = getGroundTruthWay(*sr, floors.gtwp, wp);
}
void setEvalFails() {
}
//wifi also uniform dist 0/1 fuer bereiche die OK sind?
//steps hochzaehlen weil mehr als einer in einer transition??
//increase regional average region
void setEval1() {
runName = "TODO";
// the particle filter's evaluation method
std::unique_ptr<MyEvaluation> eval = std::unique_ptr<MyEvaluation>( new MyEvaluation() );
eval.get()->setUsage(true, true, true, true, true); // TODO: STEP TURN
eval.get()->setUsage(true, true, true, true, true);
pf->setEvaluation( std::move(eval) );
// resampling step?
@@ -105,8 +43,208 @@ public:
//pf->setEstimation( std::unique_ptr<K::ParticleFilterEstimationRegionalWeightedAverage<MyState>>(new K::ParticleFilterEstimationRegionalWeightedAverage<MyState>()));
//pf->setEstimation( std::unique_ptr<K::ParticleFilterEstimationOrderedWeightedAverage<MyState>>(new K::ParticleFilterEstimationOrderedWeightedAverage<MyState>(0.50f)));
// std::vector<int> wp = path2;// std::reverse(wp.begin(), wp.end());
// MyGridNode& start = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[wp.front()]) );
// MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[wp.back()]) );
// //GridWalkRandomHeadingUpdate<MyGridNode>* walk = new GridWalkRandomHeadingUpdate<MyGridNode>();
// //GridWalkRandomHeadingUpdateAdv<MyGridNode>* walk = new GridWalkRandomHeadingUpdateAdv<MyGridNode>();
// //GridWalkPushForward<MyGridNode>* walk = new GridWalkPushForward<MyGridNode>();
// //GridWalkLightAtTheEndOfTheTunnel<MyGridNode>* walk = new GridWalkLightAtTheEndOfTheTunnel<MyGridNode>(grid, DijkstraMapper(grid), end);
// //GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
// GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);
// pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
// // path1
//// sr = new SensorReader("./measurements/path1/1/1454345312844.csv"); // forward
//// srt = new SensorReaderTurn("./measurements/path1/1/Turns.txt");
//// srs = new SensorReaderStep("./measurements/path1/1/Steps2.txt");
//// sr = new SensorReader("./measurements/path1/2/1454345421125.csv"); // backward
//// srt = new SensorReaderTurn("./measurements/path1/2/Turns.txt");
//// srs = new SensorReaderStep("./measurements/path1/2/Steps2.txt");
// // path2
// sr = new SensorReader("./measurements/path2/1/1454345775306.csv"); // forward
// srt = new SensorReaderTurn("./measurements/path2/1/Turns.txt");
// srs = new SensorReaderStep("./measurements/path2/1/Steps2.txt");
// //sr = new SensorReader("./measurements/path2/2/1454346071347.csv"); // backward
// //srt = new SensorReaderTurn("./measurements/path2/2/Turns.txt");
// //srs = new SensorReaderStep("./measurements/path2/2/Steps2.txt");
// // path3
//// sr = new SensorReader("./measurements/path3/1/1454345546308.csv"); // forward
//// srt = new SensorReaderTurn("./measurements/path3/1/Turns.txt");
//// srs = new SensorReaderStep("./measurements/path3/1/Steps2.txt");
//// sr = new SensorReader("./measurements/path3/2/1454345622819.csv"); // backward
//// srt = new SensorReaderTurn("./measurements/path3/2/Turns.txt");
//// srs = new SensorReaderStep("./measurements/path3/2/Steps2.txt");
// // path4
//// sr = new SensorReader("./measurements/path4/1454595382218.csv"); // forward
//// srt = new SensorReaderTurn("./measurements/path4/Turns.txt");
//// srs = new SensorReaderStep("./measurements/path4/Steps2.txt");
// gtw = getGroundTruthWay(*sr, floors.gtwp, wp);
}
void setEvalFails() {
}
/**
* starting with bad barometer readings. takes some time to move upwards
* will be fixed by using the path
*/
void path2_forward_simple() {
// forward
runName = "path2_forward_simple";
sr = new SensorReader("./measurements/path2/1/1454345775306.csv");
srt = new SensorReaderTurn("./measurements/path2/1/Turns.txt");
srs = new SensorReaderStep("./measurements/path2/1/Steps2.txt");
gtw = getGroundTruthWay(*sr, floors.gtwp, path2);
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void path2_forward_path() {
// forward
runName = "path2_forward_path";
sr = new SensorReader("./measurements/path2/1/1454345775306.csv");
srt = new SensorReaderTurn("./measurements/path2/1/Turns.txt");
srs = new SensorReaderStep("./measurements/path2/1/Steps2.txt");
gtw = getGroundTruthWay(*sr, floors.gtwp, path2);
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path2.back()]) );
GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
// TODO: plot grid-nodes for stairs for the paper (also look at z-transitions. some have NO x/y change even though they should have!)
void path3_forward_simple() {
// forward
runName = "path3_forward_simple";
sr = new SensorReader("./measurements/path3/1/1454345546308.csv"); // forward
srt = new SensorReaderTurn("./measurements/path3/1/Turns.txt");
srs = new SensorReaderStep("./measurements/path3/1/Steps2.txt");
gtw = getGroundTruthWay(*sr, floors.gtwp, path3);
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void path3_forward_path() {
// looks like the left stairs here are NOT working as expected?!
// plot them
// look at the probability-draw, maybe there is an issue there
// forward
runName = "path3_forward_path";
sr = new SensorReader("./measurements/path3/1/1454345546308.csv"); // forward
srt = new SensorReaderTurn("./measurements/path3/1/Turns.txt");
srs = new SensorReaderStep("./measurements/path3/1/Steps2.txt");
gtw = getGroundTruthWay(*sr, floors.gtwp, path3);
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path3.back()]) );
GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void path4_nexus_simple() {
runName = "path4_nexus_simple";
sr = new SensorReader("./measurements/path4/nexus/1454695040555.csv"); // forward
srt = new SensorReaderTurn("./measurements/path4/nexus/Turns.txt");
srs = new SensorReaderStep("./measurements/path4/nexus/Steps2.txt");
gtw = getGroundTruthWay(*sr, floors.gtwp, path4dbl);
// remove importance
for (auto& n : grid) {n.imp = 1;}
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void path4_nexus_imp() {
runName = "path4_nexus_importance";
sr = new SensorReader("./measurements/path4/nexus/1454695040555.csv"); // forward
srt = new SensorReaderTurn("./measurements/path4/nexus/Turns.txt");
srs = new SensorReaderStep("./measurements/path4/nexus/Steps2.txt");
gtw = getGroundTruthWay(*sr, floors.gtwp, path4dbl);
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void path4_nexus_path() {
runName = "path4_nexus_path";
sr = new SensorReader("./measurements/path4/nexus/1454695040555.csv"); // forward
srt = new SensorReaderTurn("./measurements/path4/nexus/Turns.txt");
srs = new SensorReaderStep("./measurements/path4/nexus/Steps2.txt");
gtw = getGroundTruthWay(*sr, floors.gtwp, path4dbl);
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path4dbl.back()]) );
GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
//wifi also uniform dist 0/1 fuer bereiche die OK sind?
//steps hochzaehlen weil mehr als einer in einer transition??
//increase regional average region
// void setEval1() {
// // the particle filter's evaluation method
// std::unique_ptr<MyEvaluation> eval = std::unique_ptr<MyEvaluation>( new MyEvaluation() );
// eval.get()->setUsage(true, true, true, true, true); // TODO: STEP TURN
// pf->setEvaluation( std::move(eval) );
// // resampling step?
// pf->setNEffThreshold(1.0);
// pf->setResampling( std::unique_ptr<K::ParticleFilterResamplingSimple<MyState>>(new K::ParticleFilterResamplingSimple<MyState>()) );
// //pf->setResampling( std::unique_ptr<K::ParticleFilterResamplingPercent<MyState>>(new K::ParticleFilterResamplingPercent<MyState>(0.10)) );
// // state estimation step
// pf->setEstimation( std::unique_ptr<K::ParticleFilterEstimationWeightedAverage<MyState>>(new K::ParticleFilterEstimationWeightedAverage<MyState>()));
// //pf->setEstimation( std::unique_ptr<K::ParticleFilterEstimationRegionalWeightedAverage<MyState>>(new K::ParticleFilterEstimationRegionalWeightedAverage<MyState>()));
// //pf->setEstimation( std::unique_ptr<K::ParticleFilterEstimationOrderedWeightedAverage<MyState>>(new K::ParticleFilterEstimationOrderedWeightedAverage<MyState>(0.50f)));
// }
};
#endif // EVAL1_H

View File

@@ -59,6 +59,7 @@ protected:
std::vector<int> path2 = {19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 23, 7, 6};
std::vector<int> path3 = {5, 27, 26, 255, 25, 4, 3, 2, 215, 1, 0, 30, 31};
std::vector<int> path4 = {29, 28, 27, 32, 33, 34, 35, 36, 10, 9, 8, 22, 37, 38, 39, 40, 41, 42, 43, 44};
std::vector<int> path4dbl = {29, 29, 28, 27, 32, 33, 34, 35, 36, 10, 9, 8, 22, 37, 38, 39, 40, 41, 42, 43, 44}; // duplicate 1st waypoint!
public:
@@ -252,8 +253,8 @@ public:
const Point3 curGT = gtw.getPosAtTime(se.ts - offset);
const Point3 diff = curEst - curGT;
// skip the first 8 scans due to uniform distribution start
if (++cnt > 8) {
// skip the first 10 scans due to uniform distribution start
if (++cnt > 10) {
pathEst.push_back(curEst);
const float err = diff.length();
stats.add(err);

View File

@@ -21,6 +21,7 @@ public:
K::GnuplotSplotElementLines floors;
K::GnuplotSplotElementColorPoints nodes;
K::GnuplotSplotElementLines edges;
public:
@@ -28,9 +29,13 @@ public:
floors.setLineWidth(2);
plot.add(&edges);
plot.add(&nodes);
plot.add(&floors);
nodes.setPointSize(0.7);
edges.setColorHex("#555555");
gp << "set ticslevel 0\n";
@@ -89,6 +94,40 @@ public:
}
/** show all nodes (and edges?) within the given region */
template <typename T> void debugGrid(Grid<T>& grid, const BBox3& bbox, const bool addNodes, const bool addEdges) {
std::set<uint64_t> used;
for (T& n1 : grid) {
if (bbox.contains(n1)) {
const K::GnuplotPoint3 p1(n1.x_cm, n1.y_cm, n1.z_cm);
if (addNodes) {
nodes.add(p1, 0);
}
if (addEdges) {
for (const T& n2 : grid.neighbors(n1)) {
if (n1.z_cm == n2.z_cm) {continue;} // speedup
if (used.find(n2.getIdx()) == used.end()) {
const K::GnuplotPoint3 p2(n2.x_cm, n2.y_cm, n2.z_cm);
edges.addSegment(p1, p2);
}
}
used.insert(n1.getIdx());
// for (const T& n2 : grid.neighbors(n1)) {
// const uint64_t idx = n1.getIdx() * n2.getIdx();
// if (used.find(idx) == used.end()) {
// const K::GnuplotPoint3 p2(n2.x_cm, n2.y_cm, n2.z_cm);
// edges.addSegment(p1, p2);
// used.insert(idx);
// }
// }
}
}
}
}
};

111
code/eval/PaperVisGrid.h Normal file
View File

@@ -0,0 +1,111 @@
#ifndef PAPERVISGRID_H
#define PAPERVISGRID_H
#include <Indoor/grid/Grid.h>
#include <Indoor/grid/factory/GridFactory.h>
#include <Indoor/grid/factory/GridImportance.h>
#include <Indoor/floorplan/FloorplanFactorySVG.h>
#include <Indoor/grid/walk/GridWalkLightAtTheEndOfTheTunnel.h>
#include <Indoor/nav/dijkstra/Dijkstra.h>
#include <Indoor/nav/dijkstra/DijkstraPath.h>
#include "PaperPlot.h"
#include "PaperPlot2D.h"
#include "../MyGridNode.h"
#include "../Settings.h"
#include "../Helper.h"
class PaperVisGrid {
public:
static void showStairs() {
// the grid
Grid<MyGridNode> grid(20);
// floors
Helper::FHWSFloors floors = Helper::getFloors();
Helper::buildTheGrid(grid, floors);
// // load the floorplan
// FloorplanFactorySVG fpFac(MiscSettings::floorplan, 2.822222);
// Floor f0 = fpFac.getFloor("floor_0");
// Floor f0 = fpFac.getFloor("floor_1");
// const LengthF h0 = LengthF::cm(0);
// const LengthF h1 = LengthF::cm(400);
// const LengthF h2 = LengthF::cm(400+340);
// const LengthF h3 = LengthF::cm(400+340+340);
// add the floorplan to the grid
// GridFactory<MyGridNode> gridFac(grid);
// gridFac.addFloor(f0, h0.cm());
// gridFac.addFloor(f1, h1.cm());
// gridFac.addFloor(f2, h2.cm());
// gridFac.addFloor(f3, h3.cm());
// remove all isolated nodes not attached to 300,300,floor0
// gridFac.removeIsolated( (MyGridNode&)grid.getNodeFor( GridPoint(300,300,h0.cm()) ) );
PaperPlot plot;
// stairwell low left
{BBox3 bbox;
bbox.add(Point3(1300, 650,000));
bbox.add(Point3(2000,1300,1400));
plot.debugGrid(grid, bbox, true, true);}
// stairwell upper left
{BBox3 bbox;
bbox.add(Point3(1200,4758,000));
bbox.add(Point3(1800,5158,1400));
plot.debugGrid(grid, bbox, true, true);}
// stairwell upper right
{BBox3 bbox;
bbox.add(Point3(6240,4718,000));
bbox.add(Point3(6830,5158,1400));
plot.debugGrid(grid, bbox, true, true);}
// stair left
{BBox3 bbox;
bbox.add(Point3(1200,3200,000));
bbox.add(Point3(1440,4078,1400));
plot.debugGrid(grid, bbox, true, true);}
// stair center
{BBox3 bbox;
bbox.add(Point3(4200,4118,100));
bbox.add(Point3(6120,4438,1400));
plot.debugGrid(grid, bbox, true, true);}
//stair lower right
{BBox3 bbox;
bbox.add(Point3(7360,3358,000));
bbox.add(Point3(7880,4300,500));
plot.debugGrid(grid, bbox, true, true);}
plot.show();
sleep(1000);
}
};
#endif // PAPERVISGRID_H

View File

@@ -16,6 +16,7 @@
#include "eval/PaperVisImportance.h"
#include "eval/PaperVisDijkstra.h"
#include "eval/PaperVisGrid.h"
Settings settings;
@@ -84,9 +85,16 @@ int main(void) {
// testModelWalk();
Eval1 eval;
eval.setEval1();
//eval.path2_forward_simple();
//eval.path2_forward_path();
//eval.path3_forward_simple();
//eval.path3_forward_path();
//eval.path4_nexus_simple();
eval.path4_nexus_imp();
//eval.path4_nexus_path();
eval.run();
// PaperVisGrid::showStairs();
// PaperVisImportance::createImportance();
// PaperVisImportance::createPath();

View File

@@ -43,16 +43,16 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="822"
inkscape:window-height="845"
id="namedview3234"
showgrid="true"
inkscape:zoom="2.4027176"
inkscape:cx="2636.6172"
inkscape:cy="1428.0719"
inkscape:zoom="6.7959116"
inkscape:cx="2714.4898"
inkscape:cy="1497.1651"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer12"
inkscape:current-layer="layer16"
inkscape:object-nodes="true"
units="px"
showborder="true"
@@ -1893,7 +1893,7 @@
inkscape:groupmode="layer"
id="layer16"
inkscape:label="floor_0"
style="display:none">
style="display:inline">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 386.22047,67.322799 0,42.519681"
@@ -2235,7 +2235,7 @@
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 453.54331,460.62989 0,276.37795"
d="m 446.45669,460.62989 0,276.37795"
id="path4616"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -2247,14 +2247,10 @@
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2785.0394,389.76374 0,102.75591 -127.5591,0"
d="m 2785.0394,389.76374 0,102.75591 -10.63,0"
id="path4620"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2731.8898,389.76374 -74.4095,0 0,265.74804"
id="path4622"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 924.80315,737.00784 0,-276.37795 24.80315,0"
@@ -2498,20 +2494,34 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2657.4803,627.16532 116.9291,0"
d="m 2653.937,627.16532 120.4724,0"
id="path5824"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 453.54331,485.43304 53.1496,0"
d="m 446.45669,485.43304 60.23622,0"
id="path5826"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2653.937,389.76374 0,237.40158"
id="path5026"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2653.937,389.76374 131.1024,0"
id="path5028"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:groupmode="layer"
id="layer12"
inkscape:label="floor_1"
style="display:inline">
style="display:none">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 49.606299,1853.1496 605.905511,0"
@@ -2835,7 +2845,7 @@
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 442.91339,460.62989 0,276.37795"
d="m 446.45669,460.62989 0,276.37795"
id="path12802"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -3180,14 +3190,16 @@
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 442.91339,485.43304 63.77952,0"
d="m 446.45669,485.43304 60.23622,0"
id="path5828"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 442.91339,712.20469 63.77952,0"
d="m 446.45669,712.20469 60.23622,0"
id="path5836"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2653.937,389.76374 0,24.80315"
@@ -3198,6 +3210,11 @@
d="m 2777.9528,414.56689 -124.0158,0"
id="path5001"
inkscape:connector-curvature="0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2792.126,372.04721 14.1732,0"
id="path5024"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
@@ -3691,7 +3708,7 @@
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 442.91339,460.62989 0,276.37795"
d="m 446.45669,460.62989 0,276.37795"
id="path11757"
inkscape:connector-curvature="0"
transform="translate(0,-4.2364502e-5)"
@@ -3929,14 +3946,16 @@
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 442.91339,485.433 63.77952,0"
d="m 446.45669,485.43299 60.23622,0"
id="path5830"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 442.91339,712.20465 63.77952,0"
d="m 446.45669,712.20465 60.23622,0"
id="path5834"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 2462.5984,389.7637 0,70.86615"
@@ -4687,7 +4706,7 @@
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 506.69291,460.62985 -60.23622,-10e-6"
d="m 506.69291,460.62984 -60.23622,0"
id="path4163"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
@@ -4731,22 +4750,23 @@
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 446.45669,712.20465 60.23622,0"
id="path5832"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:groupmode="layer"
id="layer17"
inkscape:label="staircase_0_1"
style="display:inline">
style="display:none">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 2664.5669,655.51178 102.7559,0 0,-265.74804"
d="m 2657.4803,634.25193 113.3858,0 0,-244.48819"
id="path4988"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 503.14961,457.08658 -46.063,0 0,276.37795"
d="m 503.14961,460.62989 -53.14961,0 0,276.37795"
id="path4992"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
@@ -4764,9 +4784,10 @@
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 503.14961,460.62989 -56.69292,0 0,276.37795"
d="m 503.14961,460.62989 -53.14961,0 0,276.37795"
id="path5000"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</g>
<g
inkscape:groupmode="layer"
@@ -4776,9 +4797,10 @@
transform="translate(0,4.2364502e-5)">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 503.14961,460.62985 -56.69292,0 0,276.37795"
d="M 503.14961,460.62985 450,460.62984 450,737.0078"
id="path5802"
inkscape:connector-curvature="0" />
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 1729.1339,340.1574 0,60.23622 -194.8819,0"

Before

Width:  |  Height:  |  Size: 238 KiB

After

Width:  |  Height:  |  Size: 239 KiB

View File

@@ -15,7 +15,7 @@ public:
// //rho_z
double barometerSigma = 0.12+0.04;//0.09;
double barometerSigma = 0.06;//0.12+0.04;//0.09;
// //The height of the single floor levels.
// const static double floor_height[3] = {4.1, 3.4, 3.4};

View File

@@ -8,3 +8,16 @@
\item Analysiere Probleme ggf. mit schönen Grafiken.
\item Vergleich zum Schluss das neue System mit dem Alten um eine schöne Conclusion der Verbesserungen einzuleiten.
\end{itemize}
\commentByFrank{sensorausfall simulieren, z.b. in der mitte, oder auf einer treppe}
\commentByFrank{zwischendrin mal stehenbleiben und schauen ob auch das klappt}
\commentByFrank{pfad verlassen und ganz wo anders hingehen}
\commentByFrank{die reine importance selbst auf dem graphen hilft, aber nur minimal weiter}
\commentByFrank{pfad4 nexus. pfadlos laeuft mit ach und krach richtig (treppenhaus, wlan schlecht)
mit pfad laeuft es falsch, weil die andere treppe kuerzer zum ziel ist und das wlan dort besser passt}
\commentByFrank{zu grosser einfluss vom pfad ist also kein allheilmittel.. kann, wie beim treppenhaus, auch nach hinten los gehen}

View File

@@ -1,5 +1,12 @@
\section{Grid-Based Floorplan}
\commentByFrank{grafik wie es aussieht, vor allem die treppen}
\commentByFrank{add nodes not creating an intersection}
\commentByFrank{find largest connected region}
\commentByFrank{remove all other nodes (conserve memory)}
\commentByFrank{mention: clean z-transitions, remove x/y nodes by adding bounding boxes}
\subsection{Generation}
\subsection{Weighting}

View File

@@ -18,6 +18,14 @@
.
\end{equation}
Within the evaluation bla bla
\begin{equation}
xx
\end{equation}
we use the system's setup time to not only determine the relative base but also for estimating the barometers
uncertainty \sigma_\text{baro} used within the evaluation.
\subsection{Wi-Fi \& iBeacons}
For additional absolute location hints, we use the Smartphones Wi-Fi and iBeacon sensor to measure the signal-strengths