Projet

Général

Profil

Wiki » Historique » Version 31

Anonyme, 02/05/2020 12:46

1 1 Anonyme
*INTRODUCTION*
2
    
3
Le projet Polytech est un projet qui se déroule sur les deux années de PeiP (Parcours des Écoles d’Ingénieur Polytech). Le but est de travailler par groupe de trois ou quatre sur un sujet choisi au préalable afin d’apprendre à collaborer en équipe. En effet, savoir mener à bien une étude fait partie intégrante du métier d’ingénieur. Ainsi, le projet Polytech consiste en une première mise en situation de ce savoir-faire indispensable.
4
5 18 Anonyme
6 1 Anonyme
Dans notre cas, nous avons choisi le projet proposé par M. Laffont dont l’intitulé est le suivant : 
7
+Le Simulateur de drone+.
8
9
L’objectif de ce projet est de modéliser le fonctionnement d’un drone dans un environnement virtuel à l’aide du logiciel Raydium. Ce travail implique différents aspects car avant de recréer un drone, il faut savoir comment celui fonctionne, c’est-à-dire connaitre les forces nécessaires à ses différents mouvements puis savoir traduire ces actions en language informatique. La modélisation 3D du drone fait également partie des tâches à effectuées.
10
11 31 Anonyme
Ce rapport sera découpé en 4 parties. Dans un premier temps, nous expliciterons concrètement l’aspect mécanique de ce projet, c’est-à-dire que nous étudierons quelles forces sont nécessaires pour qu’un drone décolle, vole, avance, recule, etc. Ensuite, nous nous attarderons sur la présentation d’un outil indispensable : le moteur de jeu. Mais encore, nous développerons l’aspect régulation du projet. Enfin, la modélisation du drone et des forces seront expliquées. 
12 1 Anonyme
13
14
15
16 4 Anonyme
h1. *+ASPECT MÉCANIQUE+*
17 2 Anonyme
18
Tout d’abord, un drone est un aéronef dont le pilotage n’est pas effectué par un être humain à son bord mais par pilotage automatique ou télécommandé. Plusieurs usages sont possibles, allant de l’utilisation civile et récréative à une utilisation militaire.
19
 De ce fait, il existe plusieurs modèles n’utilisant pas tous les mêmes procédés de vol. En effet, à l’inverse de drones militaire, les drones civils fonctionnent pour la plupart via un système de rotors.
20 4 Anonyme
Dans notre projet nous nous sommes donc attelés à modéliser un drone quadrirotor, il a alors fallu que nous nous intéressions dans un premier temps au fonctionnement réel de ces derniers. Ainsi, il a été nécessaire d’étudier plusieurs aspects physique en relation avec le drone afin de réaliser notre modélisation. Tout d’abord, il a été nécessaire de s’intéresser aux forces qui s’appliquent sur le drone du décollage à l’atterrissage. Ensuite, dans l’optique de mettre en mouvement le drone nous avons dûs étudier les différents mouvements réalisable par un drone afin de les transposer lors des simulations. 
21 9 Anonyme
22 1 Anonyme
23 18 Anonyme
h2. +Forces exercées sur le drone :+
24
25 2 Anonyme
Il existe plusieurs forces qui vont s’exercer sur le drone, parmi elles des forces générées par le drone lui même et d’autres extérieure à celui-ci. On compte alors quatre forces majeures interagissant avec le drone :
26
27
-la gravité (poids) est la force qui tend à ramener le drone au sol, plus le drone est lourd et plus l’attraction gravitationnelle sera importante.
28
29 3 Anonyme
-la portance correspond à la force de poussée générée par le drone, pour que celui-ci décolle elle doit alors être supérieure à la gravité. 
30 2 Anonyme
31 3 Anonyme
-la traction, correspondant à la force qui fait avancer le drone par inclinaison de ce dernier
32 1 Anonyme
33
-la trainée, qui est la force s’opposant à la traction du fait de la résistance de l’air sur l’avancée du drone, elle agit comme un frottement.
34 18 Anonyme
35 9 Anonyme
!IMAGE1.png!
36 1 Anonyme
37
38 18 Anonyme
h2. +Forme des hélices+
39
40 9 Anonyme
Tout comme les avions, les drones utilisent la portance afin de décoller puis voler. En effet, d’après la Troisième Loi de Newton, “Tout corps A exerçant une force sur un corps B subit une force de même intensité, de même direction mais de sens opposée exercée par le corps B.”. Ici désignons l’hélice comme A et l’air comme B. A étant en mouvement (rotation) elle va rencontrer et dévier une masse d’air B. L’hélice, applique donc une force vers le bas sur l’air. En contrepartie l’air va appliquer une force d’intensité égale vers le haut qui va permettre, lorsque la vitesse des hélices sera suffisante, de faire décoller le drone.
41 1 Anonyme
42 9 Anonyme
Ainsi, la troisième loi de Newton justifie la forme inclinée des hélices du drone puisque cette inclinaison permet d’envoyer plus d’air vers le bas et donc de créer une force de portance plus importante.
43 18 Anonyme
44 1 Anonyme
!IMAGE2.png!
45
46 11 Anonyme
47 18 Anonyme
h2. +Définitions des mouvements selon les axes X,Y,Z :+
48
49 1 Anonyme
Intéressons nous maintenant aux différents mouvements du drone il convient alors dans un premier temps de définir les axes par rapport auxquels ils sont effectués. 
50 18 Anonyme
51 13 Anonyme
!IMAGE3.png!
52
53 18 Anonyme
Le tangage regroupe les mouvements faisant avancer reculer le drone par rotation autour de l'axe Y. Le Roulis lui, comporte les mouvements de déplacement du drone vers la gauche et vers la droite par rotation autour de l'axe X, tandis que le Lacet permet une rotation horizontale sur place autour de l’axe Z.
54 13 Anonyme
55
Ces notions vont nous permettrent de définir les différents mouvements basiques que peut effectuer un drone ainsi que leurs mise en oeuvre.
56
57 1 Anonyme
Ainsi, nous verrons par la suite qu’afin d’effectuer ces différents mouvements il est nécessaire de jouer sur la vitesse de rotation des hélices. Pour ce faire, chaque rotor est relié à un seul moteur ce qui permet à chaque hélice de tourner à des vitesses différentes les unes des autres. De ce fait, cela permet au drone de mieux répondre aux différentes contraintes qu'il subit mais également d'effectuer les divers mouvements autours des axes X,Y et Z.
58 13 Anonyme
59
Intéressons nous maintenant à la réalisation de ces différents mouvements.
60 1 Anonyme
61 13 Anonyme
62 18 Anonyme
h2. +Montée & descente :+
63 1 Anonyme
64
Premièrement, afin que le drone puissent décoller les hélices doivent créer une force plus importante que celle générée par le poids du drone permettant ainsi son envol. A l’inverse, pour descendre toutes les hélices diminuent de vitesse, le drone descend alors car la force exercée par son poid devient supérieur à sa force d’élévation. Lors de la montée descente, toutes les hélices tournent à la même vitesse permettant d’avoir un unique mouvement selon l’axe Z.
65 18 Anonyme
66 13 Anonyme
!IMAGE4.png!
67 14 Anonyme
68 1 Anonyme
69 18 Anonyme
h2. +Stabilité en vol stationnaire :+
70
71 14 Anonyme
Dans la réalité, afin d’assurer une bonne stabilité les hélices sont placées symétriquement afin de ne pas créer de déséquilibres sur le drone.  Ces dernières une fois en vol vont alors tourner à la même vitesse afin que chaque hélice génère la même force pour qu’une fois encore il n’y ait pas de déséquilibres. De plus, la bonne stabilité du drone sera également assurée par une inversion par paire du sens de rotation des hélices. 
72
73 1 Anonyme
Ainsi, les hélices M1 et M3 tourneront dans le sens horaire tandis que M2 et M4 tourneront en sens anti-horaire. 
74 18 Anonyme
75 14 Anonyme
!IMAGE5.png!
76 1 Anonyme
77 14 Anonyme
Cela a pour effet d’annuler le couple créé par la rotation de chaque hélice. De ce fait, les forces faisant tourner le drone vers la droite sont compensées par celle le faisant tourner vers la gauche. En effet si toutes les hélices tournaient toutes dans le même sens alors le drone tournerait sur lui-même.
78
79
80 18 Anonyme
h2. +Mouvement de tangage et de roulis :+
81
82 14 Anonyme
Pour que le drone avance et recul (mouvement de tangage) ou se déplace latéralement (mouvement de roulis) il faut créer une inclinaison du drone par rapport à l’horizontale. Afin de créer cette angle, il est nécessaire de diminuer la puissance des moteurs dans la direction de mouvement souhaitée et d’augmenter en parallèle la puissance des deux moteurs opposés afin de conserver la même altitude.
83 18 Anonyme
84 1 Anonyme
!IMAGE6.png!
85 14 Anonyme
86 1 Anonyme
Une fois l’angle créé le drone avance dans la direction que l’on a choisie, à savoir celle où les rotors ont diminués de puissances. En effet, les forces créées par les hélices ne sont alors plus absolument verticales mais possèdent désormais une composante horizontale responsables du mouvement.
87 18 Anonyme
88 15 Anonyme
!IMAGE7.png!
89
90
91 18 Anonyme
h2. +Mouvement de lacet :+
92
93 1 Anonyme
Le mouvement de lacet simple va permettre au drone d’effectuer une rotation sur place vers la droite ou vers la gauche. Pour ce faire, il faut diminuer la puissance des deux moteurs dont les hélices tournent en sens opposé à la rotation souhaitée. En parallèle, on augmente la puissance des hélices qui elles tournent dans le même sens que la rotation à effectuer. Ainsi, pour effectuer une rotation horaire, il faut diminuer la puissance des rotors tournant dans le sens anti-horaires et augmenter ceux tournant dans le sens horaire et inversement.
94 18 Anonyme
95 1 Anonyme
!IMAGE8.png!
96
97
Pour ce mouvement de lacet, on utilise le couple créé par la rotation des hélices afin de tourner. Initialement, ce couple est compensé par l’inversion du sens de rotation des hélices deux à deux, les hélices sur la même diagonales tournant dans le même sens. Ainsi, lorsqu’on diminue une paire d’hélices tournant dans le même sens, le couple associé créé par ces dernières diminue également. L’équilibre est rompu et le drone effectue une rotation sur lui même dans le sens de rotation des deux autres hélices ayant conservées leur puissance.
98
99
100 27 Anonyme
Maintenant que l'aspect mécanique du projet a été présenté, intéressons-nous à l'aspect moteur de jeu.
101 18 Anonyme
102
103
104
105 23 Anonyme
h1. *+ASPECT MOTEUR DE JEU+*
106 18 Anonyme
107
Cette partie a pour objectif de présenter ce qu’est un moteur de jeu. En effet, la réalisation de notre projet aurait été impossible sans l’aide d’un tel outil étant donné nos faibles compétences de départ dans le domaine de la simulation informatique.
108
109
110
h2. +Définition et première approche+
111
112
Un moteur de jeu est un outil informatique principalement utilisé dans le domaine du jeux vidéo. Il s’agit en fait d’un logiciel qui offre aux développeurs les fonctionnalités nécessaires à la création d’une application. De nos jours, l’utilisation d’un moteur de jeu par les studios de développement représente un gain de temps (et d’argent) car cela évite de devoir programmer un jeu de A à Z. 
113
Ainsi, le moteur de jeu est en quelque sorte le « chef d’orchestre » d’une simulation car c’est lui qui gère et met en relation les différents domaines du jeu vidéo tels que la physique, l’audio, les entrées de l’utilisateur, l’éclairage de la scène, les animations etc. En fait, il est important de comprendre qu’un tel dispositif est la plupart du temps constitué d’une multitude de sous-moteurs commandant chacun un aspect du jeu.
114
115
!IMAGE9.png!
116
117
Concrètement, l’objectif d’un moteur de jeu est de recréer les caractéristiques du monde réel (la gravité par exemple) dans un environnement virtuel. On en distingue deux types :
118
119
-	Le moteur 2D qui offre un rendu en deux dimensions par empilement d’images matricielles. Une image matricielle est une image formée à partir d’un tableau dont les cellules représentent un point de l’image.
120
121
-	Le moteur 3D qui utilise des calculs de projection pour obtenir des images en trois dimensions
122
123
Voici une liste des moteurs de jeu les plus répandus : Unreal engine, Open GL, Renderware etc.
124
125
Concernant notre projet, le moteur de jeu que nous avons utilisé s’appelle Raydium. Raydium est un moteur de jeu 3D qui permet de gérer la physique ainsi que d’autres aspect d’un jeu vidéo. Le principal avantage de Raydium est que ce moteur de jeu n’exige pas un important niveau de connaissance pour développer une application 3D. Son but est de permettre à des novices de s’entrainer à maitriser les fonctions de bases d’un jeu vidéo. Par exemple, un jeu complet peut tenir sur moins de 800 lignes de codes ce qui traduit bien sa simplicité. 
126
127
!IMAGE10.png!
128
129
Néanmoins, n’ayant jamais utilisé un tel outil nous avons dû nous renseigner sur les différentes fonctionnalités offertes par ce logiciel pour mener à bien notre projet. 
130
131
132
h2. +Fonctionnalités+
133
134
Dans cette sous-partie, nous allons détailler certains aspects gérés par le moteur de jeu. A savoir : les entrées / sorties, les mathématiques utilisées, la physique qui est un point très important de notre projet ainsi que la détection des collisions.
135
136
*Les entrées et les sorties:*
137
Lorsque l’on joue à un jeu vidéo, le moteur de jeu doit être en mesure d’interpréter ce que demande le joueur. Le fait d’appuyer sur une touche (joystick, clavier ou souris) doit provoquer une action bien spécifique comme une accélération, un décollage ou un tir.
138
139
Dans notre cas, le drone apparait au sol puis décolle pour se stabiliser à une certaine hauteur définit au préalable dans le programme. Ensuite, la fait d’appuyer sur la touche F2 le fait avancer. Une fois que l’utilisateur à relâcher le bouton F2 le drone s’arrête. L’idéal aurait été d’imposer une touche pour chaque action : décollage, avancer, s’arrêter, atterrissage.
140
141
*Les mathématiques:*
142
Dans un jeux vidéo, les mathématiques sont partout. Que ce soit pour la modélisation, l’affichage, le rendu, l’animation ou l’intelligence artificielle, les mathématiques sont indispensables. 
143
Différentes branches sont utilisées : géométrie pour le placement des objets les uns par rapport aux autres, algèbre linéaire pour passer de la 3D à la 2D etc.
144
145
Parmi les opérateurs utilisés, on peut citer les matrices et les vecteurs. En général, une matrice de dimension trois sert à stocker l’orientation / position des objets. Chaque item est alors repéré selon son orientation/ position sur trois axes (x, y et z). Les vecteurs quant à eux sont utilisés pour modéliser tout type d’actions telles que des forces.
146
147
Il faut savoir qu’un moteur de jeu effectue énormément de calcul par seconde (produit scalaire, vectoriel et matricielle ainsi qu’inversion de matrice). C’est pourquoi les développeurs de jeux vidéo doivent être très attentifs lors de leur travail et être judicieux quant à leur choix d’opérations. En effet, des méthodes couteuses en calcul peuvent entrainer des ralentissements pendant l’exécution du jeux vidéo. 
148
149
Afin de stabiliser le drone, nous avons mis au point un algorithme de régulation PID qui se base sur le principe de proportionnalité, d’intégration et de dérivabilité. Cet algorithme est détaillé dans la partie +Aspect régulation+.
150
151
*La physique:*
152
L’intérêt d’un moteur de jeu réside dans sa capacité à gérer la physique, c’est-à-dire sa façon de calculer comment les objets interagissent entre eux, comment ils bougent, comment ils rebondissent etc. Pour effectuer de tels calculs, distinguons trois sortes de physique :
153
`
154
-	La physique du point : chaque objet est représenté par un seul et unique point. Ce point possède ses propres caractéristiques telles que sa vitesse, son accélération, son poids etc. Le principal avantage de la physique du point est sa simplicité. Son défaut : on se retrouve très vite limité surtout lorsque l’on cherche à agir sur l’orientation de l’objet en question. 
155
Par exemple, pour simplifier les choses, on pourrait considérer notre drone comme un point dans l’espace. Pour le stabiliser en hauteur cela ne poserait pas de problème, par contre lorsque l’on cherchera à le faire avancer / tourner cela sera plus compliqué et moins réaliste. C’est pourquoi il est préférable de voir notre objet volant comme un système de 5 points : le corps auquel on ajoute les 4 hélices. Dans ce cas on ne parle plus de physique du point mais de physique des solides (ou des systèmes de points).
156
157
-	La physique des solides : tous les objets sont associés à une forme géométrique simple (cube, sphère, cylindre etc.). Cela permet d’obtenir des résultats beaucoup plus réalistes car on peut également influer sur l’orientation spatiale des objets en question. Sous Raydium, le moteur de physique du solide utilisé est ODE (Open Dynamics Engine). En fait, ODE est une bibliothèque logicielle libre et multiplateforme permettant de simuler l’interaction physique de corps rigides.  Elle intègre également plusieurs primitives géométriques ainsi qu’un détecteur de collisions. 
158
159
!IMAGE11.png!
160
161
-	 La physique des particules : elle permet de mettre en œuvre le fait que chaque solide est constitué de plein de petits points que l’on pourrait assimiler à des atomes. Tous ces petits points sont reliés entre eux par des liaisons rigides ou non (des ressorts par exemple).
162
163
*Détection des collisions:*
164
On parle de collision lorsque deux objets se percutent l’un contre l’autre. Dans la réalité, il en résulte une transmission d’énergie et de quantité de mouvement de l’un des corps vers le second. Un bon moteur physique est un moteur physique qui est capable, à l’aide de calculs, de simuler le plus fidèlement possible cet échange (trajectoire, points et date d’impact etc.) Il est possible de distinguer deux modèles de détection des collisions :
165
166
-	Le modèle statique : le temps est découpé en échantillon et le détecteur de collisions regarde une fois pendant chaque échantillon si les objets se touchent. Ce modèle a des limites car si les deux objets possèdent des vitesses trop grandes, il est possible qu’ils se percutent sans que le détecteur ne s’en rende compte.
167
168
-	Le modèle dynamique : la détection se fait en continu, d’un échantillon sur l’autre. Dans ce cas, il n’y a aucun risque qu’une collision ne soit pas traitée mais les calculs sont plus nombreux que pour la méthode précédente.
169
170
Pour notre projet, cet aspect du moteur de jeu n’est pas très utile puisque notre drone vole dans un environnement sans obstacle.
171
172 1 Anonyme
173 27 Anonyme
L'aspect moteur de jeu de notre projet étant introduit, voyons par quelles méthodes nous avons réguler les mouvements du drone.
174 18 Anonyme
175
176 22 Anonyme
*h1. +ASPECT RÉGULATION+*
177 18 Anonyme
178
h2. +But d’un asservissement+
179
180 26 Anonyme
Un asservissement permet de réaliser un objectif donné par une consigne. Il est utilisé pour beaucoup de systèmes. Il existe plusieurs types d’asservissement correspondant à différentes utilisations. Le principe commun à chaque asservissement est de mesurer l’écart entre la consigne (valeur ou objectif défini par l’utilisateur) et l’état actuel du dispositif asservi. En fonction de l’écart mesuré on agit sur le dispositif pour se rapprocher au maximum de la consigne et stabiliser le dispositif à la valeur de la consigne valeur. Pour certains asservissement la consigne peut être modifiée durant le fonctionnement du système. Dans ce dernier cas le système réagit en fonction de sa nouvelle consigne.
181 18 Anonyme
182
Un asservissement peut être définit par différentes caractéristiques qui évaluent sa performance : 
183
184
-	La rapidité ou temps de réponse (temps d’établissement du régime stationnaire sur le schéma) de l’asservissement, c’est le temps nécessaire pour que le système atteigne une valeur stable.
185
-	La pression ou erreur statistique c’est la capacité de l’asservissement à s’approcher le plus possible de la consigne donnée, en d’autres termes que l’écart entre la valeur du système et la consigne soit le plus petit possible.
186
-	La stabilité, on dit d’un asservissement qu’il est stable s’il finit par ne plus osciller ou qu’il ne diverge pas, il doit atteindre une valeur finie et constante au cours du temps
187
-	Le dépassement de la consigne, il sert à mesurer de combien la valeur du système a dépassé la consigne au cours de l’asservissement.
188
189
!IMAGE12.png!
190
191
Toutes ces caractéristiques permettent d'évaluer les performances d’un asservissement.
192
193
194
h2. +Fonctionnement général d’un asservissement+ 
195
196
!IMAGE13.png!
197
198 26 Anonyme
Il faut savoir qu’un système asservi réagit en fonction de la situation actuelle du système utilisé. C’est-à-dire que le capteur du système asservi (altimètre, GPS, thermomètre…) sert à relever les données de la situation actuelle du système. Ensuite un correcteur (ordinateur, automate…)  va calculer par rapport aux relevés du capteur et à la consigne attendue les modifications à apporter sur l’actionneur pour changer une ou plusieurs caractéristiques du système.
199
Par exemple pour atteindre une certaine vitesse en voiture le capteur est le compteur de vitesse et le correcteur est le conducteur. Si il est au-delà de sa consigne il va ralentir et si il est en dessous il va accélérer. C’est un système asservi en fonction de la vitesse. 
200 18 Anonyme
201
h2. +Type d’asservissement utilisé pour notre projet+  
202
203
!IMAGE14.png!
204
205
Pour asservir notre drone nous nous sommes appuyés sur une régulation du type (PID), Il utilise les actions Proportionnelles, Intégrale et Dérivé. C’est un des asservissements très couramment utilisé par une multitude de systèmes dont les drones.
206
207 26 Anonyme
Dans cette régulation l’action proportionnelle correspond l’écart entre la consigne et l’état actuel du système, c’est l’erreur proportionnelle. Cette composante de la régulation va donc agir proportionnellement à l’erreur. Reprenons l’exemple de la voiture plus la voiture est loin de la limite de vitesse plus il va accélèrer où freiner. Si le conducteur veut atteindre 80 km/h alors qu’il roule à 10km/h il devra accélérer plus fort que s’il roule 75km/h. C’est l’action proportionnelle. Cette action sert à atteindre la consigne.
208 18 Anonyme
209
L’action dérivée permet d’anticiper le mouvement ou l’évolution du système au cours du temps. Pour cela on relève l’erreur actuelle et on la compare à la précédente pour adapter la prochaine correction en conséquence, cette action permet d’amplifier l’action proportionnelle. En prenant l’exemple de la voiture, si le conducteur est loin de la limite de vitesse il va accélérer encore plus fort pour y monter plus vite et une fois qu’il s’en rapproche il va décélère plus tardivement et plus fort. En résumé l’action dérivé sert juste à amplifier l’action proportionnelle. Cette action sert à limiter les oscillations autour de la consigne, à stabiliser le système plus vite.
210
211 26 Anonyme
L’action intégrale permet de corriger une faible erreur une fois le système stabilisé à une valeur. On fait la somme des erreurs sur les temps pour pouvoir la corriger par la suite. Par exemple pour la voiture le conducteur a réussi à stabiliser sa voiture à 78km/h au lieu de 80, il s’aperçoit de la différence de 2 km/h pour compenser il décide donc d’accélérer à peine plus pour atteindre 80km/h. l’action intégrale permet d’avoir une meilleure précision, de se rapprocher au maximum de la consigne. 
212 18 Anonyme
213
214
h2. +Asservissement du drone dans raydium+ 
215
216
h3. Stabilisation en hauteur 
217
218 26 Anonyme
Pour asservir le drone dans Raydium nous avons décidé d’adopter un régulateur PD (proportionnel, dérivé) avec le même principe que la régulation PID mais nous avons laissé la partie intégrale de coté sur les recommandations de notre tuteur pour des raisons de simplicité. En effet nous nous sommes aussi aperçus qu’avec le programme au point, le drone ne se stabilisait pas exactement à la hauteur de la consigne, il y avait un écart très minime ce qui est dû au manque de l’action intégrale.
219 18 Anonyme
220
Dans un premier temps pour mieux comprendre le principe d’un asservissement nous n’avons appliqué qu’une seule force pour faire décoller le drone. Le drone devait monter à une altitude donnée par la consigne et s’y stabiliser de lui de lui-même sans actions extérieures de notre part.  Pour ce faire nous avons dans un premier temps essayé seulement avec une action proportionnelle mais le drone oscillait autour de la hauteur de la consigne et ne se stabilisait jamais.
221
	
222 26 Anonyme
Pour réaliser ce programme nous l’avons écrit dans le langage C et dans une boucle se nommant « display » se réitérant 60 fois par secondes ce qui permet de recalculer toutes les valeurs tout les soixantièmes de secondes notamment celle pour l’asservissement du drone. 
223 18 Anonyme
224
_Extrait du programme avec une seule force et seulement l’action proportionnelle :_
225
226
!IMAGE15.png!
227
228
- La première ligne correspond au relevé de la position dans l’espace de l’élément « drone » via une fonction prédéfinie par raydium.
229
230
- La deuxième ligne sert à extraire de « position_drone » seulement la position du drone sur l’axe Z (axe de l’altitude).
231
232 26 Anonyme
- Ensuite nous donnons une valeur à la variable k.
233 18 Anonyme
234
- Puis nous calculons « Eps » (epsilon) l’erreur entre la consigne et l’altitude du drone. Ici « Eps » représente la valeur de l’action proportionnelle.
235
236
- La ligne suivante nous ajoutons un coefficient constant k a la valeur epsilon pour la changer et faire des tests avec différentes valeurs, de cette manière nous accentuons ou diminuons l’action proportionnelle d’epsilon. Ici k*Eps représente la force à appliquer sur le drone.
237
238
- Enfin nous appliquons la nouvelle valeur de la force sur l’axe Z à l’élément « drone » on feut voir que les composantes sur les axes X et Y sont nulles ce qui est normal car nous voulons juste faire mouvoir le drone en hauteur pour l’instant.
239
240 26 Anonyme
Comme cette méthode n’était pas efficace nous avons décidé de rajouter l’action dérivée dans le calcul de la force :
241 18 Anonyme
242
!IMAGE16.png!
243
244 26 Anonyme
Nous avons toujours la composante proportionnelle avec Eps que l’on nomme par la suite fp (c’est la variable « force » de l’extrait précédent) pour force proportionnelle. Puis nous avons fd qui représente l’action dérivée, elle est calculée en prenant la différence entre l’ancienne valeur de l’erreur (EpsOld) et celle de l’itération actuelle Eps. Les variables k1 et k2 sont des coefficients s’ajoutant respectivement à fp et fd pour modifier l’influence de ces dernières en changeant la valeur de k1 et k2. La nouvelle force prend désormais en considération l’action proportionnelle et l’action dérivée come on peut le voir sur la dernière ligne. Puis comme dans l’extrait précédant on applique la force a l’élément drone. De cette manière nous avons réussi à stabiliser le drone à l’altitude souhaité.
245 18 Anonyme
246 26 Anonyme
Mais cette simulation n’est pas en phase avec la réalité car un drone a 4 hélices, il est donc porté par 4 forces dans le modèle de simulation précédent nous n’avons qu’une seule force. C’est pour cette raison que cette simulation n’est pas réaliste. Nous avons donc décidé de créer un objet "Drone" constitué de 5 éléments qui sont le corps du drone et les 4 hélices liées au corps du drone. Puis nous appliquons de la même manière que précédemment une force sur chaque hélice. 
247 18 Anonyme
248
249
h3. Déplacements du drone
250
251 26 Anonyme
Nous avons rencontré un nouveau problème venant de l’application de forces, les forces que nous appliquons jusqu’à présent étaient des forces qui s’appliquaient par rapport aux axes du repères et non par rapport aux axes de l’objet. 
252
C’est-à-dire que même si le drone se penchait, les forces était seulement appliquées sur l’axe Z (axe de l’altitude) du repère et n’avaient pas de composante sur un autre axe, ce qui permet au drone d’avancer par exemple (cf partie mécanique du drone). Pour palier à ce problème nous avons dû changer les forces en forces relatives grâce à une fonction de Raydium et aux éléments sur lequel s’appliquent les forces (les hélices en l’occurrence). Désormais les forces sont appliquées relativement aux objets c’est-à-dire par rapport aux axes des objets et non aux axes du repère. Grâce à cette modification les forces ont désormais deux composantes par rapport au repère quand le drone s’incline, une toujours portée par l’axe Z et une autre sur l’axe X permettant de le faire avancer.
253 18 Anonyme
254 26 Anonyme
Pour faire avancer le drone il faut l’incliner nous avons donc dû asservir l’angle du drone en plus de sa hauteur, en temps normal la consigne de l’angle est de 0°. De la même façon que pour la hauteur, avec une régulation PD nous avons asservi l’angle.
255 18 Anonyme
256
!IMAGE17.png!
257 1 Anonyme
258 26 Anonyme
Ici nous relevons les valeurs des angles du drone grâce à la fonction de la première ligne de l’extrait puis nous les convertissons en degrés. « rotx » correspond à la rotation du drone autour de l’axe X il en est de même pour les deux autres. Pour faire avancer le drone sur l’axe X il faut donc arriver à changer « roty ». 
259 1 Anonyme
260
!IMAGE18.png!
261 18 Anonyme
262
On utilise le même procédé pour asservir l’angle que pour la hauteur mais la « consigne_x » (angle de rotation que doit prendre le drone autour de l’axe Y) représente un angle que le drone doit atteindre pour gérer le déplacement sur l’axe X.si « consigne_x » prend la valeur 20 alors le drone prendra un angle de 20° autour de l’axe Y et pourra se déplacer sur l’axe X.
263
264 26 Anonyme
Par la suite on ajoute la force « ang_x » aux forces des hélices arrières et on l’enlève aux hélices avants de cette façon le drone augmente et diminue les forces des hélices avants et arrières selon l’angle de la consigne et son angle actuel. 
265 18 Anonyme
266 1 Anonyme
!IMAGE19.png!
267 18 Anonyme
268 26 Anonyme
Les hélices 1 et 3 sont les hélices avants et les hélices 2 et 4 sont celles de derrière.
269 18 Anonyme
270 26 Anonyme
Pour faire avancer le drone l’utilisateur appuie sur le bouton F2 afin de mettre la consigne de l’angle à 20° quand il lâche le bouton on enregistre la position du drone et le drone doit s’y stabiliser. C’est une partie compliquée car le drone acquiert une vitesse pendant que l’utilisateur appuie sur la touche pour le faire avancer. Quand il relâche la touche le drone garde sa vitesse car il a une inertie. Il continue à avancer et ne s’arrête pas. Pour cela il faut donc asservir l’angle du drone en fonction de la position du drone et de la position ou l’utilisateur a relâché la touche d’avancée (qui est initialisé à 0 si le drone n’a pas encore bougé). L’asservissement fonctionne de cette manière : si le drone dépasse cette dernière position alors il s’incline dans l’autre sens pour y revenir mais il risque de revenir trop loin alors il va encore changer d’inclinaison et avancer un peu… jusqu’à ce qu’il se stabilise au point là où l’utilisateur a lâché la touche pour avancer. Et tout ceci est fait en faisant attention à ne pas dépasser une certaine limite d’angle sans quoi le drone basculerait trop et s’écraserait.
271 19 Anonyme
272
!IMAGE20.png!
273
274 26 Anonyme
Première condition if : si l’utilisateur appuie sur F2 alors la consigne de l’angle est 20° et on récupère la position du drone à ce moment-là 
275 19 Anonyme
276 26 Anonyme
Premier else : on calcule l’angle que doit prendre la consigne d’angle en fonction de la position actuelle du drone et de celle qu’il doit atteindre avec la même méthode que pour l’asservissement de la hauteur ou de l’angle. Ce calcul donne un angle négatif si le drone est allé trop loin et un angle positif s’il revient trop.
277 19 Anonyme
278 26 Anonyme
Deuxième if et else : on vérifie que le nouvelle angle ne dépasse pas + ou – 20 ° si la nouvelle valeur («  consigne_ang_x ») calculée vérifie cette condition alors la consigne d’angle (ici « consigne » dans l’extrait du programme) prend cette nouvelle valeur calculée. Si la valeur calculée est inférieure à -20° alors on assigne à la consigne d’angle -20° pour que le drone ne dépasse pas cette valeur et ne se crash pas. 
279
Puis on traite le dernier cas, quand la nouvelle valeur calculée est supérieure à 20° on donne à la consigne de l’angle la valeur 20 là encore pour que le drone ne prenne pas trop d’angle et éviter qu'il ne tombe.
280
281 1 Anonyme
Grâce à cet extrait on peut calculer la nouvelle consigne de l‘angle que doit prendre le drone pour aller à une certaine position et s’y stabiliser. La consigne de l’angle est ainsi en permanence recalculée pour gérer les forces des hélices avants et arrières en fonction de la position. 
282
283 27 Anonyme
Cette solution fonctionne mais le drone oscille un peu avant de se stabiliser. On pense que ce n’est pas la solution la plus efficace mais c’est la seule que nous avons trouvée.
284
285
286
Pour terminer, attardons-nous sur l'aspect modélisation inhérent à notre projet.
287 20 Anonyme
288
289 25 Anonyme
h1. +*ASPECT MODÉLISATION*+
290 21 Anonyme
291
Dans cette partie qui va aborder la modélisation du projet, nous commencerons par voir ce en quoi consiste la modélisation. C’est, ici, le fait de représenter numériquement quelque chose.
292 26 Anonyme
Nous avons dû représenter le drone selon 2 axes :
293 21 Anonyme
294
- la modélisation graphique 
295
296
Ainsi que les différentes forces auxquelles le drone est soumis dans la réalité :
297
298
- la modélisation physique
299
300
301
h2.+ La modélisation graphique+
302
303
Dans un premier temps, il faut mettre sur pied un prototype afin de bien visualiser l’objet en 3 dimensions. Pour cela l’utilisation d’un logiciel présent dans le package d’installation de Raydium est conseillé, celui-ci se nomme Blender. Comme cité précédemment Blender a permis de créer un objet personnalisé.
304
305
!IMAGE21.png!
306 30 Anonyme
!IMAGE23.png!
307 21 Anonyme
308
A partir de cette étape il est déjà plus aisé de comprendre et de se projeter au cœur du problème. Etant donné que ce prototype a un intérêt visuel et surtout fonctionnel (non artistique), il n’y a que des formes simples qui sont utilisées. A partir de là certains autres aspects du projet peuvent être traités.
309
310
Ensuite, on peut revenir sur la partie visuelle. Pour améliorer cette facette du projet il est nécessaire avant toute chose de préciser que la forme importe peu. En effet, sur un simulateur le poids est réglé manuellement mais il faut tout de même se rapprocher de quelque chose dont les principales caractéristiques géométriques se rapprochent de la réalité. Etant donné, qu’il est demandé de réaliser un simulateur donc par définition le résultat doit être le plus réaliste possible.
311
312
Pour le visuel il est donc conseiller de s’intéresser à l’edit mode en plus du mode de base de blender (object mode). Ce mode permet l’édition des formes et des textures de manière poussée. Grâce à cela, on peut modéliser le sol, des hélices et globalement un drone plus agréable à regarder. Le sol permet de ne pas avoir un damier qui est une texture de base de blender et ainsi mettre plus en avant les autres éléments du drone. Les hélices ne sont que purement visuelles car comme nous l’aborderons dans la section suivante, les forces sont appliquées au drone même. Normalement, ce sont les 4 hélices entrainés par les moteurs qui permettent au drone de déplacer, il est donc choisi par défaut de positionner les forces de déplacement aux quatre extrémités (à l’endroit où se situerait les hélices normalement). Ainsi, le drone final est créé. Cela est très important car c’est l’objet principal, donc il est donc judicieux qu’il soit agréable à regarder.
313
314
!IMAGE22.png!
315
316
Pour finir la partie sur la modélisation graphique on peut juste dire que cela est surtout esthétique et aide à se projeter dans la modélisation. Mais d’un point de vue du projet c’est une partie qui est moins conséquente que la modélisation physique (partie suivante) car ce n’est pas là où se trouve la partie la plus importante du travail. Cependant, le visuel n’est pas à négliger car dans la perspective d’une commercialisation du projet, la communication et le packaging des produits sont des éléments stratégiques de vente. Dans tous les cas, il est la première impression que le « client » va avoir et va potentiellement impacter son acte d’achat. Par conséquent, c’est un élément essentiel à prendre en compte et à ne pas sous-estimer.
317
318
319
h2. +La modélisation physique+
320
321
La physique est gérée par le logiciel Raydium. Donc, dans cette partie il s’agit de modéliser en langage C les différentes forces auxquelles un drone serait soumis dans la réalité et ainsi permettre au drone simulé de se déplacer à l’identique d’un drone réel.
322
323 28 Anonyme
h3. +Principes :+
324 29 Anonyme
325 21 Anonyme
Un drone réel avec quatre hélices s’élève et se déplace grâce à ces dernières (comme indiqué en détails dans une section précédente). Mais dans le programme de ce simulateur, les hélices ne sont que décoratives et ce sont des forces appliquées au niveau des hélices qui permettent au drone de se mouvoir.
326
327
328 28 Anonyme
h3. +Les particularités d’un simulateur:+
329 21 Anonyme
330
Dans la réalité, le drone est soumis à diverses forces qui vont l’empêcher de se mouvoir comme : le poids, la résistance de l’air, la force du vent, etc.
331
332
Ces trois éléments sont les trois forces de résistance les plus communes mais dans Raydium, la seule force de résistance que le logiciel autorise à simuler est la gravité (action du poids). Ceci signifie que si on veut utiliser les éléments du programme pour les appliquer en environnement réel, il faudra prendre ces forces en comptes. Ici, on touche donc aux limites d’un simulateur. De plus, cela signifie que si le drone commence à se déplacer latéralement ou à se pencher rien ne l’arrêtera (sauf si on commande une réaction des moteurs à contre sens du mouvement). En effet, en réalité les frottements freineraient le drone en ralentissant sa course. 
333
Mais sur Raydium étant donné l’absence de frottements, si on donne une impulsion au drone dans une direction alors il va continuer à glisser dans cette direction. De ce fait, si on donne un angle au drone il va se pencher de plus en plus puis s’emballer.
334
335 28 Anonyme
h3. +Les forces :+
336 29 Anonyme
337 21 Anonyme
Pour appliquer une force au drone il est nécessaire d’utiliser la fonction suivante :
338
339
@raydium_ode_element_addforce_name_3f("drone",0,0,force)@
340
341
Cette fonction applique une force au drone (l’objet nommé drone) suivant l’axe z (du sol vers le ciel). La force est à déterminer en fonction du poids. Car la gravité étant géré par Raydium, il faut donc donner une force supérieure au poids du drone. Pour cela il faut utiliser le poids dans la fonction dédiée à l’apparition du drone : 
342
343
@raydium_ode_object_box_add("drone",a,1,1,1,poids,RAYDIUM_ODE_STANDARD,0,"drone.tri")@
344
345
Il est tout de même plus simple de procéder de façon empirique, car mettre une force bien supérieure au poids permettrait au drone de monter plus rapidement. Or, une force légèrement supérieure au poids ferait monter le drone plus lentement. Mais si l’on souhaite prendre comme point de départ la force suffisante, on utilise la formule du poids : 
346
347
@F (forces) = m (poids du drone) *g (constante gravitationnel)@
348
349
Pour plus de facilité, on peut utiliser à la place du poids la fonction :
350
351
@RAYDIUM_ODE_AUTODETECT@
352
353
Celle-ci permet de mettre un poids déterminé automatiquement par le logiciel, c’est-à-dire un poids cohérent qui encourage la recherche de la force précédemment évoquée de façon empirique.
354
Au début, on applique une force centrale au drone (barycentre). Mais par la suite on simulera les moteurs par quatre forces.
355
356
357 28 Anonyme
h3. +Atteindre une hauteur :+
358 29 Anonyme
359 21 Anonyme
Comme déjà évoqué précédemment il n’y a pas de forces qui vont restreindre le mouvement, il est donc nécessaire d’appliquer une consigne de hauteur à laquelle on souhaite arrêter le drone. Voir la partie sur l’asservissement des moteurs.
360
361
362 28 Anonyme
h3. +Quatre Forces :+
363 21 Anonyme
364
Pour des raisons de réalisme, il est nécessaire de séparer la force appliquée au drone car dans la réalité un drone est propulsé par ses moteurs au nombre de quatre généralement. Donc on va appliquer les forces aux quatre extrémités du drone grâce à la fonction :
365
366
@raydium_ode_element_addrelforce_name_3f("helice",0,0,force)@
367
368
Le paramètre "helice" correspond à la position/objet de l’hélice parmi les 4 disponible : helice1, helice2, helice3 ou helice4.
369
Les paramètres "0,0,force" sont les forces appliquées sur les 3 axes x, y et z. Sur l’axe vertical (z), la force sera égale à ¼ de la force totale nécessaire pour faire décoller le drone.
370
371
372 28 Anonyme
h3. +Les hélices :+
373 29 Anonyme
374 21 Anonyme
Les hélices qui n’ont certes pas d’impact par rapport au poids et n’exercent pas d’interaction avec l’environnement dans le simulateur. En réalité il faut évidemment prendre leur poids en compte et également considérer aussi leur taille… Il faut donc se servir de la fonction suivante :
375
376
@raydium_ode_joint_attach_hinge("joint",drone,helice,0,0,0,RAYDIUM_ODE_JOINT_AXE_Z)@
377 1 Anonyme
378 29 Anonyme
Le paramètre drone est l’objet qui va se voir ajouter les hélices.
379 21 Anonyme
Hélice  est le nom de l’objet que l’on souhaite ajouter.
380
Les paramètres (0,0,0) détermine la position, par rapport au centre du drone, où les hélices vont se trouver sur les axes x, y et z.
381
382
RAYDIUM_ODE_JOINT_AXE_Z  est l’orientation de l’objet (ici suivant l’axe z).