DAY BY DAY zu FTS MMB -- Entwicklung fehlertoleranter Software für eingebettete Echtzeitsysteme
(EN google-translate)
(PL google-translate)
Online-Unterricht ab 14.12.:
Die Online-Zeiten werden kurz gehalten und dort vorwiegend Aufgaben, bzw. Projektthemen ausgegeben und besprochen, die selbsttätig bearbeitet werden sollen. Der hierzu verwendete BBB-Link und ein Reservelink wurden Ihnen als E-Mail über Moodle zugesendet.
|
Mittwoch, 18.01.23 und Freitag 20.01.23 finden in Präsenz statt und dienen als E-Test-Prüfung, bzw. der Projektpräsentation.
Übersicht
|
Allgemeines
Die Lehrveranstaltung "Entwicklung fehlertoleranter Software für eingebettete Echtzeitsysteme" enthält sowohl theoretische, praktische, seminaristische und Projekt-bezogene Anteile. Sie folgt zudem einem bestimmten Arbeitszyklus, in dem diese Anteile miteinander verzahnt sind:
|
Chronologisches Verzeichnis der im Verlauf des Semesters behandelten Themen
#1 Fr 30.09.2022
1 Überblick zum Kurs
2 Einführung der Pattern für fehlertoleranten Software-Entwurf
81_FTSD/01_Fehlertoleranz81_FTSD/05_Fehlertoleranz
3 Überblick zu Java / Processing
30_Informatik3/09_Java78_Processing
92_Soundinstallation/03_material/11_Snippets
4 Überblick und Beginn mit dem Aufbau des esp32AV
siehe: kramann.info/05_esp32AV#2 Fr 07.10.2022
Aufgabe bis 7.10. zur Vorbereitung:
|
Teil 1: Lesen und Besprechen der Pattern "Units of Mitigation" und "Correcting Audits"
|
Im Unterricht enstandene Quelltexte in Processing:
BilderLaden002.zip
BilderLaden003.zip
BilderLaden004.zip
Teil 2: Fortsetzung zum Aufbau des esp32AV
#3 Fr 14.10.2022
Themen:
|
Die Beschreibung der Übungsaufgaben, mit denen heute begonnen werden soll, befindet sich am Ende des Kapitels "Lenkregelung" bei esp32AV:
Bitte lesen Sie zum 21.10. die nächsten drei Pattern: Recovery Blocks, Minimize Human Intervention und Maximize Human Participation
#4 Fr 21.10.2022
Übung: Fertigstellen des esp32AV
Verwenden Sie zum Testen final auch das jüngste aktuelle Beispiel zur Lenkregelung:
#5 Fr 28.10.2022
Teil 1
Theoretische Besprechung zu möglichen Anwendungen fehlertoleranter Programmierung auf den esp32AV.
Teil 2
Praktische Umsetzung: Fehlertolerante Behandlung der Bahnerkennung.
Teil 3 -- Übung
|
Hinweis: Mit folgendem Code erhalten Sie die Systemzeit in Millisekunden:
long t = System.currentTimeMillis();
Code 0-1: Systemzeit in Millisekunden.
Übung Fehlertoleranter Software-Entwurf Identifizieren Sie Software-Module (Klassen / Programmteile), die mit den aufgelisteten Störungen jeweils in Verbindung stehen. 1. Ordnen Sie den verschiednenen Störungen Fehlertoleranz-Pattern zur Verminderung von deren Auswirkungen zu. 2. Entwickeln Sie zu dreien der aufgelisteten Störungen ein Konzept zu deren jeweiliger Behandlung. 3. Diskutieren Sie in der großen Runde Praktikabilität, sowie Wirksamkeit und Machbarkeit Ihres Konzeptes. 4. Entscheiden Sie sich endgültig für ein Konzept, dass Sie dann umsetzen und stimmen Ihre Entscheidung mit allen anderen Gruppen und der Lehrperson so ab, dass nicht zwei Gruppen das gleiche Konzept verfolgen. AAAAAAAAAAAAA Verlieren der roten Linie MODULE: Bildv. Regler, Motor STÖRUNGEN behandeln: 1) erst gar nicht verlieren 2) falls doch: Geschw. Drosseln, Drehbewegung in Richtung zuletzt "gesehener" Position 3) wenn 2) nicht greift, Abschalten und Benutzer informieren PATTERN: Minimize human Intervention (selber Linie wiederfinden) Mitigation: Geschw.drosselung zu 1): Wandert rote Linie an den Rand, gezielt gegensteuern Fault Observer: PC informieren über den Fehler beim esp32AV ESCALATION: angemessene Reaktionen auf verschieden starke Störungen Maximize human participation: Benutzer Rückmelden, was passiert ANREGUNG, BENUTZUNG ArrayList: ArrayList<float[]> merker = new ArrayList<float[]>(); public void setup() { println("Hallo"); merker.add(new float[] {1.0,3.0}); merker.add(new float[] {2.0,7.0}); merker.add(new float[] {3.0,-3.0}); println("Größe der Liste: "+merker.size()); float[] erstes = merker.get(0); float[] letztes = merker.get(merker.size()-1); println("erstes: t="+erstes[0]+" x="+erstes[1]); println("letztes: t="+letztes[0]+" x="+letztes[1]); } BBBBBBBBBBBBBBB (Stand 4.11.) Hindernisse auf der Fahrbahn MODULE: Bild, Regler, Motor STÖRUNGEN behandeln: PATTERN 1) Maximierung menschlicher Anteilnahme: 2) Wagen könnte Richtung ändern Ideen aus dem Plenum: Zwei mögliche Richtungen: a) Warten, bis Hindernis beseitigt b) Entscheidung des Benutzers, ob es sich um ein Hindernis ist. NICHT Benutzer gibt "GO" wenn Hindernis beseitigt, SONDERN Softwaremodul (Someone in Charge, ev. Zweite Kamera) Aufforderung ev. Zum Übergehen der Fehlermeldung Detektieren des Hindernisses: einfach als Unterbrechung der roten Linie -- Wie kann Lichtreflex von Hindernis unterschieden werden? ---- ev. Helligkeitswerte / mit Uhrzeit vergleichen(???) ---- Begrenzung der Aufgabe: Hindrnisse sind blau (Beispiel) ---- Herantasten ev. CCCCCCCCCCCCCCCCCCCCC Störung beim Videostreaming MODULE: Bildv. Antrieb (Regler ev. langsamer Vortrieb) Maßnahmen: Rückmeldung an menschlichen Benutzer: Ausfall Kamera (Maximize human participation) 1) letztes Bild speichern als gültig und langsamer fahren 2) robben 3) ganz stoppen, bis Streaming wieder flüssig (je nach Länge der Ausfälle 1) oder wenn schlimmer dann 2) PATTERN: Mitigation Redundanz (?) Recovery Block (?) eventuell "robben": immer auf nächstes Bild warten, dann kurz passend reagieren und wieder auf nächstes Bild warten usw. BILDVERGLEICH: hat sich etwas geändert? VERSUCH WiFI automatisch wiederzuverbinden Umsetzung Escalation mit Java-Interfaces, Dummy-Beispiel: public interface iRegler { public abstract float berechne(float x); } public class Regler1 implements iRegler { public float berechne(float x) {return x*x;} } public class Regler2 implements iRegler { public float berechne(float x) {return x+x;} } public class Antrieb { iRegler regler; public void registriereRegler(iRegler r) { regler = r; } public void fahrt(float y) { println(y+" ergibt "+regler.berechne(y)); } } Antrieb antrieb = new Antrieb(); Regler1 r1 = new Regler1(); Regler2 r2 = new Regler2(); public void setup() { antrieb.registriereRegler(r1); antrieb.fahrt(1.0); antrieb.registriereRegler(r2); antrieb.fahrt(1.0); } DDDDDDDDDDDDDDDDDDDDDDDDDDD Verlieren der Bahnmarkierung Maßnahmen: Reduktion der Vortriebsgeschwindigkeit Weiter geben an "Someone in Charge": Versuch, Ursache zu erkennen: a) Netzwerkverb. Prüfen? -- "Ping": Testdaten senden, die bewirken, dass etwas zurück kommt. b) Konsistenz der empfangenen Daten prüfen... z.B. bei PWM-Signalen EEEEEEEEEEEEEEEEEEEEEEEEEEE (Stand 30.10. | 11.11.) Welchsende Lichtverhältnisse MODULE: Bildv. (Antrieb...) Maßnahme: Nimmt aktuelles Bild, wenn kein rot zu sehen, dann Schwellwert ändern, aber Plausibilität prüfen: Ist die Bahn zu sehen? -- a) Bildvergleich / Bilderkennung (bekannte Bilder, in denen die Bahn bekanntermaßen zu sehen ist, sollten dem aktuellen Bild ähneln) Streuung als Kriterium: Es wird sowieso der Schwerpuntk der roten Pixel gebildet: spx. Dabei kann ohne weiteres auch die Struung der auftretenden rot-Werte in ihrer x-Position im Bild berechnet und als Beurteilungsgrundlage dafür verwendet werden, on eine Bahn zu sehenn ist, oder nicht. FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Aufteten starker Schwingungen MODULE: Regler, Antrieb Maßnahmen: a) Proportionale Verstärkung automatisch kalibrieren b) ev. auch Vortrieb ändern Detektion?: Dauer einer Kreisbahn??? -- dauert zu lange, keine Detektionsmöglichkeit ZWEI MÖGLICHKEITEN: Schauen, was Antrieb macht, oder schauen, was Bild zeigt. ALGORITHMUS ZUR DETEKTION EINER SCHWINGUNG: Man legt Extrempunkte minimale und maximale fest, und zählt, wie oft diese in einem bestimmten Zeitraum überschritten werden. /\ - - - - - - - - / \ / - - - - - - - - \/ Visualisieren Sie diese Überschreitungen und zeigen Sie diese im Programmfenster an. GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG Störung bei Motorsteuerung MODULE: Antrieb / UDPcomfort Maßnahmen: //Gezielte Steuersignale, Systematische Störungen (ein Rad reibt) z.B. durch Erhöhung des Niveaus der Stellsignale ausgleichen. Detektion: Idee: Selbsttest mit kurzen Motor-Impulsen, nachträglicher Vergleich des Kamerabildes vor und nach dem Impuls. Vorgang findet als seperater Testmodus außerhalb des normalen Betriebs statt. Selbsttest auch mit Taste auslösen können. ANREGUNG: DEFINITION VERSCHIEDENER INNERER ZUSTÄNDE (MODUS), ZWISCHEN DENEN BEDINGT UMGESCHALTET WIRD: int MODUS = 0; // 0==Fahrzeug steht, 1==Test, 2==Normaler Betrieb public void setup() { } public void draw() { switch(MODUS) { case 0: //fahrt(0,0); break; case 1: //macheTest(); break; default: //... break; } }
Code 0-2: Übung Fehlertoleranter Software-Entwurf
#6 Fr 04.11.2022
Hausaufgabe zu Fr 04.11.2022: restliche Pattern lesen, 20_Umsetzungsbeispiel analysieren (s.u.)
Die Umsetzung der Fehlertoleranz-Software im Zusammenhang mit dem Verlust des Kamerafokus auf die Bahn, wurde nach esp32AV übertragen:
Diese Art der Umsetzung versteht sich als Anforderung an die Software-Architektur Ihres Projektes!
05_esp32AV/10_Fehlertoleranz/20_Umsetzungsbeispiel
Themen
|
Anforderungen an die Umsetzung eines fehlertoleranten Systems beim esp32AV:
|
Bei Moodle bis spätestens 19.01.2023 sind also hochzuladen:
|
Gemeinsame Analyse der Beispielumsetzung des Fehlertoileranz-Pattern, das aktiv wird, wenn die Bahn verloren wird
Siehe hier ganz unten: 05_esp32AV/10_Fehlertoleranz/20_UmsetzungsbeispielHinweise zu Schnittstellen:
Beispiel-Anwendung zu Interfaces für grafische Figuren mit Processing
Schnittstellen100.zip -- im Unterricht entstanden.Bild 0-1: Screenshot des Programms.
#7 Fr 11.11.2022
Themen
|
Thema 2, siehe unten bei:
#8 Fr 18.11.2022
Vorübung: Selbstständige Umsetzung eines kleineren Fehlertoleranzprojektes in den Zweiergruppen
Um besser die Anforderungen an die Projektarbeit diskutieren zu können und auch, um die bisher erarbeiteten Techniken einmal an einem kleinen Beispiel anwenden zu können, soll von allen Gruppen das nachfolgende Projektthema umgesetzt werden.
Das Thema ist bewusst einfacher und weniger umfänglich gewählt worden und liegt außerdem jenseits der sinnvollen möglichen Themen für die eigentlichen Projektarbeiten.
Vorprojekt -- Selbsttest der Beleuchtung
Planen, detaillieren und setzen Sie folgendes Projekt im Sinne einer Fehlertoleranzmaßnahme um, bei der die erlernten Pattern umgesetzt werden.
|
|
Nach einer ersten selbsttätigen Bearbeitungsphase, werden zunächst auftauchende Probleme geklärt.
--- 2. Semesterhälfte ---
#9 Fr 25.11.2022
Gemeinsame Bearbeitung des Vorprojekts
Wiederholung der Aufgabenstellung:
|
Ablauf bei der Bearbeitung des Vorprojekts:
|
zu 3. und 4.: Identifikation der zu implementierenden Teilaufgaben
|
CaptureJavaRT2022_LICHT002.zip -- Teil 4: Automatische Detektion, ob Licht funktioniert
CaptureJavaRT2022_LICHT003.zip -- Teil 5./6.: Übertragen der Licht-Überprüfung in ein FaultObserver-Pattern
#10 Fr 02.12.2022
Themen:
|
Ball2.zip -- Beispiel zum Exportieren eines Java-Sketches (Fortsetzung)