Technische Kompetenzen
Fahren Sie über eine Karte, um zu sehen, wofür jedes Werkzeug dient
Robotik-Middleware. Damit strukturiere ich über Nodes, Topics und Services die Kommunikation zwischen Sensoren, Planung und Aktoren.
Meine Hauptsprache für Prototyping, Bildverarbeitung und Regelung, mit NumPy, OpenCV, PyTorch und rclpy.
Open-Source-Leiterplattendesign, vom Schaltplan über das Routing bis zur DRC-Prüfung. Jede meiner Platinen läuft darüber.
Parametrisches CAD. Ich modelliere Teile, Baugruppen und Zeichnungen vor Druck oder Bearbeitung.
Multimaterial-Fertigung mit löslichen Stützen und der Mischung aus flexiblen und starren Teilen. Vom Modell zum funktionsfähigen Bauteil an einem Tag.
Bewegungsplanung unter ROS 2, inverse Kinematik und Kollisionsvermeidung. Ich nutze es zum Steuern und Simulieren von Manipulatorarmen.
Echtzeit-Objekterkennung. Ich trainiere sie auf eigenen Bilddatensätzen für die Robotik-Bildverarbeitung.
Rekonfigurierbare Logik in VHDL, für parallele Verarbeitung, die einem klassischen Mikrocontroller zu schnell ist.
Bauteilauswahl, Leiterbahn-Routing, Signal- und Leistungsanforderungen. Meine Illumine-Platine habe ich komplett geroutet.
3D-Modellierung, Toleranzen und Baugruppen. Sie ist die Grundlage jedes mechanischen Projekts vor der Fertigung.
Finite-Elemente-Analyse mit Abaqus oder Inventor Nastran. Ich prüfe die Festigkeit eines Teils und untersuche die Netzkonvergenz vor der Fertigung.
Echtzeit-Embedded-Programmierung auf Mikrocontrollern, wenn Python zu langsam oder zu indirekt ist.
Konstruktion
CAD, 3D-Modellierung und Strukturoptimierung
Prototyping
Multimaterial-3D-Druck und schnelle Fertigung
Entwicklung
Embedded-Code und Robotik
Die Labor-Ecke
Ich habe sieben Physik- und KI-Simulationen geschrieben, aus Freude daran, Gleichungen in Bewegung zu sehen. Ziehen Sie an den Reglern und beobachten Sie.
Öffnet sich in einem neuen Tab, am Computer am angenehmsten.
Fluid im Paraboloid
Eine in Echtzeit simulierte Flüssigkeit in einem parabolischen Glas. Mit der Maus umrühren, zum Spritzen klicken. Im Panel lassen sich Viskosität (von Wasser bis Honig), Schwerkraft, Farbe und Partikelanzahl einstellen.
Unter der Haube
Rund 900 Partikel laufen in einer SPH-Simulation (Smoothed Particle Hydrodynamics) nach dem Schema „double density relaxation“ von Clavet et al. (2005). Jedes Partikel erfährt Schwerkraft und Viskosität, die als Impulse zwischen Paaren wirken. Eine Dichterelaxation mit doppeltem Druckterm verhindert, dass die Partikel verklumpen. Ein räumliches Hash-Gitter beschleunigt die Berechnung, und Kollisionen werden auf die Wand y = kx² projiziert. Das Rendering macht aus den Partikeln dann eine kontinuierliche Oberfläche. Ein gaußsches Dichtefeld (Metaballs) wird in einem GLSL-Shader schwellwertet, der Normalen, Brechung, Glanzlichter und Fresnel direkt auf der GPU berechnet.
Geregelte Magnetschwebung
Eine Stahlkugel, die ein geregelter Elektromagnet in der Luft hält. Kp, Ki und Kd live einstellen, die Kugel anstoßen, ihre Masse ändern oder das Sensorsignal verrauschen, dann die Sprungantwort beobachten. Je nach Einstellung stabilisiert sich das System, schwingt oder fällt ab.
Unter der Haube
Die Strecke ist im offenen Kreis instabil, denn die Magnetkraft F = C·(i/x)² wächst, je näher die Kugel kommt. Die Simulation integriert m·ẍ = m·g − F mit 480 Hz. Sie enthält eine Spulenverzögerung erster Ordnung (L/R), Stromsättigung, Messrauschen und eine gefilterte Ableitung. Der PID-Regler arbeitet um den Gleichgewichtsstrom i_eq = x·√(mg/C), mit Anti-Windup durch Integral-Begrenzung. Die linearisierte Analyse liefert eine Stabilitätsbedingung (stabil genau dann, wenn Kp > i_eq/x₀ und Kd > 0), die sich mit den Voreinstellungen live nachprüfen lässt.
Rayleigh-Bénard-Konvektion
Eine Fluidschicht wird von unten geheizt und von oben gekühlt. Sie organisiert sich erst in Zellen, dann in turbulente Fahnen. Mit der Maus lokal heizen oder kühlen, Viskosität und Heizleistung verstellen und den vom Strom mitgerissenen Staub verfolgen.
Unter der Haube
Zwei gekoppelte Lattice-Boltzmann-Gitter teilen sich dasselbe Raster. D2Q9 berechnet die Strömung (BGK-Kollision, haftende Wände oben und unten, periodische Ränder). D2Q5 berechnet die Temperatur (Advektion-Diffusion, Platten mit fester Temperatur). Die Boussinesq-Kopplung speist einen vertikalen Auftrieb gβ·(T−T₀) in das Kollisionsgleichgewicht ein. Jenseits der kritischen Schwelle wird die reine Wärmeleitung instabil, und Konvektionszellen entstehen. Tracer werden per bilinearer Interpolation des Geschwindigkeitsfelds advektiert.
Masse-Feder-Tuch im Wind
Eine Fahne knattert im turbulenten Wind. Greifen Sie zu und ziehen Sie daran (zu stark, und sie reißt). Stellen Sie Windstärke und -richtung, Schwerkraft und Steifigkeit ein und umkreisen Sie dann die 3D-Szene.
Unter der Haube
Das Tuch ist ein Partikelgitter mit Abstandsbedingungen (Kette, Schuss, Scherung). Es wird mit Verlet integriert und anschließend im Stil von Position Based Dynamics projiziert. Der Wind übt auf jedes Dreieck eine aerodynamische Kraft F = n·(n·v_rel)·|v_rel|·k aus, wobei v_rel die Tuchgeschwindigkeit berücksichtigt. Das Knattern der Fahne entsteht von selbst aus dieser Kopplung. Eine über die Schwelle gedehnte Bedingung reißt, und die angrenzenden Dreiecke verschwinden. Der Riss breitet sich dann natürlich aus. Das Rendering nutzt Three.js, mit pro Bild neu berechneten Normalen.
Viertelfahrzeug-Federung
Ein Rad, eine Feder, ein Dämpfer und ein Viertel Karosserie auf einer vorbeiziehenden Straße. Steifigkeit und Dämpfung einstellen, den Belag wechseln, ein Schlagloch einwerfen und das Urteil ablesen. Filtert die Karosserie die Straße? Probieren Sie auch die Voreinstellung „toter Dämpfer“.
Unter der Haube
Das ist das klassische Viertelfahrzeugmodell mit 2 Freiheitsgraden. Die gefederte Masse (Karosserie) ruht auf einer Feder ks und einem Dämpfer cs. Die ungefederte Masse (Rad) ruht auf der Reifensteifigkeit kt. Die Gleichungen sind um das statische Gleichgewicht formuliert und semi-implizit mit 960 Hz integriert, weil der Reifen steif ist. Das Straßenprofil zieht mit der gewählten Geschwindigkeit unter dem Rad durch, mit vier Profilarten: sinusförmiges Kopfsteinpflaster, gefiltertes Value-Noise, gaußsche Bremsschwellen und Halbkosinus-Schlaglöcher. Die Kennwerte werden live berechnet: Eigenfrequenz f₀ = √(ks/ms)/2π, Dämpfungsgrad ζ = cs/2√(ks·ms) und RMS der Karosseriebeschleunigung als Komfortkriterium.
Chaotisches Doppelpendel
Zwei gelenkig verbundene Stäbe werden zusammen losgelassen, dazu ein Schwarm blasser Pendel, die haargenau daneben starten. Sie bleiben erst deckungsgleich und laufen dann schlagartig auseinander. Greifen Sie die Massen mit der Maus, ändern Sie Längen, Massen und Schwerkraft und verlangsamen Sie die Zeit.
Unter der Haube
Das Doppelpendel folgt seinen vollständigen Lagrange-Gleichungen, integriert mit einem Runge-Kutta-Verfahren vierter Ordnung bei 480 Hz. Ohne Reibung bleibt die Energie erhalten, was die Anzeige live prüft (nahezu keine Drift). Es ist ein nichtlineares Hamilton-System, deterministisch und doch chaotisch. Rund fünfzehn Kopien starten weniger als ein Tausendstel Radiant voneinander entfernt, und ihr Abstand wächst exponentiell. Das ist das Kennzeichen eines positiven Lyapunov-Exponenten. Der Graph unten zeichnet diesen Abstand in logarithmischem Maßstab. Er bildet eine steigende Gerade, bis das Chaos alles dekorreliert hat.
Metronome, die sich synchronisieren
Fünf Metronome werden in beliebigem Takt auf einem Brett gestartet, das auf Rollen liegt. Ohne Zutun schlagen sie am Ende gemeinsam. Blockieren Sie das Brett, und sie werden wieder unabhängig. Verstimmen Sie sie, und die Synchronisation bricht ab.
Unter der Haube
Jedes Metronom ist ein durch eine Hemmung angetriebenes Pendel, nach Pantaleone mit einem Van-der-Pol-Term modelliert, der die Amplitude des Tickens festlegt. Die einzige Kopplung läuft über das bewegliche Brett. Schiebt ein Pendel zur Seite, weicht das Brett zurück und zieht alle anderen mit. Die N Pendel und das Brett bilden ein Gleichungssystem, das explizit gelöst und dann mit Runge-Kutta 4 bei 480 Hz integriert wird. Aus beliebigen Phasen konvergiert das Ganze zu einem gemeinsamen Takt. Der Kuramoto-Ordnungsparameter r misst diese Konvergenz, von 0 (Unordnung) bis 1 (Synchronisation), und wird live gezeichnet.