Maison >Périphériques technologiques >IA >Genesis Physics Engine: un guide étape par étape pour mettre en place Genesis
L'année dernière, Genesis a été publié comme un nouvel outil passionnant pour créer des simulations de physique réaliste, des mondes 4D interactifs, etc. J'étais impatient de l'essayer, mais le faire fonctionner n'a pas été facile. Je dois admettre que j'ai fait face à de nombreux défis pendant la configuration.
Dans ce tutoriel, je partagerai brièvement les problèmes que j'ai rencontrés et montrerai comment je l'ai finalement exécuté en utilisant Google Colab et quelques astuces.
Si vous voulez seulement un aperçu de Genesis, consultez mon article précédent, Genesis Physics Engine: un guide avec des exemples.
Lorsque j'ai commencé à travailler avec Genesis, j'ai suivi les étapes d'installation de la documentation. Tout de suite, j'ai rencontré des problèmes de dépendances. Genesis nécessite une version spécifique d'un module appelé Taichi (1.7.x), mais mon macOS ne l'a pas pris en charge. Pour référence, mon Mac a 8 ans….
Après certaines recherches, j'ai réalisé que d'autres utilisateurs avaient les mêmes problèmes, même avec de meilleurs ordinateurs. Après des heures d'effort, et découvrant que Genesis ne fonctionne qu'avec certaines versions Python, je l'ai finalement installée.
mais de nouveaux problèmes sont apparus. Cela ne rendrait rien, et j'avais plusieurs problèmes avec OpenGL. Même lorsque j'ai essayé d'exécuter l'exemple de fichiers à partir de leur github, j'ai fait face à plus d'erreurs et de conflits.
Ensuite, quand je pensais que je l'avais réglé, j'ai commencé à obtenir des erreurs comme "uniforme non trouvé", ce qui signifiait que certains des paramètres de rendu manquaient.
Tout au long de ce processus, j'ai fait des recherches en ligne pour voir si quelqu'un d'autre avait rencontré les mêmes problèmes. Il s'est avéré que je n'étais pas le seul - beaucoup de gens ont rencontré les mêmes difficultés, et beaucoup semblaient incapables de trouver une solution pour faire fonctionner leurs scripts.
Après la frustration initiale, j'ai décidé d'essayer Google Colab avec un compte Pro, et il s'est avéré être exactement ce dont j'avais besoin. En utilisant les ressources GPU de Colab, j'ai pu:
J'ai sélectionné le NVIDIA A100-SXM4-40 Go, qui s'est avéré être suffisamment puissant pour gérer efficacement les simulations de Genesis.
Une fois que j'ai configuré mon environnement Google Colab et installé Genesis, j'ai essayé d'exécuter l'exemple le plus simple à partir de la documentation:
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
Cet exemple devrait initialiser Genesis avec le backend CPU et afficher une scène de base. Cependant, j'ai immédiatement rencontré l'erreur suivante:
GenesisException: No display detected. Use show_viewer=False for headless mode.
Le message d'erreur indique que Genesis essaie de créer une fenêtre graphique pour rendre la scène, mais Google Colab ne prend pas en charge la visualisation en temps réel. Colab s'exécute dans un environnement distant sans accès à un affichage local, donc le paramètre show_viewer = vrai dans l'initialisation gs.scene () ne fonctionne pas.
Comme le suggère le message d'erreur, j'ai modifié le code pour désactiver la visionneuse:
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
Cela a permis au script de s'exécuter sans se bloquer. Cependant, cette approche signifiait qu'il n'y avait aucun moyen de visualiser directement les résultats.
Après avoir regardé en ligne, j'ai découvert que d'autres avaient fait face au même problème. De nombreuses solutions proposées concernaient la configuration des environnements OpenGL distants ou l'utilisation de XVFB pour créer un affichage virtuel. Malheureusement, je n'ai pas pu faire fonctionner ces méthodes de manière fiable dans Colab, probablement en raison de conflits de dépendance et de limites de l'environnement.
À ce stade, j'avais besoin d'une solution de contournement plus pratique!
Étant donné que le rendu en temps réel n'était pas une option dans Colab, j'ai décidé d'enregistrer le cadre de sortie rendu par image sous forme d'images. Avec ces idées, j'ai pu générer une séquence d'images qui pourraient plus tard être combinées en animation.
Dans cette section, je vais vous guider à travers la mise en œuvre du code et des sorties que j'ai obtenues.
Tout d'abord, j'ai installé Genesis:
GenesisException: No display detected. Use show_viewer=False for headless mode.
Ensuite, j'ai initialisé Genesis avec le backend CUDA pour l'accélération du GPU.
scene = gs.Scene(show_viewer=False)
C'est la sortie que j'ai obtenue:
pip install genesis-world
La première chose dont j'avais besoin était un dossier où Genesis pouvait enregistrer les images qu'elle rendait.
import genesis as gs gs.init(backend=gs.cuda)
La fonction os.makedirs () crée un dossier appelé simulation_frames dans le chemin spécifié, et l'argument exist_ok = vrai garantit que si le dossier existe déjà, aucune erreur ne sera augmentée.
De cette façon, j'avais un endroit dédié pour enregistrer toutes les trames et sorties de ma simulation.
Ensuite, j'avais besoin de créer une scène où je pouvais ajouter des objets et interagir avec eux.
[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 () initialise un nouvel espace de simulation et show_viewer = false désactive la visualisation en temps réel. À ce stade, j'avais une scène vide prête à commencer à construire.
Avec la scène prête, j'ai commencé à ajouter des objets. J'ai d'abord ajouté un avion, qui agit comme le sol.
import os save_dir = "/content/simulation_frames" os.makedirs(save_dir, exist_ok=True)
L'avion sert de base plate pour la simulation. Par défaut, il est infini et se trouve à plat le long de l'axe X-Y.
Ensuite, j'ai ajouté une boîte à la scène:
scene = gs.Scene(show_viewer=False)
J'ai réglé la boîte pour être à (0, 0, 0), en plein centre de la scène, et je l'ai redimensionné pour être de 0,5 unités de large, grand et profond, ce qui le rend plus petit que la valeur par défaut.
Maintenant, j'avais une configuration simple: un avion comme sol et une boîte reposant dessus.
Pour capturer ce qui se passait dans la scène, j'ai ajouté une caméra.
import genesis as gs gs.init(backend=gs.cpu) scene = gs.Scene(show_viewer=True)
J'ai réglé la résolution de l'image sur 320x240 pixels, un choix pratique pour tester, et j'ai positionné la caméra à (3,5, 2.0, 2,5), ce qui lui a donné une vue claire de la scène de légèrement au-dessus et sur le côté. Pour m'assurer que la boîte est restée au point, j'ai visé la caméra à (0, 0, 0,5), juste au-dessus du centre de la boîte. Avec un champ de vision de 30 degrés (FOV), la caméra a capturé une perspective étroite et focalisée de la scène.
L'étape suivante consistait à construire la scène pour la préparer à la simulation et au rendu.
GenesisException: No display detected. Use show_viewer=False for headless mode.
Cette étape est cruciale car Genesis utilise la compilation Just-in-Time (JIT) pour optimiser la simulation. Quand j'ai construit la scène, Genesis:
Maintenant, tout était prêt - mon avion, ma boîte et mon appareil photo ont été installés, et la scène a été construite.
Pour visualiser la simulation, j'ai rendu et enregistré les sorties Cadre by Frame. Chaque trame a été stockée sous forme d'image dans le répertoire simulation_frames.
scene = gs.Scene(show_viewer=False)
Pendant le processus de rendu, j'ai observé que les premières cadres se sont rendus rapidement (jusqu'à 2 297 ips), mais les performances ont diminué à mesure que la simulation progressait. Le FPS est finalement tombé à environ 0,33 ips par le cadre 25.
C'est la sortie que j'ai obtenue:
pip install genesis-worldCe sont les images que j'ai obtenues:
Cet exemple met en évidence la façon dont Genesis peut simuler et afficher des interactions physiques simples. Bien que cette configuration soit basique, elle donne une bonne idée de la façon dont les objets se comportent dans la scène. Mais vous pouvez créer totalement des scénarios plus complexes et réalistes avec Genesis! Nous explorerons certaines de ces capacités dans la section suivante.
Genesis vous permet de créer des scènes complexes en ajoutant divers objets et morphes. Les objets peuvent aller de simples primitives comme les plans, les boîtes et les sphères à des entités plus complexes comme les robots et les terrains.
façonner les primitives:
Support de fichier externe:
Genesis utilise un concept unifié appelé "morph", encapsulant la géométrie et pose des informations. Cette conception orientée objet permet une interaction directe avec les entités utilisant leurs méthodes.
L'une des principales forces de Genesis est sa capacité à créer des sorties visuelles détaillées à l'aide de fonctionnalités de caméra avancées. Les caméras fonctionnent en «mode sans tête», ce qui signifie qu'ils peuvent générer des images sans avoir besoin d'un écran d'affichage. Ils peuvent produire différents types de visuels, y compris des images en couleur régulières (RVB), des cartes de profondeur montrant à quel point les objets sont loin, les masques de segmentation qui étiquettent différentes parties de la scène et les cartes normales qui représentent les détails de surface.
Vous pouvez créer des vidéos en laissant les caméras enregistrer automatiquement chaque trame de la simulation. Vous pouvez même déplacer la caméra pendant l'enregistrement pour rendre la vidéo plus dynamique et immersive.
Par exemple, vous pouvez configurer une caméra pour vous déplacer dans un chemin circulaire autour de la scène tout en capturant des cadres. La fonction cam.start_recording () commence l'enregistrement, et à chaque étape de la simulation, la position de la caméra est mise à jour. Une fois que toutes les cadres sont capturés, cam.stop_recording () enregistre la vidéo comme "vidéo.mp4".
La vidéo finale donne une vue fluide de la simulation, montrant comment les objets interagissent et se déplacent avec le temps.
Vous pouvez également créer différents types de terrains pour la robotique et la formation de l'IA. Vous pouvez utiliser ses options de terrain intégrées ou concevoir la vôtre en fournissant des cartes de hauteur personnalisées avec gs.morphs.terrain. Ces terrains sont parfaits pour tester et former la façon dont les robots se déplacent, faisant de Genesis un excellent outil pour la recherche en robotique.
Vous pouvez également personnaliser vos simulations de plusieurs manières. Vous pouvez ajouter des textures réalistes aux objets, ce qui les rend plus réalistes. Il prend également en charge de nombreux formats de fichiers pour les modèles d'importation, et si un format n'est pas pris en charge, vous pouvez lui demander d'être ajouté. De plus, vous pouvez créer vos propres formes d'objets personnalisées (appelées morphs) à l'aide de fichiers et de paramètres personnalisés.
Ce tutoriel a fourni un exemple simple pour vous aider à démarrer avec Genesis. Nous avons couvert les bases, comme la création de scènes, l'ajout d'objets et le rendu des sorties, pour montrer comment fonctionne ce puissant moteur de physique.
Cependant, ce n'est que le début de ce que Genesis peut faire. Avec le bon matériel, comme un GPU fort et suffisamment de mémoire, il y a tellement de possibilités. Vous pouvez l'utiliser pour des simulations de robotique complexes ou pour créer des ensembles de données de haute qualité pour la formation IA. Bien que le configurer puisse être délicat, c'est certainement un outil avec un énorme potentiel!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!