Letztes Jahr wurde Genesis als aufregendes neues Instrument zur Erstellung realistischer Physiksimulationen, interaktiven 4D -Welten und vielem mehr veröffentlicht. Ich war bestrebt, es zu versuchen, aber es war nicht einfach, es zum Laufen zu bringen. Ich muss zugeben, dass ich während des Setups viele Herausforderungen gestellt habe.
In diesem Tutorial werde ich kurz die Probleme teilen, auf die ich gestoßen bin, und zeigen, wie ich es schließlich mit Google Colab und ein paar Tricks ausgeführt habe.
Wenn Sie nur einen Überblick über Genesis wünschen, lesen Sie meinen vorherigen Artikel, Genesis Physics Engine: eine Anleitung mit Beispielen.
Als ich anfing, mit Genesis zu arbeiten, folgte ich den Installationsschritten in der Dokumentation. Sofort traf ich Probleme mit Abhängigkeiten. Genesis erfordert eine spezifische Version eines Moduls namens Taichi (1.7.x), aber mein MacOS unterstützte es nicht. Als Referenz ist mein Mac 8 Jahre alt….
Nach einiger Nachforschungen erkannte ich, dass andere Benutzer auch mit besseren Computern die gleichen Probleme hatten. Nach stundenlangem Aufwand und festzustellen, dass Genesis nur mit bestimmten Python -Versionen funktioniert, habe ich es endlich installiert.
Aber neue Probleme tauchten auf. Es würde nichts machen und ich hatte mehrere Probleme mit OpenGL. Selbst als ich versuchte, die Beispieldateien aus ihrem GitHub auszuführen, habe ich mehr Fehler und Konflikten ausgesetzt.
Dann, als ich dachte, ich hätte es aussortiert, bekam ich Fehler wie "Uniform nicht gefunden", was bedeutete, dass einige der Rendering -Einstellungen fehlten.
Während dieses Prozesses habe ich online recherchiert, um festzustellen, ob jemand anderes auf dieselben Probleme gestoßen war. Es stellte sich heraus, dass ich nicht der einzige war - viele Leute hatten den gleichen Schwierigkeiten, und viele schienen keine Lösung zu finden, damit ihre Skripte funktionieren.
Nach der anfänglichen Frustration habe ich mich entschlossen, Google Colab mit einem Pro -Account auszuprobieren, und es stellte sich heraus, dass ich genau das war, was ich brauchte. Mit Colabs GPU -Ressourcen konnte ich:
Ich habe die NVIDIA A100-SXM4-40 GB ausgewählt, die sich als mächtig genug erwies, um Genesis-Simulationen effizient zu bewältigen.
Sobald ich meine Google Colab -Umgebung eingerichtet und Genesis installiert habe, habe ich versucht, das einfachste Beispiel aus der Dokumentation auszuführen:
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
Dieses Beispiel sollte Genesis mit dem CPU -Backend initialisieren und eine Basiszene anzeigen. Ich bin jedoch sofort auf den folgenden Fehler gestoßen:
GenesisException: No display detected. Use show_viewer=False for headless mode.
Die Fehlermeldung zeigt, dass Genesis versucht, ein grafisches Fenster zu erstellen, um die Szene zu rendern, aber Google Colab unterstützt keine Echtzeit-Visualisierung. Colab läuft in einer Remote -Umgebung ohne Zugriff auf eine lokale Anzeige, so
Wie in der Fehlermeldung vorgeschlagen, habe ich den Code geändert, um den Betrachter zu deaktivieren:
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
Dies ermöglichte das Skript, ohne Absturz zu führen. Dieser Ansatz bedeutete jedoch, dass es keine Möglichkeit gab, die Ergebnisse direkt zu visualisieren.
Nachdem ich online gesucht hatte, stellte ich fest, dass andere dem gleichen Problem konfrontiert waren. Viele vorgeschlagene Lösungen umfassten die Konfiguration von Remote -OpenGL -Umgebungen oder verwenden XVFB, um eine virtuelle Anzeige zu erstellen. Leider konnte ich diese Methoden nicht dazu bringen, in Colab zuverlässig zu arbeiten, wahrscheinlich aufgrund von Abhängigkeitskonflikten und Einschränkungen der Umwelt.
Zu diesem Zeitpunkt brauchte ich eine praktischere Problemumgehung!
Da das Echtzeit-Rendering in Colab keine Option war, habe ich beschlossen, den gerenderten Ausgangsrahmen nach Frame als Bilder zu speichern. Mit diesen Ideen konnte ich eine Folge von Bildern erzeugen, die später zu einer Animation kombiniert werden konnten.
In diesem Abschnitt werde ich Sie durch die Implementierung des Codes und der Ausgänge führen, die ich erhalten habe.
Zunächst habe ich Genesis installiert:
GenesisException: No display detected. Use show_viewer=False for headless mode.
Dann habe ich die Genesis mit dem CUDA -Backend für die GPU -Beschleunigung initialisiert.
scene = gs.Scene(show_viewer=False)
Dies ist die Ausgabe, die ich erhielt:
pip install genesis-world
Das erste, was ich brauchte, war ein Ordner, in dem Genesis die von ihm wiedergegebenen Bilder speichern konnte.
import genesis as gs gs.init(backend=gs.cuda)
Die Funktion von os.makedirs () erstellt einen Ordner namens Simulation_Frames im angegebenen Pfad, und das echte Argument exist_ok = stellt sicher, dass wenn der Ordner bereits vorhanden ist, kein Fehler angesprochen wird.
Auf diese Weise hatte ich einen speziellen Ort, um alle Frames und Ausgänge vor meiner Simulation zu speichern.
Als nächstes musste ich eine Szene erstellen, in der ich Objekte hinzufügen und mit ihnen interagieren konnte.
[Genesis] [INFO] Running on [NVIDIA A100-SXM4-40GB] with backend gs.cuda. Device memory: 39.56 GB. [Genesis] [INFO] ? Genesis initialized. Version: 0.2.1, Seed: None, Precision: 32.
gs.scene () initialisiert einen neuen Simulationsraum und show_viewer = false deaktiviert die Echtzeit-Visualisierung. Zu diesem Zeitpunkt hatte ich eine leere Szene, die bereit war, aufzubauen.
Mit der Szene fing ich an, Objekte hinzuzufügen. Ich habe zuerst ein Flugzeug hinzugefügt, das als Boden fungiert.
import os save_dir = "/content/simulation_frames" os.makedirs(save_dir, exist_ok=True)
Die Ebene dient als flache Basis für die Simulation. Standardmäßig ist es unendlich und liegt flach entlang der X-Y-Achse.
Als nächstes habe ich der Szene eine Box hinzugefügt:
scene = gs.Scene(show_viewer=False)
Ich stelle die Box auf (0, 0, 0), direkt in der Mitte der Szene, und ich habe die Größe von 0,5 Einheiten breit, groß und tief, was sie kleiner als der Standard macht.
Jetzt hatte ich ein einfaches Setup: ein Flugzeug als Boden und eine Box, die darüber ruht.
Um zu erfassen, was in der Szene geschah, fügte ich eine Kamera hinzu.
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
Ich habe die Bildauflösung auf 320x240 Pixel, eine praktische Wahl zum Testen, eingestellt und die Kamera unter (3,5, 2,0, 2,5) positioniert, wodurch die Szene von leicht oben und zur Seite eindeutig übergeht. Um sicherzustellen, dass die Box im Fokus blieb, habe ich die Kamera auf (0, 0, 0,5) direkt über der Mitte der Box gerichtet. Mit einem 30-Grad-Sichtfeld (FOV) erfuhr die Kamera eine schmale und fokussierte Perspektive der Szene.
Der nächste Schritt bestand darin, die Szene aufzubauen, um sie auf Simulation und Rendering vorzubereiten.
GenesisException: No display detected. Use show_viewer=False for headless mode.
Dieser Schritt ist entscheidend, da die Genesis Just-in-Time-Zusammenstellung verwendet, um die Simulation zu optimieren. Als ich die Szene baute, Genesis:
Jetzt war alles fertig - mein Flugzeug, meine Box und die Kamera wurden eingerichtet, und die Szene wurde gebaut.
Um die Simulation zu visualisieren, habe ich den Ausgabebrahmen nach Rahmen gerendert und gespeichert. Jeder Frame wurde als Bild im Verzeichnis Simulation_Frames gespeichert.
scene = gs.Scene(show_viewer=False)
Während des Rendering -Prozesses stellte ich fest, dass die ersten Frames schnell (bis zu 2.297 fps) wurden, die Leistung jedoch im Verlauf der Simulation abnahm. Die FPS fielen schließlich auf rund 0,33 fps nach Rahmen 25. Dies könnte auf die zunehmende Rechenkomplexität der Simulation oder möglicherweise auf GPU -Ressourcenbeschränkungen für größere Szenen zurückzuführen sein.
Dies ist die Ausgabe, die ich habe:
pip install genesis-world
Dies sind die Bilder, die ich erhielt:
Jedes Bild zeigt, wie sich die Box im Laufe der Zeit in Bezug auf die Ebene bewegt, wie durch die Kamera zu sehen ist. Die Simulation wird in Schritten ausgeführt, und mit jedem Schritt ändert sich die Position des Box, so dass sich das Box bewegt.
Dieses Beispiel zeigt, wie Genesis einfache physikalische Interaktionen simulieren und aufweisen können. Während dieses Setup grundlegend ist, gibt es eine gute Vorstellung davon, wie sich Objekte in der Szene verhalten. Mit Genesis können Sie jedoch komplexere und realistischere Szenarien schaffen! Wir werden einige dieser Funktionen im nächsten Abschnitt untersuchen.
Genesis können Sie komplexe Szenen erstellen, indem Sie verschiedene Objekte und Morphs hinzufügen. Objekte können von einfachen Primitiven wie Flugzeugen, Boxen und Kugeln bis hin zu komplexeren Wesenheiten wie Robotern und Geländen reichen.
Formprimitive:
Support für externe Datei:
Rendering und Visualisierung
Aufnahme von Videos
Sie können beispielsweise eine Kamera so konfigurieren, dass sie sich in einem kreisförmigen Pfad um die Szene bewegen, während Sie Frames erfassen. Die Funktion cam.start_recording () beginnt mit der Aufzeichnung, und während jedes Schritts der Simulation wird die Position der Kamera aktualisiert. Sobald alle Frames erfasst sind, speichert Cam.stop_recording () das Video als "Video.mp4".
Das endgültige Video gibt eine reibungslose Ansicht der Simulation und zeigt, wie die Objekte mit der Zeit interagieren und sich im Laufe der Zeit bewegen.
Terrain -Erzeugung für Fortbewegungsaufgaben
Erweiterbarkeit
Dieses Tutorial lieferte ein einfaches Beispiel, mit dem Sie mit Genesis beginnen können. Wir haben die Grundlagen wie das Erstellen von Szenen, das Hinzufügen von Objekten und das Rendern von Ausgaben behandelt, um zu zeigen, wie diese leistungsstarke Physik -Engine funktioniert.
Dies ist jedoch nur der Beginn dessen, was Genesis tun kann. Mit der richtigen Hardware, wie einer starken GPU und genug Speicher, gibt es so viele Möglichkeiten. Sie können es für komplexe Robotik-Simulationen oder für das Erstellen hochwertiger Datensätze für das KI-Training verwenden. Obwohl das Einrichten schwierig sein kann, ist es definitiv ein Werkzeug mit großem Potenzial!
Das obige ist der detaillierte Inhalt vonGenesis Physics Engine: Eine Schritt-für-Schritt-Anleitung zum Aufbau von Genesis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!