using-ovnewton

Par nvidia · skills

Connectez le moteur physique Newton à une simulation Omniverse ou à un ovstage avec ovnewton. À utiliser lors de l'importation d'un ovstage peuplé dans Newton, de l'avancement de sa physique, de la synchronisation des modifications du stage, ou de la publication de l'état de simulation pour le rendu Omniverse.

npx skills add https://github.com/nvidia/skills --skill using-ovnewton

Utiliser ovnewton

Utilisez ovnewton pour le pont Newton ↔ ovstage. L'application possède la finalisation du modèle, le solveur, les contrôles, la gestion des collisions et la boucle de simulation. ovnewton lit un ovstage peuplé ; Newton n'analyse pas l'USD dans ce workflow. Les simulations Newton autonomes et la création générale Omniverse n'ont pas besoin de cette skill.

Commencer par les exemples supportés

Installez ovnewton dans l'environnement de l'application. Laissez ses métadonnées de paquet sélectionner les dépendances compatibles ; ne remplacez pas la dépendance ovstage qualifiée par une compilation arbitraire.

pip install ovnewton
python -m ovnewton.examples.example_ovnewton_basic --device cpu --no-render --num-frames 8

Pour le rendu ou MuJoCo-Warp, installez "ovnewton[examples]". L'exemple basique accepte --solver mujoco ou --solver vbd ; VBD supporte aussi la simulation CPU. Le rendu nécessite un GPU NVIDIA supporté et sa propre sélection de device.

Lisez le guide de démarrage et adaptez l'exemple basique. Pour plusieurs robots, utilisez l'exemple robot. Utilisez la documentation et les exemples correspondant à la version ovnewton installée ; la branche main du repository peut décrire une API plus récente.

Construire et lier la simulation

  1. Appelez ovnewton.register_usd_schemas() avant la première lecture de schéma USD. Créez une ovstage.Stage() et peuplez l'USD fourni par l'application avec population.open_usd(stage, scene_path, ordinal=1, domains=PopulationDomain.ALL). Scelllez la population avec stage.advance_write_floor(1).wait() avant l'importation. Si l'application fournit déjà un stage peuplé, réutilisez-le et son ordinal scellé ; ne rechargez pas la scène et ne supposez pas que son ordinal est 1.
  2. Créez un newton.ModelBuilder() vide. Configurez les valeurs par défaut et enregistrez tous les attributs personnalisés possédés par le solveur avant d'appeler ovnewton.add_ovstage(builder, stage, ordinal=population_ordinal). Composez tous les assets de scène en un seul ovstage d'abord : ce point d'entrée nécessite actuellement un builder sans entités de modèle et supporte un stage par builder.
  3. Pour MuJoCo, enregistrez SolverMuJoCo.register_custom_attributes(builder) avant d'appeler ovnewton.add_ovstage(). Pour VBD rigid-body, enregistrez SolverVBD.register_custom_attributes(builder) avant ovnewton.add_ovstage() et appelez builder.color() après cet import, avant la finalisation. Utilisez SolverVBD(model, rigid_compliant_alm=True) pour les contacts rigid-body compliant, en suivant les paramètres du solveur de l'exemple et l'ajustement des matériaux de contact.
  4. Finalisez avec builder.finalize(skip_validation_joints=import_result.has_orphan_joints), où import_result est le résultat de add_ovstage. Construisez le solveur et liez avec ovnewton.attach_ovstage(stage, model=model, ordinal=population_ordinal). attach_ovstage(stage) est le chemin pratique quand aucune personnalisation du builder n'est nécessaire. Lors de la liaison d'un modèle existant, les labels de corps et d'articulations doivent correspondre aux chemins du stage.

Progresser et synchroniser

Allouez deux états de modèle, des contrôles et des contacts. Chaque sous-étape efface les forces, calcule les contacts, appelle le solveur et échange les états. Commencez par le pipeline de collision et la configuration du solveur de l'exemple plutôt que de supposer que chaque solveur a des exigences de préparation identiques.

Après progression, publiez l'état courant avec binding.update_to_ovstage(state, ordinal=output_ordinal), puis scellez-le avec stage.advance_write_floor(output_ordinal).wait(). Coordonnez les ordinals d'écriture croissants avec les autres writers du stage de l'application.

Pour consommer les modifications d'application, scellez-les d'abord et appelez binding.update_from_ovstage(state, control) avant progression, en utilisant le même contrôle passé au solveur. Ceci lit l'état supporté le plus récent scellé et les champs de target-drive. Un ordinal de lecture explicite est un plafond de cohérence, non une lecture historique. La sortie native Newton sélectionnée peut à la place être lue via binding.query() et binding.read() sans publication de stage.

Pour le rendu, publiez et scellez la sortie Newton avant que le renderer ne consomme le stage. Le device de simulation de Newton et le device de rendu d'OVRTX sont indépendants ; suivez les options de synchronisation et de sélection de device de l'exemple.

Consultez le guide de support avant de promettre du support pour la physique créée. La physique non supportée peut échouer à l'attachement ; ne la remplacez pas silencieusement par un modèle physique différent. Consultez le guide des concepts et le guide de lecture de sortie pour la synchronisation, les diagnostics, les layouts de lecture et les durées de vie.

Skills similaires