Merge branch 'master' of https://git.frank-ebner.de/FHWS/FtmPrologic
This commit is contained in:
@@ -50,6 +50,7 @@ FILE(GLOB SOURCES
|
|||||||
main.cpp
|
main.cpp
|
||||||
mainTrilat.cpp
|
mainTrilat.cpp
|
||||||
mainProb.cpp
|
mainProb.cpp
|
||||||
|
mainPlotting.cpp
|
||||||
Eval.cpp
|
Eval.cpp
|
||||||
FtmKalman.cpp
|
FtmKalman.cpp
|
||||||
trilateration.cpp
|
trilateration.cpp
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace Settings {
|
|||||||
const bool PlotToPng = false;
|
const bool PlotToPng = false;
|
||||||
|
|
||||||
const bool UseKalman = false;
|
const bool UseKalman = false;
|
||||||
const bool UseRSSI = false;
|
const bool UseRSSI = true;
|
||||||
|
|
||||||
/** describes one dataset (map, training, parameter-estimation, ...) */
|
/** describes one dataset (map, training, parameter-estimation, ...) */
|
||||||
|
|
||||||
|
|||||||
@@ -333,7 +333,6 @@ static CombinedStats<float> run(Settings::DataSetup setup, int walkIdx, std::str
|
|||||||
{
|
{
|
||||||
plot.addCircle(10000 + nucConfig.second.ID, nucConfig.second.position.xy(), 0.1);
|
plot.addCircle(10000 + nucConfig.second.ID, nucConfig.second.position.xy(), 0.1);
|
||||||
}
|
}
|
||||||
plot.plot();
|
|
||||||
|
|
||||||
// particle-filter
|
// particle-filter
|
||||||
const int numParticles = 5000;
|
const int numParticles = 5000;
|
||||||
@@ -716,6 +715,11 @@ int main(int argc, char** argv)
|
|||||||
std::cout << "Trilateration" << "\n";
|
std::cout << "Trilateration" << "\n";
|
||||||
return mainTrilat(argc, argv);
|
return mainTrilat(argc, argv);
|
||||||
}
|
}
|
||||||
|
else if (args.hasFlag("plot"))
|
||||||
|
{
|
||||||
|
std::cout << "Plotting" << "\n";
|
||||||
|
return mainPlotting(argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
CombinedStats<float> statsAVG;
|
CombinedStats<float> statsAVG;
|
||||||
CombinedStats<float> statsMedian;
|
CombinedStats<float> statsMedian;
|
||||||
|
|||||||
@@ -3,3 +3,5 @@
|
|||||||
int mainTrilat(int argc, char** argv);
|
int mainTrilat(int argc, char** argv);
|
||||||
|
|
||||||
int mainProp(int argc, char** argv);
|
int mainProp(int argc, char** argv);
|
||||||
|
|
||||||
|
int mainPlotting(int argc, char** argv);
|
||||||
|
|||||||
@@ -111,15 +111,18 @@ static CombinedStats<float> run(Settings::DataSetup setup, int walkIdx, std::str
|
|||||||
|
|
||||||
for (const Offline::Entry& e : fr.getEntries())
|
for (const Offline::Entry& e : fr.getEntries())
|
||||||
{
|
{
|
||||||
if (e.type != Offline::Sensor::WIFI_FTM) {
|
if (e.type != Offline::Sensor::WIFI_FTM && e.type != Offline::Sensor::GROUND_TRUTH) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TIME
|
// TIME
|
||||||
const Timestamp ts = Timestamp::fromMS(e.ts);
|
const Timestamp ts = Timestamp::fromMS(e.ts);
|
||||||
|
|
||||||
|
if (e.type == Offline::Sensor::WIFI_FTM)
|
||||||
|
{
|
||||||
auto wifiFtm = fr.getWifiFtm()[e.idx].data;
|
auto wifiFtm = fr.getWifiFtm()[e.idx].data;
|
||||||
obs.push_back(wifiFtm);
|
obs.push_back(wifiFtm);
|
||||||
|
}
|
||||||
|
|
||||||
if (ts - lastTimestamp >= Timestamp::fromMS(500))
|
if (ts - lastTimestamp >= Timestamp::fromMS(500))
|
||||||
{
|
{
|
||||||
@@ -212,8 +215,7 @@ static CombinedStats<float> run(Settings::DataSetup setup, int walkIdx, std::str
|
|||||||
plot.addLabel(ss.str(), Point3(70, i*5, 0), i);
|
plot.addLabel(ss.str(), Point3(70, i*5, 0), i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Png Output
|
// Png Output
|
||||||
//if (Settings::PlotToPng)
|
//if (Settings::PlotToPng)
|
||||||
@@ -231,7 +233,6 @@ static CombinedStats<float> run(Settings::DataSetup setup, int walkIdx, std::str
|
|||||||
|
|
||||||
plot.plot();
|
plot.plot();
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||||
}
|
|
||||||
|
|
||||||
obs.clear();
|
obs.clear();
|
||||||
lastTimestamp = ts;
|
lastTimestamp = ts;
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
\usepackage{color, colortbl}
|
\usepackage{color, colortbl}
|
||||||
\usepackage{graphicx}
|
\usepackage{graphicx}
|
||||||
\usepackage{subcaption}
|
|
||||||
|
|
||||||
\interdisplaylinepenalty=2500
|
\interdisplaylinepenalty=2500
|
||||||
|
|
||||||
@@ -29,6 +28,8 @@
|
|||||||
\usepackage{array}
|
\usepackage{array}
|
||||||
\usepackage{multirow}
|
\usepackage{multirow}
|
||||||
\usepackage{xfrac}
|
\usepackage{xfrac}
|
||||||
|
\usepackage{mwe}
|
||||||
|
\usepackage{subfig}
|
||||||
|
|
||||||
%\updates{yes} % If there is an update available, un-comment this line
|
%\updates{yes} % If there is an update available, un-comment this line
|
||||||
|
|
||||||
|
|||||||
@@ -20,3 +20,10 @@
|
|||||||
\etal{Ibrahim} lays the required groundwork to use the still experimental FTM standard and verifies the general accuracy \cite{ibrahim2018verification}.
|
\etal{Ibrahim} lays the required groundwork to use the still experimental FTM standard and verifies the general accuracy \cite{ibrahim2018verification}.
|
||||||
\etal{Yu} present a system using FTM measurements and multisensor multi-pattern-based dead reckoning based on a Unscented Kalman filter sensor fusion \cite{yu2019robust}.
|
\etal{Yu} present a system using FTM measurements and multisensor multi-pattern-based dead reckoning based on a Unscented Kalman filter sensor fusion \cite{yu2019robust}.
|
||||||
\etal{Xu} \cite{xu2019locating}.
|
\etal{Xu} \cite{xu2019locating}.
|
||||||
|
|
||||||
|
Compared to the above state of the art our work...
|
||||||
|
\begin{itemize}
|
||||||
|
\item szenario realistischer und nicht nur quadrate die man läuft
|
||||||
|
\item direkter vergleich mit RSSI
|
||||||
|
\item in der praxis erprobte verfahren darauf laufen lassen.
|
||||||
|
\end{itemize}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
\section{Experiments}
|
\section{Experiments}
|
||||||
|
|
||||||
\subsection{Setup and Environment}
|
\subsection{Hardware Setup}
|
||||||
|
|
||||||
|
|
||||||
%\begin{itemize}
|
%\begin{itemize}
|
||||||
% \item Pixel 2XL Android P liefert RSSI und FTM
|
% \item Pixel 2XL Android P liefert RSSI und FTM
|
||||||
@@ -58,7 +59,7 @@ In contrast to regular stationary access points which are usually mounted on wal
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Ftm range meas performance}
|
\subsection{Verification FTM Performance in LOS Scenario}
|
||||||
%\begin{itemize}
|
%\begin{itemize}
|
||||||
% \item AP position strategy
|
% \item AP position strategy
|
||||||
% \item DoP plot
|
% \item DoP plot
|
||||||
@@ -97,43 +98,72 @@ The geometry and properties of the internal antenna are unknown.
|
|||||||
% Erkenntnis 4: Unterschied zwischen Pixel 2 und 3 ist nicht erkennbar
|
% Erkenntnis 4: Unterschied zwischen Pixel 2 und 3 ist nicht erkennbar
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[ht]
|
||||||
|
|
||||||
|
\begin{minipage}{.5\textwidth}
|
||||||
|
\centering
|
||||||
|
\subfloat[]{\label{main:a}\includegraphics[width=\textwidth]{DistMeasMean.png}}
|
||||||
|
\end{minipage}%
|
||||||
|
\begin{minipage}{.5\textwidth}
|
||||||
|
\centering
|
||||||
|
\subfloat[]{\label{main:b}\includegraphics[width=\textwidth]{DistMeasMeanPerPixel.png}}
|
||||||
|
\end{minipage}\par\medskip
|
||||||
|
\centering
|
||||||
|
\subfloat[CDF of error]{\label{main:c}\includegraphics[width=\textwidth]{DistMeasCDF.png}}
|
||||||
|
|
||||||
|
\caption{my fig}
|
||||||
|
\label{fig:main}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\subsection{Range Measurements in NLOS Scenario}
|
||||||
|
Während der posionierung ist an gewissen stellen eine systematische abweichung zum gt aufgefallen dies trat immer an zwei stellen auf, daraus folgender die hypthese das es irgendwie an dieser gegebenheit liegen muss. als folge daraus ist dann eben entstanden das wir die brandschutztüren gesehen haben und dann eine experiment aufgebaut haben um die hypthese zu messen, inwiefern sich die türen oder besser gesagt wie sich unterschiedliche wandmateriellien, insbesondere wenn diese so extrem wie hier sind, auf die FTM Messungen auswirken.
|
||||||
|
|
||||||
|
rssi grafik lassen wir weg (bst2rssi.png) und schreiben das nur im text. müssen ja nur den sprung von 7 auf 8 beschreiben. interessanter sind die FTM Plots mit der Streuung (bst2ftm.png)
|
||||||
|
|
||||||
|
|
||||||
\begin{figure}[ht]
|
\begin{figure}[ht]
|
||||||
\begin{minipage}[t]{0.48\textwidth}
|
|
||||||
|
\begin{minipage}{.5\textwidth}
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=1\textwidth]{DistMeasMean.png}
|
\subfloat[]{\label{main:a}\includegraphics[width=\textwidth]{VersuchsaufbauBST1.png}}
|
||||||
\caption{Mean distance per WiFi card}
|
\end{minipage}%
|
||||||
\end{minipage}
|
\begin{minipage}{.5\textwidth}
|
||||||
\begin{minipage}[t]{0.48\textwidth}
|
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=1\textwidth]{DistMeasMeanPerPixel.png}
|
\subfloat[]{\label{main:b}\includegraphics[width=0.8\textwidth]{VersuchsaufbauBST2.png}}
|
||||||
\caption{Mean distance per Pixel}
|
\end{minipage}\par\medskip
|
||||||
\end{minipage}
|
|
||||||
\begin{minipage}[t]{1.0\textwidth}
|
|
||||||
\centering
|
\centering
|
||||||
\includegraphics[width=1\textwidth]{DistMeasCDF.png}
|
\subfloat[CDF of error]{\label{main:c}\includegraphics[width=\textwidth]{bst1ftm.png}}
|
||||||
\caption{Dist. Meas CDF}
|
\par\medskip
|
||||||
\end{minipage}
|
\centering
|
||||||
|
\subfloat[CDF of error]{\label{main:c}\includegraphics[width=\textwidth]{bst2ftm.png}}
|
||||||
|
|
||||||
|
\caption{die einzelnen aufbauten können wir in die grafiken der ergebnisse embedden rechts oben ins eck}
|
||||||
|
\label{fig:main}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
\subsection{Positioning Environment}
|
||||||
\subsection{Localization performance}
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Location error per method (multilateration, prob, particle filter)
|
\item Beschreibe Gebäude - inkl HLS Räume!
|
||||||
\item Wie gut geht der PF? Parameter und Szenarien
|
\item beschreibe ground truth pfade
|
||||||
\item RSSI vs FTM; wo ist FTM besser wo schlechter?; Verhält es sich ähnlich?
|
\item access point positionen mit DOP analyse
|
||||||
|
\item wie sind wir gelaufen / testbedingungen... wie wurde GT gemessen usw. app etc pp.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsection{Results for Multilateration}
|
\subsection{Results for Multilateration}
|
||||||
zunächst wird das einfachste und nahliegendste verfahren untersucht um die performance von ftm und rssi gegenüberzustellen.
|
zunächst wird das einfachste und nahliegendste verfahren untersucht um die performance von ftm und rssi gegenüberzustellen.
|
||||||
|
|
||||||
|
|
||||||
|
Figure 3 rote Bereiche - Heizung Lüftung Sanitär (HLS) Räume schirmen Radio Signale komplett ab! Wenn man dahinter steht, bekommt man gar nichts mehr vom AP mit. Wenn man sich nun die AP positionen ansieht, welche wir gewählt haben, fällt auf das wir Idioten sind. Anhand eine Triangulation Loc + Fehler Plots erklären.
|
||||||
|
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Parameter einführen und erklären
|
\item Parameter einführen und erklären
|
||||||
\item Unterschied FTM und RSSI bei diesem Verfahren
|
\item Unterschied FTM und RSSI bei diesem Verfahren
|
||||||
\item Positioning Error
|
\item Positioning Error
|
||||||
\item Wie sieht der geschätzte Pfad aus
|
\item Wie sieht der geschätzte Pfad aus
|
||||||
\item FTM ist nicht wie erwartet mega viel besser als RSSI. die simple literation glättet einfach gar nichts, weswegen... (hier begründung einfügen)
|
\item FTM ist nicht wie erwartet mega viel besser als RSSI. die simple literation glättet einfach gar nichts, weswegen... (hier begründung einfügen)
|
||||||
|
\item DOP Grafik -> später vom particel filter referenzieren.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
wir bekommen hier also das gefühl, das ftm irgendwie besser sein muss, aber können es noch nicht wirklich nutzen. weshalb nun der probabilistische approach angesehen wird.
|
wir bekommen hier also das gefühl, das ftm irgendwie besser sein muss, aber können es noch nicht wirklich nutzen. weshalb nun der probabilistische approach angesehen wird.
|
||||||
|
|||||||
Reference in New Issue
Block a user