Projekt
Maschinelles Lernen auf einer SPS ausführen
Entwicklung einer echtzeitfähigen SPS, die ML- und Steuerungsanwendungen ausführen kann
CPU
ARM
Hersteller
NVIDIA
OS
Linux for Tegra (L4T)
Kompetenzen
AI
CODESYS
OPC UA
L4T
Docker
Projektgröße:
Schwierigkeit:
Anfrage/Problem:
Der Kunde möchte Machine Learning-Funktionalität in seine Maschinensteuerung integrieren, ohne deren Echtzeitleistung zu beeinträchtigen. Die Anwendung soll menschliche Handgesten aus Live-Video erkennen und entsprechende Aktionen in der Steuerungsanwendung ausführen. Das System muss performant genug sein, um die Steuerung in Echtzeit zu gewährleisten und gleichzeitig ausreichend niedrige Inferenzgeschwindigkeiten bei hoher Genauigkeit zu erreichen. Die Kommunikation zwischen der Steuerungsanwendung und der Gestenerkennung muss hergestellt werden, um eine Interaktion zwischen Mensch und Maschine über Gesten zu ermöglichen. Letztlich muss die Benutzbarkeit des Systems in Form eines realen Maschinendemonstrators evaluiert werden.
Lösungsansatz:
Die Jetson Nano Plattform wurde für dieses Projekt ausgewählt, da sie GPU-Beschleunigung von KI-Workloads in einem Embedded-Formfaktor bietet. Zunächst wird eine Basislinie für die Echtzeitleistung erstellt, indem der Standard-L4T-Kernel mit und ohne ML-Workload getestet wird. Die gleichen Tests werden dann nach dem Hinzufügen des RT_Preempt-Patches für Linux und der Erstellung des gepatchten Linux-Kernels durchgeführt. Beide Messungen werden dann miteinander verglichen. Die Messungen werden mit unserem eigenen, proprietären Real-Time Test Framework durchgeführt. Für die Gestenerkennung werden zwei vortrainierte CNN-Modelle evaluiert und das leistungsstärkste wird in einem Python-Programm eingesetzt, das Einzelbilder von einer an den Jetson Nano angeschlossenen Webcam klassifiziert. Diese Anwendung wird in einem eigenen Docker-Container ausgeführt. Für die Maschinensteuerung wird ein CODESYS Control-Laufzeitsystem innerhalb eines Docker-Containers aus einem Debian-Paket installiert. Die für die Runtime notwendige Konfiguration und Boot-Applikation werden in Docker-Container persistiert. Das Laufzeitsystem beinhaltet einen OPC UA Server, der über seinen jeweiligen Port erreichbar ist und als Schnittstelle zwischen Gestenerkennung und Maschinensteuerung dient. Die Kommunikation zwischen den Containern wird über OPC UA realisiert. Konkret wird die erkannte Geste in eine Variable des OPC UA Servers geschrieben, die wiederum in der Logik des Steuerungsprogramms verwendet wird. Beide Container sind zu einem Microservice zusammengefasst, der mit dem Tool docker-compose gestartet werden kann.
Architektur:
Ergebnisse:
Mit dem Real-Time-Testing-Framework wurde festgestellt, dass der Jetson Nano mit dem Standard-L4T-Kernel ohne die ML-Workload nicht echtzeitfähig ist und alle Metriken deutlich schlechter werden, wenn die ML-Workload hinzugefügt wird. Nach Hinzufügen des RT_Preempt-Patches konnte jedoch die Echtzeit-Performance erreicht werden, und darüber hinaus auch während rechenintensive ML-Workloads ausgeführt werden. Bei der ML-Workload handelt es sich in diesem Fall um ein CNN, das auf einem MobileNetV2 basiert und in der Lage war, eine Gestenklassifizierung auf einem Live-Stream-Video mit einer Framerate von etwa 30 fps mit guter Genauigkeit durchzuführen. Nach erfolgreichem Test wurde das System zur Steuerung einer Demonstrationsmaschine eingesetzt. Die Kommunikation zwischen den Containern über OPC UA funktionierte gut und es gab keine merkliche Verzögerung zwischen der erkannten Geste und der entsprechenden Antwort des Demonstrators. Somit hat sich das Konzept der Kombination von SPS mit Machine-Learning-Funktionalität als erfolgreich erwiesen.
Weitere Informationen finden Sie im Whitepaper
"Whitepaper"