-
Notifications
You must be signed in to change notification settings - Fork 0
/
final.tex
514 lines (375 loc) · 30.5 KB
/
final.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
\documentclass{article}
\usepackage[german]{babel}
\usepackage[pdftex]{graphicx}
\usepackage{natbib}
\usepackage{url}
\usepackage{listings}
\usepackage{appendix}
\usepackage{subfig}
\usepackage{comment}
\textwidth 5.0in
\DeclareMathSizes{12}{20}{14}{10}
\title{Abschlussaufgabe V - Partikelfilter in ARNL}
\author{Nils Petersohn}
\date{3. Feb. 2010}
\begin{document}
\maketitle
%\begin{abstract}
%\end{abstract}
\tableofcontents
\listoftables
\section{Aufgabenstellung}
Es soll die Monte-Carlo-Lokalisierung in Arnl untersucht werden. Durch Experimente und Recherche soll der genaue Ablauf des Partikelfilters auch als MCL(Monte-Carlo-Lokalisierung) und die Wirkung der Parameter dargestellt werden. Ausserdem soll gekl\"art werden wie die Lokalisierung in eigenen Programmen genutzt werden kann.
\section{Einf\"uhrung}\label{einfuehrung}
\subsection{ARIA}
Die C++ Bibliothek ARIA ist eine API f\"ur alle MobileRobots/ActivMedia Plattformen. Mit der Hilfe von ARIA kann u.a. Geschwindigkeit, Richtung oder relative Richtung entweder durch einfache oder komplexe Anweisungen kontrolliert werden. Sie umfasst viele Komponenten wie z.B. ARNL in Abbildung \ref{ariaarch}
\begin{figure}
\centering
\fbox{
\includegraphics{img/aria-arch.jpg}
}
\caption{ARIA Architektur}
\label{ariaarch}
\end{figure}
\subsection{ARNL}
ARNL(Advanced Robotics Navigation and Localization System) ist eine Teilbibliothek in ARIA um Navigations und Lokalisationsschnittstellen zur Verf\"ugung zu stellen. Die Lokalisationskomponente bietet eine Schnittstelle um den angeschlossenen Roboter zu lokalisieren. Sensor und Odometriedaten des Roboters werden in Verbindung mit einer vorhanden Umgebungskarte verwendet um die wahrscheinlichste Position des Roboters in der Karte zu bestimmen. \cite{arnl}
Die ARNL Bibliothek beinhaltet Lokalisierung mit Sonar (SonArnl), Laserscanner (Arnl) und GPS (Mogs).
\subsection{ArNetworking}
ArNetworking ist eine API in ARIA um eine client-server Architektur zwischen dem Roboter(Server) und dem entfernten Rechner(Client) \"uber das Netzwerk aufzubauen. Der Client berechnet Bewegungsbefehle und sendet Anfragen an den Server welche dann vom Roboter ausgef\"uhrt werden. Der Roboter hingegen sendet u.a. seine Odometriedaten.
\subsection{MobileEyes}
MobileEyes kann sich mit ARIA, ArNetworking und ARNL Server verbinden und dessen Umgebung also interne Karte anzeigen.
Unter anderem kann man mit MobileEyes Bewegungskomandos an den Roboter schicken.\cite{whitebrook1}
\section{Theoretischer Hintergrund}
Das Lokalisierungsmodul von ARNL benutzt die Monte-Carlo-Lokalisierung. Diese basiert auf der Markov-Annahme welche wiederum auf die Bayes-Regel fundiert.
\subsection{Probabilistische Lokalisierung}
Um die Position eines Roboters zu berechnen, gibt es verschiedene Ans\"atze. Sie beruhen alle auf der Fusionierung von Daten, die durch die Odometrie und weitere Sensoren des Roboters geliefert werden. Gebr\"auchliche Sensoren f\"ur autonome Roboter sind Ultraschallsensoren oder Laserscanner.
Diese Ans\"atze verwenden Methoden der Wahrscheinlichkeitsrechnung zur Bestimmung einer Wahrscheinlichkeitsverteilung \"uber alle m\"oglichen Positionen, an denen der Roboter sich befinden kann. Dieser Ansatz ist mittels der Monte-Carlo-Method in ARNL umgesetzt.
Der Probanbilistische Ansatz vereint relative und absolute Postionierung als Bewegungsmodellierung und Wahrnehmung der Umwelt.
\subsection{Markov-Lokalisierung}
Das Ziel der Markov Lokalisierung ist es, Wahrscheinlichkeiten f\"ur das Eintreten zuk\"unftiger Ereignisse anzugeben.
Die aktuelle Position h\"angt nur von der vorhergehenden Position und dem
Bewegungsbefehl ab und die aktuelle Beobachtung h\"angt nur von der aktuellen Position ab.
Es ist ein zellbasiertes Verfahren bei dem jeder Zelle Wahrescheinlichkeitswert oder Belief
zugeordnet wird. \cite{ZweigleStuttgart}
Jede Bewegung des Roboters verschiebt die Wahrscheinlichkeiten und streut sie und jede Messung von Merkmalen der Umgebung \"andert die Wahrscheinlichkeiten.
Wenn die Position unbekann ist erfolgt eine Gleichverteilung.
Das Problem dabei ist, dass alle Werte(Zellen) nach jeder Bewegung neu berechnet werden muessen Siehe Abbildung \ref{MarkovLokalisierung}. Es gibt nur eine m\"ogliche Position des Roboters und eine unsicherheit wird dabei nicht repr\"asentiert.
\begin{figure}
\centering
\fbox{
\includegraphics[scale=0.5]{img/markovBsp.png}
}
\caption{Markov-Lokalisierung \cite{ZweigleStuttgart}}
\label{MarkovLokalisierung}
\end{figure}
\subsection{Partikelfilter}
Bei der L\"osung mittels Partikel-Filern wird die Pose des Roboters \"uber eine Partikelwolke repr\"asentiert.\cite{WIKIpartikelfilter} Jeder Partikel stellt eine m\"ogliche Pose des Roboters dar. Über den Partikelfilter wird jeder Partikel, also jede dadurch repr\"asentierte Pose, auf ihre Plausibilit\"at \"uberpr\"uft. Die Wahrscheinlichkeit plausibler Partikel wird heraufgesetzt, die Wahrscheinlichkeit wenig plausibler Partikel wird reduziert. Fallen Partikel unter einen bestimmten Wahrscheinlichkeits-Schwellwert, werden sie verworfen.
\subsection{Monte-Carlo-Lokalisierung}
Der Vorteil des MCL - Ansatzes ist, dass zur Laufzeit die Gr\"osse der
Stichprobenmenge variabel sein kann. Je unsicherer die Roboterposition ist,
desto gr\"oßer f\"allt die Stichprobenmenge aus. In Analogie zur
„Gitterbasierenden“ (grid-based) Methode, m\"usste bei einer hohen Sicherheit
(belief) nur ein Teil des Zustandsraumes aktualisiert werden.\cite{delipetkos1}
Der Grundgedanke bei der Monte Carlo Lokalisierung ist, das „Belief“
(Vertrauen) mittels einer Stichprobenmenge, welche auch als „samples“ oder
auch „particles“ bezeichnet wird, darzustellen. MCL ist ein iterativer Bayes´scher
Filter, welcher als ein Sch\"atzer f\"ur die zuk\"unftige Wahrscheinlichkeitsverteilung
der Roboterposition verwendet wird.
Es werden mehrere Schritte immerzu durchlaufen:
\begin{itemize}
\item Prognose-Schritt: jedes Sample erzeugt ein neues Sample entsprechend
unscharfem Bewegungsmodell. Resultat ist eine neue Samplemenge bel`
\item Korrektur-Schritt: Jedes Partikel aus bel` erh\"alt ein Gewicht nach dem Sensormodell (wie eine Fitness, Übereinstimmung mit Wahrnehmung)
\item neue Samplemenge bel` wird durch zuf\"allige Selektion anhand der Fitness aus
bel‘ erzeugt.
\end{itemize}
In Abbildung \ref{ablaufMCL} ist ein Zustandsdiagramm der Berechnungsschritte des Partikelfilters. Diese Schritte sind in ARNL umgesetzt.
Es erfolgt also eine st\"andige Evolution einer Partikelwolke anhand von Bewegungsbefehlen und
Sensorwahrnehmung.
Gegen\"uber der Markov Lokalisierung erlaubt die Monte-Carlo-Lokalisierung eine elegante Fusion der Daten verschiedener Sensorik, sie ist skalierbar (Partikelanzahl) und effizient, bspw. dynamische Anpassung der Partikelanzahl (adaptiv).
\begin{figure}
\centering
\fbox{
\includegraphics[scale=0.55]{img/ablaufMCL.jpg}
}
\caption{Die Initialisierung (0.) erfolgte mit einer Gleichverteilung. Fuer die Propagation des Zustandes (1.) wurde das lineare Modell der Steuerungssoftware uebernommen \cite{Plagge}. Die Berechnung der a-posteriori-Wahrscheinlichkeit (2.) positionsabh\"angigen Parametern durchgef\"uhrt.}
\label{ablaufMCL}
\end{figure}
\newpage
\section{Experimente}
In den folgenden Experimenten werden die zwei Hauptprobleme der Lokalisierung und deren Umsetzung in ARNL untersucht: global localization and position tracking. \cite{fox1999}
\subsection{Positionsverfolgung (Tracking)}\label{tracking}
In einem Beispielprogramm wird ARNL und ArNetworking verwendet um einen Server zu erstellen. Clients wie MobileEyes k\"onnen sich mit diesem Server verbinden. MobileEyes sendet anfragen an den Server um den Roboter zu steuern, die aktuelle Karte abzufragen, Lokalisierungsparameter zu setzen, Sensordaten abzufragen und den Roboter manuell wieder neu zu lokalisieren.
Die automatische lokalisierung des Roboters erfolgt durch eine Instanz von ArLocalizationTask welcher also Teil des Serverprograms ist. Wie in Abschnitt \ref{eigenes} deutlich gemacht wird, ist das Monte-Carlo Verfahren in der Klasse ArLocalizationTask implementiert.
Durch die Verwendung von MobileEyes kann eine Anpassung der Lokalisierungsparameter Einfluss auf den Partikelfilter genommen werden.
Die Einstellungen befinden sich in MobileEyes unter Lokalisierungseinstellungen. Eine liste und deren Beschreibung befinden sich in Appendix I.
Der Monte Carlo Filter verl\"asst sich unter anderem auf die Odometriedaten die von den R\"adern kommen. Dabei kann bestimmt werden wie weit der Roboter gefahren ist, wenn sich die R\"ader unterschiedlich bewegen oder wie weit sich der Roboter um seine Achse gedreht hat. Wenn man die genaue Startposition des Roboters kennt und auch die Odometriedaten der R\"ader, so kann man theoretisch die genaue Position des Roboters zum Zeitpunk t bestimmen. In der Praxis ist dies aber nur schwer zu realisieren. Die Unsicherheit
w\"achst also mit zunehmender Entfernung vom Startpunkt. generell gibt es drei Odometrie Fehlerarten:
\begin{itemize}
\item Entfernungsfehler: Fehler beim zur\"ucklegen einer geraden Strecke
\item Drehfehler: Fehler beim Drehen des Roboters
\item Driftfehler: Orientierungsfehler beim Zur\"ucklegen einer geraden Strecke
\end{itemize}
Das Bewegungsmodell in ARIA/ARNL bildet genau diese Fehler ab.
Um die Bewegungsunsch\"arfe zu testen m\"ussen verschiedene Initialalparameter verwendet werden:
\begin{itemize}
\item PassThreshold muss auf 0 gesetzt werden um zu vermeiden, dass der Roboter in den Lost Modus geht
\item Um die Partikelwolke besser sichtbar zu machen wird der Wert NumSamples auf 5000 gesetzt
\item PeturbX, PeturbY, PeturbTh sind Paramter um neue Samples nach dem resampling prozess hizuzuf\"ugen. Diese Streuwerte werden auf null gesetzt um den Rechenanspruch zu verrringern.
\item Per default wird die Neuberechnung der Position erst nach einer Bewegung von 20 cm gemacht. Eine Neuberechnung soll erst nach 2m stattfinden. Somit wird der Paramter Triggerdistance auf 2000 gesetzt.
\item Die Neuberechnung nach einer Drehnung soll nicht erst ab 5 Grad erfolgen sondern schon ab 0 Grad. Der Paramter \textbf{TriggerAngle} wird also auf 0 gesetzt.
\end{itemize}
Um den Entfernungsfehlerverh\"altnissparameter zu testen wird der Drehfehlerparameter und der Driftfehler zuerst ausgeschaltet. Um den Parameter zu untersuchen wird er auf 0.5 gesetzt. Dies soll bewirken, dass die Partikelwolke sich um die H\"alfte der zur\"uckgelegten Strecke ausdehnt. Der Roboter wird zuerst an einem Punkt lokalisiert. Mit einem Bewegungsbefehl wird der Roboter nun 1 Meter gerade aus bewegt. Wie angenommen hat die Partikelwolke nun eine L\"ange von 50 cm.
\begin{figure}
\centering
\fbox{
\includegraphics[scale=0.55]{img/KMmPerMmTest.jpg}
}
\caption{KMmPerMm = 0.5}
\label{KMmPerMmTest}
\end{figure}
Dieser Parameter kann dazu verwendet werden um die Lokalisation in bezug auf die Oberfl\"achenbeschaffenheit anzupassen. In einem h\"ugligem Gel\"ande kann der Roboter eine Steigung hochfahren sich aber im eigentlichen Sinne nicht so schnell weiterbewegen wie die Odometriedaten es \"ubermitteln. Desshalb muss dieser Parameter angemessen erh\"oht werden.
\\ \\
Mit dem Drehfehlerparameter $KDegPerDeg$ kann nach der Dokumentation in Anhang \ref{KDegPerDegDoc} die Unsicherheit der Drehung beeinflusst werden. Wenn der Roboter sich z.B. auf einem leicht unebenen Untergrund dreht ist die Drehung nicht eindeutig an den Odometriedaten nachvollziehbar.
Um diesen zu testen wird der Parameter zuerst auf 1 gesetzt und Entfernungsfehlerverh\"altnissparameter wieder auf null.
In Abbildung \ref{KDegPerDegTest100} wurde der Roboter um 360 Grad gedreht und dann 1cm gerade aus gefahren. Der Parameter wurde in Abbildung \ref{KDegPerDegTest050} und \ref{KDegPerDegTest025} stufenweise halbiert um den Winkel der Partikelstreuung zu erkennen. Dieser Entspricht demnach dem Verh\"altnis zwischen der Drehung in Grad und der KDegPerDeg Einstellung. Bei einer Drehnung von 360 Grad und einer Einstellung von 1 hat der Partikelfilter eine breite von auch ca. 360$^\circ$ bei 0.5 von ca. 180$^\circ$ und bei 0.25 von ca. 90$^\circ$. Wenn also der Untergrund h\"uglig ist, sollte die Unsicherheit also der KDegPerDeg Paramter h\"oher eingestellt sein.
\begin{figure}
\centering
\subfloat[KDegPerDeg = 1]{\label{KDegPerDegTest100}\includegraphics[width=0.31\textwidth]{img/KDegPerDegTest100.jpg}}
\ \subfloat[KDegPerDeg = 0.5]{\label{KDegPerDegTest050}\includegraphics[width=0.3\textwidth]{img/KDegPerDegTest050.jpg}}
\ \subfloat[KDegPerDeg = 0.25]{\label{KDegPerDegTest025}\includegraphics[width=0.29\textwidth]{img/KDegPerDegTest025.jpg}}
\caption{KDegPerDeg Parameter Test}
\label{KDegPerDegTestFigure}
\end{figure}
\newpage
Der Parameter $KDegPerMm$ betrifft die Unsicherheit der Odometriedaten der R\"ader. Bei einem differenziellem Antrieb k\"onnen leichte Unterschiede auftreten, wenn der Roboter sich gerade aus bewegt. Wenn der Roboter sich z.B. auf einem unebenen Boden fortbewegt, kann er nach links und rechts abdriften. Die Odometriedaten der R\"ader geben aber ein stetiges geradeausfahren zur\"uck.
\begin{figure}
\centering
\subfloat[KDegPerMm = 0.02]{\label{KDegPerMm002}\includegraphics[width=0.3\textwidth]{img/KDegPerMm002.jpg}}
\ \subfloat[KDegPerMm = 0.01]{\label{KDegPerMm001}\includegraphics[width=0.45\textwidth]{img/KDegPerMm001.jpg}}
\ \subfloat[KDegPerMm = 0.005]{\label{KDegPerMm0005}\includegraphics[width=0.55\textwidth]{img/KDegPerMm0005.jpg}}
\caption{KDegPerMm Parameter Test}
\label{KDegPerMmTestFigure}
\end{figure}
In dem Experiment in Abbildung \ref{KDegPerMmTestFigure} wird der Parameter $KDegPerMm$ zuerst auf $0.02$ (Abbildung \ref{KDegPerMm002}) dann auf $0.01$ (Abbildung \ref{KDegPerMm001}) und dann auf $0.005$ (Abbildung \ref{KDegPerMm0005}) gestellt. Der Roboter wird lokalisiert und dann 1000mm gerade aus gefahren. Um die Korrektheit der Dokumentation zu ueberpruefen wird
durch eine einfache Winkelfunktionsrechnung in Abbildung \ref{Winkelfunktionen} der Winkel errechnet.
Zuerst wird der Mittelwert der Abweichung durch das arithmetische Mittel bestimmt siehe Formel \ref{getY}
\begin{figure}
\centering
\includegraphics[width=0.5\textwidth]{img/Winkelfunktionen_einheitskreis.jpg}
\caption{Winkelfunktionen im Einheitskreis }\url{http://www.ullala.at/experiments/movement/images/circ_1.gif}
\label{Winkelfunktionen}
\end{figure}
\begin{figure}
\begin{equation}\label{getY}
\bar{y}=\frac{790+660}{2}=725mm
\end{equation}
\begin{equation}\label{getX}
\theta_1=\sin^{-1} \left( \frac{y}{r} \right) \cdot 2
\end{equation}
\begin{equation}\label{theta1}
\theta_1=\sin^{-1}\left(\frac{725}{1000} \right) \cdot 2 \approx 93^\circ
\end{equation}
\caption{Berechnung f\"ur Abbildung \ref{KDegPerMm002}}
\label{KDegPerMm002Calc}
\end{figure}
\begin{figure}
\begin{equation}\label{get001Y}
\bar{y}=\frac{430+320}{2}=375mm
\end{equation}
\begin{equation}\label{get001X}
\theta_2=\sin^{-1} \left( \frac{y}{r} \right) \cdot 2
\end{equation}
\begin{equation}\label{theta2}
\theta_2=\sin^{-1} \left( \frac{375}{1000} \right) \cdot 2 \approx 44^\circ
\end{equation}
\caption{Berechnung f\"ur Abbildung \ref{KDegPerMm001}}
\label{KDegPerMm001Calc}
\end{figure}
\begin{figure}
\begin{equation}\label{get0005Y}
\bar{y}=\frac{190+200}{2}=195mm
\end{equation}
\begin{equation}\label{get0005X}
\theta_3=\sin^{-1} \left( \frac{y}{r} \right) \cdot 2
\end{equation}
\begin{equation}\label{theta3}
\theta_3=\sin^{-1} \left( \frac{195}{1000} \right) \cdot 2 \approx 23^\circ
\end{equation}
\caption{Berechnung f\"ur Abbildung \ref{KDegPerMm0005}}
\label{KDegPerMm0005Calc}
\end{figure}
Um die Rechnungen zu best\"atigen wird der Wert ausgerechnet welcher zu einem Fehlerwinkel von $180^\circ$ n\"otig ist und bilden dann davon das Arithmetische Mittel. Wenn dieses nicht sonderlich abweicht waren die Rechnungen richtig. \\ Dies ist der Fall in Abbildung \ref{testCalacAll} denn eine maximale Abweichung von weniger als 0.012 und eine Minimale Abweichung von 0.0009 ist anehmbar.
\begin{figure}
\begin{equation}\label{get0005Y}
\frac{\theta}{KDegPerMm}=\frac{180^\circ}{x}
\end{equation}
\begin{equation}\label{get0005Y}
{x_0}=\frac{180^\circ \cdot 0.005}{23}=0.0391
\end{equation}
\begin{equation}\label{get0005Y}
{x_1}=\frac{180^\circ \cdot 0.01}{44}=0.0409
\end{equation}
\begin{equation}\label{get0005Y}
{x_2}=\frac{180^\circ \cdot 0.02}{93}=0.0387
\end{equation}
\begin{equation}\label{get0005Y}
\bar{x}=\frac{x_0+x_1+x_2}{3} \approx 0.04
\end{equation}
\caption{Test der Berechnungen in Abbildung \ref{theta1},\ref{theta2},\ref{theta3}}
\label{testCalacAll}
\end{figure}
Die Best\"atigung liefert eine Einstellung von KDegPerMm = 0.04 welche eine $180^\circ$ ausgedehnte Partikelwolke aufspannt siehe Abbildung \ref{KDegPerMm004Test}.
\begin{figure}
\centering
\includegraphics[width=0.3\textwidth]{img/KDegPerMm004.jpg}
\caption{KDegPerMm = 0.04}
\label{KDegPerMm004Test}
\end{figure}
Somit l\"asst sich der Parameter nachvollziehen. Wenn man einen Winkel $\alpha$ erreichen will muss man Rechnen: $KDegPerMm = \alpha \cdot 2.22 \cdot 10^{-4}$
Diese Rechnung ist nicht genau und wurde mit Rundungswerten ermittelt.
\newpage
\subsection{Globale Positionierung}\label{globalPos}
Wenn die Initiale Position des Roboters nicht bekannt ist, dann werden Samples ausgestreut. Die Menge der ausgestreuten Samples und deren Verteilung wird u.a. durch die Parameter NumSamplesAtInit, StdX, StdY und StdTh eingestellt.
Um diese Parameter zu testen werden Extremwerte verwendet. Die Parametereinstellung in Abbildung \ref{stdx4000stdy0stdth1Test},\ref{stdx2000stdy0stdth1Test},\ref{stdx1000stdy0stdth1Test} soll verdeutlichen welche Auswirkungen eine Eindimensionale Ausbreitung auf der X Achse f\"ur Konsequenzen mit sich ziehen.
Die Streuung der Samples bei einem Wert von StdX = 4000mm ist nicht wie erwartet 4000mm in Richtung der X Achse sondern 2400mm wie in Abbildung \ref{stdx4000stdy0stdth1Test}. Der eigentliche Wirkung von StdX ist also $\approx \left(StdX/2\right)+(\frac{StdX}{10})$ mm. Und nicht wie angenommen $StdX$ mm. In Abbildung \ref{stdx2000stdy0stdth1Test},\ref{stdx1000stdy0stdth1Test} wird dies best\"atigt.
Eine grosse Ausdehnung bei der initialen Lokalisierung der Partikelwolke erfolgt durch die Einstellungen wie in Abbildung \ref{stdx4000stdy4000stdth30}
\begin{figure}
\centering
\includegraphics[width=1\textwidth]{img/stdx4000stdy0stdth1.png}
\caption{\\ NumSamplesAtInit = 20000, \\ StdX = 4000,\\ StdY = 0,\\ StdTh = 1}
\label{stdx4000stdy0stdth1Test}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=0.8\textwidth]{img/stdx2000stdy0stdth1.png}
\caption{\\ NumSamplesAtInit = 20000, \\ StdX = 2000,\\ StdY = 0,\\ StdTh = 1}
\label{stdx2000stdy0stdth1Test}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=0.6\textwidth]{img/stdx1000stdy0stdth1.png}
\caption{\\ NumSamplesAtInit = 20000, \\ StdX = 1000,\\ StdY = 0,\\ StdTh = 1}
\label{stdx1000stdy0stdth1Test}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=0.6\textwidth]{img/stdx4000stdy4000stdth30.png}
\caption{\\ NumSamplesAtInit = 20000, \\ StdX = 4000,\\ StdY = 4000,\\ StdTh = 30}
\label{stdx4000stdy4000stdth30}
\end{figure}
\newpage
\newpage
\section{Nutzung der Lokalisierung in eigenen Programmen}\label{eigenes}
Die Klasse ArLocalizationTask kann Daten vom Laserscanner (ArSick) auswerten um die Lokalisierung durchzuf\"uhren. Abgesehen vom ArLocalizationTask gibt es noch andere Klassen f\"ur die Lokalisierung. Die Elternklasse ist ArBaseLocalizationTask in der BaseARNL Bibliothek. \cite{arnl}
Um den ArLocalizationTask zu instanzieren m\"ussen Pointer von Instanzen der Typen ArRobot, ArRangeDevice und ArMapInterface (ArMap) \"urbgeben werden. Eine Karte kann durch senorDaten erzeugt werden aber auch manuell durch das Program Mapper3. Die Instanz von ArLocalizationTask startet einen eigenen asynchronen Hintergrund-thread um anhand des Lasersensors wiederholend den Roboter zu lokalisieren. Die Position wird anhand der Berechnungen im ArLocalizationTask neu gesetzt.
\lstset{language=C++}
\begin{lstlisting}
#include "ArLocalizationTask.h"
...
ArRobot robot;
...
ArLaser *firstLaser = robot.findLaser(1);
...
ArMap map(fileDir);
...
ArLocalizationTask locTask(&robot, firstLaser, &map);
\end{lstlisting}
Um eine initiale Lokalierung durchzuf\"uhren muss die Methode localizeRobotAtHomeBlocking ohne Parameter aufgerufen werden.
Eine Instanz von ArLocalizationManager erlaubt Ausgabedaten von verschiedenen Lokalisationsthreads zu vereinigen. Durch die Methode addLocalizationTask kann eine neue Instanz von ArBaseLocalizationTask wie z.B. ArSonarLocalizationTask oder ArLocalizationTask hinzugef\"ugt werden. Durch die Methode fuseTwoDistributions kann man die Daten fusionieren.
\lstset{language=C++}
\begin{lstlisting}
ArLocalizationManager locManager(&robot, &arMap);
ArLocalizationTask locTask (&robot, &sick, &arMap);
locManager.addLocalizationTask(&locTask);
\end{lstlisting}
Die KonfigurationsDatei arnl.p ist f\"ur eine erfolgreiche Lokalisation notwendig. Darin befinden sich u.a. Einstellungen f\"ur die Monte-Carlo-Lokalisation.
Diese Konfigurationsdatei wird durch einen Parser ausgelesen:
\lstset{language=C++}
\begin{lstlisting}
ArArgumentParser parser(&argc, argv);
parser.loadDefaultArguments();
...
ArServerHandlerConfig handlerConfig (
&server, Aria::getConfig (),
Arnl::getTypicalDefaultParamFileName (),
Aria::getDirectory ()
);
// Read in parameter files.
Aria::getConfig()->useArgumentParser(&parser);
Aria::getConfig()->parseFile (Arnl::getTypicalParamFileName() )
\end{lstlisting}
\section{Zusammenfassung}
Die Experimente haben gezeigt, dass der Partikelfilter gut in ARNL umgesetzt ist. Viele Einstellungsm\"oglichkeiten bei MobileEyes machen eine gute Lokalisierung m\"oglich. Durch die Verwendung der Monte-Carlo-Lokalisierung sinkt die Hardwareanforderung drastisch und es werden schnelle und gute Ergebnisse erziehlt. Eine genaue Analyse der Funktion ist nur duch reverse Engeneering m\"oglich, denn wichtige Klassen stehen nicht unter der Open Source Lizenz. Auch ist die Dokumentation unzureichend und das verwendete Englisch ist nicht nativ was den Analyseprozess zus\"atzlich erschwert hat.
Dennoch kann mit dem umgesetzten Lokalisationsmodul in ARIA gut gearbeitet werden.
In ARIA sind die Methodennamen sind verst\"andlich und aussagekr\"aftig. Daher ist eine intuitive Benutzung gegeben.
\newpage
\appendix
\section{Appendix I}
\paragraph{Parametername Standartwert Minimumwert, Erkl\"arung}
\paragraph{Map} Karte der Umgebung um zu Navigieren.
\paragraph{NumSamples} 2000 minumum 0, Die (maximale) Anzahl der Partikel wird hier festgelegt. Je h\"oher dieser Wert ist desto mehr Rechenleistung wird ben\"otigt. In dieser Arbeit wurde in einem Bereich von 5000-20000 Partikel gearbeitet.
\paragraph{NumSamplesAtInit} Wenn der Roboter in der Karte neu initialisiert wird, dann bedeutet ein Wert von 0, dass $NumSamples$ Partikel benutzt werden. Bei den Experimenten wurde ein Wert von ca. 20000 eingestellt um die Initiale Partikelanzahl vorzugeben. Bei der Initialisierung wird somit eine Gleichverteilung von 20000 Samples ausgef\"uhrt
\paragraph{GridRes} 100 minimum 10, Die Aufl\"osung der Gitter in MobileEyes. Der Standartwert wurde bei den Experimenten verwendet.
\paragraph{PassThreshold} 0.2 range [0, 1],
Wenn die LLS unter diesen Wert f\"allt, dann befindet sich der Roboter im `Lost' Zustand. Bei den meisten Experimenten wurde dies mit einem Wert von 0 vermieden.
LLS = Laser Localization Score = das aktuelle maximale Gewicht, d.h. wie gut stimmt das beste Sample mit der Sensorwahrnehmung \"uberein, Maximum 1.0
\paragraph{KMmPerMm} 0.05 minimum 0, Entfernungsfehler in mm per mm. Wurde in Abschnitt \ref{tracking} erkl\"art.
\paragraph{KDegPerDeg}\label{KDegPerDegDoc} 0.05 minimum 0, Drehfehler in Grad per DrehungsGrad.Wurde in Abschnitt \ref{tracking} erkl\"art.
\paragraph{KDegPerMm} 0.0025 minimum 0, Driftfehler in Grad per mm.
Wurde in Abschnitt \ref{tracking} erkl\"art.
\paragraph{TriggerDistance} 200 minimum 0, Lokalisierung wird erst nach einer gefahrenen Strecke von $TriggerDistance$ durchgefuehrt. Der Standartwert wurde bei den Experimenten verwendet.
\paragraph{TriggerAngle} 5 minimum 0, Lokalisierung wird erst nach einer Drehung von $TriggerAngle$ durchgefuehrt. Gemessen in Grad.
\paragraph{TriggerTimeEnabled} false
Die Lokalisierung soll nicht nach einer abgefahrenen Strecke oder einer bestimmten Drehung erfolgen sondern nach einem Zeitintervall $TriggerTime$
Diese Einstellung wurde auch getestet. Jedoch wurde der Roboter immer wieder in den `Lost' Zustand gebracht und neu Lokalisiert. Daher war diese Einstellung war f\"ur die Experimente nicht verwendbar.
\paragraph{TriggerTime} 10000 minimum 1500, Zeitinterval in msec f\"ur den Lokalisierungstrigger.
\paragraph{IdleTimeTriggerX} 200 minimum 0, Streuung der Samples auf der X Achse in mm wenn der Lokalisierungstrigger eingeschaltet ist.
\paragraph{IdleTimeTriggerY} 200 minimum 0, Streuung der Samples auf der Y Achse in mm wenn der Lokalisierungstrigger eingeschaltet ist.
\paragraph{IdleTimeTriggerTh} 15 minimum 0, Ausrichtung der Samples ($\theta$) in Grad.
\paragraph{RecoverOnFail} false Bei einer positiven Einstellung (true) wird der Roboter ,wenn er in den `Lost' Zustand uebergeht durch eine statische Reinitialisierung unter Verwendung der letzten bekannten Position neu lokalisiert. Bei den Experimenten war diese Einstellung jederzeit negativ eingestellt.
\paragraph{FailedX} 300 minimum 0, Streuung der Samples auf der X Achse bei einer statische Reinitialisierung durch den `Lost' Zustand in mm.
\paragraph{FailedY} 300 minimum 0, Streuung der Samples auf der Y Achse bei einer statische Reinitialisierung durch den `Lost' Zustand in mm.
\paragraph{FailedTh} 45 minimum 0, Streuung der Samples in einem bestimmten Bereich bei einer statische Reinitialisierung durch den `Lost' Zustand in Grad.
\paragraph{PeturbX}\label{PeturbX} 10 minimum 0, Nachdem die Sensorwerte normalisiert wurden und der Resamplingprozess stattgefunden hat, kann durch diese Einstellung eine gr\"ossere Streuung auf der X Achse durch neue Samples vorgenommen werden. Gemessen in mm.
\paragraph{PeturbY}\label{PeturbY} 10 minimum 0, Nachdem die Sensorwerte normalisiert wurden und der Resamplingprozess stattgefunden hat, kann durch diese Einstellung eine gr\"ossere Streuung auf der Y Achse durch neue Samples vorgenommen werden. Gemessen in mm.
\paragraph{PeturbTh}\label{PeturbTh} 1 minimum 0, Nachdem die Sensorwerte normalisiert wurden und der Resamplingprozess stattgefunden hat, kann durch diese Einstellung eine gr\"ossere Streuung in einem bestimmten Winkel vorgenommen werden.
\paragraph{PeakStdX,PeakStdY,PeakStdTh} 10 minimum 0, Eine weiter einstellung um die gr\"osse der Streuung (gr\"osse der Ellipse) zu beeinflussen
\paragraph{PeakFactor} 1e-06 range [0, 1],
Wenn manche Partikel eine Wahrscheinlichkeit ungleich null haben dann ist diese Einstellung der Schwellwert fuer eine valide Hypothese ansonsten ist die Hypothese nicht valide und wird verworfen. Der Schwellwert bezieht sich auf die maximale Wahrscheinlichkeit LLS
\paragraph{StdX} 400 minimum 0, Die gausssche Wahrscheinlichkeitsverteilung bei dem Beginn der Lokalisierung ($\sigma$) in Richtung der X-Achse. Diese Parameter wurde in Abschnitt \ref{globalPos} behandelt.
\paragraph{StdY} 400 minimum 0, Die gausssche Wahrscheinlichkeitsverteilung bei dem Beginn der Lokalisierung ($\sigma$) in Richtung der Y-Achse. Diese Parameter wurde in Abschnitt \ref{globalPos} behandelt.
\paragraph{StdTh} 30 minimum 0, Die gausssche Wahrscheinlichkeitsverteilung bei dem Beginn der Lokalisierung ($\sigma$) in Grad. Diese Parameter wurde in Abschnitt \ref{globalPos} behandelt..
\paragraph{SensorBelief} 0.9 range [0, 1], Die Laserdaten sind zu einem gerringem Mass nicht richtig. Mit diesem Parameter kann die Glaubw\"urdikeit der Laserdaten einstellen.
\paragraph{Kalman Filter}
Weitere Parameter betreffen den Kalman Filter welcher nicht Bestandteil dieser Arbeit ist.
\bibliographystyle{abbrv}
\bibliography{main}
\begin{thebibliography}{------}
\bibitem[Wiki-ARNL]{arnl} MobileRobots Inc, \emph{ARNL, SONARNL and MOGS}, wiki (9 September 2009), available at
\url{http://robots.mobilerobots.com/wiki/ARNL,_SONARNL_and_MOGS}.
\bibitem[Delipetkos1]{delipetkos1} Fraunhofer Gesellschaft AIS.ARC, Particle Filter
Ein probabilistischer Ansatz zur Lokalisierung mobiler Roboter available at S. 12
\url{http://www.ais.fraunhofer.de/~delipetk}
\bibitem[FOX1999]{fox1999} Monte Carlo Localization: Efficient Position Estimation for Mobile Robots. Dieter Fox,Wolfram Burgardy, Frank Dellaert, Sebastian Thrun School of Computer Science Carnegie Mellon University Pittsburgh, PA 1999
\bibitem[ARNL-Ref]{arnl-ref} MobileRobots Inc, \emph{ARNL-Reference}, (1.7.0) available at
\url{http://vigir.missouri.edu/~gdesouza/Research/MobileRobotics/Software/ARNL-SONARNL/Arnl-1.7.0+gcc41/docs/ARNL-Reference/index.html}.
\bibitem[whitebrook2010]{whitebrook1}Programming Mobile Robots with Aria and Player Dr. Amanda Whitbrook
University of Nottingham
School of Computer Science, Springer-Verlag London Limited 2010
\bibitem[Zweigle]{ZweigleStuttgart} Vorlesung 5
Lokalisierung und Mapping - Universit\"at Stuttgart
Institut f\"ur Parallele und Verteilte
Systeme (IPVS) \url{http://www.ipvs.uni-stuttgart.de/abteilungen/bv/lehre/lehrveranstaltungen/vorlesungen/SS09/Robotik%20II_termine/dateien/robotik_8_lokalisierung_2.pdf}
\bibitem[Borens 1996]{Borens1996} Borenstein, J., Everett, H.R., Feng, L., April 1996, Where am I? Sensors and Methods for Mobile Robot Positioning. Technical Report, The University of Michigan. Seite 131 Chapter 5: Dead-Reckoning
\bibitem[WIKI-Partikelfilter]{WIKIpartikelfilter} Lokalisierung (Robotik) Abschnitt Partikel-Filter. Datum 2.2.2010
\url{http://de.wikipedia.org/w/index.php?title=Lokalisierung_(Robotik)#Partikel-Filter}
\bibitem[Borens 1996]{Borens1996} Borenstein, J., Everett, H.R., Feng, L., April 1996, Where am I? Sensors and Methods for Mobile Robot Positioning. Technical Report, The University of Michigan. Seite 131 Chapter 5: Dead-Reckoning
\bibitem[Plagge]{Plagge} M. Plagge. Personal communication: Pioneer baseserver, 2000.
\bibitem[Neumann2002]{Neumann2002}
Kalman-Filter und Partikelfilter zur Selbstlokalisation – Ein Vergleich
Dirk Neumann, 2002
\url{http://www.allpsych.uni-giessen.de/dirk/projects/particle.pdf}
\end{thebibliography}
\listoffigures
\end{document}