Die Arbeit befasst sich mit der Konfiguration des Laserscanners, der Datenübertragung und der Datenverarbeitung, sowie mit der Visualisierung der Daten anhand zweier MFC-Anwendungen.
Inhaltsverzeichnis
Kurzfassung
Abbildungsverzeichnis
Listings
Abk Lirzungsverzeichnis
Vorwort
1 Aufgabenstellung
2 Umsetzung
2.1 Vorgangsweise
2.2 Konfiguration des Scanners
2.2.1 Konfigurieren der Schutz- und Warnfelder
2.3 Auslesen der Daten
2.3.1 Schnittstelle RS-422 und RS-232
2.3.2 Request Mode
2.3.3 Kontinuierliche Datenausgabe
2.4 Datenverarbeitung
2.4.1 Datenformat der Messdaten
2.4.2 Berechnungen
2.4.3 Speicherung der Daten
2.5 Visualisierung
2.5.1 MFC-Programmierung
2.5.2 Möglichkeiten der Visualisierung
2.5.3 Ausgabe der Daten am Bildschirm
2.6 Die MFC-Anwendungen
2.6.1 Anwendung für die kontinuierliche Datenausgabe
2.6.2 Die AICC-Status Anwendung
3 Ergebnisse und Zusammenfassung
Literatur- und Quellenverzeichnis
Kurzfassung
Deutsche Kurzfassung
Die vorliegende Arbeit befasst sich mit dem Auslesen der Daten eines Sick LMS 300 Laserscanners, der Auswertung, der Speicherung und schlieÿlich ihrer Visualisierung anhand zweier Microsoft Foundation Classes (MFC)-Anwendungen. Die Arbeit beinhaltet Informationen zur Konfiguration des Scanners, beschreibt die RS-232 und RS-422 Schnittstellen und zeigt dabei eine Möglichkeit diese miteinander zu vereinbaren. Weiters wird neben der Verarbeitung der Daten auf die MFC-Programmierung und die Möglich-keiten der Visualisierung die dadurch zur Verfügung stehen, eingegangen.
Summary
This paper deals with the readout of the data of a Sick LMS 300 laser-scanner, the analysis of the data, the storage and finally the visualization on the basis of two MFC-applications. The work includes information about the configuration of the scanner, describes the RS-232 and the RS-422 interfaces, and shows a possibility to interlink the two interfaces. Furthermore, the work outlines the data processing and provides information about MFC-programming and the thus available possibilities of visualization.
Abbildungsverzeichnis
1.1 Scanbereich des Laserscanners
1.2 Schematische Darstellung des Scanvorganges
2.1 Konfigurationsanschluss[Betr]
2.2 Feldsatz bestehend aus Schutz- und Warnfeld [Betr]
2.3 Spannungspegel RS-232 [Schum]
2.4 RS-232 Verbindung zwischen dem Lasersensor und dem PC
2.5 Telegrammaufbau - kontinuierliche Datenausgabe [Tele]
2.6 AICC...Artificial Intelligence Concept Car
2.7 Das MM_TEXT Koordinatensystem[Pros]
2.8 Koordinatensysteme
2.9 Ausschnitt aus einem lesbaren Logfile
2.10 Die MFC-Toolbox
2.11 Button-Control
2.12 Check Box Control
2.13 Edit-Control
2.14 Edit Control zum Anzeigen von Daten
2.15 Static Text Control
2.16 Slider Control
2.17 Klassen für GDI-Objekte [Buds]
2.18 Umschliel?,endes Rechteck [Msdn]
2.19 Edit-Control Ausgabefenster
2.20 Anwendung für die kontinuierliche Datenausgabe
2.21 Linienplot
2.22 Punktwolke
2.23 Oberfläche der AICC-Status Anwendung
2.24 Buttons zur Steuerung der Ansicht
2.25 Skalierung
2.26 Landmarken und Position des Autos
2.27 Gegenüberstellung Foto/Visualisierung
2.28 Laserscan mit Abbildung der Korridor-Funktion
2.29 Unterteilung Korridor
3.1 Konzept-Auto AICC
Listings
2.1 SetCommState
2.2 PolarToCartesian
2.3 fprintf
2.4 fwrite
2.5 OnButtonClicked
2.6 DoDataExchange
2.7 UpdateData()
2.8 OninitialUpdate()
2.9 GetDlgitem()
2.10 LidarThread
2.11 DECLARE_MESSAGE_MAP()
2.12 BEGiN_MESSAGE_MAP
2.13 OnCalculate
2.14 OnDraw
2.15 wingdi.h
2.16 MoveTo
2.17 LineTo
2.18 Ellipse
2.19 Rectangle
2.20 TextOut
2.21 Corners
2.22 EditControl
2.23 Button
2.24 OnDraw-App
2.25 OnBnClickedUdp
2.26 OnBnClickedActivate
2.27 OnDrawAiccStatus
2.28 DataScaling
Abkürzungsverzeichnis
Abbildung in dieser Leseprobe nicht enthalten
Vorwort
Ziel dieser Arbeit ist es, die abstrakten Daten eines Laserscanners in eine graphische bzw. visuell erfassbare Form zu bringen.
Der Laserscanner der Firma Sick ist ein optischer Sensor, der seine Um-gebung mit infraroten Laserstrahlen zweidimensional abtastet. Der S300 arbeitet nach dem Prinzip der Lichtlaufzeitmessung in einem Scanbereich von 270◦ (siehe Abbildung 1.1) und einer Winkelauflösung von 0,5◦ [Betr]. Tm Projekt Artificial Tntelligence Concept Car (AICC) dient der Lasers-canner, neben der Notstopfunktion, die durch zwei Schaltausgänge des Scanners realisiert ist, zur Umfelderkennung und ist somit eine Grund-lage zur Erreichung des primären Zieles des Projektes ATCC, autonomes Fahren zu realisieren.
Die Tnformationsvisualisierung soll eine effektive Darstellung der Daten-muster und der darin enthaltenen Tnformationen ermöglichen. Das da-durch entstehende 2D-Abbild der Umgebung des Autos dient dem Zweck der Visualisierung der abstrakten Daten und soll dem Menschen und/oder dem Programmierer die Tnterpretation der Daten erleichtern.
1 Aufgabenstellung
Die Problemstellung besteht darin, die Daten des Laserscanners auszule-sen, auszuwerten, zu speichern und zu visualisieren.
Der Scanner verfügt über eine RS-422 Schnittstelle um die Datensätze direkt auszulesen. Es musste eine Möglichkeit gefunden werden die Daten über eine RS-232 Schnittstelle einzulesen, da nur diese am verwendeten Industrie-PC (IPC) vorhanden ist (siehe Kapitel 2.3.1.2, S. 13).
Den gelieferten Abstandswerten des Scanners (der Scanbereich ist in Ab-bildung 1.1 ersichtlich) musste je nach Index ein entsprechender Winkel zugeordnet werden um die Daten in Form von Polarkoordinaten zur Verfü-gung zu haben. Diese können dann in das Kartesische Koordinatensystem umgerechnet werden (siehe Kapitel 2.4.2, S. 17). Die kartesischen Koordi-naten werden unter anderem zur graphischen Ausgabe, der Visualisierung der Daten benötigt.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 1.1: Scanbereich des Laserscanners
Um die Daten nicht nur momentan zur Verfügung zu haben musste eine Möglichkeit gefunden werden die einzelnen Datensätze zu speichern um sie zur nachträglichen Verarbeitung, Visualisierung und Analyse wieder abrufen zu können (siehe Kapitel 2.4.3, S. 19).
Aufgrund der Tatsache, dass der Mensch visuelle Inhalte einfacher auf-nehmen kann, als abstrakte, musste eine Möglichkeit gefunden werden die Datensätze zu visualisieren um ein 2D-Abbild der Umgebung aus Sicht des Autos zu erhalten (siehe Abbildung 1.2).
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 1.2: Schematische Darstellung des Scanvorganges
Die automatisierte Auswertung und Visualisierung gröÿerer Datenmengen durch graphische Benutzeroberflächen (siehe Kapitel 2.5.3, S. 34) erleich-tert die Untersuchung und Interpretation der Daten [Bed].
2 Umsetzung
2.1 Vorgangsweise
Es bestehen zwei Möglichkeiten die Daten des Scanners zu erfassen bzw. anzufordern. Der Scanner muss vorher auf die gewünschte Betriebsart konfiguriert werden.
- Die erste Möglichkeit ist der Request Mode (siehe Kapitel 2.3.2, S. 14), in dem die Messdaten durch den Hostrechner angefordert werden können. In diesem Modus werden die einzeln angeforderten Datensätze über die RS232-Schnittstelle in den Rechner eingelesen und entweder sofort, oder nach Umrechnung der Daten in kartesische Koordinaten, in einem File auf der Festplatte abgelegt.
- Die zweite Möglichkeit besteht darin, den Scanner auf kontinuier-liche Datenausgabe (siehe Kapitel 2.3.3, S. 15) zu konfigurieren. Dabei erfolgt die Ausgabe der Messdaten automatisch und kontinu-ierlich. Eine Speicherung der Daten wird in diesem Fall nicht vorge-nommen. Jeder fertig empfangene Datensatz wird sofort in kartesi-sche Koordinaten umgerechnet, die zur leichteren Darstellung in der, mithilfe der MFC erstellten, graphischen Oberfläche benötigt werden. Im Hintergrund wird bereits der nächste Datensatz eingelesen.
Ein Datensatz besteht aus 541 Abtastwerten, denen je ein Winkel zu-geordnet werden kann. Die einzelnen Polarkoordinaten werden in einem MFC-Programm in kartesische Koordinaten umgerechnet, um die Dar-stellung in einer FormView-Oberfläche der MFC zu erleichtern.
2.2 Konfiguration des Scanners
Der Laserscanner wird mit Hilfe der Configuration Device Software (CDS) konfiguriert. Zur Konfiguration und Diagnose wird der Personal Computer
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.1: Konfigurationsanschluss[Betr]
(PC) am Konfigurationsanschluss (siehe Abbildung 2.1) des Scanners an-geschlossen.
2.2.1 Konfigurieren der Schutz- und Warnfelder
Der Feldsatz besteht aus einem Schutzfeld (siehe Abbildung 2.2 ✶ ) und einem Warnfeld (siehe Abbildung 2.2 ✷ ). Mithilfe der CDS können Form
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.2: Feldsatz bestehend aus Schutz- und Warnfeld [Betr]
und Gröÿe von Schutz- und Warnfeld konfiguriert werden. Dabei sind ver-schiedene Feldformen realisierbar. Die beiden Feldsätze dienen im Projekt AICC zur Realisierung der Notstop-Funktion des Autos. Der Laserscanner wird durch Infrarot-Sensoren unterstützt, um Blindbereiche des Scanners, wie zum Beispiel Treppen, abzudecken. Der Laserscanner besitzt für beide Felder entsprechende Schaltausgänge. Wird ein Objekt im entsprechenden Feld dedektiert, wechselt der Ausgangspegel auf LOW. Durch Auswer-tung der Pegel wird im Fall ,,Objekt im Warnfeld" die Geschwindigkeit des Autos automatisch verringert. Im Falle ,,Objekt im Schutzfeld" wird der sofortige Notstop eingeleitet.
2.3 Auslesen der Daten
Der Laserscanner der Firma Sick ermöglicht ein Auslesen der Scandaten direkt über die implementierte RS-422 Schnittstelle nach dem Electronic Industries Alliance (EIA) RS-422-A Standard.
2.3.1 Schnittstelle RS-422 und RS-232
Die RS-422 Schnittstelle findet nicht zuletzt aufgrund der hohen Da-tenraten, der möglichen Leitungslänge und der störungsarmen Übertra-gung vielfache Anwendung in der Industrie. In Standard-Rechnern ist die Schnittstelle nicht ausgeführt. Aus diesem Grund musste eine Möglichkeit gefunden werden die Daten auszulesen (siehe Abschnitt 2.3.1.2).
2.3.1.1 Elektrische Eigenschaften
Die Übertragung der immer noch sehr weit verbreiteten RS-232 Schnitt-stelle wird als ,,bipolar" bezeichnet. Die Pegel des Senders dürfen maximal ±15V betragen (siehe Abbildung 2.3). Den logischen Pegeln 0 oder 1 wer-den elektrische Pegel zugeordnet. Diese besitzen denselben Betrag, jedoch unterschiedliche Polarität bezüglich der Betriebserde. Auf der Empfän-gerseite werden alle Spannungen zwischen +3V und +15V der logischen NULL, alle Spannungen zwischen -3V und -15V der logischen EINS zu-geordnet.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.3: Spannungspegel RS-232 [Schum]
Die Hochohmigkeit der Ausgangspegel (gröÿer als 3kΩ) schützt die Bau-steine bei Schaltungsfehlern zwar vor Zerstörung, schränkt jedoch die Übertragungsentfernung und die Übertragungsgeschwindigkeit stark ein. Die nach der Norm RS-232-C maximale Leitungslänge von 15m muÿ je nach Rahmenbedingung angepasst werden. Elektromagnetische Einflüsse können die hochohmigen Signale schon bei geringen Störleistungen nega-tiv beeinflussen. Zudem verursachen die Leitungskapazitäten mit den ho-hen Innenwiderständen groÿe Zeitkonstanten. Dadurch können die Pegel der Kapazitäten nur langsam auf die andere Polarität umgeladen werden.
Die ,,symmetrische" Spannungsdifferenz-Übertragung der RS-422 Schnitt-stelle ermöglicht eine störungsarme, serielle Datenübertragung über lange Distanzen (500m - 2km). Eine Reihe von sich inhaltlich deckenden Nor-men, wie zum Beispiel die EIA RS-422, beschreiben die elektrischen Ei-genschaften der Schnittstelle. Sie wird als ,,erdsymmetrische Doppelstrom-Schnittstellenleitung für Punkt-zu-Punktverbindungen" beschrieben. Ein-setzbar ist die RS-422 bei Entfernungen bis 1km und darüber und hat eine typische Datenrate von bis zu einigen Mbit/s. Der Sender überträgt Gegentaktsignale und der Empfänger wertet nur die Potentialdifferenzen der Signalleitungen aus. Dadurch wird die Pegelerkennung vom eigentli-chen Potenzial unabhängig. Der logische Zustand wird durch das Vorzei-chen der Potentialdifferenz am Empfänger bestimmt. U≥0,3V wird logisch NULL (Space), und U≤-0,3V logisch EINS (Mark) zugeordnet. Der Be-trag der Spannungsdifferenz soll symmetrisch, also für 0 und 1 gleich sein. Störspannungen, wie zum Beispiel elektromagnetische Strahlung oder Im-pulsübersprechen zwischen Kommunikationsleitungen (crosstalk), wirken
meist auf beide Datenleitungen gleichzeitig. Somit verursachen die Stö-rungen zwar eine Anhebung oder Absenkung der Spannungen der Adern gegenüber dem Erdpotential, die Spannungsdifferenz wird jedoch nicht beeinflusst.
Für weitere Details zu der RS-232 und der RS-422 Schnittstelle wird auf [Schum] und [Com] verwiesen.
2.3.1.2 RS-422 auf RS-232
Im Projekt AICC werden die Daten des SICK LMS300 Laserscanners direkt über die serielle RS-232 Schnittstelle in den PC eingelesen, da keine RS-422 Schnittstelle zur Verfügung steht. Dies ist aufgrund der Tatsache möglich, dass der Datenrahmen der RS-232 und der RS-422 identisch sind. Weiters steht in der Windows-DCB-Struktur, definiert in der Header-Datei winbase.h, sowie für die Datenausgabe des Sensors eine übereinstimmende Baudrate von 115200 (bits per second) zur Verfügung. Die unterschiedlichen elektrischen Eigenschaften der Schnittstellen lassen sich miteinander vereinbaren indem man die Masseleitung der RS-422 mit der Masseleitung der RS-232 und die Leitung Tx- der RS-422 mit der Lei-tung Rx der RS-232 verbindet. Laut Datenblatt des Laserscanners (siehe [Betr]) liefert die Leitung Tx- eine maximale Spannung von ±5 Volt. Da die RS-232 Schnittstelle die logischen Pegel ab einer Eingangsspannung von ±3 Volt korrekt zuordnen kann, ist diese Variante die beiden Schnitt-stellen miteinander zu vereinbaren eine akzeptable Lösung.
Listing 2.1: SetCommState
Abbildung in dieser Leseprobe nicht enthalten
Die weiteren Component Object Model (COM)-Einstellungen sind in Listing 2.1 zu sehen. Damit ist die Kompatibilität zum Datenformat des Lasersensors sichergestellt, da sich laut [Tele] ein Datenbyte aus einem Startbit, 8 Datenbits, einem Stopbit und keinem Paritätsbit zusammen-setzt. Es besteht natürlich auch die Möglichkeit der Verwendung eines Schnittstellenkonverters um die beiden Schnittstellen miteinander zu ver-binden. Aufgrund des hohen Datenvolumens und der hohen Datenrate waren allerdings auch qualitativ hochwertige Konverter überlastet. Dies führte zu unzufriedenstellenden Ergebnissen. Ein weiterer Grund für die endgültige Entscheidung zugunsten der RS-232 Variante war die sehr kur-ze Leitungslänge zwischen dem Sensor und dem PC (siehe Abbildung 2.4), die es ermöglicht, die hohe Übertragungsrate von 115200 bit/s zu nutzen.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.4: RS-232 Verbindung zwischen dem Lasersensor und dem PC
2.3.2 Request Mode
Im Request Mode werden durch Übermittlung von Send- und Fetch-Telegrammen die Messdaten durch den Host-Rechner angefordert. Um einen zeitgleichen Zugriff von der RS-232 Diagnoseschnittstelle und der RS-422 Datenschnittstelle zu verhindern, arbeitet der Scanner mit ei-nem System Token. Dieser übernimmt die Verwaltung der verschiede-nen Schnittstellen. Ei Token (engl. für Zeichen oder Marke) ist eine ,,ausgezeichnete Nachricht", die es erlaubt einen gleichzeitigen Zugriff auf Schnittstellen oder auch Speicherbereiche und dergleichen zu verhindern. Vor dem Lesen oder Schreiben von Daten muss der Token angefordert und erfolgreich zugewiesen worden sein.
Der logische Ablauf im Request Mode sieht folgendermassen aus:
1. Power On
2. Get Token
3. Read Scandatensatz 1
4. ...
5. Read Scandatensatz n
6. Release Token
Ei Telegramm setzt sich aus einem 8-Byte Telegramm-Kopf, 1082 Da-tenbytes und einer 2 Byte Cyclic Redundancy Check (CRC)-Summe zu-sammen. Die CRC-Summe, gebildet nach dem Polynom x16 +x12 +x5 +x0 wird über die Datenbytes gebildet und erlaubt eine Integritätsprüfung der Daten.
2.3.3 Kontinuierliche Datenausgabe
Der Scanner kann so konfiguriert werden, dass die Messwerte ständig an der RS-422 Schnittstelle ausgesendet werden. In diesem Modus besteht keine Beeinträchtigung durch den Telegrammverkehr der anderen zur Ve-fügung stehenden Schnittstellen des S300. Die Anforderung eines Tokens ist somit für die kontinuierliche Datenausgabe nicht erforderlich. Die kon-tinuierliche Datenausgabe wird bei der Konfiguration mithilfe der CDS aktiviert. Die Ausgabe der Messdaten erfolgt dadurch automatisch, die Telegramme müssen nur gelesen werden.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.5: Telegrammaufbau - kontinuierliche Datenausgabe [Tele]
Abbildung 2.5 zeigt den Telegrammaufbau für die kontinuierliche Daten-ausgabe. Ein Datensatz besteht aus einem 4 Byte Reply Header (grau un-terlegt), 6 Bytes (violett unterlegt) für die Datenblocknummer, die Gröÿe des Telegramms, einem Coordination Flag und dem Device Code. An-schlieÿend folgen die Messwerte mit 1082 Byte (grün unterlegt), wobei für jeden Abstandswert 2 Byte gesendet werden. Die CRC-Summe bildet den Abschluss eines Telegramms mit 2 Byte (gelb unterlegt). Ist das Gerät einmal auf die kontinuierliche Datenausgabe konfiguriert worden, bleibt die Konfiguration permanent im Gerät erhalten. Nach jedem Power Up wird die aktuelle Konfiguration aus dem internen Speicher geladen.
Für weitere Informationen zu dem Laserscanner wird auf [Tele] und [Betr] verwiesen.
2.4 Datenverarbeitung
Der Laserscanner liefert 541 Abstandswerte denen je ein Winkel zuge-ordnet werden kann. Steht der Scanner aufrecht, entspricht der erste Ab-standswert einem Winkel von -45 Grad. Im Projekt AICC ist der Scanner gestürzt am Auto montiert (siehe Abbildung 2.6). In diesem Fall ent-spricht der erste Abstandswert einem Winkel von 225 Grad. Da in der Testphase mit beiden Varianten gearbeitet wurde, kann auf der Program-moberfläche die jeweilige Variante durch eine Check-Box (siehe Kapitel 2.5.1.2.2) ausgewählt werden. Je nach Auswahl wird eine, mit der Check-Box verknüpfte boolsche Variable entweder auf EINS oder NULL gesetzt. Mit einer einfachen Abfrage (siehe Listing 2.2 Zeile 1 und 2) wird der
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.6: AICC...Artificial Intelligence Concept Car
entsprechende Anfangswert für den Winkel gewählt.
Urn die Darstellung der Daten zu errnöglichen, werden die Polarkoordi-naten in kartesische Koordinaten urngerechnet (siehe Kapitel 2.4.2). Irn Windows Grafiksystern Graphics Device Interface (GDI) stehen acht ver-schiedene Abbildungsrnodi zur Verfügung. In jedern Modus werden den CDC Mernber-Funktionen (siehe Kapitel 2.5.2) kartesische Koordinaten übergeben.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.7: Das MM_TEXT Koordinatensystem[Pros]
Wie in Abbildung 2.7 ersichtlich, entspricht irn Default-Abbildungsrnodus MM_TEXT eine Einheit genau einern Bildschirrnpunkt (pixel). Der Ur-sprung ist dabei die linke obere Ecke der Darstellungsebene (rnit (0,0) gekennzeichnet). Weiters ist in diesern Abbildungsrnodus zu beachten, dass das Vorzeichen der logischen y-Koordinaten invertiert werden rnuss urn eine korrekte Darstellung zu errnöglichen (siehe Listing 2.2 Zeile 12).
Da nur der Standard-Abbildungsrnodus verwendet wurde, wird auf die anderen Varianten hier nicht weiter eingegangen.
2.4.1 Datenformat der Messdaten
Jeder Messwert wird auf 2 Datenbyte (Bit 0-15) aufgeteilt. Die drei MSB im High-Byte sind Statusbits, wobei Bit 15 angibt ob ein Messwert in-nerhalb des konfigurierten Warnfeldes gelegen ist, Bit 14 einen Messwert innerhalb des Schutzfeldes und Bit 13 eine erkannte Blendung signalisiert. Die verbleibenden 5 Bit des High-Byte und die 8 Bit des Low-Byte (13 Bit) liefern die gemessene Entfernung in Zentimetern. In Listing 2.2 Zei-le 5 bis 7, S. 18 ist die korrekte Zusammensetzung der 13 Bit und die Zuweisung auf eine Integer-Variable ersichtlich. Das High-Byte wird dort mit hexadezimal 0x1F (binär '00011111') verundet" und auf die Variable zugewiesen. Diese wird anschliessend um 8 Stellen nach links geshiftet und schlieÿlich das Low-Byte addiert. Somit steht der Abstandswert im Programm zur Verfügung.
2.4.2 Berechnungen
Abbildung (2.8) soll den Zusammenhang von Polarkoordinaten (r und ϕ) und kartesischen Koordinaten (x und y) veranschaulichen.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.8: Koordinatensysteme
Die trigonometrische Formel für den Kosinus ist definiert durch die Glei-chung 2.1 [Bro].
Abbildung in dieser Leseprobe nicht enthalten
Demzufolge lässt sich die x-Koordinate durch die umgeformte Gleichung 2.2 berechnen.
Abbildung in dieser Leseprobe nicht enthalten
[...]
-
-
-
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X.