Animez votre robot dans Blender

Vous avez construit un robot bourré de servos et maintenant vous vous installez pour la partie amusante, en programmant votre nouvel ours animatronique dansant ! La douleur dans votre vie ne fait que commencer. Imaginez que vous décidez que l’ours dansant doit lever le bras. Si vous définissez simplement une position de servo, le moteur se mettra en place aussi vite que possible. Ce dont vous avez besoin est une animation, et de préférence avec une accélération douce.

Tu pouvait faites vous-même tous les calculs. Après une demi-heure à jouer avec les chiffres, l’ours lève gracieusement son bras comme un zombie manchot. Et puis vous vous rendez compte que l’ours a 34 servos de plus.

rendu d'un bras de type robot industriel avec socle, base, bras supérieur et bras inférieur et boule IK

Heureusement pour tous ceux qui ont fait ce qui précède, il y a Blender. Il s’agit de créer un mouvement fluide pour les animations et les infographies. Faire bouger un robot avec Blender est, sinon facile, du moins tolérable. Nous avons fait un exemple de projet, un bras de robot 3 axes pour illustrer. Il a un socle fixe, une base rotative, un bras supérieur et un bras inférieur. Nous allons d’abord l’animer dans Blender, puis traduire le fichier en quelque chose que nous pourrons utiliser pour piloter les servos avec un petit script.

Maintenant, Blender est connu pour une interface utilisateur difficile. La bonne nouvelle est qu’avec la révision 2.9, il est passé à un beaucoup interface plus normale. C’est encore définitivement est un gros programme, avec 23 éditeurs différents et littéralement des milliers de commandes, mais nous n’utiliserons qu’un petit sous-ensemble pour faire bouger notre robot. Nous ne vous apprendrons pas Blender ici, car il existe des milliers de super tutoriels Blender en ligne. Vous voulez vous concentrer sur l’animation, et la série Humane Rigging est particulièrement recommandée.

Voici les principales étapes pour animer un robot :

  1. Fabriquez un « squelette » (armature) qui correspond à votre robot
  2. Rig l’armature de sorte qu’elle se déplace comme votre robot et qu’elle soit pratique à animer
  3. Animer l’armature
  4. Exportez les positions des servos vers votre programme de commande de robot
Armature à 4 os.  Les os sont des octaèdres avec une boule à la tête et à la queue
Induit de robot

Généralement, les animations informatiques se composent d’une armature, puis du maillage du corps qui y est suspendu. Pour un robot, nous n’avons pas besoin du maillage, juste de l’armature, car nous ne faisons pas de film. Pourtant, l’armature Est-ce que doivent correspondre à la taille du matériel. Importez des fichiers CAO ou construisez sur une photo ou mesurez simplement le robot.

Celui du robot posture de repos est la position de référence des articulations, où se trouve le robot lorsque les axes sont à zéro. Le nôtre pointe le bras droit vers le haut.

robot pointant vers le haut
Posture de repos

Les os pivotent autour du queueet le tête est ‘où ils sont’. La queue de votre tibia est votre genou et la tête de votre tibia est votre cheville. Les os peuvent avoir parents. Votre tibia est un enfant de votre os de la cuisse. Si vous bougez votre fémur (os de la cuisse), votre tibia va avec.

Les os ne tournent que sur certains axes. Les genoux ne se balancent que d’avant en arrière, pas d’un côté à l’autre. Vous pouvez tordre votre poignet, mais pas vos ongles. Ils ont également des limites de mouvement. Vous ne pouvez probablement pas plier les genoux en arrière.

Les articulations à charnière ne font que tourner, mais certains os peuvent évoluer (un robot souple) ou se déplacer (un routeur CNC).

Il y a encore plus complexe contraintes. Les roues avant d’une voiture de tourisme tournent ensemble. Les tiges d’une locomotive à vapeur restent sur leurs broches. Le chien peut se déplacer librement jusqu’à la limite de sa laisse.

L’animateur peut ne pas vouloir poser en positionnant l’os. Animer les yeux d’un personnage en définissant leurs angles serait gênant. Il est bien préférable d’avoir un os cible supplémentaire que le personnage regarde toujours et de contraindre les yeux à regarder la cible. Nous recourbons généralement nos doigts en même temps et nous recourbons toutes les articulations d’un doigt à la fois. Alors que diriez-vous d’un os supplémentaire qui contrôle tout à la fois ?

Une armature avec tous ces os et contraintes de contrôle supplémentaires est appelée une plate-forme. Blender dispose d’outils puissants pour construire des plates-formes comme celle-ci.

Le premier os de notre exemple, piédestal, représente le socle du robot, la partie boulonnée au sol. Les os sont posable – c’est le point, vous pouvez les animer. Mais cet os ne bouge jamais, nous avons donc tout verrouillé – l’emplacement, la rotation et l’échelle.

Interface Blender n propriétés clés montrant tous les axes mais rotation Y verrouillée

La base tourne sur le piédestal, de sorte que le base l’os est un enfant de la piédestal os. baseLa tête de est au pivot du bras supérieur. La base tourne sur le base l’axe Y de l’os. C’est le seul mouvement, nous avons donc verrouillé tous les autres axes.

Les autres os sont sensiblement les mêmes. haut du bras est un enfant de base, la tête au coude. l’avant-bras va du coude au poignet. Ces joints sont orientés pour tourner le long de Z local.

L’armature fonctionne maintenant. Sélectionnez (mode pose) le base et tournez-le (rotation Y) et les os du bras tournent également. Si vous gâchez la position en expérimentant, annulez simplement ou réglez les axes déverrouillés sur zéro.

Notre exemple de robot a un maillage simple qui se déplace avec les os afin que vous puissiez voir le robot se déplacer.

Mais il est toujours possible de placer le robot dans des positions que le matériel ne peut pas faire. Disons que notre exemple de base de robot matériel ne peut pivoter que de 90 degrés de chaque côté du centre. Nous pouvons empêcher l’animateur de faire des mouvements impossibles avec contraintes osseuses. Nous avons ajouté un contrainte de rotation limite à chaque os.

Interaction

C’est super, mais maintenant nous voulons que notre ours robot attrape un cadeau. Comment le robot va-t-il interagir avec le monde extérieur. La solution est cinématique inverse (CI). IK nous permet de dire où nous voulons le poignet, pas où se trouvent les articulations de l’épaule et du coude. Nous avons donc ajouté une balle nommée IK à la scène et ajouté une contrainte IK à l’avant-bras pour essayer d’atteindre la balle.

Si vous suivez, déplacez la chronologie de l’échantillon vers l’image 120, de sorte que l’IK soit activé et que vous ne gâchez pas nos animations.

Le poignet du robot « saisit » maintenant la balle IK. En mode objet, sélectionnez la balle et utilisez (touche g) pour le « saisir ». Faites glisser pour déplacer la balle. Le robot suit parfaitement et les articulations se mettent à faire ce qui est nécessaire. Beaucoup plus pratique.

Si vous voulez fouiller dans la contrainte IK, sa maison est avant-bras. En mode pose, sélectionnez l’avant-bras et l’onglet Contraintes osseuses dans l’éditeur de propriétés d’objet à droite. La contrainte IK vit ici.

Un peu brillant de Blender est que presque tout peut être animé. La plupart des valeurs ont un petit point blanc sur leur droite. Cliquer dessus le transforme en diamant et anime la valeur. Nous avons fait cela pour « Influence », qui est la « force » de la contrainte.

Temps d’animation

Nous sommes maintenant prêts à animer. 10 FPS convient à la plupart des robots – définissez-le dans les propriétés de rendu. Nous mettons simplement toutes les animations les unes après les autres dans la chronologie et saisissons la tranche que nous voulons, alors peut-être que « ours rit » est l’image 50 à 70.

Editeur de courbes Blender montrant le mouvement de la balle IK
Mouvement de balle CI. Les points noirs sont des images clés.

À l’époque où nous déplacions le bras de l’ours en tapant des chiffres, nous devions faire chaque image. Heureusement pas nécessaire maintenant. Nous n’avons qu’à poser le robot sur suffisamment de cadres pour obtenir le comportement que nous voulons. Ceux-ci sont images clés. Blender fait les images intermédiaires.

Par défaut, Blender ajoute la facilité d’entrée et de sortie, de sorte que les servos accélèrent en douceur. Vous pouvez sélectionner la boule IK et vérifier l’éditeur de graphes si vous voulez voir les courbes.

Il y a une différence entre posant et faire une image clé. Posant le robot ne change pas l’animation. C’est seulement faire une image clé (je clé) qui modifie l’animation.

Dans les images 50 à 75, le robot prend quelque chose et le déplace. Notez que la création de l’animation consistait simplement à « déplacer la balle, créer une image clé » quatre fois. Il a fallu moins de deux minutes pour faire toute l’animation. Nous n’avons jamais animé le robot réel – la cinématique inverse s’en est occupée pour nous.

De 90 à 105, le robot évite une table voisine tout en y posant quelque chose. En pratique, nous devrions les exécuter sur le vrai robot et les modifier une demi-douzaine de fois. Faire cela sans support logiciel serait un cauchemar.

De l’animation au robot

Nous sommes prêts à déplacer notre animation vers notre programme de contrôle de robot. Il y a un hack astucieux pour cela. La norme de facto pour les fichiers d’animation par ordinateur est le format « BioVision Hierarchical » (bvh). Blender peut l’exporter, bien que vous deviez peut-être activer le plugin et sélectionner l’armature. Voici un échantillon.

HIERARCHY
ROOT pedestal
{
        OFFSET 0.000000 0.000000 -1.000000
        CHANNELS 6 Xposition Yposition Zposition Xrotation Yrotation Zrotation
        JOINT base
        {
                OFFSET 0.000000 0.000000 1.000000
                CHANNELS 3 Xrotation Yrotation Zrotation
                JOINT upperarm
                {
                        OFFSET 0.000000 0.000000 0.500000
                        CHANNELS 3 Xrotation Yrotation Zrotation
                        JOINT lowerarm
                        {
                                OFFSET 0.000000 0.000000 3.100000
                                CHANNELS 3 Xrotation Yrotation Zrotation
                                End Site
                                {
                                        OFFSET 0.000000 0.000000 3.100000
                                }
                        }
                }
        }
}
MOTION
Frames: 251
Frame Time: 0.100000
0.000000 0.000000 -1.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 
0.000000 0.000000 -1.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 
0.000000 0.000000 -1.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 -0.000000 0.000000 -0.000000 
... lots of lines of this ...

Bien que cela semble peu agréable à analyser, il y a un hack. Nous ne nous soucions pas de la partie supérieure (le squelette). Nous voulons juste les images des données de mouvement du bas.

Trouvez le numéro de ligne de la ligne après ‘Frame Time’, pour notre fichier c’est 29, et utilisez tail -n +29 ./robotarm.bvh | sed --expression='s/ $//g' | sed --expression='s/ /,/g' >robotarm.csv pour obtenir un fichier CSV des angles de joint pour chaque cadre.

Lequel de tous ces nombres est quel servo? Et comment mapper ces nombres aux nombres envoyés au servo ?

Nous avons ajouté une animation (images 1 à 6) qui exerce chaque axe libre dans l’ordre — base, avant-bras, avant-bras — jusqu’à ses limites. Si nous parcourons le fichier CSV pour savoir quels canaux changent dans cet ordre, nous constatons que le canal 8 est la base, 10 est le bras supérieur et 13 est le bras inférieur. Si vous connaissez la position du servo aux limites du matériel, vous pouvez mapper l’un sur l’autre.

Les nombres réels sont les positions des joints de Blender en degrés, donc tout ce qui reste à faire est de régler les servos une fois par image, et votre animation se déroulera dans la réalité.

N’oubliez pas, si vous jouez les animations les unes après les autres, que la deuxième animation doit commencer par le robot là où la dernière l’a laissé. Et rappelez-vous que simplement parce que vous demandez une position de servo, vous ne l’obtiendrez peut-être pas. Si vous savez que votre robot se déplace lentement, demander une action rapide fera perdre le contrôle de la position. Blender ne sait pas.

Enfin, notons que le « robot » n’a pas besoin d’être un robot. Tout ce qui nécessite une animation scénarisée peut être traité de cette façon.

Bien sûr, ce n’est pas tout pour fabriquer un assistant robot intelligent. Il existe d’autres tâches, telles que la vision et la saisie, qui nécessitent un contrôle en temps réel, l’ajustement du mouvement à la volée, la réalisation de mouvements fluides entre les animations prédéfinies, l’entrée et la sortie des animations et la fusion des animations. Mais Blender et une simple routine d’exportation peuvent vous aider à démarrer.

La moitié du plaisir de fabriquer des robots est de jouer avec eux. Nous espérons que nous vous avons inspiré à découvrir Blender, et peut-être inspiré quelques animatroniques en cours de route.

François Zipponi
Je suis François Zipponi, éditorialiste pour le site 10-raisons.fr. J'ai commencé ma carrière de journaliste en 2004, et j'ai travaillé pour plusieurs médias français, dont le Monde et Libération. En 2016, j'ai rejoint 10-raisons.fr, un site innovant proposant des articles sous la forme « 10 raisons de... ». En tant qu'éditorialiste, je me suis engagé à fournir un contenu original et pertinent, abordant des sujets variés tels que la politique, l'économie, les sciences, l'histoire, etc. Je m'efforce de toujours traiter les sujets de façon objective et impartiale. Mes articles sont régulièrement partagés sur les réseaux sociaux et j'interviens dans des conférences et des tables rondes autour des thèmes abordés sur 10-raisons.fr.