Que recherchez-vous ?
Engine & platform

Simuler des robots avec plus de réalisme : Nouveautés en physique pour Unity 2021.2 beta

ANTHONY YAKOVLEV / UNITY TECHNOLOGIESContributor
Aug 20, 2021|9 Min
Simuler des robots avec plus de réalisme : Nouveautés en physique pour Unity 2021.2 beta
Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.

Unity 2021.2 beta contient des améliorations de l'ergonomie des fonctions physiques qui permettent de nouveaux cas d'utilisation tout en facilitant la création et en accélérant le débogage dans le domaine de la robotique.

ArticulationAméliorations corporelles

Le composant ArticulationBody est au cœur de notre simulation robotique car il permet de simuler des chaînes cinématiques avec une grande précision, ce qui est essentiel pour les mains robotiques, les manipulateurs, la robotique mobile et bien plus encore. Nous avons écouté les commentaires des utilisateurs et avons apporté de nombreuses modifications afin d'améliorer les performances et la convivialité.

Les propriétés du composant ArticulationBody ont été réorganisées pour une meilleure lisibilité. Désormais, les paramètres liés à la masse se trouvent dans un seul bloc visuel, suivis par les paramètres liés aux ancrages et aux entraînements. Ces changements ont été reportés dans Unity 2021.1 & 2020.3.

Image montrant la boîte de dialogue du corps de l'articulation avec un fond gris et un texte blanc.

L'éditeur ArticulationBody utilise désormais les mêmes outils de jointure que les joints itératifs ordinaires. Cela garantit une expérience cohérente dans l'ensemble de l'éditeur. En outre, il est possible de modifier visuellement les limites et les ancrages de toutes les articulations.

Gif du mouvement de l'articulation prismatique montré avec une simulation de bras robotique argenté et bleu

Les outils d'articulation prennent en charge tous les types d'articulation ArticulationBody, car ils ont été étendus pour permettre l'édition de l'articulation prismatique, qui n'était pas disponible auparavant. Consultez ce fil de discussion pour plus d'informations ou pour faire part de vos commentaires.

Gif du mode de détection des collisions démontré avec une simulation de bras robotique bleu et argenté

ArticulationBody dispose d'un nouveau paramètre qui permet de sélectionner le mode de détection des collisions. Tous les modes de détection de collision continue sont pris en charge, comme avec Rigidbody. Elle a été rétroportée dans les versions 2021.1 et 2020.3, car elle a été jugée essentielle pour certains cas d'utilisation. Par exemple, l'entraînement d'un modèle d'apprentissage automatique pour contrôler la marche d'un personnage humanoïde a nécessité l'activation de la détection continue des collisions au niveau des pieds, faute de quoi notre modèle a pu apprendre à utiliser à son avantage l'impulsion de dépénétration provenant des pieds qui chevauchent le sol : il a avancé beaucoup plus vite qu'il ne l'aurait fait normalement, et certains modèles de vol ont également été découverts.

Des variantes supplémentaires de ArticulationBody.AddForce ont été ajoutées pour correspondre à celles de Rigidbody.AddForce. Appliquer directement une force, une accélération ou une impulsion. Cela facilite la migration du code préexistant de Rigidbody vers ArticulationBody.

Nous avons amélioré la clarté de la documentation en indiquant explicitement les conditions limites et les cas particuliers. Dans cette version, nous avons une nouvelle page pour le composant ArticulationBody.

Sur la base des commentaires des utilisateurs, nous avons également inclus des unités de mesure pour toutes les propriétés C# du composant ArticulationBody dans la documentation ; voir masse, par exemple.

Amélioration de l'éditeur

Nous continuons à investir pour faciliter l'utilisation des pipelines liés à la physique générale et pour offrir plus de flexibilité afin de répondre aux différents modèles d'utilisation. Nous pensons qu'elle rend possible des simulations plus sophistiquées, car les créateurs peuvent désormais utiliser les fonctionnalités supplémentaires pour mieux comprendre leur domaine et ainsi configurer la simulation pour obtenir des résultats plus précis.

Ceci étant dit, le Physics Debugger supporte maintenant correctement les préfabriqués -- à la fois dans le mode Isolation et dans le mode Contexte. Il permet d'utiliser le principe de conception "diviser pour régner" dans une plus large mesure, en observant les propriétés des préfabriqués de manière isolée, alors que le reste de la scène n'est pas montré.

Gif du système de détection des collisions avec une simulation d'objets

Les couches physiques sont un outil essentiel pour optimiser les performances du système de détection des collisions. Souvent, et en particulier dans les grandes scènes comportant de nombreuses couches, il est préférable de désactiver d'abord toutes les collisions, puis de n'activer que celles qui sont nécessaires. Pour permettre ce type d'utilisation, de nouveaux boutons ont été ajoutés pour basculer la détection des collisions entre toutes les couches dans les paramètres physiques. Cette fonction est utile dans les grands projets où de nombreuses couches sont présentes, mais où vous pouvez réduire les interactions à un sous-ensemble plus petit de combinaisons de couches afin d'améliorer les performances.

Matrice des couches de collision qui ont été ajoutées au physics profiler avec un fond gris et un texte blanc.

Des mesures supplémentaires ont été ajoutées au Physics Profiler. Il y a maintenant plus de graphiques disponibles et le volet textuel affiche plus de données sur la simulation en cours. Parmi les nouveaux ajouts figurent le nombre total de requêtes physiques, le nombre de corps d'articulation et le nombre de transformations synchronisées au cours de la dernière image.

Boîte de dialogue des modules de profilage qui inclut les métriques d'un projet particulier

Il est également possible de créer un module de profilage personnalisé, afin de n'inclure que les mesures nécessaires à un projet particulier.

Image de la boîte de dialogue détaillée de la physique qui montre la mesure de l'utilisation de la mémoire

Enfin, l'utilisation de la mémoire est désormais également disponible en tant que mesure.

Enchaîner des requêtes de physique hors du fil principal

Les requêtes physiques par lots sont un moyen d'améliorer les performances des requêtes physiques (comme les Raycasts par exemple) en les exécutant sur tous les cœurs disponibles, contrairement à ce qui se passe normalement où nous les exécutons tous sur le thread principal exclusivement.

Idéalement, le code qui dépend des résultats d'une requête par lots est lui-même un job C# afin de maximiser les performances. Cependant, le principal problème empêchant cette opération était le fait que l'impact du collisionneur était signalé comme un composant Unity(RaycastHit.collider). Aucun des composants Unity n'est disponible en dehors du thread principal, ce qui a limité l'adoption des requêtes par lots.

Pour remédier à ce problème, l'ID de l'instance du collisionneur qui a été touché est désormais exposée. Les ID d'instance peuvent être librement utilisés en dehors du thread principal, de sorte qu'il ne devrait plus y avoir de problème pour enchaîner les tâches d'interrogation.

Amélioration de la friction du patch

Le mode de friction patch est le mode de simulation de friction par défaut dans Unity. Il s'agit certainement d'un compromis en faveur d'une plus grande performance plutôt que de la précision de la simulation, mais il peut encore être ajusté pour obtenir des résultats raisonnables dans le cadre d'un budget de calcul serré.

Un nouveau mode de friction amélioré est désormais disponible dans les paramètres physiques. Il s'attaque au problème suivant : lorsque plus d'une ancre de frottement est générée dans une paire de contacts, les forces de frottement peuvent être jusqu'à deux fois plus importantes que ce que prévoient les modèles analytiques.

Par exemple, sur le graphique suivant, des cubes ayant des frottements dynamiques différents glissent sur un plan. Les cubes rouges indiquent les positions finales attendues, telles que prédites théoriquement. Les cubes bleus utilisent la friction normale et semblent se déplacer à peu près à mi-chemin de l'objectif. Les cubes verts utilisent la nouvelle friction de patch améliorée et se rapprochent beaucoup plus des valeurs attendues.

Gif montrant le mode de friction amélioré avec des cubes rouges, verts et bleus
Modification du contact

La nouvelle API de modification des contacts est désormais disponible, et nous recueillons des commentaires sur ce fil de discussion. Il permet de personnaliser la réaction du moteur physique aux contacts. Pour chaque paire de contacts, il est possible de modifier les points de contact, de limiter les impulsions appliquées par le solveur, de modifier les vitesses cibles, etc. Entre autres utilisations, il permet de faire des trous dans n'importe quel collisionneur, de créer des contacts collants et divers tapis roulants alimentés par la physique. Dans l'exemple ci-dessous, la sphère tombe à travers le plan parce qu'elle ignore les points de contact avec celui-ci (il est possible de rendre le plan sensible à la surface). À droite, un cube rebondit sur les deux plans inclinés sans tourner, car la réaction au contact a été personnalisée pour exclure les rotations.

Gif montrant l'API de modification de contact avec un cercle et un cube
Donnez vie à vos simulations

Ces améliorations permettent aux utilisateurs de générer des résultats plus réalistes à partir de leurs simulations dans Unity. Nombre de ces améliorations ont été apportées sur la base de suggestions ou de commentaires de notre communauté et nous vous invitons à participer à la conversation. Pour commencer à utiliser la robotique dans Unity, consultez certains de nos exemples et démonstrations sur le Unity Robotics Hub.