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_Fehlertoleranz
81_FTSD/05_Fehlertoleranz
3 Überblick zu Java / Processing
30_Informatik3/09_Java
78_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:
BilderLaden001.zip
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:
05_esp32AV/02_Lenkregelung
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:
CaptureJavaRT2022_012regler_MODULAR005_OPT.zip
#5 Fr 28.10.2022
Teil 1
Theoretische Besprechung zu möglichen Anwendungen fehlertoleranter Programmierung auf den esp32AV.
siehe dazu: 05_esp32AV/10_Anwendung_Fehlertoleranz
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_Umsetzungsbeispiel
Hinweise zu Schnittstellen:
30_Informatik3/15_Rasterlayout/02_interfaces
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:
05_esp32AV/10_Fehlertoleranz/20_Umsetzungsbeispiel
#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_LICHT001.zip -- Teil 0: Implementierung der Klasse Licht und der Möglichkeit das Licht defekt zu schalten.
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:
|
Ball.zip -- Beispiel zum Exportieren eines Java-Sketches
Ball2.zip -- Beispiel zum Exportieren eines Java-Sketches (Fortsetzung)