+ {{ components.textbox("Warum ändern sich die Boxen und wieso haben sie unterschiedliche Farben?",
+ "Jede Box steht für eine Entscheidung oder eine Aktion, die der Roboter macht.
+ Dabei macht er meist viele unterschiedliche Abwägungen (blaue Boxen), bis er sich am Ende für eine Aktion entscheidet,
+ die er dann ausführt (helle Box). Zusätzlich steht unter jeder Entscheidung neben dem Pfeil nach unten, wofür der Roboter sich entschieden hat.
+ Da der Roboter während des Spiels in unterschiedliche Situationen kommt, ändern sich seine Entscheidungen dementsprechend.
+ Es gibt auch eine alternative Verhaltensbaum-Ansicht, in die durch einen Klick oben auf der Leiste gewechselt werden kann.
+ Dort sind die Entscheidungen in einer Baumstruktur zu sehen, die sich aus den Abwägungen ergibt.
+ Der Baum ist anfangs noch eingeklappt und kann durch Klicken auf die blauen Abwägungen erweitert werden.
+ Zusätzlich stoppt und startet der Button unter der Aktion des Stapels den Fluss an Entscheidungen. ", true, true, false) }}
+
+
+
+ {{ components.textbox("Vergleich zum Menschen", "Das Verhalten ist ähnlich zur Entscheidungsfindung des Menschen,
+ wobei durch kleine Entscheidungen verschiedene Einflüsse abgewogen werden, bis sich der Roboter für eine endgültige Aktion entscheidet.", true, true, false)}}
+
+ {{ components.textbox("Nutzen im Roboter", "Das Verhalten steuert, wo der Roboter hinläuft und was er als Nächstes tut.
+ Hier sind Strategien für das Spiel gespeichert, also Spielzüge: wer wann zum Ball stürmt oder als Verteidiger zurückbleibt.
+ Um diese Entscheidungen treffen zu können, bekommt das Verhalten sehr viele Informationen von anderen Softwarekomponenten,
+ wie zum Beispiel die Position des Balls aus der Bildverarbeitung.", true, false, true)}}
+
+ {{ components.textbox("Wie funktioniert das Verhalten?", "Im Vergleich zur Bildverarbeitung ist das Verhalten nicht gelernt,
+ sondern besteht aus vielen Abwägungen ähnlich zu: wenn X, dann Y. Wobei X und Y durch einen Informatiker im Code festgelegt worden sind.
+ Es gibt verschiedene Strukturen, in denen man diese Abwägungen ordnen kann — darunter endliche Automaten oder Entscheidungsbäume.
+ Doch die Bit-Bots haben sich eine eigene Struktur überlegt: den Dynamic Stack Decider (kurz DSD, in Deutsch so etwas wie dynamischer Stapel-Entscheider).
+ Der DSD ist zunächst sehr ähnlich zu einem Entscheidungsbaum. Die Baumstruktur entsteht dabei durch die verschiedenen Antwortmöglichkeiten auf eine Entscheidung,
+ der ganze Baum ist oben in der Baum-Ansicht zu sehen. Was den DSD nun besonders macht, ist, dass er sich für den
+ aktuell ausgewählten Pfad für jede Entscheidung Zusatzinformationen merkt, indem er die gemachten Entscheidungen auf einen Stapel legt. Der Stapel ist in der Stapel-Ansicht zu sehen.
+ Ändert sich nun der Pfad, weil sich eine Entscheidung an einer Stelle aufgrund einer veränderten Spielsituation ändert,
+ ändert sich auch der ganze Stapel darunter und alles, was sich die Software dort gemerkt hat, wird zurückgesetzt.", false, false, false)}}
+
+{% endblock %}
+
+{% block icons %}
+ {{ icon_components.icons("behavior") }}
+{% endblock %}
+
diff --git a/bitbots_misc/bitbots_education/templates/pages/dashboard.html b/bitbots_misc/bitbots_education/templates/pages/dashboard.html
new file mode 100644
index 000000000..487349098
--- /dev/null
+++ b/bitbots_misc/bitbots_education/templates/pages/dashboard.html
@@ -0,0 +1,91 @@
+{% import "components/imu.html" as imu_components %}
+{% import "components/vision.html" as vision_components %}
+{% import "components/current_action.html" as current_action_components %}
+{% import "components/textbox.html" as components %}
+{% import "components/motor_heat.html" as heat_components %}
+{% import "components/icon_footer.html" as icon_components %}
+
+
+
+{% extends "base.html" %}
+
+
+
+{% block banner %}Hamburg Bit-Bots{% endblock %}
+
+{% block content %}
+
+{% if logging %}
+
+{% endif %}
+
+{{ components.textbox("Willkommen!", "Klicke auf eine der Boxen oder eines der Icons in der Leiste, um mehr Informationen zu bekommen.", true, true, true) }}
+
+
+ {{ components.textbox("Warum wackelt der Bit-Bot da so?",
+ "Die Abbildung mit dem Roboter visualisiert die Drehgeschwindigkeiten und Beschleunigungen des Roboters.
+ Diese wurden durch eine inertiale Messeinheit (im Englischen inertial measurement unit, kurz IMU) gemessen. Wenn der echte Roboter also zur Seite kippt,
+ dann misst die IMU dies und der kleine Bit-Bot hier oben neigt sich ebenfalls.", true, true, false) }}
+ {{ components.textbox("Vergleich zum Menschen", "Die IMU ist vergleichbar mit dem menschlichen Gleichgewichtssinn.", true, false, false)}}
+
+
+
+
+
+
Die blau umkreiste Komponente ist die IMU
+
+ {{ components.textbox("Nutzen im Roboter", "Die Daten, welche die IMU aufnimmt, können zur Laufstabilisierung beitragen.
+ Kippt der Roboter zu weit in die eine Richtung, kann die Software darauf reagieren und Maßnahmen vornehmen, die ein Fallen verhindern.
+ Sollte der Roboter zu weit kippen, zeigt das die IMU ebenfalls an und der Roboter kann noch im Fallen darauf reagieren.
+ Dadurch wird eine möglichst hardwareschonende Landung möglich. Zudem wird sie genutzt, um festzustellen, auf welche
+ Seite der Roboter gefallen ist und was er machen muss, um wieder aufzustehen.", true, false, true)}}
+ {{ components.textbox("Wie funktioniert die IMU?", "Unsere IMU besitzt zwei Hauptbestandteile. Das erste ist ein Gyroskop,
+ welches die Rotationsgeschwindigkeit der IMU misst. Das zweite ist ein Beschleunigungssensor, welcher die Beschleunigung der
+ IMU in verschiedene Richtungen misst. Meist nimmt eine IMU nicht nur Daten auf, sondern verarbeitet diese auch gleich ein wenig.
+ Hierbei wird zum Beispiel die Schräglage des Roboters über kurze Zeit durch Integrieren (vereinfacht: Aufsummieren von Werten) des Gyroskops errechnet.
+ Dabei werden auch kleine Messfehler aufsummiert, welche kurzzeitig wenig Einfluss haben, über lange Zeit das Ergebnis deutlich verändern.
+ Deshalb wird der Wert über lange Zeit mithilfe der von den Beschleunigungssensoren gemessenen Erdbeschleunigung korrigiert.
+ ", false, false, false)}}
+
+
+ {{ heat_components.motor_heat_component(false) }}
+
+ {{ components.textbox("Was sind das für bunte Punkte auf dem Roboter?", "Jeder farbige Punkt zeigt den jeweils wärmsten Motor des Gelenks an.
+ Je weiter oben die Farbe des Punktes auf der Skala neben dem Roboter dabei ist, desto wärmer ist der wärmste Motor an der Stelle.
+ Die beiden Werte über und unter der Skala geben an, in welchem Spektrum sich die Temperaturen der Motoren bewegen.
+ Dabei ist kein Motor kühler als die untere Temperatur oder wärmer als die obere Temperatur.", true, true, false) }}
+ {{ components.textbox("Vergleich zum Menschen", "Die Motoren sind wie Muskeln, die den Roboter bewegen. Mit der Zeit werden die Motoren durch die Bewegung immer wärmer,
+ ähnlich dazu, wie uns Menschen beim Sport meist auch wärmer wird. Je wärmer die Motoren werden, desto ungenauer werden sie,
+ wodurch der Roboter über die Zeit hinweg immer schlechter läuft — ähnlich dazu, wie wir Menschen durch Sport erschöpfter werden.", true, false, false)}}
+
+
+
Dieses Motormodell ist aktuell vor allem in den Beinen zu finden.
+
+ {{ components.textbox("Nutzen im Roboter", "Die Motoren führen Befehle aus und fahren die Positionen an, die die Software ihnen vorgibt.
+ Dabei hat jede Motorposition eine wichtige Aufgabe im Spielgeschehen: Die Motoren in den Beinen bewegen den Roboter über das Spielfeld,
+ die Motoren in den Armen werden hauptsächlich beim Aufstehen genutzt, und die Motoren im Hals bewegen unaufhörlich die Kamera, damit diese ein möglichst großes
+ Feld nach wichtigen Informationen absuchen kann.", true, false, true)}}
+ {{ components.textbox("Wie gut können Roboter laufen?", "Wir Menschen laufen unser Leben lang,
+ meist auch schon ab sehr jungen Jahren. Einmal gelernt, machen wir die Bewegungsabläufe fast schon automatisch.
+ Darüber hinaus helfen uns unsere Reflexe bei der Laufstabilisierung, ohne dass wir aktiv etwas entscheiden müssen.
+ Um nun einen Roboter zum Laufen zu bringen, müssen wir verstehen, welche Bewegungsabläufe wir Menschen beim Laufen machen,
+ und diese auf den Roboter übertragen — was gar nicht so einfach ist, weil vieles am Laufen, z.B. auch das Gleichgewicht halten,
+ eher ein unbewusster Prozess ist. Daher ist vor allem das zweibeinige Laufen ein relativ schweres Problem für Roboter bzw.
+ für herkömmliche Algorithmen. Hier wird dann mit sogenannten Splines gearbeitet, dies sind Kurven zwischen Punkten auf einem Graphen,
+ die ruckfreie Bewegungsabläufe modellieren. Mittlerweile benutzen viele Roboter bestärkendes Lernen. Hierbei lernt der Roboter das Laufen mehr wie ein Mensch.
+ Dabei soll der Roboter in einer Simulation versuchen zu laufen: Schafft er dies, wird er belohnt, schafft er es nicht, wird ihm das auch mitgeteilt,
+ und er versucht einen neuen Ansatz. Meist ist das Laufenlernen hier auch ein Prozess, der über viele Wiederholungen stattfindet,
+ dann aber auch bessere Ergebnisse liefert als herkömmliche Algorithmen.", false, false, false)}}
+
+ {{ components.textbox(
+ "Was ist das für ein Kreis um dem Ball herum?",
+ "Das hier ist nicht einfach nur der Live-Stream der Kamera des Roboters. Er beinhaltet zudem Markierungen der Dinge,
+ die der Roboter in dem Bild zu sehen glaubt. Dabei werden Bälle mit einem grünen Kreis versehen, andere Roboter eingerahmt und Linien in Blau markiert.",
+ true, true, false) }}
+ {{ components.textbox("Vergleich zum Menschen", "Die Bilderkennung des Roboters gleicht der Objekterkennung des Menschen.
+ Sie schaut auf ein Bild und sagt: An der Stelle ist ein Ball. Ähnlich wie beim Menschen wird sie nicht etwa manuell einprogrammiert,
+ sondern durch das Betrachten von vielen Bildern erlernt.
+", true, false, false)}}
+
+
+
Die aktuelle Kamera des Roboters. Die dunkle "Frisur" hilft bei der Kühlung der Kamera.
+
+ {{ components.textbox("Nutzen im Roboter", "Viele Komponenten des Roboters benutzen die Erkenntnisse aus der Bildverarbeitung:
+ Das Wissen über die Position des Balls ist für Verhaltensentscheidungen sehr wichtig, erkannte Feldlinien dienen zur Orientierung
+ auf dem Feld und erkannte Roboter werden in der Strategie sowie der Pfadplanung berücksichtigt — Letzteres vor allem, damit es möglichst wenig Zusammenstöße gibt.", true, false, true)}}
+ {{ components.textbox("Woher weiß die Vision dass da ein Ball ist?",
+ "Sie hat es durch maschinelles Lernen gelernt. Doch wie funktioniert das? Ein Mensch lernt z.B. von seinen Eltern,
+ was ein Ball ist. Zuerst zeigt ein Elternteil auf einen Ball und sagt: Das ist ein Ball. Später zeigt das Kind selbst auf Gegenstände,
+ die wie ein Ball aussehen, und der Erwachsene bestätigt die Annahme oder berichtigt. Beim maschinellen Lernen funktioniert es ähnlich.
+ Während des Lernens versucht ein künstliches neuronales Netz immer wieder zu raten, ob und wo auf einem Bild ein Ball ist.
+ Das wird dann abgeglichen mit einem vorher von Menschen annotierten Bild, auf dem der Ball an der richtigen Stelle markiert wurde.
+ Das Netz ändert daraufhin die Gewichte seiner Neuronen und wird dadurch über die Zeit besser, bis es gut genug ist und das Training beendet wird.
+ Das fertig gelernte Netz wird dann noch mit neuen Bildern getestet und schließlich verbaut. Ab diesem Punkt wird nicht weiter gelernt,
+ sondern nur bereits Gelerntes auf neue Bilder angewendet.", false, false, false)}}
+