Embedded Softwareentwicklung für KI-basierte Bildverarbeitung

Entwicklung von Embedded-Softwarekomponenten für den Prototyp eines KI-basierten Objekterkennungssystems auf einem Cortex-M55-basierten SoC mit integrierter Neural Processing Unit (NPU). Schwerpunkt der Tätigkeit war die Entwicklung und Integration der hardwarenahen Software für eine Echtzeit-Bildverarbeitungspipeline. Dies umfasste insbesondere die Kameraintegration, Entwicklung von Treiberschnittstellen sowie die zuverlässige und performante Bereitstellung von Bilddaten für die KI-Inferenz. Die Software wurde auf Basis einer modularen Schichtenarchitektur mit klarer Trennung von Applikation, Vision-Pipeline und Hardwareabstraktion entwickelt.

- Entwicklung und Integration von Kameratreiberschnittstellen für MIPI-CSI-2-Bildsensoren
- Implementierung der DCMIPP-Kameraschnittstelle inklusive DMA-basierter Bilderfassung und Double Buffering
- Integration der Bildvorverarbeitungspipeline
- Entwicklung von Komponenten zur Nachbearbeitung einschließlich Konfidenzfilterung
- Entwicklung einer UDP-basierten Ethernet-Kommunikation zur Übertragung von Objekterkennungsergebnissen und Bounding-Box-Informationen
- Implementierung interruptgesteuerter Softwarekomponenten für die Bilderfassung und Inferenzverarbeitung
- Optimierung der Speichernutzung und CPU-/NPU-Auslastung für die Echtzeitverarbeitung
- Debugging, Integration und Prototypvalidierung
- Erstellung von Softwarearchitektur- und technischer Designdokumentation

- Weitere Informationen:
- Programmiersprachen: C++20, C
- Hardware: Cortex-M55-basiertes Embedded-SoC mit Neural Processing Unit (NPU)
- Schnittstellen: MIPI CSI-2, DCMIPP, DMA, Ethernet (UDP)

Softwareentwicklung Applikation

Entwicklung von Softwarekomponenten und Features für die Prozesstechnik in Kaffeemaschinen der nächsten Generation. Der Schwerpunkt des Projekts lag auf dem Aufbau einer einheitlichen Applikationssoftware auf Basis einer internen Plattform und deren Integration in das Gerät.
Die Arbeit erfolgte in einem agilen SCRUM-Team mit 3-wöchigen Sprintzyklen, einschließlich täglicher Stand-ups und Sprint-Reviews, mit voller Verantwortung für die eigenständige Implementierung von User Stories von der Sprintplanung und dem Refinement über die Entwicklung bis hin zur Integration und zum Testen. Die Anwendungsschicht wurde um zustandsmaschinenbasierte Designs (State-Pattern) strukturiert, um Wartbarkeit und eine klare Prozesssteuerung zu gewährleisten.
- Analyse bestehender Kundenanforderungen für prozessbezogene Softwarekomponenten
- Entwicklung von Softwarekomponenten und Features mittels C++20
- Integration von Plattformkomponenten in die Gerätesoftware
- Implementierung und Durchführung von Unit- und Modultests unter Verwendung von GoogleTest
- Integrations- und Systemtests, einschließlich automatisierter Tests
- Debugging und Fehleranalyse bestehender und neu entwickelter Features
- Erstellung der technischen Dokumentation und Testberichte

- Weitere Informationen:
- Programmiersprachen: C++20, Python
- Domäne: Embedded Systems / Prozesstechnik (Haushaltsgeräte)

Treiberentwicklung für Datenfusion auf ARM Cortex-M4

Im Rahmen eines Robotik-Projektes wurden Protokolltreiber für die Schnittstellen eines STM32L476RG (ARM Cortex-M4) implementiert. Der STM32L4 zentralisiert die Datenverarbeitung/-fusion von Sensoren zur Eigenbewegungsschätzung, sowie die Steuerung von Aktoren (Servocontrolboard) und ist mit einem leistungsfähigeren Masterprozessor verbunden.
Zur besseren Verständlichkeit und Erweiterbarkeit der verwendeten Peripherie und deren Konfiguration wurde eine minimale Hardwareabstraktionsebene in C++17 entwickelt.
Für die parallele Verarbeitung der Daten mit unterschiedlicher Datenrate wird FreeRTOS als Task-Scheduler eingesetzt.

- Implementierung von I2C-Treiber für IMU und Odometrie
- Implementierung der UART-Schnittstelle für Logging
- Implementierung der ISP-Schnittstelle zum Masterprozessor
- Entwicklung eines Anwendungsspezifischen Protokolls
- Integration von minimalen FreeRTOS Task-Scheduleing
- Konfiguration von GPIOs für Taster und Status-LEDs
- Erstellen von Skripten (Bash, Python, Json) für Buildumgebung und CI
- Integration der Entwicklungsumgebung in Docker-Container
- Hardware: STM32L476RG (ARM Cortex-M4)
- Programmiersprachen: C, C++ 17

Simulationsumgebung für sichere Kommunikation

Entwicklung einer Simulation für sichere Kommunikation unter Linux und Integration der Embedded-Softwarekomponenten. Die Schnittstellen der Softwarekomponenten auf dem Embedded-System (MPSoC) wurden anhand von Methoden der Interprozesskommunikation unter Linux implementiert und über eine Kommunikations-Middleware abstrahiert. Das Softwaredesign wurde in Enterprise Architect modelliert und aus dem Modell wurde Quellcode generiert.

Weitere Infos:
- Programmiersprachen: C++ 17, Python
- Entwicklungsumgebung: Visual Studio Code
- Softwarearchitektur: Modellbasierte Softwarearchitektur mit Quellcodegenerierung der Middleware
- Test-Framework: Catch2
- CI-Toolchain: GitLab

Modelbasierte Softwareentwicklung mit IBM Rhapsody

Modellierung einer Software zum Fehlermanagement auf einer zentralen Steuereinheit mit OpenSAFETY Netzwerkarchitektur. Modellierung der Testarchitektur basierend auf Rhapsody Test Conductor.

Automatisierung der Modultesterstellung über die Java API von Rhapsody.

Wartung und Debugging des generierten C++ Quellcodes.

Softwareentwicklung Middleware für Radardatenverabeitung

Implementierung einer modularen Softwarearchitektur mit generischer Schnittstelle zur Einbettung von AUTOSAR konformen Softwarekomponenten in Simulations- und Testumgebungen wie ADTF, ROS1 und ROS2.
Portierung von existierenden Basissoftwaremodulen und Algorithmen von ADTF nach ROS1 und ROS2. Weiterentwicklung und Wartung einer continuous integration pipeline basierend auf Jenkins, Github und CMake.

Softwareentwicklung: unter Windows und Linux
Softwarearchitektur: Enterprise Architect
Entwicklungsumgebung: Eclipse und Visual Studio Code
Test- und Simulationsumgebung: ADTF und ROS

3D-Grafikprogrammierung zur Darstellung von Radardaten

3D Grafikprogrammierung zur Darstellung der Radarsensordaten an verschiedenen Stellen in der Signalverarbeitungskette.
Verwendete Grafikbibliotheken sind OpenGL, GLSG und OSG (OpenSceneGraph)

Softwareentwicklung: unter Windows
Softwarearchitektur: Enterprise Architect
Entwicklungsumgebung: Visual Studio
Test- und Simulationsumgebung: ADTF (3D Scene Graph)

Softwareentwicklung Radardatenübertragung via Ethernet

Integration eines AUTOSAR konformen Ethernet Stack (COM, PDU, Socketadapter) auf dem Radarsensor.
Plattformübergreifende Softwareentwicklung einer Ethernet- Schnittstelle auf dem Datenlogger. (Socket-Programmierung für Win & Linux)

Softwareentwicklung: unter Windows und Linux
Softwarearchitektur: Enterprise Architect
Entwicklungsumgebung: Eclipse und Visual Studio Code
Test- und Simulationsumgebung: ADTF
Embedded System: Custom SoC based on ARMv7 (Cortex-R5)

Softwareentwicklung Eigenbewegungs-Schätzung

Entwicklung einer Softwarekomponente zur Eigenbewegungsschätzung anhand von Odometrie- und Gyrometriedaten.
Im Rahmen dieser Komponente programmierte ich Algorithmen für die Aufbereitung und Fusion der jeweiligen Fahrdynamiksignale.

Softwareentwicklung: unter Windows and Linux
Softwarearchitektur: Enterprise Architect
Entwicklungsumgebung: Visual Studio und VSCode
Test- und Simulationsumgebung: ADTF
Embedded System: Custom SoC based on ARMv7 (Cortex-R5)

Softwareentwicklung Fahrerassistenzfunktion ACC

Softwareentwicklung einer Simulationstoolkette für die Längsregelung der Fahrerassistenzfunktion ACC (Adaptive Cruise Control)

Softwareentwicklung: unter Windows
Softwarearchitektur: IBM Rhapsody
Entwicklungsumgebung: Visual Studio
Test- und Simulationsumgebung: Matlab/Simulink und CarMaker (IPG)

Embedded-Softwareentwicklung CAN-Bus

Embedded Softwareentwicklung einer parametrierbaren Schnittstelle zur Übertragung von Radarsensordaten über CAN.

Softwareentwicklung: unter Windows
Softwarearchitektur: IBM Rhapsody
Entwicklungsumgebung: Eclipse
Test- und Simulationsumgebung: CANoe
Embedded System: MPC5675K von NXP (32-bit Embedded
Controller for Advanced Driver Assistance Systems)

Embedded-Softwareentwicklung CAN-Bus

Embedded-Softwareentwicklung einer Softwarekomponente zur Fahrzeugvariantenkodierung über CAN-Bus.

Softwareentwicklung: unter Windows
Softwarearchitektur: IBM Rhapsody
Entwicklungsumgebung: Eclipse
Test- und Simulationsumgebung: CANoe
Embedded System: MPC5675K von NXP (32-bit Embedded
Controller for Advanced Driver Assistance Systems)

Portierung von Trackingalgorithmen

Portierung von Trackingalgorithmus und Funktion eines radarbasierten Spurwechselassistent.

Softwareentwicklung: unter Windows
Test- und Simulationsumgebung: MTS
Entwicklungsumgebung: Visual Studio

Portierung von Bildverarbeitungs-Algorithmen

Portierung von Bildverarbeitungsalgorithmen auf steuergerätenahen, intern parallel arbeitenden SOC der Firma NEC, der sowohl im SIMD- als auch im MIMD-Modus betrieben werden konnte.

Softwareentwicklung: unter Windows
Entwicklungsumgebung: Visual Studio und Eclipse
Test- und Simulationsumgebung: ADTF