final version of paper

This commit is contained in:
toni
2016-06-02 15:57:53 +02:00
parent 0f4435f86a
commit 927bec3e60
14 changed files with 119 additions and 132 deletions

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.6.0, 2016-05-09T17:55:23. -->
<!-- Written by QtCreator 3.6.1, 2016-06-01T15:23:04. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>

View File

@@ -247,9 +247,9 @@ public:
void bergwerk_path1_nexus_simple() {
void bergwerk_path1_nexus_simple(std::string name) {
runName = "bergwerk_path1_nexus_simple";
runName = name;
BarometerEvaluation::barometerSigma = 0.10;
sr = new SensorReader("./measurements/bergwerk/path1/nexus/vor/1454775984079.csv"); // forward
@@ -264,6 +264,7 @@ public:
}
//bergwerk
void bergwerk_path1_nexus_imp() {
@@ -280,9 +281,9 @@ public:
}
void bergwerk_path1_nexus_multi() {
void bergwerk_path1_nexus_multi(std::string name) {
runName = "bergwerk_path1_nexus_multi";
runName = name;
BarometerEvaluation::barometerSigma = 0.10;
sr = new SensorReader("./measurements/bergwerk/path1/nexus/vor/1454775984079.csv"); // forward
@@ -322,9 +323,9 @@ public:
gtw = getGroundTruthWay(*sr, floors.gtwp, path2dbl);
}
void bergwerk_path2_nexus_simple() {
void bergwerk_path2_nexus_simple(std::string name) {
runName = "bergwerk_path2_nexus_simple";
runName = name;
bergwerk_path2_nexus();
for (auto& n : grid) {n.imp = 1;} // remove importance
@@ -344,9 +345,9 @@ public:
}
void bergwerk_path2_nexus_multi() {
void bergwerk_path2_nexus_multi(std::string name) {
runName = "bergwerk_path2_nexus_multi";
runName = name;
bergwerk_path2_nexus();
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path2dbl.back()]) );
@@ -377,9 +378,9 @@ public:
gtw = getGroundTruthWay(*sr, floors.gtwp, path3dbl);
}
void bergwerk_path3_nexus_simple() {
void bergwerk_path3_nexus_simple(std::string name) {
runName = "bergwerk_path3_nexus_simple";
runName = name;
bergwerk_path3_nexus();
for (auto& n : grid) {n.imp = 1;} // remove importance
@@ -399,9 +400,9 @@ public:
}
void bergwerk_path3_nexus_multi() {
void bergwerk_path3_nexus_multi(std::string name) {
runName = "bergwerk_path3_nexus_multi";
runName = name;
bergwerk_path3_nexus();
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path3dbl.back()]) );
@@ -438,9 +439,9 @@ public:
//}
}
void bergwerk_path4_nexus_simple() {
void bergwerk_path4_nexus_simple(std::string name) {
runName = "bergwerk_path4_nexus_simple";
runName = name;
bergwerk_path4_nexus();
for (auto& n : grid) {n.imp = 1;} // remove importance
@@ -460,9 +461,9 @@ public:
}
void bergwerk_path4_nexus_multi() {
void bergwerk_path4_nexus_multi(std::string name) {
runName = "bergwerk_path4_nexus_multi";
runName = name;
bergwerk_path4_nexus();
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path4dbl.back()]) );
@@ -493,16 +494,16 @@ public:
gtw = getGroundTruthWay(*sr, floors.gtwp, path1dbl);
}
void bergwerk_path1_galaxy_simple() {
runName = "bergwerk_path1_galaxy_simple";
void bergwerk_path1_galaxy_simple(std::string name) {
runName = name;
bergwerk_path1_galaxy();
for (auto& n : grid) {n.imp = 1;} // remove importance
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void bergwerk_path1_galaxy_multi() {
runName = "bergwerk_path1_galaxy_multi";
void bergwerk_path1_galaxy_multi(std::string name) {
runName = name;
bergwerk_path1_galaxy();
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path1dbl.back()]) );
GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);
@@ -530,16 +531,16 @@ public:
gtw = getGroundTruthWay(*sr, floors.gtwp, path2dbl);
}
void bergwerk_path2_galaxy_simple() {
runName = "bergwerk_path2_galaxy_simple";
void bergwerk_path2_galaxy_simple(std::string name) {
runName = name;
bergwerk_path2_galaxy();
for (auto& n : grid) {n.imp = 1;} // remove importance
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void bergwerk_path2_galaxy_multi() {
runName = "bergwerk_path2_galaxy_multi";
void bergwerk_path2_galaxy_multi(std::string name) {
runName = name;
bergwerk_path2_galaxy();
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path2dbl.back()]) );
GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);
@@ -567,16 +568,16 @@ public:
gtw = getGroundTruthWay(*sr, floors.gtwp, path3dbl);
}
void bergwerk_path3_galaxy_simple() {
runName = "bergwerk_path3_galaxy_simple";
void bergwerk_path3_galaxy_simple(std::string name) {
runName = name;
bergwerk_path3_galaxy();
for (auto& n : grid) {n.imp = 1;} // remove importance
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void bergwerk_path3_galaxy_multi() {
runName = "bergwerk_path3_galaxy_multi";
void bergwerk_path3_galaxy_multi(std::string name) {
runName = name;
bergwerk_path3_galaxy();
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path3dbl.back()]) );
GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);
@@ -606,16 +607,16 @@ public:
gtw = getGroundTruthWay(*sr, floors.gtwp, path4dbl);
}
void bergwerk_path4_galaxy_simple() {
runName = "bergwerk_path4_galaxy_simple";
void bergwerk_path4_galaxy_simple(std::string name) {
runName = name;
bergwerk_path4_galaxy();
for (auto& n : grid) {n.imp = 1;} // remove importance
GridWalkSimpleControl<MyGridNode>* walk = new GridWalkSimpleControl<MyGridNode>();
pf->setTransition( std::unique_ptr<MyTransition>( new MyTransition(grid, *walk)) );
}
void bergwerk_path4_galaxy_multi() {
runName = "bergwerk_path4_galaxy_multi";
void bergwerk_path4_galaxy_multi(std::string name) {
runName = name;
bergwerk_path4_galaxy();
MyGridNode& end = (MyGridNode&)grid.getNodeFor( conv(floors.gtwp[path4dbl.back()]) );
GridWalkPathControl<MyGridNode>* walk = new GridWalkPathControl<MyGridNode>(grid, DijkstraMapper(grid), end);

View File

@@ -19,9 +19,11 @@
#include "../reader/SensorReader.h"
#include "../reader/SensorReaderStep.h"
#include "../reader/SensorReaderTurn.h"
#include "../reader/SensorReaderAccel.h"
#include "../lukas/TurnObservation.h"
#include "../lukas/StepObservation.h"
#include "../lukas/ActivityDetection.h"
#include "../toni/BarometerSensorReader.h"
@@ -127,8 +129,9 @@ public:
void run() {
// sensor numbers
const int s_wifi = 8; const int s_beacons = 9; const int s_barometer = 5; const int s_orientation = 6;
//const int s_linearAcceleration = 2;
const int s_wifi = 8; const int s_beacons = 9; const int s_barometer = 5; const int s_orientation = 6;
const int s_accel = 0;
std::list<TurnObservation> turn_observations;
std::list<StepObservation> step_observations;
@@ -136,6 +139,9 @@ public:
//Create an BarometerSensorReader
BarometerSensorReader baroSensorReader;
// activity detection
ActivityDetection actDet;
//Read all turn Observations
while(srt->hasNext()) {
@@ -213,9 +219,17 @@ public:
case s_barometer: {
obs.barometer = baroSensorReader.readBarometer(se);
actDet.addBaro(baroSensorReader.getHPA(se));
break;
}
case s_accel: {
float acc[3];
SensorReaderAccel sre; sre.read(se, acc);
actDet.addAccel(acc);
break;
}
// case s_linearAcceleration:{
// baroSensorReader.readVerticalAcceleration(se);
// break;
@@ -244,6 +258,11 @@ public:
}
ctrl.currentActivitiy = actDet.getCurrentActivity();
// this is just for testing purposes
obs.currentActivity = actDet.getCurrentActivity();
// time for a transition?
if (se.ts - lastTransitionTS > MiscSettings::timeSteps) {
@@ -268,7 +287,7 @@ public:
auto tick2 = Time::tick();
float diffTime = Time::diffMS(tick1, tick2) * 1.25f;
statsTime.add(diffTime);
std::cout << "#" << statsTime.getAvg() << "\t" << diffTime << std::endl;
//std::cout << "#" << statsTime.getAvg() << "\t" << diffTime << std::endl;
// skip the first 10 scans due to uniform distribution start
@@ -279,7 +298,7 @@ public:
// skip the first 24 scans due to uniform distribution start (12 seconds)
if (++cnt > 24) {
stats.add(err);
std::cout << stats.asString() << std::endl;
//std::cout << stats.asString() << std::endl;
}
// plot
@@ -297,6 +316,7 @@ public:
vis.gp << "set label 112 'baro: " << obs.barometer->hpa << "' at screen 0.1,0.2\n";
}
vis.gp << "set label 111 '" <<ctrl.walked_m << ":" << ctrl.headingChange_rad << "' at screen 0.1,0.1\n";
vis.gp << "set label 112 '" << "Act: " << actDet.toString() << "' at screen 0.1,0.15\n";
//vis.gp << "set label 111 '" <<ctrl.walked_m << ":" << obs.orientation.values[0] << "' at screen 0.1,0.1\n";
@@ -305,12 +325,12 @@ public:
//Point2 p2 = p1 + Angle::getPointer(obs.orientation.values[0]) * 0.05;
vis.gp << "set arrow 999 from screen " << p1.x<<","<<p1.y << " to screen " << p2.x<<","<<p2.y<<"\n";
static int dspCnt = 0;
if (++dspCnt > 0) {
vis.show();
usleep(1000*33); // prevent gnuplot errors
dspCnt = 0;
}
// static int dspCnt = 0;
// if (++dspCnt > 0) {
// vis.show();
// usleep(1000*33); // prevent gnuplot errors
// dspCnt = 0;
// }
}

View File

@@ -336,6 +336,7 @@ public:
vis.gp << "set label 112 'baro: " << obs.barometer->hpa << "' at screen 0.1,0.2\n";
}
vis.gp << "set label 111 '" <<ctrl.walked_m << ":" << ctrl.headingChange_rad << "' at screen 0.1,0.1\n";
vis.gp << "set label 112 '" << "Act: " << actDet.toString() << "' at screen 0.1,0.15\n";
//vis.gp << "set label 111 '" <<ctrl.walked_m << ":" << obs.orientation.values[0] << "' at screen 0.1,0.1\n";

View File

@@ -99,10 +99,10 @@ public:
} else {
current = Activity::WALKING;
}
}
}
// current = (Activity) idx;
// current = Activity::UNKNOWN;
// current = Activity::UNKNOWN;
mag.reset();
hpa.clear();

View File

@@ -95,31 +95,33 @@ int main(void) {
for(int i = 0; i < 1; ++i){
//nexus
// std::string name = "bergwerk_path1_nexus_simple_interval_" + std::to_string(i);
// {SmoothingEval1 eval; eval.bergwerk_path1_nexus_simple(name); eval.run();}
std::string name = "bergwerk_path1_nexus_simple_interval_" + std::to_string(i);
{Eval1 eval; eval.bergwerk_path1_nexus_simple(name); eval.run();}
// name = "bergwerk_path2_nexus_simple_interval" + std::to_string(i);
// {SmoothingEval1 eval; eval.bergwerk_path2_nexus_simple(name); eval.run();}
name = "bergwerk_path2_nexus_simple_interval" + std::to_string(i);
{Eval1 eval; eval.bergwerk_path2_nexus_simple(name); eval.run();}
// name = "bergwerk_path3_nexus_simple_interval" + std::to_string(i);
// {SmoothingEval1 eval; eval.bergwerk_path3_nexus_simple(name); eval.run();}
name = "bergwerk_path3_nexus_simple_interval" + std::to_string(i);
{Eval1 eval; eval.bergwerk_path3_nexus_simple(name); eval.run();}
name = "bergwerk_path4_nexus_simple_interval" + std::to_string(i);
{SmoothingEval1 eval; eval.bergwerk_path4_nexus_simple(name); eval.run();}
{Eval1 eval; eval.bergwerk_path4_nexus_simple(name); eval.run();}
//galaxy
// name = "bergwerk_path1_galaxy_simple_interval" + std::to_string(i);
// {SmoothingEval1 eval; eval.bergwerk_path1_galaxy_simple(name); eval.run();}
name = "bergwerk_path1_galaxy_simple_interval" + std::to_string(i);
{Eval1 eval; eval.bergwerk_path1_galaxy_simple(name); eval.run();}
// name = "bergwerk_path2_galaxy_simple_interval" + std::to_string(i);
// {SmoothingEval1 eval; eval.bergwerk_path2_galaxy_simple(name); eval.run();}
name = "bergwerk_path2_galaxy_simple_interval" + std::to_string(i);
{Eval1 eval; eval.bergwerk_path2_galaxy_simple(name); eval.run();}
// name = "bergwerk_path3_galaxy_simple_interval" + std::to_string(i);
// {SmoothingEval1 eval; eval.bergwerk_path3_galaxy_simple(name); eval.run();}
name = "bergwerk_path3_galaxy_simple_interval" + std::to_string(i);
{Eval1 eval; eval.bergwerk_path3_galaxy_simple(name); eval.run();}
name = "bergwerk_path4_galaxy_simple_interval" + std::to_string(i);
{SmoothingEval1 eval; eval.bergwerk_path4_galaxy_simple(name); eval.run();}
{Eval1 eval; eval.bergwerk_path4_galaxy_simple(name); eval.run();}
std::cout << "We are in loop number: " << i << "of " << 10 << std::endl;
}

Binary file not shown.

View File

@@ -8,6 +8,6 @@ This enables many possibilities for further improving the position estimation.
Both smoothing techniques are deployed as fixed-lag and fixed-interval smoother and a novel approach for incorporating them easily within a conventional localisation system is presented.
All this is evaluated on four floors within our faculty building.
The results show that smoothing methods offer a great tool for improving the overall localisation.
Especially fixed-lag smoothing provides a great runtime support by reducing timely errors and improving the overall estimation with affordable costs.
Especially fixed-lag smoothing provides a great runtime support by reducing temporal errors and improving the overall estimation with affordable costs.
\end{abstract}
%\begin{IEEEkeywords} indoor positioning, Monte Carlo smoothing, particle smoothing, sequential Monte Carlo\end{IEEEkeywords}

View File

@@ -1,8 +1,8 @@
\section{Conclusion}
Within this work a novel approach for utilizing \commentByFrank{utiliSing?} the forward-backward smoother and backward simulation to problems of indoor localisation was presented.
Within this work a novel approach for utilising the forward-backward smoother and backward simulation to problems of indoor localisation was presented.
Both were implemented as fixed-lag and fixed-interval smoother.
It was shown that smoothing methods are able to decrease the estimation error and improving \commentByFrank{are able to decrease ... and improve. ING weg?} the overall localisation.
Especially fixed-lag smoothing is a great tool for runtime support by reducing timely \commentByFrank{wieder} errors and improving the overall estimation with affordable costs.
It was shown that smoothing methods are able to decrease the estimation error and improve the overall localisation.
Especially fixed-lag smoothing is a great tool for runtime support by reducing temporal errors and improving the overall estimation with affordable costs.
However, a fixed-lag smoother is not able to change the lag dynamically, as its name suggests.
Therefore, a dynamic-lag smoother could be able to further improve the estimation by considering higher lags in critical areas.

View File

@@ -73,12 +73,8 @@ Walking upstairs sets $ \mu_{\text{step}} = \SI{0.4}{\meter}$, $ \sigma_{\text{s
\label{fig:particles}
\end{figure}
At first, both FBS and BS are compared in context of fixed-interval smoothing.
As a reminder, fixed-interval smoother are \commentByFrank{smootherS? oder IS using?} using all observations until time $T$
\commentByFrank{AND therefore run offline?}
therefore run offline, after the filtering procedure is finished.
Thus, we calculate only the positional error between estimation and ground truth, since timely
\commentByFrank{timeLY passt IMHO hier nicht weil auf information bezogen -> kein adverb. time information? time-based information? timed information?}
information are negligible.
As a reminder, fixed-interval smoothers are using all observations until time $T$ and therefore run offline, after the filtering procedure is finished.
%Thus, we calculate only the positional error between estimation and ground truth, since temporal information are negligible.
%
In contrast to BS, the FBS is not able to improve the results using the weighted arithmetic mean for estimating the current position.
Fig. \ref{fig:particles} illustrates the filtered and smoothed particle set at a certain time step on path 4.
@@ -114,18 +110,6 @@ Here, the filter offers a lower approximation and positional error in regard to
However it is obvious that smoothing causes the estimation to behave more natural, due to the restrictive smoothing transition, instead of walking the supposed path.
This phenomena could be observed for both smoothers respectively.
At next, we discuss the advantages and disadvantages of utilising FBS and BS as fixed-lag smoother.
Compared to fixed-interval smoothing, timely
\commentByFrank{timeLY ist IMHO hier falsch, weil es sich auf error bezieht -> kein adverb. timeED errors? timing errors? time errors? time-based errors?}
errors are now of higher importance due to an interest on real-time localization.
Especially interesting in this context are small lags $\tau < 10$
\commentByFrank{WARUM sind die interesining? -> weil es fuer echtzeitsysteme brauchbar ist? falls noch platz ist, kurzer satz?}
considering filter updates near \SI{500}{\milli\second}.
Fig. \ref{fig:lag_comp_path4} illustrates the different estimations for path 4 using a fixed-lag $\tau = 5$.
The associated approximation errors alongside the path can additionally be seen in fig. \ref{fig:lag_error_path4}.
Due to the small number of sample realisations for BS and the additional resampling for FBS, the errors are changing very frequently in contrast to the filter.
For better distinction, the path was divided into $10$ individual segments.
%
\begin{figure}
\centering
\input{gfx/eval/lag_path4_comp/path4_lag_comp}
@@ -138,67 +122,46 @@ For better distinction, the path was divided into $10$ individual segments.
\caption{%
Error development while walking along Path 4 using the Nexus 6.
Especially in segments including floor changes, the error is reduced visibly by using smoothing methods.
The black line denotes the activity detected during each timestep.
The black line denotes the activity detected during each time step.
}
\label{fig:lag_error_path4}
\end{figure}
%
At next, we discuss the advantages and disadvantages of utilising FBS and BS as fixed-lag smoother.
Compared to fixed-interval smoothing, timing errors are now of higher importance due to an interest on real-time localization.
Especially interesting in this context are small lags $\tau < 10$ considering filter updates near \SI{500}{\milli\second}.
Fig. \ref{fig:lag_comp_path4} illustrates the different estimations for path 4 using a fixed-lag $\tau = 5$.
The associated approximation errors alongside the path can additionally be seen in fig. \ref{fig:lag_error_path4}.
Due to the small number of sample realisations for BS and the additional resampling for FBS, the errors are changing very frequently in contrast to the filter.
For better distinction, the path was divided into $10$ individual segments.
Again it can be observed, that both smoothers enable a better overall estimation especially in areas where the user is changing floors (cf. fig. \ref{fig:lag_error_path4} seg. 4, 7).
Immediately after the \newline first floor change, a long and straight walk down the hallway follows.
The black line denotes the activity detect during each time step.
Here, the camel humps while changing a floor can be explained by a flat area in the middle of the stairs.
Further, two short false detections can be observed in seg. 2 and seg. 6.
Immediately after the first floor change, a long and straight walk down the hallway follows.
While the Wi-Fi component pulls the pedestrian into the rooms on the right side, the actual walking route was located on the left side of the floor (see ground truth in fig. \ref{fig:lag_comp_path4} seg. 6).
Here, the BS is able to slightly improve the path, whereas the FBS follows the filtering until the upcoming staircase provides the necessary information for adjustments.
%It follows a critical area with high errors and multimodalities.
%Due to an in-house exhibition during the time of recording, we had to leave the ground truth by a few meters and Wi-Fi was strongly attenuated.
By looking at fig. \ref{fig:lag_comp_path4} seg. 9 it seems that both smoothing methods are highly improving the error.
However, the approximation error in this area is similar to the filter and only the positional error decreases.
This timely error \commentByFrank{same here: LY} is caused by a phenomenon we call Wi-Fi jump.
This temporal error is caused by a phenomenon we call Wi-Fi jump.
Especially in seg. 8 and 9 a big crowd was gathered and highly attenuated the Wi-Fi signal.
For an excessive amount of time, the absolute location estimated by the Wi-Fi component got stuck in the middle of seg. 8 and therefore delayed the estimation.
The next viable measurements were then provided at the end of seg. 9.
This suggests that the here presented smoothing transition is able to improve the estimated path visibly, but does not compensate for those jumps in a timely manner. \commentByFrank{hier auch, denke ich}
This suggests that the here presented smoothing transition is able to improve the estimated path visibly, but does not compensate for those jumps in a temporal manner.
Finally, the BS provides an approximation error alongside all paths of $\SI{6.48}{\meter}$ for the Galaxy and $\SI{4.47}{\meter}$ for the Nexus, while filtering resulted in $\SI{7.92}{\meter}$ and $\SI{5.50}{\meter}$ respectively.
Whereas FBS improves the Galaxy's estimation from $\SI{7.73}{\meter}$ to $\SI{6.68}{\meter}$ and from $\SI{5.66}{\meter}$ to $\SI{4.80}{\meter}$ for the Nexus.
As stated before, the main advantage of BS over FBS is the better computational time by just using a sub-set of particles for calculations.
Reducing the number of particles down to $500$ does not necessarily worsen the estimation.
In most cases smoothing compensates for this reduction and maintains the good results.
Besides changing the number of particles, it is also possible the \commentByFrank{possible TO?} variate the lag.
Besides changing the number of particles, it is also possible to the variate the lag.
As one would expect, increasing the lag causes the smoothed estimation to approach the results provided by fixed-interval smoothing.
%This can be verified by looking at fig. \ref{}, which is a detailed view of segment XX of path 4 (cf. fig. \ref{fig:intcomp}).
It is obvious that a lag of \SI{30}{} time steps has access to much more future observations and is therefore able to obtain such a result.
Considering an update interval of \SI{500}{\milli\second}, a lag of \SI{30}{} would however mean that the smoother is \SI{15}{\second} behind the filter.
Nevertheless, there are practical applications like accurately verifying hit checkpoints or continuously optimizing a recurring segment of the path.
%verlgeich noch zwischen bs und fbs. bs weniger partikel und somit schneller. ändern der estimations kann aber auch ein möglichkeit sein.
%fixed-lag reduces the error about... however, as seen in fig. \ref{} ist der bloße error nicht unbedingt ausschlaggebend für die verbesserung. fast immer liefert smoothing pfade die realistischer sind, aber die error erhöhen.
%conclusion der experimente
%bei weniger partikeln bringt fixed-lag und fixed-interval smoothing im verhältnis sogar mehr! weil es da mehr zum "aufräumen" gibt. trotzdem hängt die performane natürlich stark vom vorwärtsschritt ab und man sollte nicht all zu wenige waehlen und lieber auf nummer sicher gehen. bs ist im vergleich zu fbs ein gutes stück besser in unserem fall. das hängt auch stark mit dem bereits sehr guten filtering schritt zusammen. man könnte aber trotzdem schlussfolgern das bs besser für indoor ist.
%fbs ist hier mies und liegt direkt über dem filter? oder ein fbs mit anderer estimaton und den filter nicht anzeigen?! das ist doch quatsch... wennn ich den filter net anzeige. notfalls einfach den fbs nicht nehmen. sondern sagen das er net taugt und rauswerfen.
%Smoothing mit großen lag kann die zeitliche information schwer halten. das liegt hauptsächlich daran, das im smoothing nur die relativen positionsinfos genutzt werden. das wi-fi wird nicht beachtet und deswegen können absolute justierungen der position (sprünge) nur sehr schlecht abgefedert werden.
%fixed lag smoothing verbessert den pfad ein wenig und vor allem bügelt unrealistische sprunge aus. daher wird der zeitlich verzug gut herrausgerechnet.
%beispiel multimodalität
%Tabelle mit spalten interval partikel, lag, partikel; spalten: filter, BS, FBS
%Evaluation:
%\begin{itemize}
% \item Filter ist immer der gleiche mit MultiPathPrediction und Importance Factors
% \item FBS Interval mit 500 und 2500 Partikeln auf 4 Pfaden mit SimpleSmoothingTrans
% \item BS Interval mit 500 zu 100 und 2500 zu 500 Partikeln auf auf 4 Pfaden mit SimpleSmoothingTrans
% \item FBS Lag = 5 mit 500 und 2500 Partikeln auf 4 Pfaden mit SimpleSmoothingTrans
% \item BS Lag = 5 mit 500 zu 100 und 2500 zu 500 Partikeln auf auf 4 Pfaden mit SimpleSmoothingTrans
% \item BS Lag zu Error Plot. Lag von 0 bis 100, wie verhält sich der Error. Am besten auf Pfad 4 mit SimpleSmoothingTrans.
%\end{itemize}

View File

@@ -75,7 +75,7 @@ As one can imagine, this can lead to serious problems in big indoor environments
Such a situation can be improved by incorporating future measurements (e.g. the right turn)
%or predictive information (e.g. the most likely path)
to the filtering procedure \cite{Ebner-16}.
However, standard filtering methods are not able to use any future information and the possibilities to make a distant forecast are also limited \cite{robotics, Doucet11:ATO, chen2003bayesian}.
However, standard filtering methods are not able to use any future information and the possibilities to make a distant forecast are also limited \cite{Doucet11:ATO, chen2003bayesian, doucet2000}.
One promising way to deal with these problems is smoothing.
Smoothing methods are able to make use of future measurements for computing their estimation.

View File

@@ -38,10 +38,10 @@ For example, in \cite{Platzer:2008} a particle smoother is used to reduce multim
%smoothing im bezug auf indoor
Nevertheless, there are some promising approaches for indoor localisation systems as well.
For example \cite{Nurminen2014} deployed a fixed-interval forward-backward smoother to improve the position estimation for non-real-time applications.
For example \cite{Nurminen13-PSI} deployed a fixed-interval forward-backward smoother to improve the position estimation for non-real-time applications.
They combined \docWIFI{}, step and turn detection, a simple line-of-sight model for floor plan restrictions and the barometric change within a particle filter.
The state transition samples a new state based on the heading change, altitude change and a fixed step length.
The experiments of \cite{Nurminen2014} clearly emphasise the benefits of smoothing techniques. The estimation error could be decreased significantly.
The experiments of \cite{Nurminen13-PSI} clearly emphasise the benefits of smoothing techniques. The estimation error could be decreased significantly.
However, a fixed-lag smoother was discussed only in theory.
In the work of \cite{Paul2009} both fixed-interval and fixed-lag smoothing were presented.

View File

@@ -212,7 +212,7 @@ pages={780-785},
@article{Ville09,
author = {Ville Honkavirta and Tommi Perälä and Simo Ali-Löytty and Robert Piche},
title = {A Comparative Survey of WLAN Location Fingerprinting Methods},
title = {{A Comparative Survey of WLAN Location Fingerprinting Methods}},
journal = {Workshop on Positioning, Navigation and Communication},
year = {2009},
volume = {6},
@@ -544,7 +544,7 @@ ISSN={0162-8828},}
author = {Arnaud Doucet and Adam M. Johansen},
title = {{A Tutorial on Particle Filtering and Smoothing: Fifteen years later}},
booktitle = {The Oxford Handbook of Nonlinear Filtering},
editor = {Dan Crisan and Boris Rozovsky},
IGNOREeditor = {Dan Crisan and Boris Rozovsky},
publisher = {Oxford University Press},
year = {2011},
}
@@ -637,7 +637,7 @@ ISSN={0162-8828},}
@article{PathLossPredictionModelsForIndoor,
author={Seidel, Scott Y. and Rappaport, Theodore S.},
journal={IEEE Transactions on Antennas and Propagation},
title={914 {MHz} Path Loss Prediction Models for Indoor Wireless Communications in Multifloored Buildings},
title={{914 {MHz} Path Loss Prediction Models for Indoor Wireless Communications in Multifloored Buildings}},
year={1992},
volume={40},
number={2},
@@ -1509,7 +1509,7 @@ doi={10.1109/ICCKE.2013.6682841},}
@article{Godsill04:MCS,
author = {Simon J. Godsill and Arnaud Doucet and Mike West},
title = {Monte Carlo Smoothing for Nonlinear Time Series},
title = {{Monte Carlo Smoothing for Nonlinear Time Series}},
journal = {Journal of the American Statistical Association},
year = {2004},
IGNOREmonth = {March},
@@ -1548,7 +1548,7 @@ doi={10.1109/ICCKE.2013.6682841},}
@inproceedings{Binghao13-UBI,
author={Binghao Li and Harvey, B. and Gallagher, T.},
booktitle={Indoor Positioning and Indoor Navigation (IPIN), Int. Conf. on},
title={Using Barometers to Determine the Height for Indoor Positioning},
title={{Using Barometers to Determine the Height for Indoor Positioning}},
year={2013},
IGNOREmonth={Oct},
pages={1-7},
@@ -1557,7 +1557,7 @@ doi={10.1109/ICCKE.2013.6682841},}
@inproceedings{Nurminen13-PSI,
author={Nurminen, H. and Ristimaki, A. and Ali-Loytty, S. and Piche, R.},
booktitle={Indoor Positioning and Indoor Navigation (IPIN), Int. Conf. on},
title={Particle Filter and Smoother for Indoor Localization},
title={{Particle Filter and Smoother for Indoor Localization}},
year={2013},
IGNOREmonth={October},
pages={1-10},
@@ -1727,7 +1727,7 @@ doi={10.1109/PLANS.2008.4570051},}
@inproceedings{Ebner-16,
author={Ebner, Frank and Fetzer, Toni and Grzegorzek, Marcin and Deinzer, Frank},
booktitle={On Review},
booktitle={19th Int. Conf. on Information Fusion (FUSION)},
title={{On Prior Navigation Knowledge in Multi Sensor
Indoor Localisation}},
year={2016},
@@ -1945,7 +1945,7 @@ year = {2014}
}
@article{chen2003bayesian,
title={Bayesian Filtering: From Kalman Filters to Particle Filters, and Beyond},
title={{Bayesian Filtering: From Kalman Filters to Particle Filters, and Beyond}},
author={Chen, Zhe},
journal={Statistics},
volume={182},
@@ -2260,7 +2260,7 @@ IGNOREmonth={Apr},
}
@inproceedings{klaas2006fast,
title={Fast Particle Smoothing: If I had a Million Particles},
title={{Fast Particle Smoothing: If I had a Million Particles}},
author={Klaas, Mike and Briers, Mark and De Freitas, Nando and Doucet, Arnaud and Maskell, Simon and Lang, Dustin},
booktitle={Proc. of the 23rd Int. Conf. on Machine learning},
pages={481--488},
@@ -2269,7 +2269,7 @@ IGNOREmonth={Apr},
}
@article{kitagawa1996monte,
title={Monte Carlo Filter and Smoother for non-Gaussian nonlinear State Space Models},
title={{Monte Carlo Filter and Smoother for non-Gaussian nonlinear State Space Models}},
author={Kitagawa, Genshiro},
journal={Journal of Computational and Graphical Statistics},
volume={5},
@@ -2321,7 +2321,7 @@ IGNOREmonth={Apr},
}
@article{fearnhead2010sequential,
title={A Sequential Smoothing Algorithm with Linear Computational Cost},
title={{A Sequential Smoothing Algorithm with Linear Computational Cost}},
author={Fearnhead, Paul and Wyncoll, David and Tawn, Jonathan},
journal={Biometrika},
volume={97},
@@ -2332,7 +2332,7 @@ IGNOREmonth={Apr},
}
@article{kitagawa1987non,
title={Non-Gaussian State-Space Modeling of Nonstationary Time Series},
title={{Non-Gaussian State-Space Modeling of Nonstationary Time Series}},
author={Kitagawa, Genshiro},
journal={Journal of the American Statistical Association},
volume={82},

Binary file not shown.