Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
projektesose2016:leonarduino:dokumentation [2016/08/04 17:44] sergi.domenech.guzy |
projektesose2016:leonarduino:dokumentation [2016/08/25 11:06] (aktuell) fbonowski |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | <note important> | ||
+ | **Abschließende Bewertung Felix** | ||
+ | * Vollständig und qualitativ hochwertig | ||
+ | * Gut verständlich | ||
+ | * Viele ansprechende Bilder | ||
+ | |||
+ | **Sehr gut** | ||
+ | |||
+ | </note> | ||
+ | |||
+ | <note> | ||
+ | **Kommentar Felix:** | ||
+ | Insgesamt schon sehr gut und sehr vollständig! | ||
+ | |||
+ | Für eine Ausgezeichnete Bewertung wäre es noch schön.. | ||
+ | * Ein paar der Berechnungen auch mit Formeln (im Latax Format $a=\frac{b}{c}$) zu erklären | ||
+ | * Messwerte zur Motorsteuerung zu zeigen. | ||
+ | |||
+ | </note> | ||
+ | |||
======= Leonarduino da Vinci Projektdokumentation ======= | ======= Leonarduino da Vinci Projektdokumentation ======= | ||
Zeile 9: | Zeile 29: | ||
====Überblick über das Gesamtsystem==== | ====Überblick über das Gesamtsystem==== | ||
- | Wir haben uns in drei Untergruppen aufgeteilt mit jeweils eigenen Aufgaben. Die Motoransteuerung Gruppe, zuständig für die Ansteuerung der Motoren und Räder, die Programmier Gruppe die sich mit dem Umwandeln des Schriftzuges in Koordinaten und das Übertragen an den Arduino befasst hat, und die Sprühmechanismus Gruppe welche sich mit dem Sprühgerät, der Farbe und der Ansteuerung und Montage des Geräts auf dem Roboter beschäftigt hat. | + | Wir haben uns in drei Untergruppen aufgeteilt mit jeweils eigenen Aufgaben. Die Motoransteuerung Gruppe (Robert, Julian, Mathias), zuständig für die Ansteuerung der Motoren und Räder, die Programmier Gruppe (Sergi) die sich mit dem Umwandeln des Schriftzuges in Koordinaten und das Übertragen an den Arduino befasst hat, und die Sprühmechanismus Gruppe (Laura, Anja) welche sich mit dem Sprühgerät, der Farbe und der Ansteuerung und Montage des Geräts auf dem Roboter beschäftigt hat. |
Als wir das Projekt begannen, hatten wir zuerst noch vor Bilder und Funktionsgraphen zu malen. Ausserdem wollten wir mit mehreren Farben und durch Rasterung malen. Wir haben uns aber entschieden diese Sachen weg zu lassen da sie den Rahmen des Projekts sprengen würden. | Als wir das Projekt begannen, hatten wir zuerst noch vor Bilder und Funktionsgraphen zu malen. Ausserdem wollten wir mit mehreren Farben und durch Rasterung malen. Wir haben uns aber entschieden diese Sachen weg zu lassen da sie den Rahmen des Projekts sprengen würden. | ||
Zeile 15: | Zeile 35: | ||
{{:projektesose2016:leonarduino:oben.jpg |}} | {{:projektesose2016:leonarduino:oben.jpg |}} | ||
- | {{:projektesose2016:leonarduino:vorne.jpg?300 |}} | + | {{:projektesose2016:leonarduino:vorne.jpg? |}} |
- | {{:projektesose2016:leonarduino:hinten.jpg?300 |}} | + | {{:projektesose2016:leonarduino:hinten.jpg? |}} |
+ | <note> | ||
+ | **Kommentar Felix:** | ||
+ | Gute Einleitung und schicke Bilder, die noch mehr zum Verständnis beitragen könnten, wenn darauf die Komponenten markiert und beschriftet wären! | ||
+ | |||
+ | </note> | ||
---- | ---- | ||
====Beschreibung von Details der einzelnen Systembestandteile==== | ====Beschreibung von Details der einzelnen Systembestandteile==== | ||
- | ===Motoransteuerung=== | + | ==Datenaufarbeitung und -berechnung== |
+ | Zum einen wurden verschiedene Methoden zur Berechnung von Punkten ausprobiert. Eine Option war das Rastern von Bildern oder Graphen in einzelne “Pixel”, die aber vorerst komplett weggelassen wurde. | ||
- | ---- | + | {{:projektesose2016:leonarduino:geomerative-funktionen-klein.png?300 |}} |
- | + | ||
- | ===Programmieren=== | + | |
- | Die Programmierung (Sergi) hat sich mit dem Berechnen der Daten, dem Übertragen der Werte auf den Arduino und der Schnittstelle zwischen Motoransteuerung und Datenerzeugung beschäftigt. | + | |
- | + | ||
- | ==Berechnung== | + | |
- | Zum einen wurden verschiedene Methoden zur Berechnung von Punkten ausprobiert. Eine Option war das Rastern von Bildern oder Graphen in einzelne “Pixel”, die aber vorerst komplett weggelassen wurde. | + | |
- | {{:projektesose2016:leonarduino:geomerative-funktionen-klein.png?200 |}} | + | |
Als ersten Versuch habe ich einfache mathematische Funktionen genommen und in einer ArrayList die aufsteigenden x-Werte bis zum Ende des vorgegeben Definitionsbereichs, sowie die jeweils zugehörigen Funktionswerte gespeichert. Diese ArrayList wurde dann durchiteriert und es wurde zwischen einem Punkt und dem darauf folgenden eine Linie eingezeichnet, sodass am ende der Funktionsgraph entstanden ist. Im Beispiel wurde eine Sinusfunktion und eine quadratische Funktion eingefügt und ausgegeben. | Als ersten Versuch habe ich einfache mathematische Funktionen genommen und in einer ArrayList die aufsteigenden x-Werte bis zum Ende des vorgegeben Definitionsbereichs, sowie die jeweils zugehörigen Funktionswerte gespeichert. Diese ArrayList wurde dann durchiteriert und es wurde zwischen einem Punkt und dem darauf folgenden eine Linie eingezeichnet, sodass am ende der Funktionsgraph entstanden ist. Im Beispiel wurde eine Sinusfunktion und eine quadratische Funktion eingefügt und ausgegeben. | ||
Zeile 114: | Zeile 133: | ||
---- | ---- | ||
- | ====Konstruktion==== | + | ====Konstruktion und Gehäuse==== |
==Materialliste== | ==Materialliste== | ||
- | * Arduino nano | + | (siehe hiezu ggf vorliegende Bilder des Roboters) |
- | * Drucksprühgerät | + | * Arduino nano + Breadboard |
- | * Holzplatte | + | * Drucksprühgerät 5 Liter, 3 Bar ("Gloria Spray and Paint") |
- | * Große Räder 2x | + | * Holzplatte (mitteldichte Holzfaserplatte) |
- | * Kleines Rad | + | * Metal Gearmotor 37Dx54L mm + 64 CPR Encoder (50:1) mit Plastikfelge und Gummireifen x2 |
- | * Servo | + | * Bewegliches "Standrad" |
- | * Motoren | + | * Servomotor zum Ansteuern des Sprühmechanismus |
* Akku | * Akku | ||
- | * Lego | + | * Lego als Grundlage eines Wasserdichten Gehäuses für die Elektronik |
- | * Breadboard | + | |
- | ---- | + | ==Aufbau und was wir uns dabei gedacht haben== |
+ | {{ :projektesose2016:leonarduino:2016-08-07_06_59_29-leonarduino_-_google_praesentationen.png |}} | ||
+ | Ziel der allgemeinen Konstruktion war es einerseits, die physikalischen Belastungen auf unseren Roboter gering zu halten (hauptsächlich das (Massen)trägheitsmoment, auch Luiftwiderstand), andererseits (und auch daraus folgend) die Gesamtmasse des Systems gering zu halten. Dazu musste beachtet werden, dass allein der volle Farbbehälter mindestens 5 kg wiegt und nahezu 50 cm lang ist, weshalb das Gehäuse durchaus groß wurde und die wirkenden physikalischen Kräfte durchaus betrachtet werden müssen. Hinter der vorliegenden Konstruktion liegen folgende Überlegungen: | ||
+ | * Die Grundplatte so nah wie möglich an den Boden zu bringen, um das Trägheitsmoment zu verringern | ||
+ | * Rotationsachse und Schwerpunktsachse nahe aneinander zu legen | ||
+ | * Den C_w-Wert zu reduzieren, indem der Farbbehälter horizontal und nicht vertikal angeordnet ist (Natürlich treten bei den angestrebten Fahrgeschwindigkeiten nur vernachlässigbare Luftreibungskräfte auf, unsere Befürchtungen waren eher Windböen im Gelände (zB Tempelhofer Feld) | ||
+ | * Regen und Spritzwasserschutz der Elektronik durch Verkabelung an der Gehäuseunterseite und einem Lego-Gehäuse für den Arduino | ||
+ | * Herabsenken des Gesamtgewichts des Roboters, um die "kleinen" Getriebemotoren nicht zu überlasten | ||
+ | |||
+ | Insgesamt liesen sich die Ideen realisieren, allerdings war die Verwendung einer MDF-Platte unklug, da diese im Gegensatz zu anderen gängigen Materialien (Kunststoff, Sperrholz) ein hohes Gewicht besitzt. | ||
+ | |||
+ | |||
+ | ====Motoransteuerung und Nachregelung==== | ||
+ | ==Motoransteuerung und Nachregelung== | ||
+ | Die Motoransteuerung hat die Aufgabe, die Motoren des Roboters so zu betreiben, dass eine vorgegebene Vektorgrafik mit einer gleichmäßigen Geschwindigkeit abgefahren wird. Dazu ist eine ständige Nachregelung der Motoren nötig: | ||
+ | Deren Ziel ist es, dass der Roboter in zeitlich engen Intervallen sein jeweiliges Ziel (Koordinatenpunkt) neu anpeilt, indem er dessen Ort sowie seine eigenen Polarkoorinaten (Ort, Richtung) kennt. So lässt sich vermeiden, dass der Roboter (zB zufällig durch eine Inhomogenität am Boden) seinen Kurs ändert und sich so die Abweichung vom Ziel für jeden angefahren Koordinatenpunkt immer stärker ändert. Dazu ist der an den Motoren angebrachte CPR-Encoder essenziell: Mit diesem lässt sich die jeweilige Geschwindigkeit der Motoren stets bestimmen und dokumentieren. Damit kann einerseits stets auf eine konstante Geschwindigkeit geregelt werden mit der der Roboter fährt (sonst würde zB der Roboter langsamer fahren, wenn er über eine leichte Anhöhung fährt), andereseits lässt sich mit der Kenntnis, wie oft sich die beiden Räder in welche Richtung gedreht haben, die momentane Richtung des Leonarduinos bestimmen. Dieses Schema ist in der nachfolgenden Abbildung skizziert | ||
+ | {{ :projektesose2016:leonarduino:encoder_schema.png |}} | ||
+ | Der CPR-Encoder besteht im Grunde aus einer mitrotierenden, inhomogenen Metallscheibe (diese besitzt eine diskrete Anzahl an Schlitzen) am Motor, deren Umdrehungen von einem Hallsensor erfasst werden. Dadurch kann aus dessen Signal die Anzahl der effektiven Radumdrehungen (also hinter dem Getriebe) in einem Zeitintervall ausgerechnet werden. | ||
+ | {{ :projektesose2016:leonarduino:cpr.png |}} | ||
+ | In der vorliegenden Abbildung erkennt man hierzu links die Hardware des Encoders und rechts ein effektives Beispielsignal. | ||
+ | ==Zielanpeilung== | ||
+ | Nachfolgend wird schematisch skizziert, wie der Roboter sein Ziel anpeilt, beziehungsweise dementsprechend seine Geschwindigkeit und/oder Rotation ändert. Dazu ist natürlich die Kenntnis seiner eigenen Koordinaten sowie derer des Ziels zwingend erforderlich. Aus seinem eigenen Richtungsvektor (r) und dem Zielvektor (z) (siehe Skizze) wird der Winkel, sowie die orthogonale Projektion gebildet. | ||
+ | {{ :projektesose2016:leonarduino:anpeilung_schema.png |}} | ||
+ | Daraus ergeben sich für den Roboter zwei Geschwindigkeiten: Eine Rotationsgeschwindigkeit (v_dreh), mit der sich dieser in dir Richtung des Ziels dreht, sowie eine Vorwärtsgeschwindigkeit (v_vor) mit der in die aktuelle Richtung gefahren wird. die Gesamtgeschwindigkeit ergibt sich aus der Addition der beiden Teilgeschwindigkeiten. v_vor berechnet sich aus dem Zielvektor mal der orthogonalen Projektion des Richtungsvektors darauf, als v_dreh wird der Winkel mal einen orthogonalen Einheitsvektor auf den Richtungsvektor verwendet. Daraus resultiert folgendes Schema: Ist der Richtungsvektor stark vom Zeilvektor verschieden, so ist der Winkel dazwischen Groß und die orthogonale Projektion klein, also dreht sich der Roboter schnell, während er langsam nach vorne fährt. Stimmen die Vektoren hingegen nahezu überein, dreht sich der Roboter nur sehr langsam, während er schneller nach vorne fährt. | ||
====Ergebnis und Diskussion==== | ====Ergebnis und Diskussion==== | ||
- | Das Ziel von unserem Projekt war es einen Roboter zu bauen welcher Koordinaten übergeben bekommt und einen Schriftzug auf den Boden malen kann. | + | Das Ziel von unserem Projekt war es einen Roboter zu bauen, welcher Vektorgrafiken in Form von Koordinaten übergeben bekommt und diese Grafik flüssiger Farbe auf den Boden sprühen kann. Dies wurde bisher teilweise erreicht: |
- | Der Leonarduino kann zu vorgegebenen Punkten Fahren und sich dabei grob selber nachregeln und regulieren. | + | Der Leonarduino kann die vorgegebenen Punkten anpeilen, dorthin fahren und seine Geschwindigkeit und Postion dabei nachregeln und regulieren. Das Gehäuse/ die Konstruktion hierzu ist soweit fertig. Der Sprühmechanismus ist fertig automatisiert und einsatzbereit. |
+ | Problemfelder bei der Entwicklung des Leonarduinos bestanden in der Übertragung der Koordinaten an den Arduino sowie beim Nachregeln der Position während dem Fahren. Zu Details hierzu, siehe die jeweiligen Unterpunkte der Dokumentation. | ||
+ | Dadurch war es bisher noch nicht möglich, ausgiebige Tests und "Outdoor"- Erprobungen mit der Leonarduino zu fahren, und diese entsprechend wissenschaftlich zu dokumentieren. | ||
- | Wo wir mehrere Schwierigkeiten hatten bzw bis zum Ende haben ist die Übertragung der Koordinaten an den Arduino und das Nachregeln beim Fahren. | + | Der eigentliche, makroskopische Aufbau des Roboters wurde relativ zügig fertig gestellt. Da wir uns in einzelne Gruppen aufgeteilt hatten, konnten wir von Anfang an auch alle Aufgaben bearbeiten. Wir hatten genügend Zeit mehrere Tests mit dem Sprühgerät durchzuführen und uns eine gute Montage und Ansteuerung auf dem Roboter zu überlegen. |
- | Den eigentlichen Aufbau des Roboters haben wir relativ schnell fertig gestellt. Es gab auch keine besonderen großen Schwierigkeiten oder Probleme bei der Konstruktion zu lösen. Da wir uns in einzelne Gruppen aufgeteilt hatten, konnten wir von Anfang an auch alle Aufgaben bearbeiten. Wir hatten genügend Zeit mehrere Tests mit dem Sprühgerät durchzuführen und uns eine gute Montage und Ansteuerung auf dem Roboter zu überlegen. | + | |
+ | Insgesamt ist zum Hergang der Roboterentwicklung zu sagen, dass mehr Zeit ins Schreiben und Testen der Software gesteckt werden hätte müssen, als in den Aufbau eines sehr guten Gehäuses. So hätten wir früher die gesteckten Ziele erreichen, und eine Perfektionierung der Konstruktion hinten anstellen können. Es bleibt jedoch zu sagen, dass wir ambitionierte Ziele hatten/haben, und deren Realisierung und Erfüllung innerhalb unserer divergenten Gruppe unter Eigenregie relativ gut funktioniert hat. Auch wurden oft die Themenbereiche und Aufgaben der jeweiligen Gruppenmitglieder geändert, es wurde miteinander gearbeitet, und jeder konnte dort helfen wo sie/er Lust hatte. Dennoch liegt vor allem noch in Schnittstellen, zB zwischen Datenübertragung und -verarbeitung Arbeitsbedarf. | ||
+ | Auch wenn wir in den nächsten Wochen noch zusammenarbeiten werden und die gesteckten Ziele noch erreichen wollen, denken wir dass wir innerhalb des Zeitfensters von einem Semester die Möglichkeiten und Potentiale unseres Roboters nicht vollständig ausreizen können. Wir würden uns daher freuen wenn unser Roboter im Zuge des Projektlabors weiterleben würde, und sich zB eine Nachfolgegruppe findet, die diesen weiterentwickelt, verbessert und ggf neue Aufgabenbereiche erschließt: LET 'EM SPRAY! | ||
---- | ---- | ||
====Code Dateien==== | ====Code Dateien==== |