Benutzer-Werkzeuge

Webseiten-Werkzeuge


projektesose2015:loeschbot_clean:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
projektesose2015:loeschbot_clean:start [2015/11/18 11:15]
c.jaedicke angelegt
projektesose2015:loeschbot_clean:start [2016/01/21 12:45] (aktuell)
Zeile 1: Zeile 1:
 ====== LöschBot ====== ====== LöschBot ======
-<​note>​ 
-Der Umfang ist schonmal beeindruckend,​ und es gibt gute erklärende Bilder. 
- 
-Die Lesbarkeit leidet noch unter der etwas ruppigen Aneinanderreihung von Texten, Stichpunktlisten,​ Bildern und Tabellen - hier würden oft einige erklärende Sätze helfen. 
-</​note>​ 
 [[http://​www.mintgruen.tu-berlin.de/​robotikWiki/​lib/​exe/​fetch.php?​media=projektesose2015:​loeschbot:​titelbild.jpg|{{projektesose2015:​loeschbot:​titelbild.jpg?​775}}]] [[http://​www.mintgruen.tu-berlin.de/​robotikWiki/​lib/​exe/​fetch.php?​media=projektesose2015:​loeschbot:​titelbild.jpg|{{projektesose2015:​loeschbot:​titelbild.jpg?​775}}]]
-<​note>​Überprüft bitte den folgenden Satz nochmal..</​note>​ 
 Unsere Gruppe zwei Monate lang intensiv damit beschäftigt,​ einen möglichst autonomen Roboter zu entwickeln, der zugleich eine nützliche Funktion hat. Unsere Gruppe zwei Monate lang intensiv damit beschäftigt,​ einen möglichst autonomen Roboter zu entwickeln, der zugleich eine nützliche Funktion hat.
 Deshalb haben wir, das sind Max, Jan, Christopher und Nicolai, es uns zur Aufgabe gemacht, einen Roboter zu bauen, der in der Lage ist, selbstständig Brandherde zu **erkennen**,​ **anzusteuern** und schließlich zu **löschen**. Ein Projekt mit Potenzial. Doch wie wir das Problem gelöst haben und ob der Roboter am Ende wirklich Kerzen löschen konnte, erfahrt ihr hier... Deshalb haben wir, das sind Max, Jan, Christopher und Nicolai, es uns zur Aufgabe gemacht, einen Roboter zu bauen, der in der Lage ist, selbstständig Brandherde zu **erkennen**,​ **anzusteuern** und schließlich zu **löschen**. Ein Projekt mit Potenzial. Doch wie wir das Problem gelöst haben und ob der Roboter am Ende wirklich Kerzen löschen konnte, erfahrt ihr hier...
Zeile 14: Zeile 8:
  
 Der Roboter muss eine Kerze erkennen und löschen können. Dazu muss er zuerst einmal die Kerze finden und ihre Position bestimmen. Das erreicht er mit einer Kamera und durch drehen auf der Stelle. Wenn er den Standort ermittelt hat, muss er entsprechend darauf reagieren und die Motoren so ansteuern, dass er zu der Kerze fährt. Dort angekommen muss er erkennen, dass diese Lichtquelle auch warm ist, da die Kamera nur die Helligkeit messen kann. Dies wird durch eine Thermalkamera ermöglicht,​ die anschließend dazu dient, die Spritze genau in Richtung Kerze auszurichten. Ist die Spritze einmal ausgerichtet,​ kann die Pumpe aktiviert und die Kerze gelöscht werden. Danach fängt der Roboter seine Suche von vorne an. Der Roboter muss eine Kerze erkennen und löschen können. Dazu muss er zuerst einmal die Kerze finden und ihre Position bestimmen. Das erreicht er mit einer Kamera und durch drehen auf der Stelle. Wenn er den Standort ermittelt hat, muss er entsprechend darauf reagieren und die Motoren so ansteuern, dass er zu der Kerze fährt. Dort angekommen muss er erkennen, dass diese Lichtquelle auch warm ist, da die Kamera nur die Helligkeit messen kann. Dies wird durch eine Thermalkamera ermöglicht,​ die anschließend dazu dient, die Spritze genau in Richtung Kerze auszurichten. Ist die Spritze einmal ausgerichtet,​ kann die Pumpe aktiviert und die Kerze gelöscht werden. Danach fängt der Roboter seine Suche von vorne an.
-<​note>​Es wird klar was ihr wollt - gut!</​note>​ 
 ====== Umsetzung ====== ====== Umsetzung ======
 ---- ----
-<​note>​Es wäre schön, wenn die (wirklich hervorragenden) Bilder da nicht so alleine stünden, sondern mit ein Paar Sätzen erläutert würden: 
- 
-Was für Teile brauchtet ihr alles? 
-Wofür braucht ihr die Teile? (nur sehr kurz reicht hier) 
- 
-Warum sind die genau an der Stelle, wo sie jetzt gelandet sind? 
- 
-</​note>​ 
 ===== Aufbau ===== ===== Aufbau =====
  
Zeile 50: Zeile 35:
 | "nice to have" | erkennen, wenn er auf einen Abgrund zusteuert ​             | aus Zeitgründen weggelassen ​                                            | | "nice to have" | erkennen, wenn er auf einen Abgrund zusteuert ​             | aus Zeitgründen weggelassen ​                                            |
 | "nice to have" | eine Sirene und flotte Lakierung ​                          | Sirene vorhanden, Lakierung aus Zeitgründen weggelassen ​                | | "nice to have" | eine Sirene und flotte Lakierung ​                          | Sirene vorhanden, Lakierung aus Zeitgründen weggelassen ​                |
- 
-<​note>​Super Überblick - er gehört allerdings zusammen mit zwei erläuternden Sätzen ins Fazit</​note>​ 
  
 ===== Programmablauf ===== ===== Programmablauf =====
-<​note>​ 
- 
-An dieser Stelle solltet ihr noch kurz darauf eingehen, auf welchen Platformen euer Code läuft, in welchen Sprachen und mit welchen Werkzeugen er geschrieben wurde, und was dieser "​Teensy"​ eigentlich ist.. 
  
-</​note>​ 
 ==== Feuer suchen ===== ==== Feuer suchen =====
  
Zeile 73: Zeile 52:
   * Die Pumpe wird anschließend immer mit 30% - 100% Leistung aktiviert und die Spritze gleichzeitig in einem kleinen Radius gedreht.   * Die Pumpe wird anschließend immer mit 30% - 100% Leistung aktiviert und die Spritze gleichzeitig in einem kleinen Radius gedreht.
   * Wenn die Kerze aus ist, werden Pumpe und Sirene wieder deaktiviert und die Suche nach Kerzen fortgesetzt.   * Wenn die Kerze aus ist, werden Pumpe und Sirene wieder deaktiviert und die Suche nach Kerzen fortgesetzt.
-<​note>​ 
-Hier sind noch ein paar Rechtschreib/​Grammatik-Ungenauigkeiten 
  
-Es wäre schön, wenn ihr explizit schreiben würdet, warum die Spritzroutine so funktioniert wie ihr sie gebaut habt. 
- 
-Die Stichpunkte sind inhaltlich sehr gut, für die Lesbarkeit wären jeweils zu Beginn des Abschnitts einige einleitende Sätze von Vorteil. 
- 
-Ihr verwendet schöne Bilder, doch Bilder die nicht referenziert werden, sind überflüssig. Stattet also am besten die Bilder mit einer Nummer aus (fortlaufend in der ganzen Dokumentation),​ gebt ihnen eine Bildunterschrift und beschreibt dann im Text, was zu sehen ist.  
-</​note>​ 
 [[http://​www.mintgruen.tu-berlin.de/​robotikWiki/​lib/​exe/​fetch.php?​media=projektesose2015:​loeschbot:​img_0214.jpg|{{projektesose2015:​loeschbot:​img_0214.jpg?​347}}]] [[http://​www.mintgruen.tu-berlin.de/​robotikWiki/​lib/​exe/​fetch.php?​media=projektesose2015:​loeschbot:​img_0214.jpg|{{projektesose2015:​loeschbot:​img_0214.jpg?​347}}]]
 [[http://​www.mintgruen.tu-berlin.de/​robotikWiki/​lib/​exe/​fetch.php?​media=projektesose2015:​loeschbot:​img_0215.jpg|{{projektesose2015:​loeschbot:​img_0215.jpg?​347}}]] [[http://​www.mintgruen.tu-berlin.de/​robotikWiki/​lib/​exe/​fetch.php?​media=projektesose2015:​loeschbot:​img_0215.jpg|{{projektesose2015:​loeschbot:​img_0215.jpg?​347}}]]
Zeile 104: Zeile 75:
 [[http://​www.mintgruen.tu-berlin.de/​robotikWiki/​lib/​exe/​fetch.php?​media=projektesose2015:​loeschbot:​pumpen_.png|{{projektesose2015:​loeschbot:​pumpen_.png?​100}}]] [[http://​www.mintgruen.tu-berlin.de/​robotikWiki/​lib/​exe/​fetch.php?​media=projektesose2015:​loeschbot:​pumpen_.png|{{projektesose2015:​loeschbot:​pumpen_.png?​100}}]]
  
-<​note>​Es wird nicht klar wofür "​stepper auf rechts schalten"​ steht. In einigen Diagrammen sind leere Felder, sollte dort etwas stehen? Ihr könntet noch etwas deutlicher machen welches Diagramm den gesamten Programmablauf darstellt und welche nur Subroutinen sind. Davon abgesehen helfen die Zustandsdiagramme sehr beim Verständnis eures Codes, sehr gut!</​note>​ 
 ===== Bau des Roboters ===== ===== Bau des Roboters =====
  
 Während der Zeit, in der wir den Roboter gebaut haben, stellte sich heraus, dass viele erste Ideen nicht in der Art und Weise umsetzbar waren, wie wir geplant hatten. So haben wir uns schnell dafür entschieden,​ den Turm zu fixieren und den gesamten Roboter sich drehen zu lassen, um nach dem Brandherd zu suchen. So mussten wir auch Abstriche machen, was unsere Anfangsplanung betraf. Während der Zeit, in der wir den Roboter gebaut haben, stellte sich heraus, dass viele erste Ideen nicht in der Art und Weise umsetzbar waren, wie wir geplant hatten. So haben wir uns schnell dafür entschieden,​ den Turm zu fixieren und den gesamten Roboter sich drehen zu lassen, um nach dem Brandherd zu suchen. So mussten wir auch Abstriche machen, was unsere Anfangsplanung betraf.
-<​note>​ 
-Es wird nicht klar, warum ihr das Blech überhaupt braucht. 
-</​note>​ 
 Angefangen haben wir damit, das Holzbrett zuzuschneiden und das Blech zu kürzen und mithilfe einer soliden Tischkante zu biegen. Viele Löcher mussten wir vorbohren, so zum Beispiel am Blech  und an den Fixierungspunkten der hinteren Motoren. Das Plastikrohr mussten wir kürzen und zurecht schleifen. Außerdem kamen noch mehrere Einschlüsse dazu, um Kamera und Drähte durch das Rohr führen zu können. Anschließend befestigten wir das Rohr über einem dafür vorgesehenen Loch mit Heißkleber,​ nachdem wir uns dafür entschieden hatten, den gesamten Roboter zu drehen und nicht nur den Turm. Mithilfe von verschiedenen Bleistiftmarkierungen konnten wir dann sorgfältig bestimmen, wo die anderen Bauteile befestigt werden sollten, so zum Beispiel der Wassertank und die Elektronik, die wir zum Großteil unter der Holzplatte befestigten,​ um diese beiden Gefahrenpotenziale möglichst effektiv voneinander zu trennen. Angefangen haben wir damit, das Holzbrett zuzuschneiden und das Blech zu kürzen und mithilfe einer soliden Tischkante zu biegen. Viele Löcher mussten wir vorbohren, so zum Beispiel am Blech  und an den Fixierungspunkten der hinteren Motoren. Das Plastikrohr mussten wir kürzen und zurecht schleifen. Außerdem kamen noch mehrere Einschlüsse dazu, um Kamera und Drähte durch das Rohr führen zu können. Anschließend befestigten wir das Rohr über einem dafür vorgesehenen Loch mit Heißkleber,​ nachdem wir uns dafür entschieden hatten, den gesamten Roboter zu drehen und nicht nur den Turm. Mithilfe von verschiedenen Bleistiftmarkierungen konnten wir dann sorgfältig bestimmen, wo die anderen Bauteile befestigt werden sollten, so zum Beispiel der Wassertank und die Elektronik, die wir zum Großteil unter der Holzplatte befestigten,​ um diese beiden Gefahrenpotenziale möglichst effektiv voneinander zu trennen.
  
Zeile 116: Zeile 83:
  
 Für das Programm haben wir damit angefangen, dem Roboter fahren beizubringen,​ damit er in der Lage ist, durch das Drehen auf der Stelle eine mögliche Hitzequelle (Kerze) zu finden, und diese dann ansteuern zu können. Danach mussten wir mithilfe der beiden Kameras eine Erkennungsroutine programmieren,​ um Licht- und Hitzequellen zu erkennen. Für das Programm haben wir damit angefangen, dem Roboter fahren beizubringen,​ damit er in der Lage ist, durch das Drehen auf der Stelle eine mögliche Hitzequelle (Kerze) zu finden, und diese dann ansteuern zu können. Danach mussten wir mithilfe der beiden Kameras eine Erkennungsroutine programmieren,​ um Licht- und Hitzequellen zu erkennen.
- 
-<​note>​ 
-Der letzte Absatz gehört zum Programmablauf. 
- 
- 
-Ihr habt viel text darauf verwendet, den Ablauf des Baus zu schildern - viel interessanter sind aber die Motive für bestimmte Konstruktionsentscheidungen und der Zweck der verwendeten Materialien! Diese sollten an den Anfang des Abschnittes gestellt werden, so wie sie auch am Anfang eures Entwurfsprozesses standen. 
- 
-Welche Kriterien waren für die Entscheidung für genau diese Form und Anordnung der Komponenten ausschlaggebend?​ Warum wurde die Elektronik auf die Unterseite des Roboters gebracht? Wozu dient der Blechsaum? Warum ein Turm für die Kamera? ​ 
-</​note>​ 
  
 Im vornherein hatten wir bereits gemessen, welche Distanzen wir mit der Aquarienpumpe bei verschiedenen Stromstärken abdecken konnten und kamen zum Ergebnis, dass wir mit der möglichen Leistung ausreichend weit kommen. Im vornherein hatten wir bereits gemessen, welche Distanzen wir mit der Aquarienpumpe bei verschiedenen Stromstärken abdecken konnten und kamen zum Ergebnis, dass wir mit der möglichen Leistung ausreichend weit kommen.
- 
-<​note>​Was waren die Ergebnisse eurer Messerie? Ihr habt da doch was aufgeschrieben! 
- 
-(Ok - ich habe sie jetzt beim weiterlesen weiter unten gefunden.... entweder ihr zieht die nach hier oben, oder ihr erwähnt, dass sie weiter unten stehen...) 
-</​note>​ 
  
 Am Ende mussten wir nur noch diese Teile zusammensetzen und letzte kleine Fehler ausarbeiten. Am Ende mussten wir nur noch diese Teile zusammensetzen und letzte kleine Fehler ausarbeiten.
Zeile 142: Zeile 95:
 Um eine höhere Präzision zu erreichen, haben wir allerdings im Nachhinein die PS3-Kamera angeschrägt,​ damit wir auch Kerzen auf kürzere Distanzen erkennen können. Um eine höhere Präzision zu erreichen, haben wir allerdings im Nachhinein die PS3-Kamera angeschrägt,​ damit wir auch Kerzen auf kürzere Distanzen erkennen können.
  
-<​note>​Data,​ Data, Data! Ihr habt gemessen, wo also sind die Messwerte?</​note>​ 
 ==== Aquariumpumpe ==== ==== Aquariumpumpe ====
  
 Um die Leistung der Aquariumpumpe bewerten zu können, haben wir die Entfernung gemessen, welche das Wasser bei unterschiedlichen Spannungen der Pumpe aus einem Meter Höhe in einem Winkel von 0° erreicht hat. Wir haben zwei Messungen durchgeführt:​ Um die Leistung der Aquariumpumpe bewerten zu können, haben wir die Entfernung gemessen, welche das Wasser bei unterschiedlichen Spannungen der Pumpe aus einem Meter Höhe in einem Winkel von 0° erreicht hat. Wir haben zwei Messungen durchgeführt:​
- 
-<​note>​Ist mit Winkel von 0° die horizontale oder vertikale gemeint?</​note>​ 
  
 ^ Spannung in V  ^ Messung 1: Entfernung in cm  ^ Messung 2: Entfernung in cm  ^ ^ Spannung in V  ^ Messung 1: Entfernung in cm  ^ Messung 2: Entfernung in cm  ^
Zeile 159: Zeile 109:
  
 Aus den Messwerten konnten wir eine lineare Steigung bei Erhöhung der Spannung schließen. Doch eine Entfernung von 80cm war uns zu unsicher, da die Spritze später auch tiefer montiert werden sollte. Aus den Messwerten konnten wir eine lineare Steigung bei Erhöhung der Spannung schließen. Doch eine Entfernung von 80cm war uns zu unsicher, da die Spritze später auch tiefer montiert werden sollte.
- 
-<note >Nun ja, der Datensatz ist klein und daher übersichtlich,​ aber üblicherweise stellt man die Daten in einem Graph dar. Aus dem kann man dann auch ohne weiteres einen linearen Zusammenhang ableiten.</​note>​ 
  
 Um höhere Entfernungen zu erreichen, haben wir also an das Ende des Schlauches die Spitze eines Kugelschreibers als Spritze angebracht. Damit erreichten wir Spitzenwerte von bis zu zwei Meter. Alle Mal ausreichend für unsere Zwecke. Um höhere Entfernungen zu erreichen, haben wir also an das Ende des Schlauches die Spitze eines Kugelschreibers als Spritze angebracht. Damit erreichten wir Spitzenwerte von bis zu zwei Meter. Alle Mal ausreichend für unsere Zwecke.
Zeile 217: Zeile 165:
  
 Das größte Problem währed der Arbeit mit der Kamera waren andere Lichtquellen. Diese Störeinflüsse konnte man auch durch die Software kaum eindämmen. Also mussten wir uns etwas einfallen lassen, um alles Licht außer das der Kerzen herauszufiltern. Dazu wollten wir zunächst eine Infrarotlinse auf der Kamera montieren. Um diese dort anbringen zu können, mussten wir allerdings das Gewinde der Kamera ändern und somit auch das komplette Gehäuse demontieren. Als die Linse montiert war, wurde nicht leuchtende Gegenstände zwar dunkler angezeigt, was schon deutlich besser als vorher war, aber andere Lichtquellen waren weiterhin hell. Also haben wir ein Loch in den Deckel der Linse geschnitten,​ um so rote und blaue Folie vor der Linse anzubringen. Diese filterte auch das Kunstlicht aus dem Bild und die Kerzen wurden optimal erkannt, nachdem wir die Lichtempfindlichkeit der Kamera sehr niedrig eingestellt haben. Nur das Tageslicht der Sonne ist weiterhin heller als jedes andere Licht, weshalb wir den Roboter auch nur drinnen nutzen können. Das größte Problem währed der Arbeit mit der Kamera waren andere Lichtquellen. Diese Störeinflüsse konnte man auch durch die Software kaum eindämmen. Also mussten wir uns etwas einfallen lassen, um alles Licht außer das der Kerzen herauszufiltern. Dazu wollten wir zunächst eine Infrarotlinse auf der Kamera montieren. Um diese dort anbringen zu können, mussten wir allerdings das Gewinde der Kamera ändern und somit auch das komplette Gehäuse demontieren. Als die Linse montiert war, wurde nicht leuchtende Gegenstände zwar dunkler angezeigt, was schon deutlich besser als vorher war, aber andere Lichtquellen waren weiterhin hell. Also haben wir ein Loch in den Deckel der Linse geschnitten,​ um so rote und blaue Folie vor der Linse anzubringen. Diese filterte auch das Kunstlicht aus dem Bild und die Kerzen wurden optimal erkannt, nachdem wir die Lichtempfindlichkeit der Kamera sehr niedrig eingestellt haben. Nur das Tageslicht der Sonne ist weiterhin heller als jedes andere Licht, weshalb wir den Roboter auch nur drinnen nutzen können.
-<​note>​Ihr geht da etwas sehr großzügig mit dem tatsächlichen Entstehungsprozess um, um eine gute Geschichte erzählen zu können...</​note>​+
 Hier sieht man den Löschvorgang aus Sicht des Roboters. Das linke Bild im Video zeigt die Sicht der PS3-Kamera und das rechte das unbearbeitete und ungefilterte Bild der Surface-Frontkamera:​ Hier sieht man den Löschvorgang aus Sicht des Roboters. Das linke Bild im Video zeigt die Sicht der PS3-Kamera und das rechte das unbearbeitete und ungefilterte Bild der Surface-Frontkamera:​
  
Zeile 232: Zeile 180:
  
 Die Helligkeit eines Punktes berechnet sich durch den Durchschnitt,​ bzw. die Summe seiner RGB-Werte. Jeder Pixel der Kamera wird in einem Array gespeichert,​ wobei jeweils drei Werte hintereinander der R-, G-, bzw. B-Wert eines jeweiligen Pixels darstellen. Um den hellsten Punkt im Bild zu finden, muss man jeden Pixel im Array einzeln durchgehen und die Helligkeit mit dem bisherigen hellsten Punkt vergleichen. Die Helligkeit eines Punktes berechnet sich durch den Durchschnitt,​ bzw. die Summe seiner RGB-Werte. Jeder Pixel der Kamera wird in einem Array gespeichert,​ wobei jeweils drei Werte hintereinander der R-, G-, bzw. B-Wert eines jeweiligen Pixels darstellen. Um den hellsten Punkt im Bild zu finden, muss man jeden Pixel im Array einzeln durchgehen und die Helligkeit mit dem bisherigen hellsten Punkt vergleichen.
- 
-<note important>​Ist es nun der Durchschnitt oder die Summe? Bitte etwas konkreter werden.</​note>​ 
  
 <code c> <code c>
Zeile 387: Zeile 333:
  
 Der Stepper wird mit zwei Signalen angesprochen. Das eine Signal legt die Richtung des Steppers fest und das andere ob der Stepper dreht oder nicht. Auf letzterem Signal wird ein, von uns erzeugtes, PWM-Signal übertragen,​ welches wir darauf abgestimmt haben, dass der Stepper genau einen Schritt in die vorgegebene Richtung macht. Der Stepper wird mit zwei Signalen angesprochen. Das eine Signal legt die Richtung des Steppers fest und das andere ob der Stepper dreht oder nicht. Auf letzterem Signal wird ein, von uns erzeugtes, PWM-Signal übertragen,​ welches wir darauf abgestimmt haben, dass der Stepper genau einen Schritt in die vorgegebene Richtung macht.
-<​note>​Die Ansteuerung des Steppermotortreibers hat nichts mit PWM zu tun!</​note>​ 
 Diese Funktion lässt den Stepper genau einen Step in die vorher definierte Richtung machen: Diese Funktion lässt den Stepper genau einen Step in die vorher definierte Richtung machen:
 <code c> <code c>
Zeile 402: Zeile 347:
 </​code>​ </​code>​
  
- 
-<​note>​Euer Code ist bisher komplett ohne Kommentare. An vielen Stellen habt ihr das durch eine Beschreibung des codes ersetzt was in Ordnung ist, aber geht den Code nochmals durch und fragt euch wo ein Außenstehender Verständnisprobleme haben könnte.</​note>​ 
 ===== Pinbelegung ===== ===== Pinbelegung =====
  
projektesose2015/loeschbot_clean/start.1447841702.txt.gz · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)