Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektewise19:felipepublic:start

Einleitung

Habt ihr es satt einfache Rechenaufgaben auszurechnen und aufzuschreiben und findet, das ist Kleinkram? Wir auch! Deswegen haben wir uns mit unserem Roboter eine Lösung ausgedacht.
Dieser kann über eine Kamera Bilder von zwei handgeschriebenen Zahlen machen, sie erkennen und die Summe aus diesen beiden bilden. Des Weiteren wird dann noch das Ergebnis zu Papier gebracht.
Unser Projekt ist aufgeteilt in zwei wesentliche Bestandteile: Mia und Felipe.
Mia ist unsere Kamerastation und der Kopf hinter der Sache. Ihre Aufgabe ist es die Bilder von den Zahlen zu machen, sie zu addieren und dann die Lösung an Felipe weiterzuschicken.
Im weiteren Verlauf empfängt Felipe die Lösung via Bluetooth und schreibt sie dann auf einem A1-Papier in digitalen Schriftzug auf.

Umsetzung

Abbildung 1: Erste Planung

Mia (Kamerastation)

Am Anfang unseres Projekts haben wir uns damit beschäftigt rauszufinden wie wir das Problem der Zahlen Erkennung lösen können. Hier stand erst mal eine Menge Recherche an. Wir haben viele verschiedene Möglichkeiten gefunden, die alle auf OpenCV zurückgegriffen haben, jedoch war eine Lösung komplizierter als die andere. Letztendlich sind wir auf ein Bespiel mit KNN (K-Nearest-Neighbour) gestoßen, welches wir als Grundlage für unser Projekt benutzt haben.

KNN

KNN bedeutet im deutschen so viel wie k-Nächster-Nachbar Klassifikation und ist ein vergleichsweise einfaches maschinelles Lernverfahren. Es beruht darauf dem Programm ein Vergleichsdatensatz zu geben, und ihm somit „beizubringen“: so sieht eine 0, 1, 2, 3, etc. aus. Die Bilder der einzelnen Vergleichszahlen werden dann zu Gruppen zusammen gefügt und mit der Überschrift 0-9 versehen. So weiß das Programm, wie welche Zahl aussieht.
Bekommt er jetzt eine neue Zahl und soll herausfinden welche das ist, so vergleicht er das neue Bild mit den schon vorhandenen, sucht sich die k-nächsten-Nachbarn (also die k ähnlichsten Vergleichsbilder) heraus und ermittelt zu welcher Gruppe diese gehören. Sind zum Beispiel 2 ähnliche Bilder aus der Gruppe „2“ und eins aus der Gruppe „1“, so erkennt er die Zahl als 2 an.
In unserem Programm haben wir k auf 3 gesetzt, weil wir damit die besten Ergebnisse erzielen konnten. Im Allgemeinen sollte man darauf achten, dass das k eine ungerade Zahl ist, damit es bei der Auswahl zu welcher Gruppe die neue Zahl gehört nicht zum Gleichstand kommen kann und, dass das k nicht zu groß oder klein gewählt wird.
Am Anfang haben wir noch das Vergleichsbild von der Internetseite genommen (Abbildung 2), von der wir auch den Code hatten, konnten aber schnell feststellen, dass das problematisch war. Die Erfolgsquote lag damit bei grade mal 50%, anscheinend waren unsere Zahlen zu unterschiedlich. Wir haben dann beschlossen unser eigenes Vergleichsbild mit unseren Zahlen zu erstellen. (Abbildung 3)
Dies hat einen gewaltigen Unterschied gemacht, wenn man sich beide Bilder anguckt, kann man auch selbst schnell die Unterschiede sehen.
Nun hatten wir eine Erfolgsquote von 90%, allerdings haben wir schnell gemerkt, dass das nur der Fall ist wenn die Zahlen Digital auf dem Tablet geschrieben wurden und somit keine Störungen durch Schatten oder ähnliches vorhanden waren. Sobald wir die Bilder von den Zahlen mit unserer richtigen Kamerastation aufgenommen haben, erkannte er wieder nur wenige Zahlen.

Vergleichsbild Internetseite
Abbildung 2: Vergleichsbild der Internetseite
Vergleichsbild
Abbildung 3: Unser eigen erstelltes Vergleichsbild

Aufbau

Als wir Licht am Ende des Tunnels sahen bei der Zahlenerkennung, haben wir uns über den Aufbau Gedanken gemacht. Zuerst haben wir eine alte Holzplatte zurechtgesägt. Darauf haben wir 2 Bauteile aus Holz geklebt und beide mit einem weiteren Stück Holz oben verleimt. In die Mitte des oberen Holzstücks haben wir eine Logitech Kamera befestigt. Nachdem wir es geschafft haben, dass die Kamera durch zwei Knopfdrücke zwei Fotos aufnimmt, haben wir uns überlegt wie groß/klein wir die Zahlen schreiben können damit sie noch im Blickfeld der Kamera liegt. Dieses Feld haben wir dann auf die Platte gezeichnet.

Abbildung 4: Kamerastation Mia
Bauteil Anzahl
Holzplatte 1
Holzstäbe 3
Logitech Webcam 1

Bluetooth

Per Bluetooth wird das Ergebnis übermittelt. Dafür haben wir ein HC-05 Bluetooth Modul benutzt, das wir per Bluetooth mit dem PC verbunden haben. Diese Verbindung stellt einen Port da, über den sich Daten von einem zum anderen Gerät übermitteln lassen.

Felipe (Schreiber)

Abbildung 5: Felipe

Nachdem wir mit Mia um einiges vorangekommen sind, haben wir uns an Felipe gesetzt.

Steppermotoren

Wir haben uns zuerst auf die Steppermotoren konzentriert. Diese funktionieren mit Steps, dass heißt, ein Step ist ein, vom Motor festgelegter Winkel. Um eine ganze Umdrehung machen zu können, muss man eine bestimmte Anzahl von Steps machen. Bei uns waren es 800.

Wir hatten anfangs ein paar Probleme mit den Treibern, die man braucht um den Motor anzusteuern. Ein Motor war immer schwächer als der Andere, was, wie wir herausgefunden haben an unseren Treibern lag. Die Spannungsverteilung war nicht gleich, so dass wir diese an einer Schraube noch nachbessern mussten. Danach haben sie funktioniert.

Was wir auch beachten mussten war das sich nicht beide in die gleiche Richtung bewegen durften. Der Rechte fährt im Uhrzeigersinn aber der Linke fährt gegen den Uhrzeigersinn.

Abbildung 6: angeschlossene Steppermotoren

Für die Programmierung von Felipe haben wir mit Arduino gearbeitet. Wir haben außerdem die Stepper Library zur Ansteuerung der Motoren benutzt. Um es einfacher zu machen haben wir Methoden verschiedene Bewegungen erstellt, die Felipe durchführen soll. Wir haben eine für vorwärts, rückwärts, rechts, links,… Dann haben wir das im „void loop( )“ so zusammengefügt dass er in der richtigen Reihenfolge fährt um eine bestimmte Zahl zu zeichnen.

Aufbau

Abbildung 7: Aufbau Felipe

Materialliste

Bauteil Anzahl
Rad (d = 9cm) 2
Bewegliches Stützrad 1
Stepper Motor 2
HC-05 Bluetooth Modul 1
Arduino Nano 1
Akku 1
Breadboard 1
Filzstift 1
Holz
Abbildung 8: Steckung

Pinbelegunstabelle

Bauteil Signalfunktion Pinnummer
Stepper Motor Driver links Direction 5
Step 3
Enable 1
Stepper Motor Driver rechts Direction 4
Step 7
Enable 6
RX-Pin Serielle Kommunikation 10
TX-Pin Serielle Kommunikation 11

Zahlen

Wir haben uns entschieden die Zahlen im digitalen Format aufzuschreiben, heißt wir arbeiten mit graden Fahrstrecken und Links- und Rechtsdrehungen. Beim erstellen der einzelnen Fahrstrecken mussten wir beachten, immer von der gleichen Startposition auszugehen, was nicht bei allen Zahlen ideal war. Zum Beipiel mussten wir bei der vier oder eins vorher noch eine Drehung einbauen. Ein Problem stellte zudem dar, dass wir unseren Stift nicht auf- und absetzen konnten und dann bei manchen Zahlen Strecken mehrfach fahren mussten, wie zum Beispiel ebenfalls bei der 4 (Abbildung 10). Zudem konnten wir deswegen auch nur einstellige Ergebnisse aufzeichnen, weil ansonsten beide Zahlen zusammenhängend gezeichnet werden.
Wenn die Summe beider erkannten Zahlen größer war als 9, fährt Felipe einmal nach links und rechts, um zu zeigen, dass das Ergebnis zu groß für ihn ist.
Anfangs hatten wir ein kleines Aufbauproblem da wir den Stift zuerst hinten am Roboter angebracht haben. Das hat bei der Drehung komisch ausgesehen, also haben wir den Stift umplatziert und ihn zwischen die Motoren gesetzt. Durch das fehlende auf- und absetzen,die nicht immer exakten Drehungen und den Umstand, dass der Stift nicht immer richtig auf dem Papier zeichnet, sehen die Zahlen zwar nicht immer perfekt aus, man kann sie aber gut erkennen.

Fahrplan Zwei
Abbildung 9: Fahrplan von der Zwei
Fahrplan Vier
Abbildung 10: Fahrplan von der Vier
Abbildung 11: Stift hinten angebracht
Abbildung 12: Stift zwischen den Motoren angebracht

Fazit und Ergebnis

In der Zeit die wir hatten, haben wir vieles geschafft und unser Projekt fast komplett beendet.
eins unserer größten Probleme stellte am Anfang Python dar, da wir noch nie mit dieser Programmiersprache gearbeitet hatten. Da wir sie aber für die Zahlenerkennung brauchten, haben wir versucht uns schnell reinzufinden, Das Programm konnte einige Zahlen, die von der Kamera aufgenommen wurden erkennen, hatte aber bei den meisten ihre Schwierigkeiten (Das hing auch von der Beleuchtung ab oder wie die Zahlen geschrieben wurden). Trotzdem konnten wir die digital geschriebenen Zahlen fast immer erkennen.

Bei der Konstruktion und Programmierung von Felipe gab es natürlich auch so manche Hindernisse. Durch die nie exakten Drehungen wurden viele Zahlen schief und der Stift hat auch nicht immer durchgängig gezeichnet.
Trotz dessen waren wir mit dem Ergebnis sehr zufrieden, wir hätten nie gedacht doch so weit zu kommen. Immerhin haben wir unseren groben Plan erfüllt und alles Grundlegegende geschafft.

Hätten wir noch mehr Zeit gehabt würden wir einige Sachen ergänzen oder verbessern. Die Erkennung der Zahlen könnte man verbessern oder versuchen Felipe und Mia zu einem Roboter zusammen zu bauen damit alles kompakter ist. Man könnte desweiteren das aufschreiben der Zahlen verbessern, indem man einen Roboter baut der sie kleiner aufzeichnen kann, mit einer bestimmten Kalligraphie zeichnet oder einbauen, dass der Stift ab- und aufgesetzt werden kann.
Des Weiteren hätten wir mehr Rechenoperationen zu unserem Programm hinzugefügt und Mia auch zweistellige Zahlen rechnen lassen.

Abbildung 13: Aufzeichnen einer Zahl

Code

projektewise19/felipepublic/start.txt · Zuletzt geändert: 2020/04/07 14:11 von d.golovko