Von der Automatisierungs- pyramide zu vernetzten Prozessen

Das Schaubild zeigt die Entwicklung von der Digitalisierungspyramide hin zu dem moderneren Ansatz der vernetzten Prozesse.

Intelligenter produzieren bedeutet häufig auch vernetzter produzieren. In diesem Beitrag stellen wir die Automatisierungspyramide vor und wie sie sich in einen moderneren Ansatz übertragen lässt.

Die Automatisierungspyramide – das traditionelle Bild:

Die Automatisierungspyramide ist ein Konzept, das in der Automatisierungs- und Steuerungstechnik verwendet wird, um die verschiedenen Ebenen der Automatisierungshierarchie in einem Produktionsprozess zu beschreiben und zu organisieren. Sie besteht aus mehreren Schichten, die die verschiedenen Aufgaben und Verantwortlichkeiten in einem automatisierten System repräsentieren:

  1. Feldebene: Dies ist die unterste Schicht der Automatisierungspyramide, in der Sensoren, Aktoren und Feldgeräte angeschlossen sind.

  2. Steuerungsebene: Auf dieser Ebene werden die Daten von den Feldgeräten verarbeitet und gesteuert. Hier befinden sich PLCs (Programmable Logic Controllers) oder SPS (Speicherprogrammierbare Steuerungen), die die Prozesslogik ausführen.

  3. Leitebene: Die Leitebene ist die nächsthöhere Schicht und umfasst SCADA-Systeme (Supervisory Control and Data Acquisition). Hier werden Prozessdaten erfasst, überwacht sowie visualisiert. Es können Entscheidungen auf der Grundlage dieser Daten getroffen werden.

  4. Prozessleitebene: Diese Ebene ist für die Produktionsplanung und -steuerung verantwortlich. Hier werden Produktionsaufträge geplant, Prozessparameter optimiert und Produktionsdaten analysiert. Ein MES (Manufacturing Execution System) ist eine Software, die auf diese Anforderung spezialisiert ist.
  5. Unternehmensebene: Dies ist die oberste Schicht der Automatisierungspyramide. Sie umfasst die betriebswirtschaftlichen Aspekte, wie zum Beispiel die Unternehmensplanung, die Ressourcenallokation und die Integration von Produktionsprozessen in die gesamte Unternehmensstruktur. Auf dieser Ebene werden ERPs (Enterprise Resource Planning) einsortiert.

Die Auflösung der Pyramide

Die Auflösung der Automatisierungspyramide durch Microservices bezeichnet einen Paradigmenwechsel in der Softwarearchitektur und Automatisierung von Anwendungen. Die traditionelle Automatisierungspyramide, die aus Schichten wie Feldgeräte, Steuerungsebene, Leitebene und Unternehmensebene besteht, wird durch Microservices aufgelöst. Dies ermöglicht eine höhere Flexibilität und Skalierbarkeit in den Prozessen. Die Microservices werden durch eine IIoT -Plattform (Industrial Internet of Things) gebündelt.

Diese IoT Plattformen werden in MES Systeme integriert und ermöglichen ein fortgeschrittenes Manufacturing Operations Management (MOM). Dies ist der Bereich der Unternehmenssoftware, der darauf abzielt, die Fertigungsprozesse in einem Unternehmen zu optimieren und zu steuern. Es bildet die Schnittstelle zwischen der Unternehmensplanungsebene (Enterprise Resource Planning, ERP) und der Steuerungsebene der Produktionsanlagen (wie beispielsweise der Leitebene in der Automatisierungspyramide).

Diesen Ansatz verfolgen wir auch mit unserer ATR Softwareplattform, auf der die Fertigungsprozesse über IIoT- und MES-Funktionen abgebildet und dort, wo es Sinn macht, durch zusätzliche KI-Methoden ergänzt werden.

Wollen Sie mit uns Ihre Produktionsprozesse flexibel und skalierbar gestalten? Sprechen Sie uns an.

Optimierung in der Produktion

Das Bild zeigt vier Formen – drei blaue Würfel und eine orange Kugel. Die Kugel bewegt sich schneller und steht hier für die Optimierung in der Produktion.

Warum Optimierung?

Optimierungsmethoden spielen in der Produktion eine entscheidende Rolle, da sie dazu beitragen, Ressourcen effizient zu nutzen, Kosten zu minimieren und die Produktionsleistung zu maximieren. 

Diese Methoden können eine Vielzahl von positiven Effekten auf die Produktion haben: 
  • Effizienzsteigerung: Durch die Optimierung von Produktionsprozessen können Unternehmen ihre Ressourcen besser nutzen, was zu einer Steigerung der Effizienz führt. Das bedeutet, dass weniger Zeit, Material und/oder Energie benötigt werden, um die gleiche oder sogar eine höhere Menge an Produkten herzustellen. 
  • Kostenreduktion: Optimierungsmethoden ermöglichen es, Kosten zu minimieren, indem sie den Einsatz von Ressourcen optimieren. Dies kann die Herstellungskosten senken und die Wettbewerbsfähigkeit auf dem Markt stärken. 
  • Zeitmanagement: Effektive Optimierung verkürzt die Durchlaufzeiten in der Produktion. Kürzere Produktionszyklen bedeuten, dass Produkte schneller verkauft werden können. Das wiederum verbessert die Kundenbindung und die Fähigkeit, auf sich ändernde Marktanforderungen zu reagieren.
  • Ressourcennutzung: Optimierung ermöglicht eine bessere Nutzung von Ressourcen wie zum Beispiel Arbeitskräfte, Maschinen und Materialien. Das trägt nicht nur zur Kostenreduktion bei, sondern auch zur nachhaltigen Nutzung von Ressourcen, was in der heutigen umweltbewussten Welt von großer Bedeutung ist.
  • Qualitätsverbesserung: Durch die systematische Optimierung von Produktionsprozessen können Qualitätsstandards besser eingehalten werden. Dies führt zu weniger Ausschuss, geringeren Nacharbeitskosten und letztendlich zu zufriedeneren Kunden.
  • Flexibilität und Anpassungsfähigkeit: Optimierungsmethoden tragen dazu bei, Produktionsprozesse flexibler und anpassungsfähiger zu gestalten. Dies ist besonders wichtig in Zeiten sich schnell ändernder Marktbedingungen oder bei der Einführung neuer Produkte. 

Zur Veranschaulichung möchten wir anhand eines kleinen Beispiels zum Thema Maschinenbelegung Optimierungsstrategien in der Produktion aufzeigen.

Maschinenbelegung – Welcher Auftrag läuft wann auf welcher Maschine? 

Eine wichtige Aufgabenstellung in der Produktion ist die Einplanung von Aufträgen auf Maschinen, die wir im Folgenden anhand eines Beispiels aus der Literatur skizzieren wollen. Die Zahlen und Grafiken sind dem Lehrbuch Grundlagen des Operations Researchentnommen, adaptiert und gekürzt (s.259 ff) 

In diesem Szenario gibt es vier Aufträge (A1 – A4) zu erledigen, die jeweils nacheinander auf zwei Maschinen (M1, M2) laufen. (vgl. Diagramme). Das bedeutet, dass ein Auftrag zuerst auf Maschine M1 gelaufen sein muss, bevor er auf Maschine M2 bearbeitet werden kann. 

Wenn die Aufträge strikt der Reihe nach erledigt werden, ergibt sich folgender Ablauf: 

Das Bild zeigt ein Diagramm mit Maschinen auf der Y-Achse und Tagen auf der X-Achse. Die Aufträge eins bis vier werden in aufsteigender Reihenfolge nach ihrer Auftragsnummer erst auf Maschine 1 und dann auf Maschine 2 eingeplant.

Ist das optimal geplant? Das kommt ganz darauf an, welches Zielkriterium man hat. Wie essenziell diese Angabe für die Optimierung ist, verdeutlichen diese drei Beispiele.

Beispiel 1: Kurze Wartezeiten vor Maschine 2

Die Maschine 2 ist direkt abhängig von Maschine 1. Damit sie also möglichst schnell genutzt werden kann, sollte die kürzeste Operationszeit von Maschine 1 als erstes bearbeitet und die weiteren Aufträge aufsteigend nach ihrer Produktionsdauer eingeplant werden.

Damit sieht die Belegung folgendermaßen aus: 

Das Beispiel 1 zeigt ein Diagramm mit Maschinen auf der Y-Achse und Tagen auf der X-Achse. Die Aufträge werden in aufsteigender Reihenfolge nach Produktionsdauer auf Maschine 1 eingeplant und danach auf Maschine 2 in gleicher Reihenfolge abgearbeitet.

Beispiel 2: Aufträge schnellstmöglich abschließen

Ein anderes Kriterium könnte sein, Aufträge möglichst zeitnah abzuschließen. Dann würden diese direkt hintereinander an den beiden Maschinen eingeplant, ohne Rücksicht auf die Gesamtzeit. 

Das Beispiel 3 zeigt eine Tabelle mit Maschinen auf der Y-Achse und Tagen auf der X-Achse. Die Aufträge sind so angeordnet, dass sich in Summe die kürzeste Produktionszeit ergibt.

Beispiel 3: Kürzeste Gesamtbearbeitungszeit

Wenn die Maschine 1 die vier Aufträge ohne Unterbrechungen und in der richtigen Reihenfolge produziert, sind für die gesamte Produktionszeit minimal 11 Zeiteinheiten erforderlich. Zehn Zeiteinheiten beansprucht die erste Maschine für die Abarbeitung der Aufträge, und eine weitere Zeiteinheit wird für die Produktion des dritten Auftrages auf Maschine 2 benötigt. Die zweite Maschine hat eine reine Bearbeitungsdauer von 9 Zeiteinheiten, jedoch kann sie zusätzlich zu dem späteren Stillstand von einer Zeiteinheit erst nach der Fertigstellung des zweiten Auftrages auf Maschine 1 beginnen. Somit ist die Dauer von 11 Zeiteinheiten eine untere Schranke für diese Aufgabenstellung. Oftmals kann diese theoretische Schranke jedoch nicht erreicht werden, aber in diesem Fall ist es möglich.

Das Beispiel 2 zeigt ein Diagramm mit Maschinen auf der Y-Achse und Tagen auf der X-Achse. Die Aufträge werden zu erst auf Maschine 1 eingeplant und direkt anschließend daran auf Maschine 1 produziert, so dass die gesamte benötigte Produktionszeit für jeden Auftrag mögichst kurz ist.

Wie man schon anhand dieses kleinen Szenarios sieht, gibt es diverse optimale Lösungen für ein Produktionsproblem. Welche die richtige ist, hängt sehr stark von den aufgestellten Zielkriterien und Rahmenbedingungen ab. Neben der reinen Berechnung der optimalen Lösung ist das Verständnis dieser Randbedingungen ein großer Teil eines Optimierungsprojekts.

Typische Ziele in unseren Kundenprojekten sind die Sicherstellung der Liefertreue sowie die Minimierung der Rüst- und Durchlaufzeiten. Als Randbedingungen wiederum spielen häufig die Maschinenfähigkeiten und Qualifikationen, die Maschinen- und Personalkapazitäten und die Priorisierung innerhalb von Maschinengruppen eine wichtige Rolle.

Lassen Sie uns gemeinsam auch Ihr Problem verstehen und optimieren.


 

 

 

 

 

 

 

Eine Fabrik im Miniaturformat

Das Bild zeigt die Lernfabrik von fischer Technik im Büro der ATR Software GmbH in Neu-Ulm.

Eine typische Fabrik erledigt eine Vielzahl von Dingen: Produkte können verarbeitet, überprüft, bewegt sowie ein- und ausgelagert werden. Hierzu werden Aktuatoren über eine speicherprogrammierbare Steuerung (SPS) angesteuert und Sensoren erfassen all die relevanten Prozessparameter sowie zum Teil auch äußere Einflüsse. Um generische Digitale Zwillinge hierfür zu erforschen, wie es Teil des Forschungsprojektes DigiPrüf ist, werden reale Vorbilder benötigt. Wie schön wäre es da, wenn man eine ganze Fabrik im Miniaturformat hätte, die sich wie eine „echte“ Fabrik verhält und an der sich neu entwickelte Methoden testen lassen könnten.

Genau zu diesem Zweck haben wir von ATR Software nun eine Lernfabrik 4.0 von fischertechnik in unserem Labor. Dieses Fabrikmodell besteht aus verschiedenen Stationen, die typische Abläufe einer Fabrik nachbilden:

  • An einer „Delivery and Pickup Station” können einerseits Produkte in der Form von farbigen NFC-Chips in das System eingebracht sowie nach einer Bestellung abgeholt werden. Hierzu wird die Farbe der Chips bestimmt und alle Informationen auf den NFC-Chips gespeichert.
  • Ein „Vacuum Gripper Robot“ kann die NFC-Chips greifen und von einer Station zu einer anderen befördern.
  • Im „High-Bay Warehouse“ können die Chips in passenden Kisten vollautomatisch eingelagert werden.
  • Eine „Multi Processing Unit“ simuliert das Pressen und Zuschneiden der Teile.
  • In der „Sorting Line“ werden die Teile nach ihrer Farbe in drei unterschiedliche Behältnisse sortiert. Anschließend transportiert der „Vacuum Gripper Robot“ die NFC-Chips wieder an die „Delivery and Pickup Station“ und die Bearbeitung ist abgeschlossen.
  • Zusätzlich erfasst eine „Sensor Unit“ Umwelteinflüsse wie die Temperatur und die Luftqualität. Mittles einer Kamera lässt sich die Fabrik auch aus der Ferne überwachen.
Eine Fabrik im Miniaturformat für das Forschungsprojekt DigiPrüf

Das Video wird von YouTube eingebettet und erst beim Klick auf den Play-Button geladen. Es gelten die Datenschutzerklärungen von Google.

Die Steuerung der Aktuatoren wird von einer Siemens SIMATIC S7-1500 übernommen. Mittels eines Raspberry Pis und einem Fischer TXT Controller ist eine Steuerung und Überwachung über MQTT möglich.

Wir hatten sehr viel Freude, die Fabrik in Betrieb zu nehmen und freuen uns schon darauf, sie produktiv für das DigiPrüf-Projekt erweitern und einsetzen zu dürfen.

 

Erkennung von Anomalien an einem Lego-Modell durch Bildanalyse mit Deep Learning

Das Headerbild des Artikels zeigt ein Vepsa Modell von LEGO.

In diesem Artikel demonstrieren wir die Anwendbarkeit von Deep Learning für die Anomalieerkennung in Bildern. Unser Ziel ist es, mit Hilfe von Neuronalen Netzen mögliche Fehler am Aufbau eines Vespa-Modells aus Klemmbausteinen zu erkennen.

Bei der Erkennung von Anomalien handelt es sich um die Bestimmung von Abweichungen oder Unregelmäßigkeiten in den Daten, die nicht dem erwarteten Muster oder Verhalten entsprechen. Das ist eine wichtige Aufgabe in vielen Bereichen wie Betrugsprävention, Systemüberwachung und Qualitätssicherung.

Mit diesem Use Case adressieren wir Explainable AI und machen unser System für die Anwender verständlich. Zudem stärken wir das Vertrauen in KI-Lösungen, die für Außenstehende oftmals wie eine Art Blackbox wirken.

Der erste Ansatz

Zuerst verwendeten wir einen Autoencoder, eine Art neuronales Netz, das Eingabedaten komprimiert und rekonstruiert. Anomalien können erkannt werden, indem man den Rekonstruktionsfehler misst, der die Diskrepanz zwischen Eingabe und rekonstruiertem Ausgang darstellt. Instanzen mit hohen Rekonstruktionsfehlerwerten sind wahrscheinlich Anomalien. In unserem Blog-Artikel KI-gestützte Fehlererkennung bei einem Vespa-Modell erklären wir die Funktionsweise genauer. Obwohl mit Autoencodern schon gute Ergebnisse erzielt werden können, sind in jüngster Vergangenheit einige noch fortschrittlichere, komplexere KI-Architekturen entwickelt worden. Diese bauen auf dem gleichen Prinzip auf, haben es aber weiter optimiert. Deshalb testeten und verglichen wir viele dieser neuen Ansätze für unseren Anwendungsfall. 

Heatmap und Segmentierung eines Blender Modells der LEGO Vespa mit fehlerhaftem Kotflügel

Heatmap und Segmentierung eines fehlenden Kotflügels an einem Vespa-Blender-Modell, die von einem „simplerem“ Autoencoder-Model generiert wurde.

Optimierung des Modells

Wir entschieden uns für Reverse Distillation in Kombination mit One-Class Bottleneck Embedding (OCBE), um eine bessere Effizienz und Effektivität zu erreichen. Diese Methode liefert eine sehr gut interpretierbare Darstellung der Daten und ermöglicht eine verbesserte Generalisierung für unbekannte Anomalien. Stark vereinfacht ausgedrückt erreicht sie diese bessere Performance durch das Vergleichen von Input und Output, ähnlich dem Prinzip eines Autoencoders. Jedoch findet dies auf verschiedenen Stufen der Codierung und Decodierung der Daten gleichzeitig statt. Ähnlich vielversprechende Ergebnisse ließen sich mit der PatchCore-Architekur erreichen, die sich auf die Rekonstruktion lokaler Patches konzentriert und somit kleinere lokale Anomalien besser erkennen kann

Heatmap und Segmentierung generiert von Reverse Distillation-Model

Heatmap und Segmentierung generiert von Reverse Distillation-Model 

Anschließend optimierten wir unser Modell mit Methoden wie der Kreuzvalidierung, die wir während der Auswahl der besten Architektur und Parameter verwendeten, um besonders das häufige Problem von Overfitting zu vermeiden. Mithilfe von Transfer Learning konnten wir Gebrauch von sehr leistungsstarken, auf riesigen Datenmengen trainierten Bild-Klassifizierungs-Modellen machen, um die Anzahl der benötigten Trainingsdaten möglichst gering zu halten. 

Nach sorgfältiger Anpassung unseres Modells auf die in Blender modellierten 3D-Grafiken testeten wir es mit Fotos der realen Lego-Vespa. Dabei bemerkten wir, dass Unterschiede in der Beleuchtung bei der Datenaufnahme das Modell verwirren können, ein Phänomen, das als Verteilungsdrift bekannt ist. 

Foto der realen Vespa mit überblendeter Maske von fehlendem Teil (links), Heatmap (mitte) und Segmentierung (rechts).

Foto der realen Vespa mit überblendeter Maske von fehlendem Teil (links), Heatmap (mitte) und Segmentierung (rechts).

Um diese Herausforderung zu meistern, haben wir in unserer Showcase-Installation ein starkes Studiolicht eingesetzt. Dies führte zu einer gleichmäßigen Beleuchtung und minimierte die Missinterpretationen des Modells.

Abschließend konnten wir erfolgreich demonstrieren, dass KI-gestützte Bildanalyse effektiv zur Erkennung und Lokalisierung von Anomalien im Aufbau von Lego-Vespa-Modellen eingesetzt werden kann. Trotz einiger Herausforderungen, wie der Bewältigung von Verteilungsdrift durch Beleuchtungsunterschiede, zeigt unsere Arbeit das immense Potenzial von Deep Learning in der Qualitätssicherung und Anomalieerkennung. Es bleibt jedoch ein fortlaufender Prozess, die Modelle weiter zu optimieren und an spezifische Anwendungsfälle anzupassen. 

Jahrestagung der GAMM: Spannende Vorträge und Diskussionen in Dresden

Vom 30. Mai bis 2. Juni waren wir auf der Jahrestagung der GAMM (Gesellschaft für angewandte Mathematik und Mechanik) in Dresden. Die Veranstaltung, auf der zahlreiche Wissenschaftler aus aller Welt ihre Leistungen präsentieren, ist mit 1.000 Teilnehmern einer der größten Konferenzen im deutschsprachigen Raum zu den Themen Mechanik und angewandte Mathematik. Dementsprechend vielfältig war auch das angebotene Programm:

Neben der „Ludwig Prandtl“ und der „Richard von Mises Lecture“, beides Vorträge im Rahmen von Auszeichnungen der GAMM, gab es noch acht weitere Plenumsvorträge zu verschiedensten Themen aus der Mathematik und Mechanik. Zudem gab es noch 26 sogenannte Sections, in denen es Vorträge zu speziellen Themenkomplexen gab. In der Section 22 „Scientific Computing“ durften wir im Rahmen des Vortrages „A Dynamic Bayesian Network Approch for Digital Twins“ unsere Forschung aus dem Forschungsprojekt DigiPrüf vorstellen, was auf breites Interesse stieß.

Auch abseits der Vorträge luden die Kaffeepausen zu spannenden Diskussionen ein, ebenso wie die Welcome Reception auf dem Gelände der Universität Dresden sowie das Conference Dinner im Deutschen Hygiene Museum Dresden.

Abgerundet wurde das Programm durch eine Midissage „100 Jahre GAMM – A scientific art exhibition“ sowie den zwei öffentlichen Vorträgen „100 Jahre GAMM: Motivation, Historie und Errungenschaften“ von Wolfgang Ehlers und „Was hat das Universum mit mir zu tun?“ von Harald Lesch. Letzterer konnte leider kurzfristig nicht nach Dresden kommen, wurde aber per Video zugeschaltet. Zudem spielte Mathematik YouTuber DorFuchs drei seiner alten Hits als Vorprogramm zu Harald Lesch.

Wir freuen uns, dass wir mit vielen neuen Eindrücken und Ideen Dresden verlassen konnten und dass zum Ausgleich der CO2-Emissionen der Konferenz zwei Bäume per Teilnehmer gepflanzt werden.

microTEC Südwest Clusterkonferenz: ATR Software zeigt innovative Ansätze

Das Bild zeigt den Eingang des Konzrthauses in Freiburg mit einem Hinweise auf die Clusteronferenz von des microTEC e. V. im Fenster über den Türen.

 

Am 15. und 16. Mai 2023 fand die inzwischen elfte Auflage der Clusterkonferenz des microTEC Südwest e. V. statt. Wie jedes Jahr wurde im Konzerthaus Freiburg ein reichhaltiges Programm geboten. Neben Keynote Vorträgen gab es auch Präsentationen in parallel laufenden Vortragsslots, die sich beispielsweise um die Themenbereiche „Maschinelles Lernen in der Anwendung, Mikromedizintechnik, Thermische Sensorik, Modern Work“ und viele mehr drehten. In den Pausen lud ein Marktplatz mit Ausstellern aus der Industrie und Forschung zum Verweilen ein. Abgerundet wurden beide Tage jeweils mit einer Podiumsdiskussion: Am Montag drehte sich diese um das Thema „Der optimierte Mensch – wie Mikrosystemtechnik die Gesundheit und Leistungsfähigkeit der Menschen beeinflusst“. Am Dienstag wurde das Thema „Nachhaltigkeit als Chance und Wettbewerbsvorteil“ mit der Bundestagsabgeordneten Dr. Franziska Brantner vom Bundesministerium für Wirtschaft und Klimaschutz diskutiert.

Es hat uns sehr gefreut, dass wir von der ATR Software GmbH an der Veranstaltung einen Vortrag zum Thema „Digitale Zwillinge für Produktionsmaschinen“ einbringen durften. In dem Vortrag präsentierten wir das DigiPrüf Forschungsprojekt sowie die Ansätze, die wir zur Realisierung der Digitalen Zwillinge verfolgen. Wir bedanken uns recht herzlich bei den Veranstaltern vom microTEC Südwest e. V. für die Organisation dieser spannenden Konferenz.

Impressionen Clusterkonferenz 2023 Freiburg

Das Video wird von YouTube eingebettet und erst beim Klick auf den Play-Button geladen. Es gelten die Datenschutzerklärungen von Google.

Wissen kompakt: Einblicke in den Talk „Nebenläufigkeit in Python“

Interner Wissensaustausch ist ein wichtiger Faktor bei ATR Software. Deshalb haben wir die Vortragsreihe Wissen kompakt ins Leben gerufen. Das ist eine Vortragsreihe, bei der jedes Teammitglied unkompliziert zum Vortragenden werden kann und hier eine Bühne bekommt, um das Fachwissen mit anderen zu teilen. Jedem Mitarbeitenden steht es dabei frei, bei Interesse an den Vorträgen teilzunehmen. Somit wird ein zwangloser und unkomplizierter Wissensaustausch ermöglicht.

Ein Beispiel gefällig? Der folgende Artikel ist eine grobe Zusammenfassung des Impulsvortrages Nebenläufigkeit in Python.  Die Programmiersprache Python ist im Zuge unserer Aktivitäten im Bereich Machine Learning und Optimierung essenziell, weshalb sich unser KI-Team intensiv mit dieser Sprache beschäftigt.

Um was geht es?

Auch als parallele Programmierung bekannt, ist die Nebenläufigkeit eine wichtige Technik zur Optimierung der Leistung von Programmen. In Python gibt es verschiedene Möglichkeiten, um Nebenläufigkeit zu implementieren, darunter Multithreading, Multiprocessing und Coroutinen. In diesem Artikel werden wir uns diese Konzepte genauer ansehen und ihre Unterschiede sowie ihre Vor- und Nachteile diskutieren.


Leider muss zuerst gesagt werden, dass der Global Interpreter Lock (GIL), ein Mechanismus in CPython, die Ausführung von Python-Code auf einem einzigen Thread beschränkt. Dies bedeutet, dass Python-Code aufgrund des GIL nur sequenziell ausgeführt werden kann, auch wenn mehrere Threads vorhanden sind. Der GIL verhindert somit eine echte Nebenläufigkeit in Python, da mehrere Threads nicht gleichzeitig auf verschiedene Prozessorkerne zugreifen und somit eine gleichzeitige Ausführung von Code auf mehreren Kernen nicht möglich ist.

Multithreading in Python

Multithreading bezieht sich auf die Ausführung von mehreren Threads innerhalb eines einzigen Prozesses. Ein Thread ist eine leichtgewichtige Unterbrechung eines Programms, die unabhängig von anderen Threads ausgeführt werden kann. Ein Prozess kann mehrere Threads haben, die alle im selben Speicherbereich arbeiten. Python verfügt über eine integrierte Thread-Unterstützung, die das Erstellen und Ausführen von Threads sehr einfach macht.

Beispiel für Multithreading in Python:
import threading

def print_numbers():
    for i in range(10):
        print(i)

def print_letters():
    for i in range(ord('a'), ord('k')):
        print(chr(i))

t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)

t1.start()
t2.start()

t1.join()
t2.join()

In diesem Beispiel werden zwei Threads erstellt, die jeweils eine Funktion ausführen, um Zahlen und Buchstaben auszudrucken. Der Code t1.start() und t2.start() starten die Threads, und der Code t1.start() und t2.join() stellt sicher, dass die Threads abgeschlossen sind, bevor das Programm beendet wird.

Multithreading hat den Vorteil, dass es sehr einfach zu implementieren ist und die Ressourcen eines Computers effizienter nutzen kann. Allerdings gibt es auch einige Nachteile. Wenn mehrere Threads auf gemeinsame Ressourcen zugreifen, wie zum Beispiel eine globale Variable, kann es zu Race Conditions kommen, die zu Fehlern führen können. Außerdem kann das Debuggen von Threads schwierig sein, da der Kontrollfluss zwischen den Threads wechseln kann und schwer vorherzusagen ist.

Multiprocessing in Python

Multiprocessing ist ähnlich wie Multithreading, aber anstatt Threads werden mehrere Prozesse ausgeführt, die jeweils ihren eigenen Speicherbereich haben. Das bedeutet, dass Daten zwischen den Prozessen ausgetauscht werden müssen, was im Vergleich zu Multithreading etwas komplizierter ist. Python verfügt über eine integrierte Multiprocessing-Unterstützung, die das Erstellen und Ausführen von Prozessen sehr einfach macht.

Beispiel für Multiprocessing in Python:
import multiprocessing

def print_numbers():
    for i in range(10):
        print(i)

def print_letters():
    for i in range(ord('a'), ord('k')):
        print(chr(i))

if __name__ == '__main__':
    p1 = multiprocessing.Process(target=print_numbers)
    p2 = multiprocessing.Process(target=print_letters)

    p1.start()
    p2.start()

    p1.join()
    p2.join()

In diesem Beispiel werden zwei Prozesse erstellt, die jeweils eine Funktion ausführen, um Zahlen und Buchstaben auszudrucken. Die Zeile if __name__ == ‚__main__‘: stellt sicher, dass der Code nur ausgeführt wird, wenn das Skript als Hauptprogramm ausgeführt wird, anstatt von einem anderen Skript importiert zu werden. Der Code p1.start() und p2.start() starten die Prozesse, und der Code p1.join() und p2.join() stellt sicher, dass die Prozesse abgeschlossen sind, bevor das Programm beendet wird.

Multiprocessing hat den Vorteil, dass es einfacher zu debuggen ist als Multithreading, da jeder Prozess seinen eigenen Speicherbereich hat und es keine Race Conditions gibt. Allerdings ist es auch etwas langsamer als Multithreading, da das Erstellen und Beenden von Prozessen etwas mehr Zeit in Anspruch nehmen.

Coroutinen in Python

Coroutinen sind eine andere Art der Nebenläufigkeit, die in Python verwendet werden können. Coroutinen sind Funktionen, die gestartet werden können und später wieder aufgenommen werden können, ohne dass ein neuer Thread oder Prozess gestartet werden muss. Python verfügt über eine integrierte Unterstützung für Corutinen in Form von Generator-Objekten und asynchronen Funktionen.

Beispiel für Coroutinen in Python:
import asyncio

async def print_numbers():
    for i in range(10):
        print(i)
        await asyncio.sleep(1)

async def print_letters():
    for i in range(ord('a'), ord('k')):
        print(chr(i))
        await asyncio.sleep(1)

async def main():
    await asyncio.gather(print_numbers(), print_letters())

asyncio.run(main())

In diesem Beispiel werden zwei Coroutinen erstellt, die jeweils eine Funktion ausführen, um Zahlen und Buchstaben auszudrucken. Der Code asyncio.sleep(1) sorgt dafür, dass jede Coroutine eine Sekunde lang pausiert, bevor sie die nächste Zahl oder den nächsten Buchstaben ausdruckt. Der Code asyncio.gather(print_numbers(), print_letters()) stellt sicher, dass beide Coroutinen parallel ausgeführt werden.

Coroutinen haben den Vorteil, dass sie sehr effizient sind und keine zusätzlichen Threads oder Prozesse benötigen. Sie sind auch sehr einfach zu debuggen, da sie sequenziell ausgeführt werden. Allerdings sind sie möglicherweise nicht die beste Wahl für Aufgaben, die eine intensive CPU-Nutzung erfordern, da sie nur auf einem CPU-Kern ausgeführt werden.

Fazit

In Python gibt es verschiedene Möglichkeiten, um Nebenläufigkeit zu implementieren, darunter Multithreading, Multiprocessing und Coroutinen. Jede dieser Methoden hat ihre eigenen Vor- und Nachteile. Die Wahl der Methode hängt von der spezifischen Anwendung ab. Multithreading ist gut geeignet für Anwendungen, die viele Eingabe- beziehungsweise Ausgabeoperationen ausführen, während Multiprocessing besser für Anwendungen geeignet ist, die eine intensive CPU-Nutzung erfordern. Coroutinen wiederum sind eine gute Wahl für Anwendungen, die viele Aufgaben mit wenig CPU-Nutzung ausführen müssen.

Es ist wichtig zu beachten, dass Nebenläufigkeit in Python einige Fallstricke haben kann, insbesondere wenn mehrere Threads oder Prozesse auf gemeinsame Ressourcen zugreifen. Um Probleme zu vermeiden, sollten Sie immer sicherstellen, dass der Zugriff auf gemeinsame Ressourcen durch Verwendung von asynchronen Mechanismen synchronisiert ist.

Wollen Sie tiefer in das Thema eintauchen? Wir empfehlen die Lektüre der Tutorials von Jason Brownlee https://superfastpython.com/tutorials/

 

Zu Besuch bei der Robotik AG am Lessing-Gymnasium in Neu-Ulm

Das Bild zeigt einen Roboter, der für den größten Technik-Schülerwettbewerb RoboCupJunior entwikelt wurde und dort im Bereich "Soccer" antritt. Entwickelt wurde der Roboter von Schüler:innen des Lessing Gymnasiums in Neu-Ulm.

Für den Junior Wettbewerb der RoboCup Federation entwerfen, bauen und programmieren die Teams einen völlig autonomen mobilen Roboter. Die Roboter müssen einen Ball erkennen und in ein farblich gekennzeichnetes Tor auf einem speziellen Fußballfeld treffen.

Am Lessing-Gymnasium in Neu-Ulm widmet sich die Robotik AG dem Bau dieser Roboter. Und das sehr erfolgreich! Die Schüler:innen reisen durch die Welt, um ihre Roboter in verschiedenen Gewichtsklassen im „Fußball“ gegeneinander antreten zu lassen.

Ein solches Projekt erfordert viel Herzblut. Die Schüler:innen haben ihren eigenen Werkstattbereich und sind sehr intensiv in den Vorbereitungen. Wir trafen sie das erste Mal in den Osterferien mit einer Delegation von erfahrenen Bastlern und Programmierern aus dem Umfeld des Digitalisierungszentrums Ulm | Alb-Donau | Biberach. Während andere die Ferien genossen, arbeiteten die fleißigen Bastler auf den nächsten Wettbewerb hin. Und sie brachten die erfahrenen Hasen direkt zum Staunen: Denn sie bauen in ihrer Werkstatt eigene CNC-Fräsen, konzipieren die Hardware und programmieren Roboter. Und das unter sehr komplexen Bedingungen. Zum Beispiel ist in einem Wettkampfformat laut Regularien nur eine einzige Kamera erlaubt. Deshalb haben die Schüler:innen die Kamera nach oben auf einen gekrümmten Spiegel gerichtet. Durch die Reflexion haben sie das gesamte Spielfeld im Blick. Die Krümmung erschwert jedoch wiederum die Anwendung von Algorithmen der Bilderkennung.

Die Teilnehmenden bei diesem Angebot reichen von der 5. Klasse bis zur Oberstufe. Die Gruppe lebt also vor allem durch die Weitergabe von Wissen. Die Älteren geben ihre Kenntnisse und Fähigkeiten an die Jüngeren zum Beispiel durch Einführungskurse und Beratungen weiter.

Nach unserem Besuch bei der Robotik AG wurde ein Austauschkanal mit Mentoren eingerichtet, die sich aus verschiedenen Firmen zusammensetzen und unterschiedliches Fachwissen besitzen. Über diesen Kanal können die Schüler:innen nun jederzeit bei Fragestellungen um Hilfe bitten.

Wir wünschen den RoboCupJunior Teams viel Erfolg bei den kommenden Wettkämpfen!

 

 

 

KI-gestützte Fehlererkennung bei einem Vespa-Modell

Das Bild zeigt drei Kollegen von ATR Software mit dem zusammengebauten LEGO Modell einer Verspa

Heute stellen wir euch ein weiteres Projekt aus unserer Zusammenarbeit mit dem Dgitalisierungszentrum Ulm | Alb-Donau | Biberach vor. Mit diesem Use Case adressieren wir Explainable AI und machen unser System für die Anwender verständlich. Zudem stärken wir das Vertrauen in KI-Lösungen, die für Außenstehende oftmals wie eine Art Blackbox wirken.

Der Use Case

Unser Ziel ist es, mit Hilfe von Neuronalen Netzen mögliche Fehler am Aufbau eines Vespa-Modells aus Klemmbausteinen zu erkennen. Der Algorithmus wird mit Bildern des vollständigen LEGO Modells aus verschiedenen Blickwinkeln sowie mit unterschiedlichen Belichtungen trainiert. So lernt die KI Bilder von fehlerfrei aufgebauten Vespas zu erzeugen. Diese werden anschließend mit Vergleichsbildern abgeglichen. Dadurch soll nicht nur entdeckt werden, ob ein Fehler an dem Modell vorliegt, sondern auch wo und mit welcher Sicherheit.

Zeitraffer Vespa ATR

Das Video wird von YouTube eingebettet und erst beim Klick auf den Play-Button geladen. Es gelten die Datenschutzerklärungen von Google.

Wie unsere Künstliche Intelligenz detektiert, welche Teile an einem LEGO-Modell fehlen

Die Kernkomponente der Anwendung ist ein Autoencoder-Modell. Ein Autoencoder ist ein neuronales Netz, welches versucht, die Eingangsinformationen zu komprimieren und mit den reduzierten Informationen im Ausgang wieder korrekt nachzubilden. Zuerst wird dafür ein Algorithmus mit Bildern des vollständigen LEGO-Modells aus verschiedenen Blickwinkeln sowie mit unterschiedlichen Belichtungen trainiert. So lernt die KI Bilder von fehlerfrei aufgebauten Vespas zu erzeugen.

Anschließend wird dieses Programm mit fehlerhaften Bildern des Modells ausgeführt. Ein Autoencoder besteht aus zwei Teilen, einem Encoder und einem Decoder. Der Encoder komprimiert die Input-Daten. Aber es können nicht alle Informationen aus dem Input in den komprimierten Daten gespeichert werden, sodass der Encoder priorisieren und unwichtige Informationen auslassen muss. Anschließend versucht der Decoder, aus dieser verkleinerten Darstellung der Bildinformationen die ursprüngliche Form der Vespa so gut wie möglich wiederherzustellen.

Um Anomalien in den Bildern zu erkennen, vergleichen wir jetzt den Input mit dem Output des Autoencoders. Wenn das Bild des Modells vollständig ist, sollte der Output dem Input sehr ähnlich sein. Wenn jedoch eine Anomalie im Bild vorhanden ist, wie zum Beispiel fehlende Teile an der Vespa, kann der Autoencoder diese nur schlecht rekonstruieren. Das liegt daran, dass der Encoder ungewöhnliche Merkmale nicht als wichtig erachtet und deshalb in der komprimierten Darstellung vernachlässigt. Daher verwenden wir die Differenz zwischen Input und Output als Maß für die Anomalität. Je größer die Differenz ist, desto wahrscheinlicher ist es, dass das Bild eine Anomalie aufweist.

In einem ersten Schritt wurden die Bilder hierfür in dem 3D-Grafikprogramm Blender erstellt. Später sollen die Neuronalen Netze aber auf Fotos der realen LEGO Vespa zurückgreifen.

Gemeinsam aktiv – eine Winterwanderung durch Neu-Ulm

Gruppenfoto am Ludwigsfelder Baggersee während der Winterwanderung des Teams von ATR Software im Februar 2023

Bei strahlendem Sonnenschein machten wir uns an einem Nachmittag im Februar auf zu unserer Winterwanderung. Der Startpunkt der 15,5 km langen Tour war unser Büro in Neu-Ulm, von wo aus wir in Richtung des Ludwigsfelder Baggersees liefen. Auf dem Weg dorthin durchquerten wir den Sport- und Freizeitpark im Wiley und steuerten den See über die Felder östlich davon an. Die untergehende Sonne, das gefrorene Wasser und die beiden Schwäne auf dem Eis machten den winterlichen Anblick perfekt.

Eineinhalb Stunden später kehrten wir in dem Wirtshaus Silberwald ein, wo wir uns ein leckeres Abendessen schmecken ließen und mit dem ein oder anderen Getränk zusammen anstießen. Nachdem wir alle wieder aufgewärmt waren, versammelten wir uns im Hof des Restaurants und zündeten die Fackeln für den Rückweg an. Trotz der Kälte herrschte gute Stimmung bei der Laufgruppe und es wurde viel gelacht.

Die wiederum eineinhalbstündige Fackelwanderung durch den Wald führte uns an der Iller entlang und vorbei an der Ratiopharm Arena zu unserem Büro, wo wir müde, aber glücklich zurück am Ausgangspunkt der Wanderung ankamen.