Le logiciel
FreeCAD permet de
programmer l'animation de pièces mobiles d'un dispositif mécanique. Le
Diametroid est donc un bon support expérimental pour mieux manipuler le logiciel
et surtout, c'était le but, d'essayer de comprendre comment une telle
transmission peut fonctionner.
I - Principe de fonctionnement de l'animation sous
FreeCAD
Sous FreeCAD, on modélise une pièce formée de plusieurs
composants. Si certains composants sont mobiles, il est intéressant de trouver
une méthode de modification de la position ces composants voire même les
composants eux-mêmes et la manière de contrôler ces modifications.
On conçoit facilement que FreeCAD n'est pas en mesure de
deviner ce que veut faire l'utilisateur. Ce dernier doit donc modifier son
projet, non pas interactivement comme il l'a fait pour la virtualisation mais
dynamiquement en respectant une logique de séquence donc dépendant du temps.
FreeCAD met donc à la disposition de l'utilisateur le
moyen de programmer des changement du modèle grâce à un interpréteur de
commandes régit par le langage "Python".
Ce sont les "macros" et les "scripts" :
•
Les macros
sont des commandes enregistrées durant des manipulations et qui peuvent être
ré-exécutées autant de foi que l'on veut. Elle génère un déroulement
séquentiel de ses commandes.
•
les scripts
sont des séquences algorithmiques de commandes régies par le langage de
programmation "Python".
Dès que l'on exécute une macro ou un script, le projet
FreeCAD est modifié. Il convient donc de travailler, pendant les périodes de
tests, sur des copies des projets ou prendre bien soin de le pas les sauvegarder
pendant ces tests.
Durant la lecture de la documentation "scripts
et macros", mon attention a été attirée par un aspect étonnant des
choix fait par les développeurs.
Remarque 1 :
1°.
FreeCAD reconnaît un certain nombre de
dossiers dans lesquels sont stockés les modules, les scripts et les
macros Python. Ces dossiers se situent dans l'environnement
d'installation du logiciel ce qui est indispensable pour lui. Mais pour
l'utilisateur, stocker les scripts et les macros voire les modules de
ses projets dans l'environnement du logiciel est un
inconvénient fort
handicapant. Très rapidement, ces dossiers deviennent vite ingérables
en
se transformant vite en "poubelles" où, en environnement multiutilisateurs,
tout le monde y met tout et n'importe quoi !... Je ne vois
aucune difficulté de programmation à prendre en compte des dossiers
comme ceux définis dans une variable
d'environnement système, par exemple "FreeCADpath=", plus subtile, utilisée sous Unix et Windows qui
contiendrait la liste de tous les répertoires de recherche prioritaires
et ceux, standards, du logiciel encore que !.. cela peut poser des
problèmes si plusieurs logiciels adoptent la même technique !...
Pourquoi faudrait-il privilégier un logiciel plutôt qu'un autre dans le
cas où deux d'entre eux au moins possèderaient un module, un script ou une
macro portant le même nom ? Pourquoi n'est-il donc pas
possible de les stocker dans des répertoires créés dans ceux des projets eux-mêmes
puisque, sitôt un projet enregistré, le logiciel connait parfaitement la
localisation de son dossier ?
Cette solution
me paraît la plus intéressante car entièrement indépendante ainsi on
pourrait avoir les dossiers suivants : - "dossier_du_projet",
- "dossier_du_projet\bin",
- "dossier_du_projet\Mod",
- etc... Cette méthode me paraît
être une solution générale.
2°.
J'ai cherché à utiliser l'éditeur de
scripts et de macros de FreeCAD. Si la création et la modification du
fichier ne pausent aucun problème, à part celui de choisir le code
ANSI puisque je suis sous Windows, je n'ai pas réussi à arrêter avec le bouton
(inactif)
le script sous éditeur lancé avec le bouton
.
De plus, le lancement au clavier de l'instruction "timer.stop()"
est inopérante car le script est lancé dans un processus différent de
celui de la console alors qu'elle l'est si on copie le script directement dans la console Python
où tous les points d'entrée "def" sont
accessibles. Pour arrêter un script qui boucle, il faut fermer FreeCAD
!...
3°.
Comme il n'est pas possible, pour le moment
de stocker des scripts Python dans des dossiers du projet, et que des
problèmes surgissent sous l'éditeur, j'ai
finalement opté pour la solution du script stocké dans le répertoire du
projet, édité avec l'éditeur "notepad++" que j'utilise
habituellement, script que je copie directement dans la console Python
avec l'extension ".py" et non ".FCMacro" pour l'auto_completion.
L'avantage de cette solution est de travailler dans le processus de la
console et donc d'avoir accès à toutes les commandes du script (def) et
aussi à toutes ses variables. Il y a bien entendu le revers de
la médaille !.. celui d'être obligé de faire un script monolytique. Il y a
bien dans "Edition=>Préférences=>Macro=>Chemin de la macro"
la possibilité de définir le chemin d'accès à un dossier mais ce dernier
ne sera valable que pour le projet ouvert courant.
4°.
Dans la syntaxe des scripts Python, je
n'apprécie pas particulièrement le principe de définition des blocs
d'instructions par un changement d'indentation. Mais bon, nouveau langage,
nouvelle forme. Pourquoi pas après tout !... Personnellement, je reste
fidèle à la syntaxe et les instructions du C, langage avec lequel on
peut absolument tout faire, même la programmation orientée objet dont
les fondements existent tout naturellement depuis le Big-Bang, il y a 14
milliards d'années !...
Je ne trouve pas tout cela très élégant mais ça marche !...
II - Écriture du script Python d'animation
Le script Python d'animation s'élabore de proche en
proche. Ici, le premier stade de l'animation commence par la rotation du
planétaire du train épicycloïdal d'entrée. Il commande l'animation puisqu'il est
connecté au moteur qui lui applique un couple de puissance.
- Animation du planétaire du train
épicycloïdal d'entrée :
° Il définit un timer nommé "timer" (lignes 110-112)
qui va permettre d'exécuter la fonction "Diametroid()"
d'animation périodiquement tous les intervalles de temps définis
par "intervalle".
° Il définit
le pas "pas"
de l'angle de rotation de l'arbre et de l'engrenage du
planétaire d'entrée.
° Il
positionne l'axe de référence du diametroid (ref_x,
ref_y, rf_z)
° Il
positionne l'angle de départ du planétaire
"plan_ent_ang".
On peut donc jouer sur les deux paramètres 'intervalle
et pas pour régler la vitesse de l'animation.
• la fonction "Diametroid()", lignes
46-65 :
° Elle incrémente l'angle de rotation "plan_ent_ang"
d'un pas "pas".
Elle donne le contrôle à chaque fonction
de traitement de la position des différents composants du Diametroid :
° Elle calcule la position du pivot du
composant qui dépend parfois des
paramètres d'un autre composant traité précédemment,
° Elle calcule l'angle de rotation du
composant qui dépend souvent de l'angle de rotation
d'un autre composant traité précédemment,
° Elle donne le contrôle à la fonction
de traitement de l'animation du composant courant,
- Animation du planétaire du train
épicycloïdal d'entrée :
• la fonction "planetaire_entree(x_pivot, y_pivot, z_pivot, angle)", lignes
26-44 :
Elle provoque la modification de la position
de l'engrenage planétaire du train épicycloïdal d'entrée.
° Elle
déclenche la rotation de l'engrenage du planétaire d'un angle défini par "angle",
° Elle
déclenche la rotation de l'engrenage du planétaire du même angle.
On a choisi ici de faire tourner le planétaire dans le
sens des aiguille d'une montre.
- Animation des engrenages
satellite du train
épicycloïdal d'entrée :
À ce niveau, le script a été repris pour les modification
suivantes :
° dans
le maillon principal, l'intervalle de temps entre les tops
d'horloge est calculé à partir de la définition de la vitesse de rotation du
planétaire en nombre de tours par minute définie par le paramètre "nb_tours_mn_entree".
° dans
la fonction "Diametroid()", on définit les paramètres de
positionnement des différents composants qui, pour certains, seront calculés
en fonction de la position de certains autres,
• la fonction "satellite_entree(numero_satellite, x_pivot, y_pivot, z_pivot, angle)",
lignes 47-66 :
° cette fonction est appelée
deux fois avec un positionnement symétrique en ordonnées des axes de
rotation par rapport à
l'ordonnée de l'axe de référence,
° le
sens de rotation des satellites est inverse de celui du planétaire. Les deux
satellites tournent donc en phase,
° les engrenages satellites étant
identique, leur vitesse de rotation est fonction du rapport des nombres de dents
de l'engrenage planétaire (31) et des leurs (33). Cette
vitesse dépend de l'angle de rotation des engrenages donc :
angle
satellite = angle
planétaire * nb dents
planétaire / nb dents
satellite
Animation 1
- Animation des excentriques et
des broches du train
épicycloïdal d'entrée :
En vue d'une simplification de la future mise au point,
le script a été pratiquement refondu pour permettre le repositionnement du
Diametroid dans son état initial. En effet, l'animation modifie certains
paramètres relatifs aux composants et donc, quand on arrête l'animation, on ne
sait pas dans quel état se trouve la modélisation.
Certes, la solution simple, radicale et des plus fiables
consiste à fermer le projet sans le sauvegarder et à restaurer le projet initial
par les commande que propose FreeCAD dans sa console :
#*** Fermeture du projet sans sauvegarde : App.closeDocument("Diametroid")
App.setActiveDocument("") App.ActiveDocument=None Gui.ActiveDocument=None
#*** Ouverture du projet initial : FreeCAD.open(".... / ..... / ....
/Technique/Diametroid/Diametroid.FCStd") App.setActiveDocument("Diametroid")
App.ActiveDocument=App.getDocument("Diametroid") Gui.ActiveDocument=Gui.getDocument("Diametroid")
La solution aurait été parfaite si j'avais pu trouver la
méthode qui me permette de récupérer le chemin d'accès complet au projet ouvert
par FreeCAD pour la coder dans l'instruction "FreeCAD.open(...). Le projet peut
se trouver dans des répertoires différents correspondant à des différentes
phases d'élaboration. Je réserve cela pour plus tard.
Par conséquent, il est impératif de remettre la
configuration dans son état de départ :
° au
lancement de l'animation car le modèle pourrait ne pas être dans
son état initial à cause de manipulations préalables d'origine quelconque,
° à l'arrêt
de l'animation pour laisser la place aussi propre en sortant
qu'on l'a trouvée en entrant.
Le script se réduit maintenant à l'appel des méthodes
suivantes :
° la méthode "diametroid()"
(lignes 26-136) : elle positionne les composants à chaque top d'horloge,
° la méthode "position_initiale()"
(lignes 138-255) : elle remet le modèle dans sont état initial,
° la méthode
"position_composant(nom_composant,
x_pivot, y_pivot, z_pivot, angle)"
(lignes 257-267) : elle est appelée pour chaque composant avec un pivot
et un angle. Elle permet aussi de simplifier l'écriture dans la méthode d'appel
donc de rendre la programmation plus lisible,
Les méthodes
suivantes (lignes 269-302) permettent de contrôler l'exécution de l'animation en
les saisissant directement au clavier de la console :
° la méthode "a()"
(lignes 281-288) : elle arrête l'animation par arrêt de l'horloge et appelle la méthode "position_initial()"
pour tout remettre en ordre.
° la méthode "s()"
(lignes 290-294) : elle suspend l'animation par arrêt de l'horloge afin de
pouvoir consulter des messages généralement de mise au point affichés en
temps réel dans la "Vue Rapport"
car il n'est pas prévu dans FreeCAD semble-til d'en suspendre le
déroulement.
° la méthode "r()"
(lignes 296-302) : elle relance l'animation suspendue.
Pour permettre l'arrêt, la suspension et la reprise de
l'exécution du script, comme je l'ai expliqué dans le 2° de la
remarque 1, le script doit être copié et collé dans
la console pour travailler dans son espace-adresse. Ces possibilités n'ont pas
l'air d'être disponibles en standard. De plus, si on édite le script du présent
projet qui boucle sur un timer sans jamais s'arrêter de lui-même, il n'y a
apparemment aucune d'autre solution que celle de fermer FreeCAD !...
Les deux méthodes "position_initiale()"
et "diametroid()"
ont la même structure et leur programmation a l'avantage d'être assez "mécanique".
La seule différence réside dans le fait que les paramètres initiaux sont figés
dans la première et que les mêmes paramètres sont calculés dans la deuxième.
- Animation des broches de
excentriques :
C'est bien parce que la broche de chacun des satellites
est déportée de 22 mm de l'axe de ces derniers qu'on les appelle "excentriques".
Ils sont solidaires des satellites
et
tournent en phase.
Dans un premier essai, j'avais associé le cylindre et la
broche de l'excentrique. J'avais eu quelques difficultés à manipuler les
broches par la suite.
Dans la version actuelle, les broches sont traitées
séparément. Le calcul des coordonnées du pivot dans le plan Z étant simplement
assuré par les instructions suivantes :
° (sat_ent_1_bro_x,
sat_ent_1_bro_y) sont les
coordonnées du pivot de la broche "n".
° (sat_ent_n_exc_x,
sat_ent_n_exc_y) sont les
coordonnées du pivot de l'excentrique.
° ray_tra_cen_bro
est le rayon du cercle de la trajectoire du pivot de la broche.
° alpha
est l'angle courant de rotation de l'excentrique.
- Animation globale du train
épicycloïdal d'entrée :
Animation 2
- Animation du train
épicycloïdal de sortie :
Comme cela a été sommairement décrit dans la page "Virtualisation",
on pressent le fonctionnement de cette transmission continue variable.
Concrètement, le conducteur adapte un régime moteur pour
pouvoir rouler à la vitesse qu'il souhaite. La transmission
sélecte en permanence, sans aide extérieure, le rapport de vitesse approprié
pour des efforts minimaux et aussi des contraintes minimales. C'est ce que fait
normalement le conducteur manuellement si la boîte est mécanique et ce que fait
l'asservissement et l'électronique si c'est une boîte automatique.
La vitesse de translation du véhicule est directement
liée à la vitesse de rotation des roues donc à la vitesse de rotation de l'arbre
du planétaire de sortie. Pour une vitesse de rotation donnée sur
l'arbre du planétaire d'entrée et une vitesse de rotation donnée sur l'arbre du
planétaire de sortie, il s'agit de déterminer la vitesse de rotation du bloc qui
contient l'ensemble des composants qui assurent l'auto-adaptation.
Il est logique de traiter maintenant l'animation du train
épicycloïdal de sortie. Dans le maillon principal du script, comme pour la
vitesse de rotation de l'arbre du train épicycloïdal d'entrée avec le paramètre
"nb_tours_mn_entree", on définit une
vitesse de rotation de l'arbre du train épicycloïdal de sortie par le paramètre
"nb_tours_mn_entree". Mais cette
fois-ci, on calcule le pas d'angle parcouru à chaque top d'horloge par l'arbre
du train de sortie.
IL n'est pas proposé de description car le principe de
fonctionnement de l'étage de sortie est identique à celui de l'étage d'entrée,
jusqu'aux couronnes des trains épicycloïdaux.
- Animation
de la couronne du train
épicycloïdal d'entrée et du pignon de phase :
J'ai essayé de commenter le plus possible le code du script. Comme on retrouve
souvent des séquences analogues voire identiques aux valeurs près des
paramètres, on retrouvera les mêmes commentaires que je n'ai pas pris la peine
de supprimer !...
Le script d'animation correspond à l'image de la figure 1 ci-dessous du Diametroid.
On ne s'intéressera pour le moment qu'à l'étage d'entrée jusqu'au pignon de
phase, partie de la transmission dont l'image ne fait pas apparaître
l'anomalie de fonctionnement que je pressens :
Figure
1
L'axe de la tringle gris-blanc coïncide avec l'axe de
référence du Diametroid et indique ici la solidarité entre le support des
excentriques des satellites et le pignon de phase (tous deux en vert foncé),
comme on peut le repérer sur le modèle de John Bisby dans l'éclaté de la
figure 2 que j'ai pu réaliser
sous Rhinoceros à partir de son fichier "Diametroid
EP.3ds" :
figure 2
On peut parfaitement voir les évidements des boulons de
fixation sur le support des excentriques
et le pignon de phase. Mais on peut aussi remarquer avec surprise sur la figure 3 que
le nombre de dents de la couronne comporte 24 dents et celui du pignon de phase
16 ce qui ne permet pas à l'entretoise d'évoluer dans l'évidement de la
couronne :
figure 3
Dans son document, John Bisby précise pourtant que ces
deux nombres doivent être dans le rapport, 24/12, 32/16 si l'on
souhaite que l'entretoise soit la plus grande
possible pour des raisons de résistance mécanique. La figure 4 ci-dessous
illustre le problème et l'on voit que les engrenages de gauche 24/12 permettent
à l'entretoise de passer au plus près des évidements des excentriques tout en
gardant au maximum sa surface de contact avec leur support :
figure 4
Les engrenages de droite pourraient
bien sûr fonctionner correctement mais ce serait au prix d'une réduction du rayon du cercle périphérique
de l'entretoise si les contraintes de résistance sont satisfaites.
Contrairement
Figure 5
à John Bisby, j'ai donc adopté la
configuration 24/12 et je reprends donc le fil de l'animation dans laquelle je
n'ai pas réussi à faire fonctionner correctement cet ensemble mécanique.
N'étant pas un spécialiste du traitement des engrenages, peut-être, n'ai-je pas
traité correctement l'animation dans mon script ?
Pourtant, si l'on observe la figure 5, la couronne,
couleur ocre-jaune, commandée par les deux broches des deux excentrique, en
rouge, se déplace parallèlement au plan passant par les axes de ces deux
excentriques. Ce plan tourne à la vitesse la rotation du support des satellites, en
vert. La couronne tourne donc à la même vitesse que celle du support.
Or, le pignon de phase, en vert au centre, devrait
s'engréner dans
la couronne pour tourner deux fois plus vite que cette dernière quand on
regarde le nombre de dents des engrenages. Mais le pignon de phase est solidaire
du support. Il tourne donc à la même vitesse que celle du support donc à la même
vitesse que celle de la couronne ce qui mécaniquement impossible.
C'est cette particularité qui m'a intrigué. On le voit
bien sur la figure 5, la couronne et le pignon de phase n'arrivent pas à
s'engrener correctement.
C'est peut-être ce phénomène qui a entraîné l'abandon du
projet par John Bisby.
Je présente néanmoins le script pour une étude du projet
par d'éventuels intéressés qui, peut-être, pourraient me communiquer remarques,
critiques et conseils voire suggestions qui seront les bienvenus avec mes
remerciements.
Le fichier de
modélisation : le fichier du script :
Le script Python a été programmé en vue de le copier
dans la console pour qu'il travaille dans l'espace adresse de cette dernière
dans le but de pouvoir exécuter en temps réel certaines méthodes et modifier
certains paramètres.
Le script a été à nouveau restructuré comme
suit :
°
lignes
395-434 :
la "maillon
principal" du script est le point d'entrée de
l'animation qui initialise les conditions de son départ :
- lignes
405-406 :
définition du nombre de
tours par minutes de l'étage d'entrée "nb_tours_mn_entree" et de l'étage de sortie
"nb_tours_mn_sortie". On rappelle que le but du
projet est de vérifier comment la vitesse de rotation de l'étage
d'auto-adaptation peut être déterminée en fonction de la vitesse
de rotation du planétaire d'entrée sur lequel est connecté
le moteur pour obtenir la vitesse de rotation désirée du
planétaire de l'étage de sortie sur lequel sont connectées les
roues.
- lignes
408-409 :
position de repos de
l'angle
φ
de l'axe des excentriques d'entrée "phi_ent" et de
sortie "phi_sor" avec la verticale.
- lignes
413 :
définition du pas
"pas" d'incrémentation de l'angle
"plan_ent_ang_d"
du planétaire d'entrée exprimé en degrés. Ce paramètre
peut être modifié pendant l'animation pour changer la vitesse
d'affichage.
- lignes
415-419 :
définition de l'intervalle
"intervalle"
en millisecondes de temps entre deux tops d'horloge. Cette
intervalle détermine la vitesse de l'animation.
- lignes
427 :
appel à la méthode "position_initiale()"
pour positionner le modèle dans son état d'origine. Cette
opération est nécessaire car le modèle pourrait très bien être
modifié avant le démarrage de l'animation.
- lignes
429-432 :
initialisation d'un timer
qui lancera la méthode "diametroid()"
toutes les "intervalle"
millisecondes.
°
lignes 26-56 :
la méthode "position_initiale()"
positionne le Diametroid dans son état initial. Elle définit les
paramètres de départ et appelle la méthode "diametroid()".
- lignes
37-38 :
définition des coordonnées
et de l'angle de référence
(ref_x, ref_y, ref_z).
Ces paramètres ne sont pas très utiles car, au départ, je
pensais pouvoir localiser plusieurs modélisations pour
comparaison.
- lignes
40-41 :
définition de l'angle
φ
de l'étage d'entrée "phi_ent"
et de l'étage de sortie "phi_sor".
Explications plus loin.
- lignes
43-50 :
définition de la position
des différents composants du Diametroid le long de l'axe des Z.
Pendant l'animation, il est possible de changer la valeur de ces
paramètres directement dans la console pour voir le composant se
déplacer (visualisation d'un éclaté ou d'un condensé avec les
combinaisons intermédiaires). Vu l'anomalie rencontrée,
l'étage de sortie n'est pas traité.
- lignes
52-54 :
initialisation de l'angle
en degrés du planétaire de l'étage d'entrée et appel à la
méthode "diametroid()"
pour le positionnement de départ.
°
lignes 58-346 :
la méthode "diametroid()"
positionne le Diametroid pour l'angle courant
"plan_ent_ang_d"
du planétaire d'entrée. La méthode est exécutée à chaque top
d'horloge :
- lignes
75 :
incrémentation d'un pas de l'angle "plan_ent_ang_d"
en degrés du planétaire de l'étage d'entrée.
- lignes
77-81 :
calcul de l'angle "phi_ent"
en degrés du plan s'appuyant sur les axes des satellites
S1
et S2 de
l'étage d'entrée donné par le pignon de phase centré sur l'axe
de référence P.
Ce plan est représenté
par la droite pointillée (S1,S2). Il dépend non
seulement du rapport du nombre de dents de l'engrenage du
planétaire centré sur P et de celui des satellites
S1
et S2 mais aussi du rapport du
nombre de dents de l'engrenage du pignon de phase aussi centré
sur P et de celui de
la couronne centré en C
à mi distance de l'axe des broches B1 et
B2
des excentriques E1
et E2 :
L'angle
θ (B1,S1,S) que
prend le centre de la broche B1 avec l'axe (S1,S) est
proportionnel à l'angle de rotation du planétaire dans le
rapport plan_ent_eng_dents /
sat_ent_eng_dents où
plan_ent_eng_dents :
est le nombre de
dents de l'engrenage du planétaire et
sat_ent_eng_dents:
est le nombre de
dents de l'engrenage de chaque satellite.
Mais pendant que les broches
B1
et B2 parcourent cet angle
θ,
l'axe (S2,S1) du support des satellites parcourt l'angle
φ
dans le rapport pig_pha_eng_dents /
cou_ent_eng_dents
où
pig_pha_eng_dents:
est le nombre de
dents de l'engrenage du pignon de phase.
cou_ent_eng_dents :
est le nombre de
dents de l'engrenage de la couronne.
- lignes
83-93 :
positionnement du planétaire d'entrée situé à la
cote "plan_ent_eng_z=ref_z+100.0 mm"
par défaut
(ref_x, ref_y, ref_z). La définition des cotes des
différents composants par rapport à origine de référence permet de
les rapprocher plus ou moins pour une meilleure observation.
Le but du projet est
aussi de montrer l'animation d'un éclaté du Diametroid. Il
y a deux positionnement à opérer, celui de l'arbre du planétaire
et celui de son engrenage.
- lignes
95-135 :
calcul des coordonnées du
centre du satellite n° 1 de l'étage
d'entrée situé à la même cote que celle du planétaire. Ces
coordonnées dépendent de l'angle
φ
et coïncident avec celles de l'arbre et de l'excentrique. Les
broches de l'excentrique ont pour centre de rotation le centre
de l'excentrique et tourne autour de lui à la même vitesse
angulaire que le satellite.
- lignes
137-174 :
positionnement du satellite n° 2 de l'étage
d'entrée situé à la même cote que celle du planétaire.
Le traitement est identique à celui du satellite N°1.
- lignes
176-181 :
positionnement du support des satellites d'entrée.
Il tourne à la vitesse données par l'angle "phi_ent".
- lignes
183-191 :
positionnement de la couronne de l'étage d'entrée
dont le mouvement est commandé par les broches des excentriques.
Elle se déplace parallèlement à elle-même. Sa vitesse de
rotation est la même que celle du support des excentriques. La
vitesse linéaire des broches prises isolément n'est pas constante
puisque leur vitesse de déplacement varient en
fonction de leurs positions avançantes ou reculantes sur leurs
excentriques respectif mais, sur un tour complet de ces
derniers, la vitesse de rotation de la couronne est "phi_ent"
imprimée par le support des satellites. Quand l'une est avançante, l'autre est reculante, leur mouvement conjoint se
compense pour donner une vitesse de rotation constante.
- lignes
493-205 :
positionnement du pignon de phase. Solidaire
du support des excentriques, il a la même vitesse soit "phi_ent".
- lignes
207-279 :
positionnement du train
épicycloïdale de sortie commencé mais non poursuivi.
- lignes
281-342 :
phase exécutoire des
positionnements définis pour l'ensemble des composants.
- lignes
344 :
appel de la méthode "s()"
pour suspendre l'animation afin de permettre la création des images à
inclure dans un gif animé.
- lignes
348-358 :
la méthode "position_composant()" effectue le
positionnement effectif d'un élément animé sur le modèle. Elle
contient la seule instruction de modification du modèle.
- lignes
360-393 :
méthodes déjà décrites qui
permettent la suspension, la
reprise ou
l'arrêt de l'animation
en saisissant directement dans la console Python le nom de la
méthode (avec ses parenthèses).
À cause de la suspicion que j'avais formulée plus haut sur
le blocage mécanique de ce Diametroid que je pense avoir confirmée, je ne poursuis pas davantage l'étude en
attendant, peut-être un éventuellement éclaircissement.
Pour conclure, je dois dire que cette petite étude a été
un bon exercice de découverte du logiciel FreeCAD :
° côté virtualisation
:
la définition du modèle est
relativement facile,
° côté animation
:
la programmation est un peu plus délicate tout en
n'étant pas difficile outre mesure. Je n'ai pas réussi à utiliser les
script sous éditeur car, une fois lancé, je n'ai pas trouvé le moyen de
l'arrêter, ni même de le suspendre ou de le continuer.