current TeX and code
This commit is contained in:
37
main.cpp
37
main.cpp
@@ -443,10 +443,26 @@ void plotAllFingerprints(Floorplan::IndoorMap* map) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
using Walk = std::vector<Point3>;
|
||||
|
||||
float getLength(const Walk& walk) {
|
||||
|
||||
float len = 0;
|
||||
for (size_t i = 0; i < walk.size()-1; ++i) {
|
||||
const Point3 p1 = walk[i+0];
|
||||
const Point3 p2 = walk[i+1];
|
||||
const float dist = p1.getDistance(p2);
|
||||
len += dist;
|
||||
}
|
||||
return len;
|
||||
|
||||
}
|
||||
|
||||
/** show all walked paths */
|
||||
void plotAllWalks(Floorplan::IndoorMap* map) {
|
||||
|
||||
using Walk = std::vector<Point3>;
|
||||
|
||||
|
||||
Walk path1 = FloorplanHelper::getGroundTruth(map, Settings::GroundTruth::path1);
|
||||
Walk path2 = FloorplanHelper::getGroundTruth(map, Settings::GroundTruth::path2);
|
||||
@@ -456,6 +472,12 @@ void plotAllWalks(Floorplan::IndoorMap* map) {
|
||||
Walk path_toni_inst_2 = FloorplanHelper::getGroundTruth(map, Settings::GroundTruth::path_toni_inst_2);
|
||||
Walk path_toni_inst_3 = FloorplanHelper::getGroundTruth(map, Settings::GroundTruth::path_toni_inst_3);
|
||||
|
||||
std::cout << "path1: " << getLength(path1) << std::endl;
|
||||
std::cout << "path2: " << getLength(path2) << std::endl;
|
||||
std::cout << "inst_1: " << getLength(path_toni_inst_1) << std::endl;
|
||||
std::cout << "inst_2: " << getLength(path_toni_inst_2) << std::endl;
|
||||
std::cout << "inst_3: " << getLength(path_toni_inst_3) << std::endl;
|
||||
|
||||
const std::vector<Walk> walks = {
|
||||
path1,
|
||||
path2,
|
||||
@@ -481,9 +503,14 @@ void plotAllWalks(Floorplan::IndoorMap* map) {
|
||||
p->addStartIndicator(walk[0], colors[i]);
|
||||
|
||||
K::GnuplotSplotElementLines* line = new K::GnuplotSplotElementLines();
|
||||
line->getStroke().setWidth(2);
|
||||
line->getStroke().setWidth(4);
|
||||
line->getStroke().getColor().setHexStr(colors[i]);
|
||||
line->setTitle(titles[i]);
|
||||
|
||||
if (i == 4) {
|
||||
line->getStroke().setType(K::GnuplotDashtype::DOTTED);
|
||||
}
|
||||
|
||||
//line->getStroke().setType( (i > 3) ? K::GnuplotDashtype::DASHED : K::GnuplotDashtype::SOLID );
|
||||
|
||||
float oy = 0;
|
||||
@@ -500,7 +527,7 @@ void plotAllWalks(Floorplan::IndoorMap* map) {
|
||||
p->splot.getKey().setVisible(true);
|
||||
//p->splot.getKey().setPosition(K::GnuplotKey::Hor::RIGHT, K::GnuplotKey::Ver::TOP);
|
||||
p->splot.getKey().setPosition(K::GnuplotCoordinate2(0.99, 0.99, K::GnuplotCoordinateSystem::SCREEN));
|
||||
p->splot.getKey().setSampleLength(0.5);
|
||||
p->splot.getKey().setSampleLength(1.0);
|
||||
//p->splot.getKey().setWidthIncrement(-4);
|
||||
p->splot.setStringMod(new K::GnuplotStringModLaTeX());
|
||||
|
||||
@@ -1227,9 +1254,9 @@ int main(void) {
|
||||
Floorplan::IndoorMap* map = Floorplan::Reader::readFromFile(Settings::fMap);
|
||||
|
||||
|
||||
//plotAllWalks(map);
|
||||
plotAllWalks(map);
|
||||
|
||||
compareAll();
|
||||
//compareAll();
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
|
||||
% intro
|
||||
|
||||
\commentByFrank{reihenfolge so jetzt klar?}
|
||||
Within our experiments we will first have a look at model optimizations to reduce the error
|
||||
between model predictions and real-world conditions.
|
||||
Hereafter we examine the resulting accuracy when using the optimized models for localization
|
||||
using just the \docWIFI{} component without additional sensors or assumptions.
|
||||
Within our experiments we will first have a look at model optimizations to reduce the error (in \decibel)
|
||||
between model predictions and real-world conditions in section \ref{sec:evalModelOpt}.
|
||||
%
|
||||
Hereafter, in section \ref{sec:evalWifiMeter} we examine the resulting accuracy (in \meter)
|
||||
when using the optimized models for localization solely by the \docWIFI{} component without additional sensors, assumptions or filtering.
|
||||
%
|
||||
Finally, all models are evaluated in the context of our indoor localization system \refeq{eq:recursiveDensity},
|
||||
using additional smartphone sensors and the building's floorplan.
|
||||
using additional smartphone sensors and the building's floorplan in section \ref{sec:evalFiltered}.
|
||||
|
||||
All optimizations and evaluations took place within two adjacent buildings (4 and 2 floors, respectively)
|
||||
and two connected outdoor regions (entrance and inner courtyard),
|
||||
@@ -35,9 +36,10 @@
|
||||
% -------------------------------- optimization -------------------------------- %
|
||||
|
||||
\subsection{Model optimization}
|
||||
\label{sec:evalModelOpt}
|
||||
|
||||
As the signal strength prediction model is the core of the absolute positioning component
|
||||
described in section \ref{sec:system}, we start with the model parameter optimization (see \ref{sec:optimization}).
|
||||
described in section \ref{sec:system}, we start with the model parameter optimization (see section \ref{sec:optimization}).
|
||||
\mTXP{}, \mPLE{} and \mWAF{} will be estimated based on some reference measurements using
|
||||
various optimization strategies. The results of those optimization strategies are compared
|
||||
with each other and an empiric parameter choice:
|
||||
@@ -48,7 +50,7 @@
|
||||
|
||||
\reffig{fig:referenceMeasurements} depicts the location of the used 121 reference measurements.
|
||||
Each location was scanned 30 times ($\approx$ \SI{25}{\second} scan time),
|
||||
non-permanent \docAP{}s were removed, the values were grouped per physical transmitter (see \ref{sec:vap})
|
||||
non-permanent \docAP{}s were removed, the values were grouped per physical transmitter (see section \ref{sec:vap})
|
||||
and aggregated to form the average signal strength per transmitter.
|
||||
|
||||
\begin{figure}
|
||||
@@ -64,8 +66,8 @@
|
||||
\begin{subfigure}[t!]{0.48\textwidth}
|
||||
\input{gfx2/model-bboxes.tex}
|
||||
\caption{
|
||||
Each distinct floor-color denotes one model (7 in total) for {\em \optPerRegion{}}.
|
||||
Often more than one bounding box is needed to approximate the region's shape.
|
||||
Each distinct floor-color denotes a region (6 indoors, 1 outdoors) for {\em \optPerRegion{}}.
|
||||
Often more than one bounding box is needed to describe the region's shape.
|
||||
}
|
||||
\label{fig:modelBBoxes}
|
||||
\end{subfigure}
|
||||
@@ -120,17 +122,17 @@
|
||||
|
||||
\item{
|
||||
{\em\optParamsAllAP{}} is the same as above, except that the three parameters are optimized
|
||||
using the reference measurements. However, all transmitters share the same three parameters.
|
||||
using the reference measurements (convex function). All transmitters share the same three parameters.
|
||||
}
|
||||
|
||||
\item{
|
||||
{\em\optParamsEachAP{}} optimizes the three parameters per \docAP{} instead of using the same
|
||||
parameters for all.
|
||||
parameters for all. This still denotes a convex function per transmitter.
|
||||
}
|
||||
|
||||
\item{
|
||||
{\em\optParamsPosEachAP{}} does not need any prior knowledge and will optimize all six parameters
|
||||
(3D position, \mTXP, \mPLE, \mWAF) based on the reference measurements.
|
||||
(3D position, \mTXP, \mPLE, \mWAF) based on the reference measurements (non-convex function).
|
||||
}
|
||||
|
||||
\item{
|
||||
@@ -345,11 +347,11 @@
|
||||
% -------------------------------- wifi walk error -------------------------------- %
|
||||
|
||||
\subsection{\docWIFI{} location estimation error}
|
||||
\label{sec:evalWifiMeter}
|
||||
|
||||
\todo{uebergang jetzt besser?}
|
||||
Having optimized several signal strength prediction models, we can now examine the resulting localization
|
||||
accuracy for each. For now, this will just cover the \docWIFI{} component itself.
|
||||
The impact of adding additional sensors and a transition model will be evaluated later.
|
||||
accuracy (in \meter) for each. For now, this will just cover the \docWIFI{} component itself.
|
||||
The impact of fusing additional sensors and a adding prior knowledge provided by a transition model will be evaluated later.
|
||||
|
||||
|
||||
%Using the optimized model setups and the measurements $\mRssiVec$ determined by scanning for nearby \docAPshort{}s,
|
||||
@@ -381,7 +383,8 @@
|
||||
|
||||
In \refeq{eq:bestWiFiPos} $\mu_{i,\mPosVec}$ is the signal strength for \docAP{} $i$,
|
||||
installed at location $\mPosVec$, returned from the to-be-examined prediction model.
|
||||
For all comparisons, we use a constant uncertainty of $\sigma = \SI{8}{\decibel}$.
|
||||
For all comparisons, we use a constant uncertainty of $\sigma = \SI{8}{\decibel}$,
|
||||
which is an empirical choice based on prior experiments.
|
||||
|
||||
The quality of the estimated location is determined by using the Euclidean distance between estimation
|
||||
$\mPosVec^*$ and the pedestrian's ground truth position at the time the scan $\mRssiVec$
|
||||
@@ -403,6 +406,9 @@
|
||||
\caption{
|
||||
Overview of all conducted paths, each starting at the denoted rectangle.
|
||||
Outdoor areas are marked in green.
|
||||
The length of the paths is as follows:
|
||||
path 1: \SI{207}{\meter}, path 2: \SI{138}{\meter}, path 3: \SI{86}{\meter}, path 4: \SI{140}{\meter},
|
||||
and path 5: \SI{97}{\meter}.
|
||||
}
|
||||
\label{fig:allWalks}
|
||||
\end{figure}
|
||||
@@ -491,10 +497,10 @@
|
||||
as likely as the pedestrian's actual location, we examined various approaches.
|
||||
Unfortunately, most of which did not provide a viable enhancement under all conditions for the performed walks.
|
||||
|
||||
\commentByFrank{ja, eig gehoert das vor in die theorie, aber da es so kurz ist und vorne immer die ueberleitung kaputt macht
|
||||
oder anderen dingen vorgreifen wuerde, steht es hier}
|
||||
%\commentByFrank{ja, eig gehoert das vor in die theorie, aber da es so kurz ist und vorne immer die ueberleitung kaputt macht
|
||||
%oder anderen dingen vorgreifen wuerde, steht es hier}
|
||||
The misclassification-rate is determined by counting the amount of (random) locations within
|
||||
the building that produce a similar probability \refeq{eq:wifiProb} as the actual ground-truth
|
||||
the building that produce a similar probability \refeq{eq:wifiProb} compared to the actual ground-truth
|
||||
position.
|
||||
|
||||
One possibility to dissolve such an equal \docWIFI{}-likelihood between two (or more) locations is,
|
||||
@@ -574,6 +580,7 @@
|
||||
% -------------------------------- final system -------------------------------- %
|
||||
|
||||
\subsection{Filtered location estimation error}
|
||||
\label{sec:evalFiltered}
|
||||
|
||||
After examining the \docWIFI{} component on its own, we will now analyze the impact of previously discussed model
|
||||
optimizations on our smartphone-based indoor localization system described in section \ref{sec:system}, based on
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
knowledge to work. To infer the probability of the pedestrian currently
|
||||
residing at an arbitrary location, the signal strengths received
|
||||
by the smartphone are compared with the signal strengths which should be received at this
|
||||
location (prior knowledge). As RF-signals are highly dependent
|
||||
location (prior knowledge). As radio frequency (RF) signals are highly dependent
|
||||
on the surroundings, those values can change rapidly within meters.
|
||||
%
|
||||
That is why fingerprinting became popular, where the required prior knowledge
|
||||
|
||||
@@ -47,7 +47,8 @@
|
||||
%This induces both, the need for more complex prediction models and the need for filtering approaches
|
||||
%to limit the impact of potentially erroneous readings.
|
||||
%
|
||||
Approaches based on timing like TOA and TDOA, as used within the GPS, or methods estimating the signal's angle-of-arrival (AOA)
|
||||
Approaches based on timing like time of arrival (TOA) and time difference of arrival (TDOA),
|
||||
as used within the GPS, or methods estimating the signal's angle of arrival (AOA)
|
||||
are more accurate, and mostly invariant to architectural obstacles \cite{TimeDifferenceOfArrival1, TOAAOA}.
|
||||
Especially signal runtimes are unaffected by walls and thus allow for stable distance estimations, if the used components
|
||||
support measuring time-delays down to a few picoseconds. This is why those techniques often need special (measurement) hardware
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
The corresponding observation vector, given by the smartphone's sensors, is defined as
|
||||
%
|
||||
\begin{equation}
|
||||
\mObsVec = (\mRssiVecWiFi{}, \mObsSteps, \mObsHeadingRel, \mObsHeadingAbs, \mPressure, \mObsGPS) \enspace.
|
||||
\mObsVec = (\mRssiVecWiFi{}, \mObsSteps, \mObsHeadingRel, \mObsHeadingAbs, \mPressure, \mObsGPSVec) \enspace.
|
||||
\end{equation}
|
||||
%
|
||||
$\mRssiVecWiFi$ contains the signal strength measurements of all \docAP{}s (\docAPshort{}s) currently visible to the phone,
|
||||
@@ -34,7 +34,9 @@
|
||||
$\mObsHeadingRel$ the (relative) angular change since the last filter-step,
|
||||
$\mObsHeadingAbs$ the vague absolute heading as provided by the magnetometer,
|
||||
$\mPressure$ the ambient pressure in hPa and
|
||||
$\mObsGPS = ( \mObsGPSlat, \mObsGPSlon, \mObsGPSaccuracy)$ the current location (if available) given by the GPS.
|
||||
$\mObsGPSVec = ( \mObsGPSlat, \mObsGPSlon, \mObsGPSaccuracy)$ the current location given by the GPS.
|
||||
If the latter is currently not available, this is indicated by a special value combination, which
|
||||
is checked within the evaluation.
|
||||
|
||||
|
||||
Assuming statistical independence, the state-evaluation density from \refeq{eq:recursiveDensity} can be written as
|
||||
@@ -60,7 +62,8 @@
|
||||
|
||||
|
||||
Absolute location information is provided by $p(\vec{o}_t \mid \vec{q}_t)_\text{wifi}$ and
|
||||
$p(\vec{o}_t \mid \vec{q}_t)_\text{gps}$, if available.
|
||||
$p(\vec{o}_t \mid \vec{q}_t)_\text{gps}$, if available. Otherwise, their probability
|
||||
is uniformly distributed (same likelihood for any location).
|
||||
The vague absolute heading provided by
|
||||
the smartphone's magnetometer is included using a simple heuristic for
|
||||
$p(\vec{o}_t \mid \vec{q}_t)_\text{abshead}$. Finally, the barometer is used
|
||||
@@ -70,7 +73,8 @@
|
||||
Furthermore, the smartphone's IMU is used to infer the number of steps
|
||||
and the relative turn angle the pedestrian has taken since the last filter-update.
|
||||
While those values could be used within the evaluation \refeq{eq:evalDensity}
|
||||
we apply them within the transition model to estimate the pedestrian's potential
|
||||
we apply them within the transition model (see \cite{Koeping14-PSA, Ebner2016OPN})
|
||||
to estimate the pedestrian's potential
|
||||
movement $p(\mStateVec_{t} \mid \mStateVec_{t-1}, \mObsVec_{t-1})$ within the building.
|
||||
Using real values to perform this movement-update instead of just scattering randomly
|
||||
along the floorplan followed by downvoting within the evaluation \refeq{eq:evalDensity}
|
||||
@@ -82,15 +86,20 @@
|
||||
%
|
||||
Compared to this reference, absolute heading and GPS have been added as additional sensors
|
||||
to further enhance the localization. As can be seen in \refeq{eq:evalAbsHead} and \refeq{eq:evalGPS},
|
||||
their values are incorporated using a simple distribution that models each sensor's uncertainty.
|
||||
their values are incorporated using a distribution (normalized by $\xi$) that matches each sensor's uncertainty.
|
||||
The difference between the GPS' estimation and potential state $\mStateVec$ is given by the
|
||||
Euclidean 2D $\text{distance}(\dots)$ in \refeq{eq:evalGPS}.
|
||||
|
||||
|
||||
\begin{equation}
|
||||
p(\vec{o}_t \mid \vec{q}_t)_\text{abshead}
|
||||
=
|
||||
= \xi
|
||||
\begin{cases}
|
||||
0.7 & | \mObsVec_{\mObsHeadingAbs} - \mStateVec_{\mStateHeading} | < \SI{120}{\degree} \\
|
||||
0.7 & | \mObs_t^{\mObsHeadingAbs} - \mState_t^{\mStateHeading} | < \SI{120}{\degree} \\
|
||||
0.3 & \text{else}
|
||||
\end{cases}
|
||||
,\enskip
|
||||
\xi = \text{const}
|
||||
\label{eq:evalAbsHead}
|
||||
\end{equation}
|
||||
|
||||
@@ -104,7 +113,7 @@
|
||||
), \enskip
|
||||
d = \text{distance}(
|
||||
(\mObsGPS_\text{lat}, \mObsGPS_\text{lon}),
|
||||
(\mStateVec_x, \mStateVec_y)
|
||||
(\mState_t^x, \mState_t^y)
|
||||
), \enskip
|
||||
\sigma = \mObsGPS_\text{accuracy}
|
||||
\label{eq:evalGPS}
|
||||
@@ -116,8 +125,8 @@
|
||||
and the pedestrian is required to move outdoors to enter the next facility.
|
||||
Indoors the GPS will usually not provide viable location estimations and the system has to
|
||||
solely rely on the smartphone's \docWIFI{} observations.
|
||||
Therefore its crucial for this component to supply location
|
||||
Therefore its crucial for the \docWIFI{} component to supply location
|
||||
estimations that are as accurate as possible,
|
||||
while the component itself must be easy to set-up and maintain.
|
||||
|
||||
\todo{ueberleitung besser?}
|
||||
%\todo{ueberleitung besser?}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
\label{eq:wifiObs}
|
||||
\end{equation}
|
||||
|
||||
where matching a single signal strength observation against the reference is given by
|
||||
\noindent where matching a single signal strength observation against the reference is given by
|
||||
|
||||
\begin{equation}
|
||||
p(\mRssi_i \mid \mPosVec) =
|
||||
@@ -127,6 +127,8 @@
|
||||
The target function \refeq{eq:optTarget} optimizes the model-parameters for one \docAP{} by reducing the squared error between
|
||||
reference measurements $s_{\mPosVec} \in \vec{s}$ with well-known location $\mPosVec$ and corresponding
|
||||
model predictions $\mu_{\mPosVec}$.
|
||||
The number of floors between $\mPosVec$ and the transmitter's location $\mPosAPVec$ is
|
||||
$\text{floors}(\mPosVec,\mPosAPVec)$.
|
||||
|
||||
\begin{equation}
|
||||
\epsilon^* =
|
||||
@@ -189,7 +191,7 @@
|
||||
%\end{figure}
|
||||
|
||||
Such functions demand for optimization algorithms, that are able to deal with non-convex functions.
|
||||
We thus used a genetic algorithm to perform this task.
|
||||
We thus used a genetic algorithm to perform this task \cite{goldberg89}.
|
||||
However, initial tests indicated that while being superior to simplex
|
||||
and similar algorithms, the results were not yet satisfying as the optimization often did not converge.
|
||||
|
||||
@@ -198,9 +200,11 @@
|
||||
genetic algorithm: The initial population is now uniformly sampled from the known range. During each iteration,
|
||||
the best \SI{25}{\percent} of the population are kept and the remaining entries are
|
||||
re-created by modifying the best entries with uniform random values within
|
||||
$\pm$\SI{10}{\percent} of the known range. The result is stabilized by narrowing the allowed modification range
|
||||
$\pm$\SI{10}{\percent} of the known range.
|
||||
Inspired by {\em cooling} known from simulated annealing \cite{Kirkpatrick83optimizationby},
|
||||
the result is stabilized by narrowing the allowed modification range
|
||||
%(starting at \SI{10}{\percent})
|
||||
over time, often referred to as {\em cooling} \cite{Kirkpatrick83optimizationby}.
|
||||
over time.
|
||||
|
||||
|
||||
\subsection{Modified Signal Strength Model}
|
||||
@@ -300,7 +304,7 @@
|
||||
\label{eq:wifiQuality}
|
||||
\end{equation}
|
||||
|
||||
\subsection {Virtual \docAP{}s}
|
||||
\subsection {Virtual \docAP{}s (VAP)}
|
||||
\label{sec:vap}
|
||||
|
||||
Assuming normal conditions, the received signal strength at one location will also (strongly) vary over time
|
||||
|
||||
@@ -2761,3 +2761,18 @@ year = {1967}
|
||||
number = {4598},
|
||||
pages = {671--680}
|
||||
}
|
||||
|
||||
|
||||
@book{goldberg89,
|
||||
added-at = {2017-04-11T02:23:13.000+0200},
|
||||
author = {Goldberg, D. E.},
|
||||
biburl = {https://www.bibsonomy.org/bibtex/2af6ec8ef88eb576d7ecc8ac3a84126a3/geovani},
|
||||
interhash = {79bb58f1d9d57b042cf0f771784d4adb},
|
||||
intrahash = {af6ec8ef88eb576d7ecc8ac3a84126a3},
|
||||
keywords = {},
|
||||
owner = {gregor},
|
||||
publisher = {Addison-Wesley},
|
||||
timestamp = {2017-04-11T02:23:13.000+0200},
|
||||
title = {Genetic Algorithms in Search, Optimization, and Machine Learning},
|
||||
year = 1989
|
||||
}
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
\newcommand{\mSteps}{n_\text{steps}}
|
||||
\newcommand{\mObsSteps}{\mSteps}
|
||||
|
||||
\newcommand{\mObsGPS}{\vec{g}}
|
||||
\newcommand{\mObsGPS}{g}
|
||||
\newcommand{\mObsGPSVec}{\vec{g}}
|
||||
\newcommand{\mObsGPSlat}{\text{lat}}
|
||||
\newcommand{\mObsGPSlon}{\text{lon}}
|
||||
\newcommand{\mObsGPSaccuracy}{\text{accuracy}}
|
||||
|
||||
Reference in New Issue
Block a user