RaydiumWikiNi

Modelisation

PagePrincipale :: DerniersChangements :: ParametresUtilisateur :: Vous êtes ec2-3-145-76-159.us-east-2.compute.amazonaws.com
Retour

III/ Modelisation du bras



PLAN


III.1/ Les bases de raydium

III.2/ Création des éléments, joints et moteurs pour le bras

III.3/ Fonction Display

III.4/ Création du rendu sous blender

III.5/ Conclusion de la partie modélisation




Tout d'abord, nous allons expliquer pourquoi utiliser 2 logiciels différents.
Nous utilisons donc Raydium comme moteurs 3D. Ce moteur ne sert seulement qu'à créer 2 sortes d'élément : des boîtes ou des sphères.
Ce sont ces éléments qui serviront à calculer les collisions. C'est à dire que si un objet venait à percuter notre bras par exemple, cet objet percutera les éléments pris en compte par le moteur 3D, c'est à dire des boîtes ou des sphères.

Comme Raydium ne peut pas créer des formes complexes, ses fonctions permettant de créer des objets peuvent prendre en paramètre un fichier qui contient les vrais formes et couleurs d'un objet. Raydium recomposera alors l'objet avec les informations contenues dans ce fichier et les intégrera dans la boîte ou la sphère qu'il a créé. Cependant, cette forme créée ne pourra pas être gérée en tant qu'objet pour les collisions. C'est à dire que si un objet extérieur venait à percuter cet forme, l'objet passerait à travers. C'est pour celà que la forme donnée à l'objet doit pouvoir tenir dans la forme créée par raydium.

Voici un dessin pour illustrer cette explication :

Image hébergée par servimg.com


Nous voyons ici que l'objet servant au rendu (en rouge) tient dans la boite servant aux collisions (en bleu). Si l'objet en rouge était plus grand que celui en bleu, les parties dépassant de la boîte en bleu ne serait pas gérées pour les collisions.


Pour créer ce fichier pouvant être lu par Raydium pour créer le rendu, nous pouvons utiliser blender. Une fois l'objet créé avec ce logiciel, on peut l'exporter dans un format compatible à Raydium.


Dans un premier temps, nous allons voir comment le bras a été créé avec Raydium. Puis par la suite nous verrons la partie rendu.



III.1/ Les bases de raydium


Un objet complexe sous raydium est composé de plusieurs petits éléments liés par des joints et articulés grâce à des moteurs.
Pour ajouter un élément, on peut créer soit une boîte, soit une sphère.
Tous ces éléments font partie d'un seul et même objet que nous avons appelé "TEST_BRAS".

Dans un premier temps, il faut donc avoir des bases sous raydium. Comme par exemple créer une fenêtre, régler lumière, créer un objet, déplacer un objet ...
Pour celà, il y a des tutoriaux très bien expliqués sur le site raydium.org : Tutoriaux raydium

Détail de tutoriaux :

Affichage
http://wiki.raydium.org/wiki/TutorielDeplacerDesObjets
Utilisation de la physique



III.2/ Création des éléments, joints et moteurs pour le bras


Dans un premier temps, il nous a fallu stocker toutes les dimensions du bras qui nous étaient nécessaires pour la création du bras.
Voici la déclaration de différents "define" :

#define H_BASE 4.5      //hauteur de la base
#define L_BASE 9.8      //largeur de la base
 
#define H_AXE1 0.3      //hauteur de l'axe1
#define L_AXE1 8.5      //largeur de l'axe 1
 
#define H_BASE_AXE1 5.6 + 0.3    //hauteur de la base + le disque
 
#define H_AXE2 14.5     //hauteur de l'axe 2
#define L_AXE2 2.5      //longueur de l'axe 2
#define La_AXE2 5.4     //largeur de l'awe 2
 
 
#define H_AXE3 18     //hauteur des bras du haut
#define L_AXE3 2.8      //longueur de l'axe 3
#define La_AXE3 2.5     //largeur de l'axe 3
 
#define H_AXE4 5.6      //hauteur de l'axe 4
#define L_AXE4 5.5      //longueur de l'axe 4
#define La_AXE4 3       //longueur de l'axe 4
#define D_AXE4 2.5         //taille du cercle de l'axe 4
 
#define L_AXE4_C 4.5      //distance entre le centre de rotation de l'axe 4 et le bout de la pièce
#define DIST_AXE45 0.7      //distance entre l'axe 4 et l'axe 5 en z
 
 
#define H_AXE5 3.2      //hauteur de l'axe 5
#define L_AXE5 4.6      //longueur de l'axe 5
#define La_AXE5 0.3
 
#define DIST_AXE6_Z 0.31           //distance entre les axes de 6 et l'axe 5 en z
#define L_AXE6_12 2                 //diamètre des disques des axes 6_1 et 6_2
#define DIST_AXE6_1_X 0.3           //distance entre l'axe 6_1 et le centre de la pièce 5 en x
#define DIST_AXE6_2_X 1.9           //distance entre l'axe 6_2 et le centre de la pièce 5 en x
#define DIST_AXE6_3_X -0.2           //distance entre l'axe 6_1 et le centre de la pièce 5 en x
#define DIST_AXE6_4_X 1.5
#define H_AXE_6_12 4                //hauteur des axes 6_1 et 6_2
 
 
 
#define ENTRAXE_AXE_2 4   //entre-axe entre bras et bras_h
#define ENTRAXE_AXE_3 1.3      //entre-axe entre bras_h et bras 3
 
 
#define ESP_AXE4_Y 2.2     //différence entre centre axe4 et centre de rotation pour l'axe y
#define ESP_AXE4_Z 0.15   //différence entre centre axe4 et centre de rotation pour l'axe z
 
 
#define TAILLE_PINCE 0.6    //taille de la pince 
 


Voici un dessin pour définir ce que représente ces différentes dimensions exceptée la pince :

Vue de gauche :

Image hébergée par servimg.com

Vue de face :

Image hébergée par servimg.com

Les dimensions de la pince seront détaillées dans la partie de la création du bras avec Raydium.

Il nous faut aussi définir le poids des éléments et la force des moteurs. Car chaque élément a un poids. Et pour pouvoir déplacer ces éléments, il faut que les moteurs aient assez de force. Voici la déclaration de ces constantes :

#define FORCE_MOT 10000     //force des différents moteurs du bras
#define FORCE_PINCE 1000        //force des moteurs de la pince
 
#define POID_AXES 0.1       //poids des axes de 2 à 6 du bras 
 


Nous voyons qu'il faut une force assez grande pour les moteurs des axes du bras tandis que pour la pince, ça n'est pas nécessaire car il y a peu de matière à déplacer.

Après avoir défini toutes ces constantes, il faut créer un objet qui contiendra tous les éléments du bras. En ce qui concerne les fichiers ".tri", nous verrons plus tard comment les créer avec Blender. Ils servent au rendu des éléments.

int a;
 
raydium_ode_object_delete_name("TEST_BRAS");    //effacer l'objet TEST_BRAS
 
a=raydium_ode_object_create("TEST_BRAS");       //creation de l'objet TEST_BRAS 
 


Avant de créer l'objet "TEST_BRAS", on doit d'abord l'effacer. Car après l'avoir créé sous raydium, on peut demander à le réinitialiser, et si on essait de créer un objet avec un nom qui existe déjà, une erreur sera retournée. Cette manipulation fera une erreur à la première création du bras car on essayera d'effacer un objet qui n'existe pas encore mais elle est nécessaire.


Après avoir défini toutes les dimensions du bras, il nous faut créer tous les éléments le composant avec ces dimensions.
Pour savoir comment il a été créé sous raydium, cliquez ici : CreationBras



III.3/ Fonction Display


Pour le fonctionnement de ce programme, il ne suffit pas simplement de créer le bras. Il y a aussi une fonction qui s'appelle "display()". Cette fonction sert à intéragir en temps réel sur tous les éléments pris en compte par le moteur 3D. Nous l'utiliserons donc pour :

Fonction Display :



III.4/ Création du rendu sous blender


Blender est un logiciel très puissant. Dans le cadre de notre projet, nous n'avons pas utilisé l'intégralité de ses fonctionnalités. Nous l'avons simplement utilisé pour modéliser les pièces dont on avait besoin et pour leur donner un rendu.

Pour expliquer comment on a procédé, voici un exemple avec la création de l'axe 2 : ExempleBlender



III.5/ Conclusion de la partie modélisation


1/ Difficultés rencontrés et résolus

Plusieurs difficultés ont été rencontrées lors de ce projet.
La partie modélisation du bras n'a pas été la plus compliquée.
Les choses qui ont posé le plus de problème ont été :

Pour celà, il a fallut corriger les commandes par moteur pour qu'ils aient les même angles que le bras réel. La puissance des moteurs devaient être assez élevé pour qu'il puisse tenir et délacer la masse des axes.
Et lorsque l'on donnait un angle de consigne assez différent de l'angle présent, le bras se déplacait beaucoup trop vite. Nous avons alors trouver une solution pour qu'il soit le plus proche possible de la réalité.

Le problème majeur rencontré par la pince a été le glissement. Lorsque l'on tenait un objet, il ne tenait pas dans la pince. On a alors modifié les types de surface de la pince et de la boîte tenue par celle-ci.

Le grand challenge du projet était de faire ressembler et réagir le bras virtuel au maximum à celui en réalité. Nous avons dû pour celà corriger la commande des moteurs.
Tout d'abord, il fallait modifier l'angle reçu par le port série pour que le bras modélisé soit commandé pour réagir de la même façon. Donc corriger sur raydium les angles reçus.
Puis au niveau du micro-controleur, il fallait pas envoyer directement l'ange de consigne, mais incrémenter ou décrémenté l'angle réel petit à petit jusqu'à l'angle de consigne.


2/ Poursuite du projet

Malgré le cahier des charges remplis, il y aurait certaines choses à modifier. Donc si des étudiants d'autres années aurait à modifier notre projet, voici les choses à améliorer :

La première chose à améliorer serait la partie rendu. Car tous les axes n'ont pas été soignés comme dans l'exemple. Dans la création de l'axe 2 sous blender, on a pu voir que l'on a supprimé les parties qui n'étais pas visible, comme par exemple le cylindre coupé en deux ou les faces supprimées. Et bien les autres axes ne sont pas fait de la même manière car notre objectif premier dans ce projet était au niveau du simulateur. Nous voulions plus un bras qui fonctionne correctement plutôt qu'un bras ressemblant esthétiquement mais qui ne fonctionne pas. Il y a donc dans les autres axes des centaines d'arêtes, de faces et de points qui servent à rien.

Encore au niveau du rendu, nous avons relevé une différence d'axes entre raydium et blender. Et nous avions pensé à une solution qui était de créer entièrement le bras sous blender au lieu de créer un fichier par axe. Cette solution serait donc à tester.

La chose suivante à améliorer serait la partie de la pince. Car comme on a pu le voir dans les problèmes rencontrés dans raydium, lorsque la pince tient une pièce, celle-ci glisse légèrement jusqu'à tomber. Il faudrait donc modifier plusieurs paramètres dans raydium pour réduire au maximum cet effet de glissement.

Encore au niveau du moteur 3D, il aurait fallu créer des types de collision pour le bras. C'est à dire donner un numéro pour chaque axe du bras, et définir un type de collision pour chacun de ces axes.


3/ Ce que ce projet m'a appris

Ce projet m'a apporté énormément. Car au début je ne connaissais pas du tout les logiciels que j'ai utilisé, et je n'avais jamais modélisé et utilisé un objet avec un moteur 3D. Et puis ce projet m'a permi d'approfondir mon langage C.

Maintenant je serai capable de réutiliser ces connaissances acquises pour accomplir un autres projet de ce type.


Retour