Die Erforschung des Weltraums und die Entwicklung autonomer Systeme erfordern höchste Präzision, Zuverlässigkeit und Sicherheit in der Softwareentwicklung. In diesem Zusammenhang gewinnt die Kombination aus SPARK, einer Programmiersprache mit Formaler Verifikation, und Rust, einer modernen und sicheren Systemsprache, zunehmend an Bedeutung. Gemeinsam bilden sie ein starkes Fundament für die Entwicklung komplexer, sicherheitskritischer Anwendungen. Ein faszinierendes Beispiel dafür ist der Bau eines virtuellen Mars-Rovers, der die Funktionalität eines physischen Roboters in einer virtuellen Umgebung simuliert und dabei die Originalsteuerungssoftware nutzt. Die Vision hinter diesem Projekt ist es, die Leistungsfähigkeit eines physischen Mars-Rovers, der mit formaler Verifikation durch SPARK gesteuert wird, in eine hochpräzise virtuelle Simulation zu übertragen.
Die Simulation selbst wird in Rust implementiert, das dank seiner Effizienz und Speichersicherheit ideal für die Modellierung von Systemen mit Echtzeitanforderungen geeignet ist. Diese enge Verzahnung ist ein Paradebeispiel dafür, wie traditionelle sicherheitsorientierte Programmiersprachen mit modernen Open-Source-Technologien zusammenarbeiten können, um neue Maßstäbe in der Softwareentwicklung zu setzen. Im Kern des Systems steht die Steuerungssoftware, die in SPARK geschrieben wurde. SPARK hebt sich dadurch hervor, dass es nicht nur eine Programmiersprache, sondern auch eine Methode zur formalen Verifikation des Codes ist. Das bedeutet, dass Fehler und Sicherheitslücken bereits während der Entwicklung mathematisch ausgeschlossen werden können.
Das ist gerade für kritische Systeme wie einen Mars-Rover essentiell, bei dem Fehlfunktionen lebensbedrohliche Konsequenzen nach sich ziehen können. Rust wiederum übernimmt die Rolle der Simulationsumgebung und der Visualisierung. Die physikalischen Bewegungen des Mars-Rovers werden dabei durch ein kinematisches Modell abgebildet, das den Vier-Rad-Einzelantrieb und die Einzelsteuerung jedes einzelnen Rades realistisch simuliert. Hindernisse in der virtuellen Mars-Landschaft erzeugen eine dynamische Herausforderung, die das Fahrverhalten des Rovers maßgeblich beeinflusst. Über einen simulierten rotierenden Distanzsensor kann die Umgebung ertastet und Kollisionen vermieden werden.
Das schafft eine authentische Grundlage für Tests und Demonstrationen ohne den Einsatz der realen Hardware. Für die Visualisierung nutzt das Projekt die Bevy Game Engine, eine moderne und flexible Plattform, die es ermöglicht, eine dreidimensionale Darstellung des Mars-Rovers und seiner Umgebung in Echtzeit anzuzeigen. Diese visuelle Komponente erleichtert sowohl Entwicklern als auch Anwendern, das Verhalten des Rovers nachzuvollziehen und unterstützt die Fehleranalyse sowie die Optimierung der Steuerungssoftware. Die Kommunikation zwischen der Steuerungslogik in SPARK und der Simulationsumgebung in Rust wird über C-Bindings realisiert. Diese Schnittstellen fungieren als Brücke und ermöglichen einen reibungslosen bidirektionalen Datenaustausch.
Zum Beispiel ruft die Ada-Komponente eingebettete C-Funktionen auf, die in Rust implementiert sind, um Sensordaten zu erhalten oder Aktoren zu steuern. Gleichzeitig speichert Rust gemessene Werte in atomaren Variablen, die von SPARK ausgelesen werden können. Die Nutzung von atomaren Typen in Rust gewährleistet neben der Nebenläufigkeit auch Datenkonsistenz und Thread-Sicherheit. Ein entscheidendes Designelement ist der Hardware Abstraction Layer (HAL), der in Ada implementiert wurde. Dank dieses HAL kann derselbe SPARK-Code sowohl auf dem physischen Rover als auch in der Simulatorumgebung genutzt werden.
Für den realen Roboter enthält der HAL spezifische Hardware-Funktionen, während für die Simulation ein Ada-zu-C-Interface vorgesehen ist, das die Interaktion mit Rust erleichtert. Auf diese Weise wird die Wartbarkeit erhöht und der Entwicklungsaufwand reduziert, da keine doppelte Codebasis gepflegt werden muss. Die Build-Umgebung für ein solch komplexes Projekt erfordert eine harmonische Integration verschiedener Tools, um beide Sprachen effizient zusammenzuführen. Hier kommen Cargo, Rusts Paketmanager und Build-System, sowie Alire, der Ada Paketmanager, zum Einsatz. Mittels eines Cargo Build-Skripts wird die Ada-Komponente automatisch kompiliert und als statische Bibliothek bereitgestellt, die dann in den Rust-Code eingebunden wird.
Diese Automatisierung sorgt dafür, dass alle Abhängigkeiten korrekt verwaltet werden und Entwickler mit einem einzigen Build-Befehl den gesamten Code kompilieren können. Außerdem wird sichergestellt, dass Änderungen an den Ada-Quellen eine automatische Neuerstellung der Bibliothek auslösen. Die Steuerfunktion des Rovers läuft in einem eigenen Thread innerhalb des Rust-Simulators, was eine parallele Ausführung der Simulation und Steuerung ermöglicht. Diese Parallelität wird durch Rusts moderne Sprachfeatures und seine strikten Sicherheitsregeln unterstützt, die typische Probleme wie Datenrennen effektiv verhindern. Die Steuerlogik wird regelmäßig aufgerufen, um die Position und Orientierung des Rovers anhand der Sensordaten zu aktualisieren und die Winkel der Räder sowie des Mastarms zu berechnen.
Im Zusammenspiel zwischen SPARK und Rust entstehen Synergien, die sowohl den hohen Sicherheitsanforderungen gerecht werden als auch moderne Softwareentwicklungsmethoden repräsentieren. Während SPARK die analytische Sicherheit und fehlerfreie Steuerung gewährleistet, ermöglicht Rust eine performante, gut wartbare und sichere Umsetzung der Simulation und der Benutzeroberfläche. Dies führt zu einem Gesamtprojekt, das in puncto Zuverlässigkeit, Wartbarkeit und Funktionalität überzeugt. Für Entwickler und Forscher bietet dieses Projekt wertvolle Einsichten darin, wie etablierte Sprachen für sicherheitskritische Bereiche mit neueren Technologien verknüpft werden können. Die Wiederverwendung einer einzigen verifizierten Steuerungslogik reduziert Entwicklungszeiten und vermeidet Inkonsistenzen zwischen Simulation und realer Anwendung.
Die virtuelle Mars-Rover-Simulation dient damit auch als präzises Werkzeug für Tests, Trainings und Demonstrationen, ohne dass teure oder aufwändige Hardware benötigt wird. Zusammenfassend zeigt der virtuelle Mars-Rover mit SPARK und Rust eindrucksvoll, wie aus der Verbindung von bewährten und modernen Technologien innovative Lösungen entstehen, die den höchsten Ansprüchen an Sicherheit und Performance gerecht werden. Die nahtlose Integration von formaler Verifikation, effizienten Simulationsmodellen und ansprechender Visualisierung setzt Maßstäbe für zukünftige Projekte im Bereich autonomer Roboter und eingebetteter Systeme. Die Kombination aus SPARK und Rust weist ein großes Potenzial für weitere sicherheitskritische Anwendungen auf. Ob in der Luftfahrt, Medizintechnik oder Automotive-Branche, der Ansatz, eine verifizierte Steuerungssoftware mit flexiblen und performanten modernen Umgebungen zu kombinieren, etabliert einen neuen Standard in der Softwareentwicklung.
Neugierige Entwickler sind eingeladen, den Code zu erkunden, eigene Experimente durchzuführen und die Vorteile dieser einzigartigen Kooperation selbst zu entdecken.