Projet

Général

Profil

Wiki » Historique » Version 55

Anonyme, 03/05/2020 21:20

1 34 Anonyme
h1. *SOMMAIRE*
2
3
h3. Introduction
4
5
h2. +ASPECT MÉCANIQUE+
6
> Forces exercées sur le drone
7
> Forme des hélices
8
> Définitions des mouvements selon les axes X,Y,Z
9
> Montée & descente
10
> Stabilité en vol stationnaire
11
> Mouvement de tangage et de roulis
12
> Mouvement de lacet
13
14
h2. +ASPECT MOTEUR DE JEU+
15
> Définition et première approche
16
> Fonctionnalités
17
18
h2. +ASPECT RÉGULATION+
19
> But d'un asservissement
20
> Fonctionnement général d'un asservissement
21
> Type d’asservissement utilisé pour notre projet
22
> Asservissement du drone dans Raydium
23
24
h2. +ASPECT MODÉLISATION+
25
> La modélisation graphique
26
> La modélisation physique 
27
28
h3. Conclusion
29
30
---
31 39 Anonyme
32 38 Anonyme
---
33 34 Anonyme
34 1 Anonyme
*INTRODUCTION*
35
    
36 18 Anonyme
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.
37 1 Anonyme
38
Dans notre cas, nous avons choisi le projet proposé par M. Laffont dont l’intitulé est le suivant : 
39
+Le Simulateur de drone+.
40
41 32 Anonyme
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.
42 1 Anonyme
43
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, c'est-à-dire l'aspect programmation. Enfin, nous aborderons la modélisation du drone et des forces. 
44
45
---
46 37 Anonyme
47
*REMERCIEMENTS*
48
49
Avant toute chose, nous tenons à remercier notre tuteur de projet Monsieur Laffont pour tous les bons conseils qu’il nous a prodigués. Il a contribué en grande partie à tous ce que nous avons réalisé et nous a permis de développer nos connaissances dans le domaine de la simulation informatique mais également dans l’approche du métier d’ingénieur.
50
51
--- 
52 1 Anonyme
53 40 Anonyme
---
54
55 4 Anonyme
h1. *+ASPECT MÉCANIQUE+*
56 2 Anonyme
57
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.
58
 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.
59 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. 
60 9 Anonyme
61 1 Anonyme
62 18 Anonyme
h2. +Forces exercées sur le drone :+
63
64 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 :
65
66
-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.
67
68 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é. 
69 2 Anonyme
70 3 Anonyme
-la traction, correspondant à la force qui fait avancer le drone par inclinaison de ce dernier
71 1 Anonyme
72
-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.
73 18 Anonyme
74 9 Anonyme
!IMAGE1.png!
75 1 Anonyme
76
77 18 Anonyme
h2. +Forme des hélices+
78
79 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.
80 1 Anonyme
81 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.
82 18 Anonyme
83 1 Anonyme
!IMAGE2.png!
84
85 11 Anonyme
86 18 Anonyme
h2. +Définitions des mouvements selon les axes X,Y,Z :+
87
88 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. 
89 18 Anonyme
90 13 Anonyme
!IMAGE3.png!
91
92 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.
93 13 Anonyme
94
Ces notions vont nous permettrent de définir les différents mouvements basiques que peut effectuer un drone ainsi que leurs mise en oeuvre.
95
96 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.
97 13 Anonyme
98
Intéressons nous maintenant à la réalisation de ces différents mouvements.
99 1 Anonyme
100 13 Anonyme
101 18 Anonyme
h2. +Montée & descente :+
102 1 Anonyme
103
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.
104 18 Anonyme
105 13 Anonyme
!IMAGE4.png!
106 14 Anonyme
107 1 Anonyme
108 18 Anonyme
h2. +Stabilité en vol stationnaire :+
109 14 Anonyme
110 1 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. 
111 18 Anonyme
112 14 Anonyme
Ainsi, les hélices M1 et M3 tourneront dans le sens horaire tandis que M2 et M4 tourneront en sens anti-horaire. 
113 1 Anonyme
114 14 Anonyme
!IMAGE5.png!
115
116
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.
117 18 Anonyme
118
119 14 Anonyme
h2. +Mouvement de tangage et de roulis :+
120 18 Anonyme
121 1 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.
122 14 Anonyme
123 1 Anonyme
!IMAGE6.png!
124 18 Anonyme
125 15 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.
126
127
!IMAGE7.png!
128 18 Anonyme
129
130 1 Anonyme
h2. +Mouvement de lacet :+
131 18 Anonyme
132 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.
133
134
!IMAGE8.png!
135
136
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.
137 27 Anonyme
138 18 Anonyme
139 1 Anonyme
Maintenant que l'aspect mécanique du projet a été présenté, intéressons-nous à l'aspect moteur de jeu.
140 18 Anonyme
141 34 Anonyme
---
142 18 Anonyme
143 40 Anonyme
---
144
145 23 Anonyme
h1. *+ASPECT MOTEUR DE JEU+*
146 18 Anonyme
147
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.
148
149
150
h2. +Définition et première approche+
151
152
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. 
153
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.
154
155
!IMAGE9.png!
156
157
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 :
158
159
-	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.
160
161
-	Le moteur 3D qui utilise des calculs de projection pour obtenir des images en trois dimensions
162
163
Voici une liste des moteurs de jeu les plus répandus : Unreal engine, Open GL, Renderware etc.
164
165
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é. 
166
167
!IMAGE10.png!
168
169
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. 
170
171
172
h2. +Fonctionnalités+
173
174
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.
175
176
*Les entrées et les sorties:*
177
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.
178
179
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.
180
181
*Les mathématiques:*
182
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. 
183
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.
184
185
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.
186
187
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. 
188
189
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+.
190
191
*La physique:*
192
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 :
193
`
194
-	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. 
195
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).
196
197
-	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. 
198
199
!IMAGE11.png!
200
201
-	 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).
202
203
*Détection des collisions:*
204
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 :
205
206
-	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.
207
208
-	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.
209
210
Pour notre projet, cet aspect du moteur de jeu n’est pas très utile puisque notre drone vole dans un environnement sans obstacle.
211 1 Anonyme
212 18 Anonyme
213 1 Anonyme
L'aspect moteur de jeu de notre projet étant introduit, voyons par quelles méthodes nous avons réguler les mouvements du drone.
214 27 Anonyme
215 34 Anonyme
---
216 18 Anonyme
217 40 Anonyme
---
218
219 33 Anonyme
h1. *+ASPECT RÉGULATION+*
220 18 Anonyme
221
h2. +But d’un asservissement+
222
223 43 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 asservissements 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.
224 18 Anonyme
225
Un asservissement peut être définit par différentes caractéristiques qui évaluent sa performance : 
226
227
-	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.
228
-	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.
229
-	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
230
-	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.
231
232
!IMAGE12.png!
233
234
Toutes ces caractéristiques permettent d'évaluer les performances d’un asservissement.
235
236
h2. +Fonctionnement général d’un asservissement+ 
237
238
!IMAGE13.png!
239
240 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.
241
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. 
242 18 Anonyme
243
h2. +Type d’asservissement utilisé pour notre projet+  
244
245
!IMAGE14.png!
246
247
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.
248
249 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.
250 18 Anonyme
251
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.
252
253 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. 
254 18 Anonyme
255
256 44 Anonyme
h2. +Asservissement du drone dans raydium+
257 18 Anonyme
258
h3. Stabilisation en hauteur 
259
260 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.
261 18 Anonyme
262 44 Anonyme
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-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.
263 18 Anonyme
	
264 45 Anonyme
Pour réaliser ce programme nous 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. 
265 18 Anonyme
266
_Extrait du programme avec une seule force et seulement l’action proportionnelle :_
267
268
!IMAGE15.png!
269
270
- 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.
271
272
- La deuxième ligne sert à extraire de « position_drone » seulement la position du drone sur l’axe Z (axe de l’altitude).
273
274 26 Anonyme
- Ensuite nous donnons une valeur à la variable k.
275 18 Anonyme
276
- 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.
277
278
- 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.
279
280 46 Anonyme
- Enfin nous appliquons la nouvelle valeur de la force sur l’axe Z à l’élément « drone » on veut 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.
281 18 Anonyme
282 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 :
283 18 Anonyme
284
!IMAGE16.png!
285
286
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é.
287 26 Anonyme
288 44 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.
289 18 Anonyme
290
h3. Déplacements du drone
291
292 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. 
293 47 Anonyme
C’est-à-dire que même si le drone se penchait, les forces étaient 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 lorsque le drone s’incline, une toujours portée par l’axe Z et une autre sur l’axe X permettant de le faire avancer.
294 18 Anonyme
295 47 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.
296 18 Anonyme
297
!IMAGE17.png!
298 1 Anonyme
299 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 ». 
300 1 Anonyme
301
!IMAGE18.png!
302 18 Anonyme
303 48 Anonyme
On utilise le même procédé pour asservir l’angle que pour la hauteur mais ici « 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.
304 18 Anonyme
305 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. 
306 18 Anonyme
307 1 Anonyme
!IMAGE19.png!
308 18 Anonyme
309 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.
310 18 Anonyme
311 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.
312 19 Anonyme
313
!IMAGE20.png!
314
315 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à 
316 19 Anonyme
317 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.
318 19 Anonyme
319 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. 
320
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.
321
322 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. 
323
324 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.
325 1 Anonyme
326 27 Anonyme
327
Pour terminer, attardons-nous sur l'aspect modélisation inhérent à notre projet.
328
329 34 Anonyme
---
330 20 Anonyme
331 40 Anonyme
---
332
333 25 Anonyme
h1. +*ASPECT MODÉLISATION*+
334 21 Anonyme
335
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.
336 26 Anonyme
Nous avons dû représenter le drone selon 2 axes :
337 21 Anonyme
338
- la modélisation graphique 
339
340 1 Anonyme
- la modélisation physique
341
342
343 53 Anonyme
h2. +La modélisation graphique+
344 1 Anonyme
345 51 Anonyme
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.
346
347
+Présentation de Blender:+
348
349
!langfr-220px-Blender_logo_no_text.svg.png!
350
351
Ce logiciel est fourni dans le package de téléchargement de Raydium. C’est un logiciel développé par la Fondation Blender qui a vu sa première version sortir en 1998. Blender propose de la modélisation en 3 dimensions, de l’animation en 3 dimensions également, du montage vidéo (non linéaire), ainsi que d’autre éléments non utiles pour ce projet. Dans le cadre de ce projet il n’est nécessaire d’utiliser seulement la modélisation 3 D.   
352
353
Comme cité précédemment Blender a permis de créer un objet personnalisé.
354 21 Anonyme
355
!IMAGE21.png!
356 1 Anonyme
357 36 Anonyme
358 21 Anonyme
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.
359
360
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.
361
362 55 Anonyme
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 entraînées par les moteurs qui permettent au drone de se 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 judicieux qu’il soit agréable à regarder.
363 21 Anonyme
364 1 Anonyme
!IMAGE22.png!
365 36 Anonyme
!IMAGE23.png!
366 21 Anonyme
367 55 Anonyme
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.
368 21 Anonyme
369
370
h2. +La modélisation physique+
371
372 55 Anonyme
La physique est gérée par le logiciel Raydium. 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.
373 21 Anonyme
374 28 Anonyme
h3. +Principes :+
375 29 Anonyme
376 49 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 la section mécanique du drone). 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.
377 21 Anonyme
378
379 28 Anonyme
h3. +Les particularités d’un simulateur:+
380 21 Anonyme
381
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.
382
383 55 Anonyme
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 dans un environnement réel, il faudra prendre ces forces en comptes. Ici, on touche 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 ralentissant sa course. 
384 21 Anonyme
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.
385
386 28 Anonyme
h3. +Les forces :+
387 29 Anonyme
388 21 Anonyme
Pour appliquer une force au drone il est nécessaire d’utiliser la fonction suivante :
389
390
@raydium_ode_element_addforce_name_3f("drone",0,0,force)@
391
392 55 Anonyme
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. La gravité étant gérée par Raydium, il faut 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 : 
393 21 Anonyme
394
@raydium_ode_object_box_add("drone",a,1,1,1,poids,RAYDIUM_ODE_STANDARD,0,"drone.tri")@
395
396
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 : 
397
398
@F (forces) = m (poids du drone) *g (constante gravitationnel)@
399
400
Pour plus de facilité, on peut utiliser à la place du poids la fonction :
401
402
@RAYDIUM_ODE_AUTODETECT@
403
404
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.
405
Au début, on applique une force centrale au drone (barycentre). Mais par la suite on simulera les moteurs par quatre forces.
406
407
408 28 Anonyme
h3. +Atteindre une hauteur :+
409 29 Anonyme
410 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.
411
412
413 28 Anonyme
h3. +Quatre Forces :+
414 21 Anonyme
415 55 Anonyme
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 :
416 21 Anonyme
417
@raydium_ode_element_addrelforce_name_3f("helice",0,0,force)@
418
419
Le paramètre "helice" correspond à la position/objet de l’hélice parmi les 4 disponible : helice1, helice2, helice3 ou helice4.
420
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.
421
422 28 Anonyme
h3. +Les hélices :+
423 29 Anonyme
424 55 Anonyme
Les hélices n’ont 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 leur taille… Il faut donc se servir de la fonction suivante :
425 21 Anonyme
426
@raydium_ode_joint_attach_hinge("joint",drone,helice,0,0,0,RAYDIUM_ODE_JOINT_AXE_Z)@
427 1 Anonyme
428 29 Anonyme
Le paramètre drone est l’objet qui va se voir ajouter les hélices.
429 55 Anonyme
Hélice est le nom de l’objet que l’on souhaite ajouter.
430 21 Anonyme
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.
431
432
RAYDIUM_ODE_JOINT_AXE_Z  est l’orientation de l’objet (ici suivant l’axe z).
433 40 Anonyme
434
---
435 35 Anonyme
436
---
437
438
*CONCLUSION*
439 1 Anonyme
440 50 Anonyme
Pour conclure, nous pouvons affirmer que ce projet étalé sur les deux années de PeiP nous a permis de découvrir toute la difficulté de la simulation informatique. En effet, avant de recréer un phénomène physique, il est nécessaire de le comprendre et de le maîtriser parfaitement. Une fois le phénomène compris, il faut parvenir à le retranscrire informatiquement et à le rendre fonctionnel. Toutes ces étapes s’imbriquent les unes dans les autres et sont essentielles à la résolution du problème.
441 1 Anonyme
442 50 Anonyme
D'un point de vue critique, il est clair que nous n’avons pas atteint tous les objectifs définis au début de l’étude avec notre tuteur. Cependant, nous pensons être allé au bout de ce qu’il nous était techniquement possible de faire à notre niveau.
443 35 Anonyme
444 50 Anonyme
Plus loin que le simple aspect scolaire, ce projet a été un moyen pour nous d’appréhender certains aspects du métier d’ingénieur. Par exemple, nous avons dû faire des compromis, accepter de ne pas tout maîtriser, adapter notre travail aux circonstances et revoir nos objectifs en cours de route. Ce fut une expérience très formatrice qui nous servira pour nos projets futurs.