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
- Appelez
ovnewton.register_usd_schemas()avant la première lecture de schéma USD. Créez uneovstage.Stage()et peuplez l'USD fourni par l'application avecpopulation.open_usd(stage, scene_path, ordinal=1, domains=PopulationDomain.ALL). Scelllez la population avecstage.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. - 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'appelerovnewton.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. - Pour MuJoCo, enregistrez
SolverMuJoCo.register_custom_attributes(builder)avant d'appelerovnewton.add_ovstage(). Pour VBD rigid-body, enregistrezSolverVBD.register_custom_attributes(builder)avantovnewton.add_ovstage()et appelezbuilder.color()après cet import, avant la finalisation. UtilisezSolverVBD(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. - Finalisez avec
builder.finalize(skip_validation_joints=import_result.has_orphan_joints), oùimport_resultest le résultat deadd_ovstage. Construisez le solveur et liez avecovnewton.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.