kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




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.

  • MB3 Regelungs- und Steuerungstechnik: Mittwoch 14.12., 21.12.,11.1., jeweils 10:00-11:00Uhr und länger nach Bedarf.
  • MT5 Simulations- und Regelungstechnik 2: Mittwoch 14.12., 21.12.,11.1., jeweils 11:30-12:30Uhr und länger nach Bedarf.
  • MMB Fehlertoleranter Softwareentwurf: Freitag 16.12.,23.12.,13.1., jeweils 10:00-11:00Uhr und länger nach Bedarf.
  • Masterkurs Künstlerische Forschung: Freitag 16.12.,23.12.,13.1., jeweils 11:30-12:30Uhr und länger nach Bedarf.

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

  • Die vorliegende Seite stellt den Einstiegspunkt für diese Lehrveranstaltung dar und verzeichnet chronologisch die behandelten Inhalte.
  • Aber ein großer Teil der Inhalte findet sich nicht direkt hier, sondern die Seite hier verlinkt auf andere Bereiche von kramann.info.

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:

  1. Zu Beginn werden die Pattern für fehlertoleranten Software-Entwurf theoretisch vorgestellt.
  2. Praktisch angewendet werden sollen diese Pattern dieses Jahr auf ein autonomes Vehikel (esp32AV), das im Kurs in Zweiergruppen eingeführt, aufgebaut und getestet wird.
  3. Dann sind Sie in Zweiergruppen gefordert, sich eine mögliche praktische Umsetzung eines von Ihnen ausgewählten Pattern für das esp32AV zu finden und allen vorzustellen. Dies ist der seminaristische Teil.
  4. Schließlich sind die vorgestellten Pattern von den jeweiligen Zweiergruppen als Projektarbeit mit Java/Processing umzusetzen und als Prüfung in der letzten LV zu präsentieren. Auch ein Bericht ist abzugeben.

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:

  • Lesen noch von der Einleitung Examples of Fault->Error->Failure und Failure Perce
  • Lesen Sie bis Seite 46 (erste beiden Pattern)

Teil 1: Lesen und Besprechen der Pattern "Units of Mitigation" und "Correcting Audits"




  • Hinführung über praktisches Programmierbeispiel mit Processing:
  • Wie kann ein System darauf reagieren, wenn eine Resource nicht verfügbar ist? (hier ein Bild)

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:

  1. Besprechung der Pattern Mitigation, Correcting Audits und Redundancy
  2. Übungen und Weiterbau und Test der Fahrzeuge esp32AV

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

  1. Bringen Sie CaptureJavaRT2022_012regler_MODULAR005_OPT zum Laufen.
  2. Setzen Sie als Vorübung ein Fehlertoleranzpattern um, das Verzögerungen beim Streaming behandelt.
  3. Diskutieren Sie in der Gruppe, welche Bezüge Ihre Lösung zur Theorie hat und arbeiten Sie diese in der Software heraus.

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

  1. Durchsprechen der Anforderungen an die Umsetzung eines fehlertoleranten Systems beim esp32AV
  2. Gemeinsame Analyse der Beispielumsetzung des Fehlertoleranz-Pattern, das aktiv wird, wenn die Bahn verloren wird
  3. Fortsetzung der Konkretisierung der Projektthemen

Anforderungen an die Umsetzung eines fehlertoleranten Systems beim esp32AV:

  1. Es wird zu Beginn der Projektphase für jede Zweiergruppe verbindlich ein Thema vereinbart
  2. Die zu ergänzende Fehlertoleranz-Software soll sich an den im Unterricht behandelten Pattern orientieren
  3. Jedes umgesetzte Pattern muss als eine eigene Klasse und ein eigenes Tab umgesetzt werden
  4. Im Verlauf der Projektphase präsentiert jede Gruppe midestens zweimal ihren Projekt-Zwischenstand dem Dozenten
  5. Das fertige Projekt (Sketch) wird nach Abschluß mit einem 5 bis 10-seitigen Bericht und einem Video in dem das Pattern in Aktion zu sehen ist (das Video besser als Link auf ein ungelistetes youtube-Video) bei Moodle als Hausarbeit hochgeladen
  6. Der Upload bei Moodle dient nur als Sicherheit.
  7. Die Prüfung ist die Präsentation am letzten Vorlesungstermin (bitte dann Studierendenausweise mitbringen und vorzeigen): Fr 20.01.2023 Abschlusspräsentationen FTSD

Bei Moodle bis spätestens 19.01.2023 sind also hochzuladen:

  1. Das fertige Projekt (Processing-Sketch)
  2. 5 bis 10-seitiger Bericht
  3. Video in dem das Pattern in Aktion zu sehen ist, besser in Bereicht youtube-Link auf ungelistetes Video angeben!

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.
Screenshot des Programms.

Bild 0-1: Screenshot des Programms.

#7 Fr 11.11.2022

Themen

  1. Wiederholte kurze Besprechung der Fehlertoleranz-Pattern
  2. Gemeinsamer Entwurf einer beispielhaften Softwarearchitektur für ein esp32AV mit Fehlertoleranz-Strukturen
  3. Fortsetzung der Projektarbeiten und Behandlung aktueller Fragen und Probleme

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.

  • Das Licht beim esp32AV soll in einem Selbsttest vor Fahrtbeginn überprüft werden.
  • Dazu wird die eigentliche Fahrt erst nach 10 Sekunden gestartet.
  • Davor soll der Regelalgorithmus deaktiviert sein.
  • Das Fahrzeug soll in dieser Zeit einen Selbsttest vornehmen, mit dem erkannt werden soll, ob das Licht funktioniert.
  • Hierzu soll die Veränderung im Kamerabild verwendet werden, wie sie auftritt, wenn erst das Licht aus ist und dann angeschaltet wird.
  • Über eine Taste an der PC-Tastatur soll außerdem ermöglicht werden, das Einschalten des Lichts temporär zu unterbinden, um auch den Fall des Versagens des Lichts und die Reaktion darauf simulieren zu können.
  • Arbeiten Sie in den bereits gebildeten Zweiergruppen zusammen.
  • Überlegen Sie selber, in welche Teilaufgaben die gesamte Aufgabe untergliedert werden könnte und machen Sie einen Ablaufplan dazu, wie Sie vorgehen werden.
  • Suchen Sie für diese Übung möglichst einfache Lösungen, da die Bearbeitungszeit auf diese und einem Teil des Kurses nächste Woche begrenzt ist.
  • Überlegen Sie selber, welche Fertigkeiten in der Programmierung Ihnen fehlen, um die Teilaufgaben zu lösen und fragen Sie diesbezüglich nach.
  • Überlegen Sie selber, wie genau der Selbsttest durchgeführt werden kann.
  • Überlegen Sie selber, welche Fehlertoleranz-Pattern für das Projekt Relevanz haben könnten.
  • Überlegen Sie selber, wie Sie die Programmstruktur erweitern können, um die Anforderungen zu erfüllen.
  • Überlegen Sie selber, wie Sie Ihr Projekt objektorientiert umsetzen können.
  • Überlegen Sie, wie Sie Ihr Konzept prägnant und einfach anderen beschreiben können.
  • Testen und demonstrieren Sie, dass Ihre Umsetzung der Aufgabe funktioniert.

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:

  • Das Licht beim esp32AV soll in einem Selbsttest vor Fahrtbeginn überprüft werden.
  • Dazu wird die eigentliche Fahrt erst nach 10 Sekunden gestartet.
  • Davor soll der Regelalgorithmus deaktiviert sein.
  • Das Fahrzeug soll in dieser Zeit einen Selbsttest vornehmen, mit dem erkannt werden soll, ob das Licht funktioniert.
  • Hierzu soll die Veränderung im Kamerabild verwendet werden, wie sie auftritt, wenn erst das Licht aus ist und dann angeschaltet wird.
  • Über eine Taste an der PC-Tastatur soll außerdem ermöglicht werden, das Einschalten des Lichts temporär zu unterbinden, um auch den Fall des Versagens des Lichts und die Reaktion darauf simulieren zu können.

Ablauf bei der Bearbeitung des Vorprojekts:

  1. Besprechung der studentischen Teillösungen und der aufgetretenen Probleme
  2. Ermittlung einer geeigneten Methode mit Hilfe von Vorversuchen
  3. Identifikation der zu implementierenden Teilaufgaben
  4. Hierarchisierung der Teilaufgaben: Was hängt wovon ab
  5. Festlegen einer sinnvollen Abfolge bei der Umsetzung der verschiedenen Teilaufgaben
  6. Aufeinander aufbauende Umsetzung der verschiedenen Teilaufgaben
  7. Sinnvolle Zuordnung der Aufgabe zu verschiedenen Fehlertoleranz-Pattern
  8. Entwurf einer objektorientierten Programmstruktur
zu 3. und 4.: Identifikation der zu implementierenden Teilaufgaben
  1. Ablauf implementieren: 10 Sekunden warten, Selbsttest, geregeltes Fahren
  2. Während des Selbsttests Licht automatisch zeitweise ein- und dann wieder ausschalten
  3. Defekt über Tasten simulieren können
  4. Automatische Detektion des Lichts wenn es eingeschaltet wird
  5. Umsetzung der Fehlertoleranzpattern, also Reaktion auf den Zustand des Lichts implementieren
  6. Objektorientierte Variante umsetzen, bzw. Objektorientiertheit weiter verbessern
  7. Test, Analyse und Dokumentation der Umsetzung
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:

  1. Absprachen zur Schließzeit und zur Prüfung
  2. Analyse eines exportierten Processing-Sketches
  3. Weitere Konkretisierung der Projektthemen
  4. Arbeit an den Projekten
Ball.zip -- Beispiel zum Exportieren eines Java-Sketches
Ball2.zip -- Beispiel zum Exportieren eines Java-Sketches (Fortsetzung)

#11 Fr 09.12.2022

--- Schließung THB ---

#12 Fr 16.12.2022 ONLINE

#13 Fr 23.12.2022 ONLINE

#14 Fr 13.01.2023 ONLINE

--- Öffnung THB ---

#15 Fr 20.01.2023 Abschlusspräsentationen FTSD