Maison > Périphériques technologiques > IA > Genesis Physics Engine: un guide étape par étape pour mettre en place Genesis

Genesis Physics Engine: un guide étape par étape pour mettre en place Genesis

Christopher Nolan
Libérer: 2025-03-01 09:54:09
original
336 Les gens l'ont consulté

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.

Mon expérience de configuration initiale avec Genesis

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.

Comment j'ai fait fonctionner Genesis: Google Colab à la rescousse

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:

  • Installez toutes les dépendances requises sans aucun problème.
  • Utilisez le backend GPU pour obtenir de grandes performances et un rendu réaliste.
  • Enfin, exécutez des exemples de base et explorez le potentiel de Genesis.

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)
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.
Copier après la connexion
Copier après la connexion
Copier après la connexion

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)
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

implémentation et sorties

Dans cette section, je vais vous guider à travers la mise en œuvre du code et des sorties que j'ai obtenues.

Configuration de l'environnement GPU

Tout d'abord, j'ai installé Genesis:

GenesisException: No display detected. Use show_viewer=False for headless mode.
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, j'ai initialisé Genesis avec le backend CUDA pour l'accélération du GPU.

scene = gs.Scene(show_viewer=False)
Copier après la connexion
Copier après la connexion
Copier après la connexion

C'est la sortie que j'ai obtenue:

pip install genesis-world
Copier après la connexion
Copier après la connexion

Créer et construire la scène

Créez un répertoire pour enregistrer les résultats

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)
Copier après la connexion

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.

Initialiser la scène

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.
Copier après la connexion

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.

Ajouter un plan et une boîte

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)
Copier après la connexion

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)
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

Ajouter une caméra

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)
Copier après la connexion
Copier après la connexion
Copier après la connexion

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. 

construire 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.
Copier après la connexion
Copier après la connexion
Copier après la connexion

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:

  • Mémoire allouée aux objets de la scène.
  • Préparation des noyaux GPU pour les calculs de rendu et de physique.
  • Configurez toutes les structures de données nécessaires pour que la simulation fonctionne bien.

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.

Rendre et enregistrer les sorties

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)
Copier après la connexion
Copier après la connexion
Copier après la connexion

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-world
Copier après la connexion
Copier après la connexion
Ce sont les images que j'ai obtenues:

Genesis Physics Engine: un guide étape par étape pour mettre en place Genesis

Genesis Physics Engine: un guide étape par étape pour mettre en place Genesis

Genesis Physics Engine: un guide étape par étape pour mettre en place Genesis

Genesis Physics Engine: un guide étape par étape pour mettre en place Genesis

Genesis Physics Engine: un guide étape par étape pour mettre en place Genesis

Chaque image montre comment la boîte se déplace par rapport au plan au fil du temps, comme on le voit à travers la caméra. La simulation s'exécute en étapes, et à chaque étape, la position de la boîte change, ce qui donne l'impression que la boîte se déplace.

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.

Explorer la Genesis: capacités et caractéristiques

Création d'objets et de scène

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:

  • gs.morphs.plane
  • gs.morphs.box
  • gs.morphs.cylinder
  • gs.morphs.sphere

Support de fichier externe:

  • MJCF: gs.morphs.mjcf pour les configurations de robot Mujoco XML.
  • Urdf: gs.morphs.urdf pour les fichiers de format de robot unifié.
  • Mesh: gs.morphs.mesh pour les actifs 3D comme .obj, .ply, .stl, .glb et .gltf.

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.

rendu et visualisation

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.

Enregistrement des vidéos

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.

Génération du terrain pour les tâches de locomotion

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.

Extensibilité

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.

Conclusion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal