Benutzer-Werkzeuge

Webseiten-Werkzeuge


projektewise21:fliegenderroboter:doku

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projektewise21:fliegenderroboter:doku [2022/03/29 14:56]
Nutzername [Systembestandteile]
projektewise21:fliegenderroboter:doku [2022/04/25 00:21] (aktuell)
d.golovko
Zeile 1: Zeile 1:
-<note important>​ 
-Generell: sehr gut! Ich hab ein paar kleine Kommentare unten gemacht -- wenn ihr sie gelesen / bearbeitet habt, könnt ihr sie löschen. 
- 
-Ich freue mich, dass ihr mir eurem komplexen Projekt so weit gekommen seid! 
-</​note>​ 
- 
  
 ======Zeppelin====== ======Zeppelin======
Zeile 24: Zeile 18:
 ===Baugruppen=== ===Baugruppen===
  
-Unser Zeppelin besteht aus dem Ballon, der Motoraufhängung inklusive Akkus, der Aufhängung der Finnen, einem Steckbrett mit Arduino und Bluetooth-Modul und den Sensoren.+Unser Zeppelin besteht aus dem Ballon, der Motoraufhängung inklusive ​Electronic Speed Controller (ESC) mit Akkus, der Aufhängung der Finnen ​mit den Servos, einem Steckbrett mit Arduino und Bluetooth-Modul und den Sensoren ​(Phototransistoren und Ulltraschalldistanzsensoren).
  
 ===Aufgaben=== ===Aufgaben===
  
-Die größte unserer Aufgaben war die Steuerung unseres Zeppelin über Bluetooth. Durch das Füllen mit Helium wurde das Problem des zum Fliegen bringen an sich umgangen, welches wir zum Beispiel bei einer Drohne gehabt hätten, aber die Steuerung ist notwendig, damit der Zeppelin nicht einfach nur unter der Decke des Raumes hängt. Die Steuerung teilt sich wiederum ​in mehrere Bereiche auf: das Ansteuern von Motor, ESC und der Servos, sowie die Verbindung dieser mit dem Propeller und den Steuerflossen.+Die größte unserer Aufgaben war die Steuerung unseres Zeppelin über Bluetooth. Durch das Füllen mit Helium wurde das Problem des zum Fliegen bringen an sich umgangen, welches wir zum Beispiel bei einer anderen Art von Drohne gehabt hätten, aber die Steuerung ist notwendig, damit der Zeppelin nicht einfach nur unter der Decke des Raumes hängt. Die Steuerung teilt sich in mehrere Bereiche auf: das Ansteuern von Motor, ESC und der Servos, sowie die Verbindung dieser mit dem Propeller und den Steuerflossen.
  
 Beim Einfüllen des Heliums stellte sich noch ein weiteres Problem heraus: zwar flog der Zeppelin, aber die Aufhängung der Flossen war deutlich schwerer als die Vorderseite,​ was zu einem Ungleichgewicht führte, gegen das man schwer gegensteuern konnte. Zuerst haben wir versucht, dies mit einem Gegengewicht auszugleichen,​ mussten aber feststellen,​ dass der Zeppelin dann zu schwer war zum fliegen. Deswegen waren wir gezwungen, das Steckbrett mit Arduino und allen Kabeln weiter nach vorne umzuordnen, um den Zeppelin in eine senkrechte Lage zu bringen. Beim Einfüllen des Heliums stellte sich noch ein weiteres Problem heraus: zwar flog der Zeppelin, aber die Aufhängung der Flossen war deutlich schwerer als die Vorderseite,​ was zu einem Ungleichgewicht führte, gegen das man schwer gegensteuern konnte. Zuerst haben wir versucht, dies mit einem Gegengewicht auszugleichen,​ mussten aber feststellen,​ dass der Zeppelin dann zu schwer war zum fliegen. Deswegen waren wir gezwungen, das Steckbrett mit Arduino und allen Kabeln weiter nach vorne umzuordnen, um den Zeppelin in eine senkrechte Lage zu bringen.
  
 Ein weiterer Punkt, den es zu lösen galt, war die Befestigung der Mechanik am Ballon. Dies haben wir fast ausschließlich mit Gaffa Tape gelöst, was unserem Roboter den Namen „Gaffelin“ eingebracht hat, der auch auf der Seite des Ballons zu sehen ist. Ein weiterer Punkt, den es zu lösen galt, war die Befestigung der Mechanik am Ballon. Dies haben wir fast ausschließlich mit Gaffa Tape gelöst, was unserem Roboter den Namen „Gaffelin“ eingebracht hat, der auch auf der Seite des Ballons zu sehen ist.
- 
-<note important>​ 
-Wo ist das zu sehen? Fügt bitte am Anfang dieser Beschreibung eine Abbildung vom gesamten Zeppelin hinzu, damit die Lesenden vom Anfang an eine Vorstellung darüber haben. ​ 
- 
-**Falls** ihr so eine Abbildung nicht mehr habt bzw. nicht mehr erstellen könnt, schiebt zumindest die jetztige Abb. 1 hoch und statt "zu sehen ist" schreibt "sich befindet"​ oder ähnliches (sonst will man als Leser es tatsächlich sehen) ​ 
-</​note>​ 
  
 An der Spitze des Ballons sitzen zwei Ultraschallsensoren und drei Phototransistoren. Erstere sollen eigenständig die Entfernung des Zeppelins von einem Hindernis feststellen und im Zweifel ausweichen bzw. den Motor stoppen, letztere sollen es ermöglichen,​ den Zeppelin Licht folgen zu lassen. An der Spitze des Ballons sitzen zwei Ultraschallsensoren und drei Phototransistoren. Erstere sollen eigenständig die Entfernung des Zeppelins von einem Hindernis feststellen und im Zweifel ausweichen bzw. den Motor stoppen, letztere sollen es ermöglichen,​ den Zeppelin Licht folgen zu lassen.
Zeile 84: Zeile 72:
 Die Kommunikation wollten wir erst über WLAN erfolgen lassen, sind dann aber auf Bluetooth umgestiegen,​ die Umstellung der seriellen Kommunikation von USB auf Bluetooth keine größeren Anpassungen erfordert. Die Kommunikation wollten wir erst über WLAN erfolgen lassen, sind dann aber auf Bluetooth umgestiegen,​ die Umstellung der seriellen Kommunikation von USB auf Bluetooth keine größeren Anpassungen erfordert.
  
-In Processing haben wir eine Klasse angelegt, die für das Senden und Empfangen von Daten verantwortlich ist. Dabei hat jeder Sensor einen bestimmten key, also eine Zahl, die ihm zugeordnet ​wurde und mit welcher jeweils erkannt werden kann, woher der übergebene Wert stammt. So kann es nicht vorkommen, dass beispielsweise ein Wert der Ultraschallsensoren mit dem eines Phototransistors verwechselt wird. Alle Daten werden in der Form ''​{key:​value}[Zeilenumbruch]''​ übertragen. Abgesehen von den Sensoren gibt es auch keys für ErrorTimestamp ​und Echo.+In Processing haben wir eine Klasse angelegt, die für das Senden und Empfangen von Daten verantwortlich ist. Dabei hat jeder Sensor ​und Aktuator ​einen bestimmten key, in Form einer Zahl, die ihm zugeordnet ​wird und mit welcher jeweils erkannt werden kann, woher der übergebene Wert stammt. So kann es nicht vorkommen, dass beispielsweise ein Wert der Ultraschallsensoren mit dem eines Phototransistors verwechselt wird. Alle Daten werden in der Form ''​{key:​value}[Zeilenumbruch]''​ übertragen. Abgesehen von den Sensoren ​und Aktuatoren ​gibt es auch keys zur Übertragung von ZeitstempelnFehlern ​und zum Debuggen.
  
 Wir haben unseren Code so aufgeteilt, dass der Großteil auf Processing läuft. Dies hat den Vorteil, dass der Arduino nicht an die Grenzen seiner Speicherkapazität kommt. Allerdings ist der Arduino so auch abhängig von der Bluetoothverbindung mit dem Computer und Processing, sodass er nicht eigenständig betrieben werden kann, wie es bei den meisten anderen Robotern des Projektlabors der Fall ist. Wir haben unseren Code so aufgeteilt, dass der Großteil auf Processing läuft. Dies hat den Vorteil, dass der Arduino nicht an die Grenzen seiner Speicherkapazität kommt. Allerdings ist der Arduino so auch abhängig von der Bluetoothverbindung mit dem Computer und Processing, sodass er nicht eigenständig betrieben werden kann, wie es bei den meisten anderen Robotern des Projektlabors der Fall ist.
Zeile 90: Zeile 78:
 ===Steuerung=== ===Steuerung===
  
-Die manuelle Steuerung ​erfolgte ​in unseren Tests über einen Gamecontroller,​ der an den Computer angeschlossen ​wurde. Ebenfalls ist es möglich, auf  der normalen ​Tastatur ​die w, a und d Tasten ​für Motorschub und rechts ​und links zu nutzen, sowie die hoch und runter Pfeiltasten ​für die dementsprechende Richtung. Dabei muss der Controller jedoch trotzdem an den Computer angeschlossen sein. Steht kein Controller zur Verfügung, muss der Code dementsprechend geändert werden+Die manuelle Steuerung ​erfolgt ​in unseren Tests über einen (Xbox-)Gamecontroller,​ der an den Computer angeschlossen ​wird. Ebenfalls ist es möglich, auf  der normalen ​Laptoptastatur ​die ''​w''​ Taste für Motorschub''​a''​ für links und ''​d'' ​für rechts zu nutzen, sowie ''​↑'' ​und ''​↓'' ​für die dementsprechende Richtung. Dabei muss der Controller jedoch trotzdem an den Computer angeschlossen sein. Steht kein Controller zur Verfügung, muss der Code dementsprechend geändert werden.
- +
-<note important>​ +
-Können wir vielleicht eine Abbildung des Gamecontrollers haben? Dann könnte man besser den Satz "w, a und d Tasten"​ usw. besser verstehen.  +
-</​note>​ +
- +
-Wie auch das Versenden der Daten wird die Steuerung über spezielle Klassen. ''​VirtualController''​ ist in der Lage, die aktuelle Position der Servos und den Schub des Motors zu regeln, während ''​ManualMode''​ die Funktionen beinhaltet, welche das Steuern per Tastatur ermöglichen. Dabei greift letztere Klasse auf erstere zu.+
  
 ===Licht folgen=== ===Licht folgen===
Zeile 104: Zeile 86:
 <​imgcaption image3|>​{{ :​projektewise21:​fliegenderroboter:​sensoren.jpg?​direct&​650 |Phototransistoren und Ultraschallsensoren}}</​imgcaption>​ <​imgcaption image3|>​{{ :​projektewise21:​fliegenderroboter:​sensoren.jpg?​direct&​650 |Phototransistoren und Ultraschallsensoren}}</​imgcaption>​
  
-Vom Arduino werden die Daten der Sensoren an Processing auf dem Computer weitergeleitet,​ wo sie verglichen werden. Ist der Wert des unteren PT um eine bestimmte Toleranz höher als die beiden Oberen, wird auf die bereits vorhandene ​Steuerfunktion zugegriffen und die Servos bewegen die Flossen so, dass der Zeppelin nach unten fliegt.+Vom Arduino werden die Daten der Sensoren an Processing auf dem Computer weitergeleitet,​ wo sie verglichen werden. Ist der Wert des unteren PT um eine bestimmte Toleranz höher als die beiden Oberen, wird auf die entsprechende ​Steuerfunktion zugegriffen und die Servos bewegen die Flossen so, dass der Zeppelin nach unten fliegt.
  
 Sendet einer der oberen Phototransistoren einen höheren Wert als der Untere, wird geprüft, ob dieser um eine bestimmte Toleranz höher ist als der rechte, bzw. linke PT. Ist dies der Fall wird wieder auf eine Steuerfunktion zugegriffen,​ die den Zeppelin nach links oder rechts fliegen lässt. Sendet einer der oberen Phototransistoren einen höheren Wert als der Untere, wird geprüft, ob dieser um eine bestimmte Toleranz höher ist als der rechte, bzw. linke PT. Ist dies der Fall wird wieder auf eine Steuerfunktion zugegriffen,​ die den Zeppelin nach links oder rechts fliegen lässt.
Zeile 114: Zeile 96:
 {{lichtfolgen.mp4|Licht folgen (ohne Kollisionsvermeidung)}} {{lichtfolgen.mp4|Licht folgen (ohne Kollisionsvermeidung)}}
  
-<note important>​ 
-wow! 
-</​note>​ 
  
 ===Kollisionsvermeidung=== ===Kollisionsvermeidung===
  
-Am vorderen Ende des Zeppelin befinden sich zwei Ultraschallsensoren,​ die über Kabel mit dem Arduino verbunden sind. Sie senden durchgehend Werte, die der Arduino über Bluetooth an Processing weitergibt, wo der Abstand des rechten und des linken Ultraschallsensors vom nächsten Hindernis verglichen wird. Sinkt einer der Werte unter eine festgelegte Schwelle, d.h. kommt ein Gegenstand zu nahe, wird auf die zuvor geschriebene ​Steuerfunktion zugegriffen und der Zeppelin in die jeweils entgegengesetzte Richtung gelenkt, begleitet von der Nachricht „Eisberg voraus“.+Am vorderen Ende des Zeppelin befinden sich zwei Ultraschallsensoren,​ die über Kabel mit dem Arduino verbunden sind. Sie senden durchgehend Werte, die der Arduino über Bluetooth an Processing weitergibt, wo der Abstand des rechten und des linken Ultraschallsensors vom nächsten Hindernis verglichen wird. Sinkt einer der Werte unter eine festgelegte Schwelle, d.h. kommt ein Gegenstand zu nahe, wird auf die zuvor ensprechende ​Steuerfunktion zugegriffen und der Zeppelin in die jeweils entgegengesetzte Richtung gelenkt, begleitet von der Nachricht „Eisberg voraus“.
  
 ===Diagramme=== ===Diagramme===
Zeile 128: Zeile 107:
 Für das Liniendiagramm haben wir zuerst ebenfalls versucht, eine eigene Klasse zu schreiben, die auch auf die gespeicherten Arrays zugreifen sollte. In einer simpleren Umgebung getrennt von unserem restlichen Code hat dies auch funktioniert,​ allerdings gab es Probleme beim Umformen in eine Klasse und bei der Eingliederung in den restlichen Code. Wir haben festgestellt,​ dass die Umsetzung zu aufwendig geworden wäre und verwenden deshalb nun die bereits existierende Library ''​grafica''​. Für das Liniendiagramm haben wir zuerst ebenfalls versucht, eine eigene Klasse zu schreiben, die auch auf die gespeicherten Arrays zugreifen sollte. In einer simpleren Umgebung getrennt von unserem restlichen Code hat dies auch funktioniert,​ allerdings gab es Probleme beim Umformen in eine Klasse und bei der Eingliederung in den restlichen Code. Wir haben festgestellt,​ dass die Umsetzung zu aufwendig geworden wäre und verwenden deshalb nun die bereits existierende Library ''​grafica''​.
  
-Für das Darstellen des Akkustandes verwenden wir ein einfaches Rechteck, welches mit einem weiteren, farbigen Rechteck gefüllt ist, das den Akkustand darstellt. Es ist angelehnt an das entsprechende Symbol bei Smartphones oder Computern. ​Den Akkustand ​berechnen wir mit folgender Formel:+Für das Darstellen des Akkustandes verwenden wir ein einfaches Rechteck, welches mit einem weiteren, farbigen Rechteck gefüllt ist, das den Akkustand darstellt. Es ist angelehnt an das entsprechende Symbol bei Smartphones oder Computern. ​Die Akkuspannung ​berechnen wir mit folgender Formel:
  
 U<​sub>​in</​sub>​ = (U<​sub>​out</​sub>​ * (R<​sub>​1</​sub>​+R<​sub>​2</​sub>​)) / R<​sub>​2</​sub>​ U<​sub>​in</​sub>​ = (U<​sub>​out</​sub>​ * (R<​sub>​1</​sub>​+R<​sub>​2</​sub>​)) / R<​sub>​2</​sub>​
Zeile 223: Zeile 202:
  
 {{:​projektewise21:​fliegenderroboter:​zeppelin_fusion_360_dateien.zip|Fusion 360 Dateien}} {{:​projektewise21:​fliegenderroboter:​zeppelin_fusion_360_dateien.zip|Fusion 360 Dateien}}
 +
 +<note important>​
 +**Bewertung der Projektarbeit**
 +
 +Bauteile:\\
 +- ESC \\
 +- Servos\\
 +- Bluetooth-Modul\\
 +- Ultraschallsensoren\\
 +- Phototransistoren (½ Punkte)\\
 +- Kommunikation zwischen Arduino und PC\\
 +Insgesamt 5,5 Bauteile => 16,5 Punkte ​
 +
 +Komplexe Elemente: \\
 +- Berechnung des Gewichtes und Schwierigkeiten im Zusammenhang mit dem Fliegen\\
 +- 3D-Modellierung und Druck\\
 +- Klassen und Grafiken in Processing\\
 +Insgesamt 3 Elemente => 12 Punkte
 +
 +Code: \\
 +- Variablen-, Funktions-, Klassennamen:​ 2 Punkte\\
 +- Aufteilung in Funktionen usw.: 2 \\
 +- Redundanz: kein Abzug\\
 +- Kommentare: 2 Punkte\\
 +- Variablen möglichst lokal: 2 Punkte\\
 +8 Punkte
 +
 +Arbeit im Team:\\
 +- Verteilung 2\\
 +- Kommunikation 2\\
 +4 Punkte
 +
 +Weitere Aspekte:\\
 +- Stabilität:​ 2 Punkte\\
 +- Verkabelung:​ 2 Punkte\\
 +4 Punkte
 +
 +Insgesamt 40 Punkte von 40 (mehr als 40 geht nicht). Tolle Arbeit!!
 +
 +**Bewertung der Projektdokumentation**
 +
 +Sehr gute detaillierte Dokumentation,​ wo ihr – trotz des großen Umfangs des Projektes – Umsetzungsdetails und eure Entscheidungen klar dokumentiert habt. Die Sprache liest sich sehr gut, und die Abbildungen helfen sehr, das Geschriebene besser zu verstehen. Meine Änderungswünsche habt ihr umgesetzt. Super! 20 Punkte von 20. 
 +</​note>​
projektewise21/fliegenderroboter/doku.1648558565.txt.gz · Zuletzt geändert: 2022/03/29 14:56 von Nutzername