Book TMEAutomatic
Book TMEAutomatic
Book TMEAutomatic
TRAVAUX DE MODÉLISATION
ET D’EXPÉRIMENTATION
François BATEMAN
Table des matières
Introduction 1
2 PROGRAMMATION DE DSPICs 11
2.1 Microcontrôleur DsPic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Programmation du DsPic sous SIMULINK . . . . . . . . . . . . . . . . . . . . . 12
2.3 Présentation du blockset Embedded Target Microchip . . . . . . . . . . . . . . . . 12
2.4 Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
II TRAVAUX PRATIQUES 43
i
Table des matières
2 ESTIMATION D’ATTITUDE 51
2.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.2 La centrale d’attitude MTI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.3 L’estimation d’attitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.4 Implémentation temps réel de la centrale d’attitude . . . . . . . . . . . . . . . . . 57
5 PLANIFICATION DE TRAJECTOIRES 77
5.1 Présentation du problème . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2 Modèle du robot pour la commande . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.3 Trajectoire de Dubins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.4 Champs de potentiel artificiels . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Bibliographie 114
ii
Introduction
SIMULATION ET PROGRAMMATION
SOUS SIMULINK
3
SÉQUENCES 1
Système continu :
— Construisez un système continu d’ordre un (gain statique 1, constante de temps 0,1s)
soumis à un signal sinusoı̈dal (Amplitude 5, Frequency 2, Sample Time 0) et observez sur
un même oscilloscope les signaux d’entrée et de sortie. Soit S1 ce système.
1. De plus, des hypothèses stipulaient que les modèles de ces systèmes étaient linéaires et invariants.
5
Séquences 1. RAPPELS SUR LES SIGNAUX ET LES SYSTÈMES
Système échantillonné-bloqué : Si l’on suppose que ce système continu est piloté par un cal-
culateur, il convient de lui appliquer le signal d’entrée et de mesurer le signal de sortie à des
intervalles de temps réguliers définis par la période d’échantillonnage ou sample time Ts . Le
système est alors qualifié d’échantillonné-bloqué.
— Á partir du système continu S1 , réalisez un système échantillonné-bloqué en insérant
des bloqueurs d’ordre zéro (Discrete ❀ Zero Holder Block) à l’entrée et à la sortie du
système. Le Sample Time choisi est égal à 50ms. Soit S2 ce système.
— Simulez ce système et comparez sa réponse à celle du système continu.
— Compte-tenu des propriétés du système continu, dans quelle plage de fréquence [ωmin , ωmax ]
peut-on raisonnablement l’utiliser ?
— Quelle est alors la période d’échantillonnage maximale Tsmax qui peut-être théoriquement
choisie ?
— Sur quatre essais successifs, mettre en évidence ces limites. Pour cela vous appliquerez
successivement un signal de pulsation égale à ωmax avec les périodes d’échantillonnage
Ts Ts
Tsmax , 2Tsmax , max et max .
2 10
−1 −1 H(s)
H(z) = (1 − z )Z L (1.1)
s
La fonction tf permet de construire une fonction de transfert (consultez l’aide en ligne help
tf ). La fonction c2d de MATLAB permet de calculer la fonction de transfert en Z d’un tel
système à partir de sa fonction de transfert continue obtenue avec la fonction tf.
— Calculez avec MATLAB la fonction de transfert en Z du système à temps continu défini
supra. Le temps d’échantillonnage est égal à 50ms.
— Au moyen de SIMULINK, réalisez cette fonction de transfert (Discrete ❀ Transfer Func-
tion). Vous paramètrerez en particulier le champ Sample Time. Soumettez ce système au
même signal sinusoı̈dal que celui défini précédemment. Soit S3 ce système.
— Simulez ce système décrit par sa fonction de transfert en Z et comparez sa réponse à celle
du système continu muni de ses échantillonneurs-bloqueurs.
6 F. BATEMAN
1.1. Aspects temporels
et au correcteur seuls. Ce code sera ensuite implémenté sur le calculateur en vue de piloter le
système réel.
— Sous SIMULINK, insérez le système continu d’ordre 1 déjà étudié et muni de ses bloqueurs
d’ordre zéro dans une boucle d’asservissement avec retour unitaire. Le correcteur utilisé
a pour fonction de transfert :
(0.1s + 1)
C(s) = 20 (1.2)
s
Pratiquement, les signaux échantillonnés sont numérisés (au moyen de convertisseurs ana-
logique numérique ou CAN). Cette numérisation s’effectue sur un nombre de bits N fini, gé-
néralement N = 8, 10, 12, 16. La résolution est la plus petite variation du signal anlogique qui
provoque un changement du signal numérique d’une unité. Les effets de cette numérisation sur le
signal échantillonné-bloqué peuvent être mis en évidence par un bloc Quantizer (Discontinuities
❀ Quantizer). Sur le schéma S2 , vous l’ intercalerez entre le bloqueur d’ordre zéro en sortie du
système et l’oscilloscope.
5 5
— Réglez successivement le Quantization Interval q à 8 puis 3 et mettez ainsi en
2 −1 2 −1
2
évidence les effets de la numérisation sur le signal .
— Cette opération est à l’origine d’un bruit dit de quantifiquation que vous visualiserez en
opérant à la différence entre les signaux en amont et en aval du Quantizer.
— Réalisez sous SIMULINK l’opération qui permet de calculer la valeur efficace de ce bruit,
laquelle sous l’hypothèse d’ergodicité n’est autre que la variance de ce bruit dont vous
q2
vérifierez qu’elle est égale à .
12
— Recherchez dans les ouvrages mis à votre disposition la démonstration ayant conduit à
ce résultat. Prenez-en connaissance.
Dans ce qui suit et sauf indication contraire, on supposera que la résolution des convertisseurs
employés est suffisamment petite pour négliger les effets dus à la quantification.
2. Ces valeur seraient celles obtenues pour des CAN 8 bits et 3 bits et pour une tension pleine échelle de 5
Volts.
F. BATEMAN 7
Séquences 1. RAPPELS SUR LES SIGNAUX ET LES SYSTÈMES
Codage du type single : Ouvrez le fichier sequence1 2.mdl, puis paramétrez le bloc Add ❀
Signal Attribute ❀ Output Data Type comme single. Notez que par défaut le bloc discrete
transfer function hérite du type du signal d’entrée.
— Simulez ce système et comparez-les réponses à celles obtenues avec le type double.
— Réitérez ces simulations avec des nombres de type int8 et uint8.
— Expliquez pourquoi cela ne pouvait fonctionner pour ce dernier type.
tn = nTs + T0 (1.3)
8 F. BATEMAN
1.2. À propos des nombres sous SIMULINK
Pour ce faire, le champ du paramètre Sample Time du bloc sélectionné s’écrit [Ts , T0 ]. Où
T0 ≤ Ts et est un multiple entier du Fixed Step Solver.
— Modifier le système S5 de sorte que l’instant d’execution de l’intégrateur initialement
contrôlé toutes les 200ms soit décalé de 50ms.
Multi sample time : Lorsqu’un signal est propagé dans un système au travers de plusieurs blocs,
il est possible de définir pour différents ensembles de blocs des instants d’exécution distincts au
moyen d’un bloc Signal Attributes ❀ Rate transition. Cela présente un intérêt pour des systèmes
comportant plusieurs boucles imbriquées. La boucle interne ayant généralement à traiter des
signaux plus rapides que la boucle externe. Pour respecter le théorème de Shanon, la période
d’échantillonnage de la boucle interne est généralement plus petite que celle de la boucle externe.
L’autre intérêt est que cela nécessite moins de calculs que si toutes les boucles fonctionnaient à
la période d’échantillonnage de la petite boucle.
— Ouvrez le fichier Sequence1 4.mdl qui représente un système asservi comportant deux
boucles. Analysez sa structure, vous vous attacherez en particulier aux paramètres Sample
Time des différents blocs et à la valeur retenue pour le Fixed Step Time. Simulez-le et
observez les périodes d’échantillonnage des signaux des boucles interne et externe.
— En vous aidant de l’aide du bloc rate transition, mettez en évidence sur le schéma, au
moyen de couleurs ou de façon explicite les différents temps d’échantillonnage de la boucle.
— Modifiez le temps d’exécution des blocs qui réalisent la boucle interne en introduisant un
offset de 1ms.
F. BATEMAN 9
Séquences 1. RAPPELS SUR LES SIGNAUX ET LES SYSTÈMES
10 F. BATEMAN
SÉQUENCES 2
PROGRAMMATION DE DSPICs
11
Séquences 2. PROGRAMMATION DE DSPICs
12 F. BATEMAN
2.3. Présentation du blockset Embedded Target Microchip
Figure 2.1 – Prototypage rapide avec l’Embedded Target for DsPic blockset
F. BATEMAN 13
Séquences 2. PROGRAMMATION DE DSPICs
Master, Compiler configuration et le bloc Port Info s’il existe dans la version du blockset installée.
Paramétrez-les comme suit :
Le bloc Master
Onglet General
— Time step reference : Timer 1
— PIC : 30F6014A
Onglet Real Time Quartz
— Number Instruction per second : 40e6
— Oscillator Mode : XT PLL × 16
Concernant les paramètres de cet onglet, voir les explications données à la section 2.1.
Le solver
Pour générer le code, il faut utiliser un solver à temps discret. Par défaut, le solver utilise
un Fixed Step Time de 1ms. Pratiquement, il faut adapter ce pas de calcul en fonction de la
dynamique du système à concevoir (selon qu’il est plus ou moins rapide ou lent) et au volume
de calculs à effectuer.
Ce réglage est souvent délicat et le blockset met à disposition un certain nombre d’outils pour
opérer au choix de ce pas. On se reportera à la documentation en ligne du bloc Master pour une
explication concernant les champs Busy Flag Port, Overload Flag Port et bloc Calculus Time
Step dans la librairie Others du blockset. La figure 2.3 montre :
14 F. BATEMAN
2.4. Premier exemple
a. un système pour lequel le pas de calcul du solver Fixed step time et la période à laquelle les
blocs sont contrôlés (Sample time) sont identiques, tandis que le temps de calcul ou Tbusy
(le nombre de cycles machines) est inférieur à la période du solver. S’il est activé, le B usy
Flag Port est maintenu à l’état logique haut le temps pendant lequel le microcontôroleur
est occupé.
b. un système pour lequel la période à laquelle les blocs sont contrôlés est un multiple de
celle du solver.
c. un système pour lequel il y a un offset temporel au niveau de la période à laquelle les
blocs sont contrôlés.
d. un système pour lequel le le temps de calcul requis pour effectuer les calculs est supérieur
à la période du solver. Si l’Overload Flag Port est activé, la pin sélectionnée passe à l’état
logique haut.
✲ ✲
✲ ✲
Dans ce premier exemple, on se propose de réaliser un chenillard à 4 LEDs. Pour cela, il faut
réaliser un registre à décalage circulaire. Comme l’indique la figure 2.4, les données se propagent
d’une cellule à une autre au rythme d’une horloge. A chaque coup d’horloge, la sortie de la
cellule ayant la valeur 1 allume une des 4 LEDs. Les diodes s’éclairent les unes après les autres
au rythme de la seconde.
F. BATEMAN 15
Séquences 2. PROGRAMMATION DE DSPICs
1 0 0 0 t=0.T
✛
0 1 0 0 t=1.T
✛
0 0 1 0 t=2.T
...
✛
1 0 0 0 t=4.T
Figure 2.4 – Registre à décalage circulaire
16 F. BATEMAN
2.4. Premier exemple
F. BATEMAN 17
Séquences 2. PROGRAMMATION DE DSPICs
18 F. BATEMAN
SÉQUENCES 3
Le DsPic dispose de 5 ports référencés RA, RB, RC, RD, RF et RG. Chacune des lignes du
ports peut, au moyen de blocs Digital I/O❀Digital input et Digital output être définie comme
une entrée ou une sortie numérique. Il convient de préciser que le bloc qui précède ou suit les
blocs Digital output et Digital input doit renvoyer ou pouvoir lire un nombre de type booléen.
Lorsque ces lignes sont programmées comme des entrées/sorties numériques, elles ne peuvent
évidemment pas réaliser d’autres fonctions. Il est conseillé de se reporter à la documentation
en ligne du microcontrôleur pour prendre connaissance des fonctions réalisées par les différentes
pins.
Bascule T
La platine de développement BigDsPic6, dont la documentation est fournie avec le kit, dispose
de boutons poussoirs (BP) connectés aux ports RA, RB, RC, RD, RF et RG. Ces boutons
poussoirs permettent d’appliquer sur ces ports (configurés comme entrée) un niveau logique
haut ou bas selon la position du jumper J13.
Comme cela a déjà été entrevu, des LEDs permettent de visualiser l’état de ces ports. Des
switchs permetent d’activer ou de désactiver ces LEDS en portant leur cathode à un état logique
bas (0 Volt) ou haut (5 Volts).
Lorsqu’on appuie sur le BP RB4, on désire que la LED associée au port RB5 s’allume et
le reste lorsqu’on relâche ce BP. La LED s’éteint lorsqu’on appuie à nouveau sur le BP. Cette
fonction peut être réalisée au moyen d’une bascule D vue en cours d’électronique numérique de
première année.
— Rappelez la structure d’une bascule D possédant une entrée d’horloge H et sa table de
vérité.
— La bascule T (T désigne l’entrée de commande de la bascule reliée au BP), construite
19
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
— Réalisez la bascule T et Simulez-là sous SIMULINK (bibliothèques Logic and bit opera-
tion et Simulink extras ❀ Flip-flop ❀ D Flip-flop). La période de l’horloge H doit être
petite devant le temps d’enfoncement d’un bouton-poussoir.
— Réalisez sous SIMULINK le schéma permettant de programmer la bascule T sur le mi-
crocontrôleur, générez le code correspondant et implémentez-le sur la cible.
— Vérifiez le bon fonctionnement du système.
20 F. BATEMAN
3.2. Les UART
— 8 bits de données soit des nombres de type UINT8 ∈ [0, 255]. Le transfert d’un Single
requiert par exemple que celui-ci soit codé sur 4 octets.
— 1 bit de start.
— 1 à 2 bits de stop.
— vitesse de transmission 300 à 115200 bauds
— Les données sont émises de la broche Tx (Transmit Data du périphérique 1) vers la broche
Rx (Receive Data du périphérique 2).
— L’état 0 logique correspond à un signal de +12V alors que le 1 logique correspond à un
signal de -12V. Ces amplitudes relativement élevées visent à garantir une bonne immunité
au bruit et par là-même à assurer l’intégrité des signaux émis et reçus, et ce pour des
longueurs de connection pouvant atteindre plusieurs mètres. Pratiquement, sur la carte
BigDsPic6, un circuit MAx202 réalise cette adaptation de niveau de tension.
— La connectique de cette liaison se présente fréquemment sous la forme du connecteur
DB-9 représenté sur la figure 3.3. Ces connecteurs appelés port série et référencés COM1,
COM2, etc. tendent à disparaı̂tre au profit des ports USB. De fait, il existe des adapteurs
USB qui permettent d’émuler la liaison série RS323. La carte BigDsPic6 comporte un tel
adaptateur.
— Le protocole présenté dans ce tutoriel n’utilise que les lignes Tx , Rx et la masse GND. Il
faut toutefois savoir que d’autres protocoles de transmission utilisant les lignes de contrôle
RTS, CTS, etc. existent.
Quelques considérations sur la vitesse de transmission : Supposons que l’on ait à recevoir une
trame de N octets qui se répète k fois par seconde (typiquement, ce serait le cas des données
issues d’un GPS). Comme un octet comporte en plus, pour sa transmission, un bit de start et
un bit de stop, ce sont 10.N.k bits qu’il faut transmettre par seconde. La vitesse de transmission
B en bits/S doit vérifier : B > 10.k.N
Dans le cas d’une programmation avec SIMULINK, comme les octets sont reçus au rythme du
F. BATEMAN 21
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
22 F. BATEMAN
3.2. Les UART
1
Sample Time ou Ts , il faut aussi s’assurer que Ts ≥
k.N
Pour un programme donné, si ces lignes sont utilisées par l’UART, elles ne peuvent plus être
utilisées à d’autres fins.
Dans ce qui suit, en parallèle à la lecture de ce document, vous êtes invités à consulter l’aide
en ligne du blockset et en particulier la bibliothèque Serial Port.
Pour programmer les UARTs avec le blockset sous SIMULINK, vous devez ajouter au tem-
plate (modèle sur lequel ont déja été insérés et paramétrés les blocs Master, Compilez configu-
ration et Compile) les blocs :
— Serial Port❀UART Configuration
— Le numéro de l’UART utilisé, il faut donc deux blocs UART Configuration si on veut
réaliser deux liaisons série.
— La vitesse de transmission des données.
— Sous l’onglet Tx on gère la transmission, en particulier le niveau de priorité de l’in-
terruption. Une interruption est un arrêt temporaire de l’exécution normale du pro-
gramme par le microcontrôleur afin d’exécuter un programme jugé prioritaire, en
l’occurrence, l’émission des données. Plusieurs périphériques pouvant interrompre le
programme en cours, faut définir un ordre de priorité des interruptions. On gère éga-
lement la taille de la mémoire (Buffer) qui contient les données à émettre.
— Paramètres analogues sous l’onglet Rx.
— Ajoutez un bloc Serial Port❀Tx Output si vous souhaitez émettre des données. Noter
qu’il est possible de copier autant d’instances de ce bloc qu’il y a de données à émettre.
Ces dernières doivent être du type UINT8.
— Ajoutez un bloc Serial Port❀Rx Input si vous souhaitez recevoir des données. Les données
reçues doivent être du type UINT8, elles le sont à un rythme défini par le Sample time
du bloc. Les données reçues sont propagées dans le schéma SIMULINK à ce rythme. Le
réglage de ce temps est délicat, il procède du nombre de données à émettre et de la vitesse
de transmission en bauds. Pour le codage retenu, un baud équivaut à un bit/s.
Si les interruptions sont autorisées, un flag avertit de la présence des données (double-clic
sur le bloc Rx Input, case à cocher Received Output Flag).
F. BATEMAN 23
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
d’afficher sur l’écran du PC au moyen du logiciel Realterm une suite de caractères générée par
le microcontrôleur et transmise via l’UART par une liaison série.
— Recherchez dans une table de caractères ASCII les codes décimaux correspondant aux
lettres $, A, B, C.
— Générez des constantes ayant les valeurs correspondantes et affectez-leur le type UINT8.
— Ajoutez au fichier template les blocs UART Configuration
— Paramétrez l’UART de votre choix, veillez simplement à sortir les signaux sur les bonnes
pins.
— Paramétrez la liaison à 38400 bauds.
— Ajoutez les Tx Output en sortie de chaque constante.
— Adoptez pour le solver un pas de 1ms.
— Connectez la carte BigDsPic6 (sortie USB UART) au PC par le câble USB et commutez
les switchs 1 et 2 de SW 2 en position USB UART.
— Mettez la carte BigDsPic6 sous tension.
— Sur le PC, identifiez le numéro de port série alloué par le gestionnaire de port USB :
Démarrer❀Panneau de configuration❀Performances et Maintenance ❀Système❀ Ma-
tériel❀Gestionnaire périphériques❀Ports.
— Depuis le bureau du PC, ouvrez le logiciel Realterm (cf. figure 3.4). Ce freeware permet
d’analyser les trames pour différents types de protocoles (RS232, I2C, etc.). Sélectionnez
l’onglet PORT et configurez la liaison série (numéro du port, vitesse de transmission en
baud, 8 bits de données, 1 bit de stop et aucun bit de parité).
— Compilez le programme et l’implémenter sur le DsPic, ouvrez le port sous Realterm (bou-
ton OPEN) et vérifiez que les caractères reçus sont conformes à ce qui est attendu.
24 F. BATEMAN
3.2. Les UART
Réception-Emission de données 1 Realterm comporte une fenêtre d’édition depuis laquelle il est
possible de saisir du texte. Ce texte traduit sous forme de codes ASCII est ensuite émis vers le
port série. Ouvrez le fichier Test Rx Tx.mdl, ce programme, une fois compilé, traite les données
issues de Realterm.
— Analysez ce programme, vous prendrez le temps de lire l’aide des blocs que vous n’avez
pas encore eu l’occasion d’utiliser.
— Expliquez ce qu’il fait.
— Compilez-le et testez-le.
Réception-Emission d’un flux de données 3 Cette situation est typiquement celle rencontrée
lorsqu’on lit un capteur délivrant des informations au format RS232. On suppose une trame
composée de trois nombres codés en UINT8.
— le caractère d’entête de trame 255,
— deux caractères de données quelconques.
Cette trame sera générée depuis Realterm, pour cela :
— onglet Port : baudrate 300, no parity, 8 bits de données, 1 bit de stop, numéro de port.
N’ouvrez pas encore le port.
— onglet Send : dans le champ dédié à cet effet, saisissez une trame telle que définie supra.
Réalisez un système qui réceptionne les données, identifie l’entête de début de trame et opère
à la somme des deux octets de données. Cette somme sera alors renvoyée sur l’hyperterminal.
Pour réaliser ce système, il convient d’opérer à une transformation série-parallèle de la trame
reçue. Cela est réalisé par un registre à décalage au moyen de blocs Discrete❀Delay.
F. BATEMAN 25
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
Sur le PC, depuis le Command Window de MATLAB, taper rs232gui. Reportez le numéro
de port COM et appuyer sur le bouton Connexion puis sur Start. Les signaux apparaissent alors
dans une fenêtre. Pour plus de détails sur cette fonction, se reporter à l’aide en ligne Serial
port❀Interface Tx Matlab.
Par défaut, la fonction rs232gui affiche des nombres de type UINT16, donc strictement
positifs. Pour visualiser des nombres négatifs de type INT16, cliquez sur le bouton plot int16. A
titre d’exemple, portez le champ Bias du signal sinusoı̈dal à 0, recompiler le modèle et observer
les signaux sur rs232gui.
Les données affichées sont stockées dans 2 tableaux référencés R et Rn pouvant respective-
ment contenir 50000 et 10000 points. Les vecteurs t R et t Rn contiennent les valeurs des temps
auxquels ont été réalisées ces simulations. Il est donc possible d’opérer à un post-traitement de
1. On reviendra sur ce point un peu plus loin.
26 F. BATEMAN
3.2. Les UART
F. BATEMAN 27
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
Le bus SPI (Serial Peripheral Interface) est un bus série synchrone qui opère en mode full-
duplex 2 . La communication s’opère au rythme d’une horloge entre un maı̂tre et un esclave, ce
dernier est sélectionné par le biais d’une ligne de contrôle CS (chip select) ou SS active à l’état
bas. Les données échangées sont codées sur 8 ou 16 bits. Une ligne est dédiée à l’émission, une
autre ligne à la réception. Si ce bus est rapide, il nécessite en revanche des liaisons courtes entre
le maı̂tre et l’esclave et il faut un CS par esclave.
2. Communication bidirectionnelle.
28 F. BATEMAN
3.3. Le bus SPI
F. BATEMAN 29
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
2. Ajouter une source sinusoı̈dale : Sources ❀ Sine Wave et paramétrer ce bloc de sorte
qu’il produise un signal d’amplitude crête égale à 2048, de valeur moyenne égale à 2048
(bias) et qu’il génère par période un nombre d’échantillons tel que le signal de sortie ait
une fréquence 440 Hz et soit échantillonné à 8000Hz (choisissez l’option Sine Type ❀
Sampled Base.
3. Ajouter un bloc SPI config pour définir la configuration du port SPI paramétré comme
suit : { Port 2, Master, SDO Enable, données sur 16 bits, fréquence d’horloge réglé avec
le prescaler à 416kHz}.
4. Ajouter un bloc SPI Input-Output, ce bloc est paramétré comme suit : {Port 2, Always
Enable, SPI Input 3 , SPI Output}. L’entrée de ce bloc sera reliée à la source sinusoı̈dale
par l’intermédiaire d’un bloc Commonly Used Blocks❀convert❀ UINT16.
5. Pour contrôler le SS, ajouter un bloc Digital Output paramétré sur RG1 et piloté par
un Sources❀ Limited counter qui compte jusqu’à 1 (soit 0, soit 1) à une cadence de
6.25e−5 s.
La donnée issue du bus SPI est constituée des 12 bits de poids faible, les 4 bits de poids fort
sont utilisés pour le contrôle du DAC 12 bits, en particulier, si l’on se réfère à la datasheet de ce
composant page 18, vous justifierez l’intérêt de régler les bits b12 et b13 à 1.
— Comment pourrait-on simplement modifier la donnée (le signal sinusoı̈dal codé en UINT16)
pour régler les bits b12 et b13 à 1 ? La fonction bin2dec convertit un mot binaire en
nombre décimal, elle peut vous aider à comprendre coment réaliser cette modification.
— Sauvegardez votre modèle et générez le fichier hex correspondant. Transférez-le sur le
microcontrôleur et observez avec l’oscilloscope le signal ainsi généré.
— Observez à l’oscilloscope les signaux du bus SS, SCK et MOSI en vous synchronisant sur
le front descendant de SS.
— Il est possible d’utiliser les différentes sources fournies par SIMULINK pour générer des
signaux de différentes natures. Attention toutefois à les convertir au format UINT16.
Veillez également à ce que l’amplitude de ces signaux aient des valeurs cohérentes avec le
format UINT16 (c-à.d ∈ [0 − 65535]).
3. Normalement, on n’aurait pas à activer cette option mais si la case est décochée, le DAC ne fonctionne pas.
30 F. BATEMAN
3.4. Convertisseurs Analogiques-Numériques
F. BATEMAN 31
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
Exemples d’utilisation :
— L’échange d’informations entre un capteur (température, accéléromètre, etc.) et un mi-
crocontrôleur ou entre microcontrôleurs,
— La commande de moteurs à travers des transistors de puissance.
32 F. BATEMAN
3.5. Les signaux PWM
deux potentiomètres (A/D converter input) présents sur votre carte de développement. Vous
êtes libre du choix de l’entrée (RB8, RB9, ..., RB15).
— Paramétrez le convertisseur analogique numérique (bloc ADC Input) en utilisant une
tension de référence externe. Pratiquement la tension de 4, 096V générée sur la carte
BigDsPic6 (consultez le manuel de cette carte p 13). Vous paramétrerez le rythme des
conversions (Trigger Source) en mode auto convert.
— Visualisez le signal issu de la conversion analogique numérique au moyen de rs232gui et
d’un bloc Tx Labview Matlab.
— Configurez ensuite le bloc Peripheral I/O❀Output Compare HW, celui-ci vous permettra
de générer un signal à rapport cyclique variable directement proportionnel à la tension
d’entrée du potentiomètre que vous avez choisi. Pour la configuration des paramètres du
bloc consulter l’aide. On opère les choix suivants :
— Channels Input Type : la PWM est définie par sa période et sa durée à l’état haut.
— La Period Max vaut 20ms (période typique pour des servocommandes).
— La variable OCmax est essentielle. Pour un signal égal à OCmax à l’entrée du bloc
Output Compare HW correspond un rapport cyclique a = 100%. Vous pouvez accéder
à la valeur de OCmax depuis le Workspace de MATLAB qui sera mis à jour après
une configuration de votre programme.
— Pour fonctionner, le bloc Output Compare HW est piloté par l’entrée (OCx Up) qui
prend ses valeurs dans [0, OCmax]. Attention, le seul format d’entrée admissible par
le bloc est le type UINT16. Au moyen d’un gain, réalisez la fonction qui transforme le
signal issu de l’ADC ([0, 4095]) en un signal de type UINT16 qui varie dans l’intervalle
[0, OCmax].
— Observez à l’oscilloscope le signal de sortie modulé en rapport cyclique à l’aide du po-
tentiomètre. En parallèle, relevez avec rs232gui le signal issu de l’ADC. Pour connaitre
les pins utilisées dans votre programme, affichez le Port info et cliquer dessus pour la
mise à jour. Attention malgré tout à vérifier sur la documentation (datasheet de votre
composant) des erreurs peuvent apparaitre.
F. BATEMAN 33
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
— Pour effectuer la mesure, réalisez une liaison filaire entre la sortie Output Compare HW
et l’entrée Input Capture. Attention les données inscrites dans Port info sont erronées
pour le bloc Input Capture, reportez-vous au datasheet du microcontrôleur.
— Faire varier le rapport cyclique du signal d’entrée de Input Capture avec le potentiomètre
et relevez la valeur mesurée.
— Vérifiez la cohérence de vos mesures avec la valeur de ICxmax. Par exemple, si la valeur
de ICxmax est 9999 et la valeur du rapport cyclique du signal d’entrée de 0,2. Le résultat
en sortie doit être très proche de 2000.
— Relevez les valeurs de ICi Up et ICi Periode pour les valeurs de rapport cyclique extrêmes.
Commentez les résultats. Comment peut-on modifier ces valeurs ?
34 F. BATEMAN
3.6. Le bus I2C
Le protocole I2C
Dans cette partie, vous mettrez en œuvre un bus I2C dans le but de contrôler un moteur
brushless ou moteur sans balai utilisé en aéromodélisme. Ce moteur est contrôlé par une carte
de contrôle des moteurs brushless (Bl-Ctrl) qui fournit la puissance électrique au moteur. Cette
carte permet également de mesurer le courant consommé et la vitesse du moteur. Le bus I2C peut
F. BATEMAN 35
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
travailler à des cadences d’horloge élevées, typiquement 400kz. Il est ainsi possible de contrôler
plusieurs périphériques en raffraichissant les commandes à un rythme élevé. Cela est particuliè-
rement intéressant pour le contrôle des drones à voilure tournantes tels que les quadrirotors.
— Reliez les ports SCL et SDA ainsi que la masse du microcontrôleur aux points C (SCL)
36 F. BATEMAN
3.6. Le bus I2C
— Ouvrir le fichier I2C.mdl et analyser les paramètres du bloc I2C Master qui permet
de piloter une carte de contrôle Bl-Ctrl pour un moteur brushless depuis un bus I2C.
L’adresse de la carte est 82 (décimal), la commande du moteur est codée sur un octet ([0,
255]) et la fréquence du bus est de 400 kHz. Les données sont transmises sur le bus avec
un Sample Time égal à 2 ms. Par défaut, dans ce montage, la commande est égale à 10.
Soyez prudent à ne pas appliquer un nombre trop grand, l’hélice atteindrait des vitesses
de rotation très élevées.
— Compiler le schéma et implémenter-le sur le microcontrôleur, le moteur doit tourner. Pour
le stopper, cliquer sur le bouton Erase du programme DsPicFlash.
F. BATEMAN 37
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
0 0 0 0 0 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Il faut réaliser une fonction qui, partant d’un mot codé sur 16 bits et compris dans [0, 2047]
génère ce mot sur 2 octets codés en UINT8.
L’octet de poids faible ou LSB 4 contiendra les bits
0 0 0 0 0 b 2 b1 b0
L’octet de poids fort ou MSB 5 contiendra les bits
b10 b9 b8 b7 b6 b5 b4 b3
On se rappellera qu’un décalage d’un bit à droite équivaut à une division par deux.
0 0 0 0 0 0 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1
On se rappellera qu’un décalage d’un bit à gauche équivaut à une multiplication par deux,
0 0 0 0 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0 0
Réalisez sous SIMULINK un schéma de simulation qui transforme un nombre de type
UINT16 dont la valeur peut varier entre 0 et 2047 en deux nombres codés sur 8 bits. Les
octets de poids faible et de poids fort doivent avoir la structure proposée ci-dessus.
Modifiez le modèle I2C.mdl pour contrôler le moteur avec un mot de commande codé sur
deux octets et dont la valeur peut varier entre 0 et 2047. Sur la Bl-Ctrl, les octets doivent être
transmis dans l’ordre suivant :
MSB LSB
Pour lire ces données, il faut ouvrir une nouvelle instance du bloc I2C Master et l’ajouter au
modèle qui comporte déjà un premier bloc I2C Master pour l’écriture sur la carte Bl-Ctrl.
38 F. BATEMAN
3.6. Le bus I2C
F. BATEMAN 39
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
Premier exemple
Un exemple simple peut être consulté en ouvrant le fichier Programme en C.mdl. Vous consul-
terez par ailleurs l’aide du bloc C function call pour comprendre le paramétrage du bloc. Il faut
en particulier indiquer le nom du fichier *.C sous Simulation Real-Time Workshop Custom
Code Source files.
— Compilez ce modèle puis implémentez le programme *.hex sur la cible et visualisez le
résultat de l’opération programmée au moyen de rs232gui.
40 F. BATEMAN
3.7. Insertion de code
de 8 bits sur le port D. La fonction TRISD, propre au C des microcontrôleurs de cher Microchip
déclare le port D en sortie tandis que la fonction LATD recopie sur ce même port le mot de 8
bits contenu dans la variable qui lui est affectée.
! !
0.5 0 3
xk+1 = xk + εk
0 −0.5 1
yk+1 = xk+1 (3.4)
Pour faire simple, εk est un signal sinusoı̈dal d’amplitude unitaire et de fréquence égale à
1rad/s. Sous SIMULINK, on réalise le schéma suivant (3.13) :
F. BATEMAN 41
Séquences 3. PROGRAMMATION DES PERIPHERIQUES DU DSPIC
x=[0;0]; % e t d ’ a l l o u e r d es v a l e u r s à x
end ;
Cette fonction est appelée et exécutées à chaque Sample Time (utilisez un bloc Rate Tran-
sition, sinon la fonction sera appelée au rythme du Fixed Step Time ). L’intégrité des valeurs
prises par les variables de type persistent doit être assurée entre deux appels de la fonction
(intervalle de temps d’un Sample Time.
Substituez au bloc scope un démultiplexeur et deux blocs Tx Labviex Matlab pour observer
chacune des variables du vecteur x.
42 F. BATEMAN
Deuxième partie
TRAVAUX PRATIQUES
43
TP 1
1.1 Objectif
Au cours de cet séance de TP, vous aurez à implémenter sous Matlab Simulink le modèle
d’un drone à voilure tournante (hexacotpère, octocoptère) comme illustré sur la figure 1.1.
Des expérimentations conduites en parallèle seront nécessaires pour établir les valeurs numé-
riques de certains paramètres.
Les fonctions qui réalisent le modèle devront être encapsulées dans des sous-systèmes. Le bloc
de plus haut niveau sera défini comme un masque depuis lequel il sera possible de paramétrer
le drone.
45
TP 1. MODÉLE D’UN DRONE Á VOILURE TOURNANTE
Les équations d’état qui décrivent les dynamiques et les cinématiques de rotation 1 :
1
ṗ = kℓ(ω42 − ω22 ) + (Iyy − Izz )qr
Ixx
1
q̇ = kℓ(ω12 − ω32 ) + (Izz − Ixx )rp
Iyy
1
ṙ = dℓ(−ω12 + ω22 − ω32 + ω42 )
Izz
ϕ̇ = p + q sin ϕ tan θ + r cos ϕ tan θ
θ̇ = q cos ϕ − r sin ϕ
q sin ϕ + r cos ϕ
ψ̇ = (1.1)
cos θ
1. Vous vous reportez au document Supervision de Drones pour comprendre comment ont été établies ces
équations.
46 F. BATEMAN
1.2. Équations d’état d’un drone à voilure tournante
−
→
xb
−
→1
x −
−
→ θ y→
E
x −
y→
E
ψ ψ
12
ϕ −
→
yb
ϕ
θ
−
→
z2
−
→
zb
−
→
z1
ku |u|u
u̇ = −g sin θ − − qw + rv
m
kv |v|v
v̇ = g cos θ sin ϕ − + pw − ru
m
P4
kωi2
i=1 kw |w|w
ẇ = g cos θ cos ϕ − − − pv + qu
m m
x˙E = {cos θ cos ψ}u + {sin ϕ sin θ cos ψ − cos ϕ sin ψ}v + {cos ϕ sin θ cos ψ + sin ϕ sin ψ}w
y˙E = {cos θ sin ψ}u + {sin ϕ sin θ sin ψ + cos ϕ cos ψ}v + {cos ϕ sin θ sin ψ − sinϕ cos ψ}w
z˙E = {− sin θ}u + {sin ϕ cos θ}v + {cos ϕ cos θ}w
F. BATEMAN 47
TP 1. MODÉLE D’UN DRONE Á VOILURE TOURNANTE
Ces modèles nécessitent de connaitre la masse et les moment principaux d’inertie du drone.
Ces paramètres seront obtenus par pesée et pendulage (cf figure 1.5).
T2 mgR2
I=
4π 2 L
Les composantes de la résultante des forces Fx , Fy , Fz procèdent :
— de la force de portance des hélices,
— du poids du drone,
— de la trainée aérodynamique du drone.
Par ailleurs, les moments L, M , N ont pour origine les forces de portance et de trainée des
hélices.
48 F. BATEMAN
1.5. Test du modèle
Il pourrait également être intéressant d’affiner le modèle des hélices en caractérisant leur
coefficients de poussée et de trainée lorsqu’elles fonctionnent au voisinage du sol (effet de sol).
Les vitesses de rotation des moteurs sont asservis à des consignes. Il y a cependant à prendre
en compte les caractéristiques dynamiques de ces boucles d’asservissement qui sont assimilées
à des systèmes du premier ordre de gain unitaire, de constante de temps égale à 30 ms avec
retard pur de 30 ms. Vous réaliserez ces modèles du premier ordre au moyen de blocs décrivant
une représentation d’état (Continuous ❀ State-Space pour lesquels vous règlerez les vitesses de
rotation des hélices à l’instant initial égales à leurs valeurs d’équilibre.
F. BATEMAN 49
TP 1. MODÉLE D’UN DRONE Á VOILURE TOURNANTE
50 F. BATEMAN
TP 2
ESTIMATION D’ATTITUDE
2.1 Objectif
L’attitude désigne l’orientation d’un repère attaché à un solide (pratiquement un aéronef)
par rapport à un repère de référence (pratiquement un repère attaché à la terre). Différents
formalismes permettent de décrire l’attitude : matrice des cosinus directeurs, angles d’Euler,
quaternions, etc. Au cours de cette séance, vous allez réaliser une centrale d’attitude en mettant
en œuvre un observateur déterministe. On rappelle qu’un observateur est un système dynamique
qui permet d’estimer les états que l’on ne mesure pas. Dans le cas d’un système linéaire décrit
par l’équation d’état dont on cherche à estimer les états x :
ẋ = Ax + Bu (2.1)
y = Cx (2.2)
L’estimation est correcte si les erreurs d’estimation lim ε = lim x − x̂ → 0. Cette condi-
t→+∞ t→+∞
tion est réalisée si et seulement si la matrice F − LC a toutes ses valeurs propres dans le cercle
unité. Les erreurs d’estimation convergent d’autant plus vite vers zéro que les modules de ces
valeurs propres sont petites.
51
TP 2. ESTIMATION D’ATTITUDE
Dans ce TP, le système étudié est une centrale d’attitude MTI de la marque XSENS http:
//www.xsens.com/. Cette centrale comporte :
— trois accéléromètres qui mesurent les trois composantes de l’accélération projetées dans
le repère du capteur notées accx = γx , accy = γy , accz = γz ,
— trois gyromètres qui mesurent les trois composantes de la vitesse angulaire absolue pro-
jetées dans le repère du capteur notées gyrx = p, gyry = q, gyrz = r,
— trois magnétomètres qui mesurent les trois composantes du champ magnétique terrestre
projetées dans le repère du capteur notées magx = Bx , magy = By , magz = Bz .
52 F. BATEMAN
2.2. La centrale d’attitude MTI
F. BATEMAN 53
TP 2. ESTIMATION D’ATTITUDE
Figure 2.4 –
Le capteur est déjà programmé, les données sont transmises via le port USB au format RS232
(100 mesures /seconde, 115200 bauds, 8 bits), il s’agit de accx , accy , accz , gyrx , gyry , gyrz , magx ,
magy , magz , φ, θ, ψ. Ces données sont de type single, soit des réels à virgule flottante codés sur
32 bits (4 octets forment un single).
— Pour visualiser les angles d’attitude roll φ, pitch θ, yaw ψ, cliquez sur le bouton Orienta-
tion Data View.
— Pour visualiser les mesures accx , accy , accz , gyrx , gyry , gyrz , magx , magy , magz , cliquez
sur le bouton Calibrated Data View.
data counter accx accy accz gyrx gyry gyrz magx magy magz φ θ ψ
1 xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
... ... ... ... ... ... ... ... ... ... ... ... ... ...
N xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
N
Comme les mesures sont effectuées à 100Hz, la durée de l’essai est égale à 100 s et N peut
54 F. BATEMAN
2.3. L’estimation d’attitude
être connu avec la fonction size(data) qui renvoie la dimension du tableau correspondant, soit
N lignes, 13 colonnes. Pour afficher les données, il faut recréer un vecteur temps :
1 −1 1
— time = [0 : 100 : N100 ]’ génère un vecteur de longueur N par pas de 100 , transposez ce
vecteur ❀ transpose(time) ou ❀ time´.
— Pour accéder aux mesures de l’angle de gı̂te, tapez data( :,11) affiche toutes les lignes de
la 11ème colonne,
— Pour accéder aux mesures des angles de gı̂te, d’assiette et de cap, tapez data( :,11 :13)
affiche toutes les lignes de la 11ème à la 13èmecolonne.
Réalisez un second enregistrement des données alors que le capteur est immobile. Sauvegardez
les données de cet essai dans un second fichier portant un nom différent de celui obtenu lors de
l’essai précédent.
F. BATEMAN 55
TP 2. ESTIMATION D’ATTITUDE
— Sur un même oscilloscope, visualisez les angles φ et θ mesurés sous MT Manager et ceux
estimés.
— Que constate-t-on ?
— Réitérez cette simulation en utilisant les mesures obtenues lors de l’essai statique et
proposez un modèle pour les erreurs de mesure commises par les gyromètres et notées εx ,
εy .
— Estimez ces erreurs pour cet essai.
— déduisez-en un modèle des mesures gyrx et gyry que vous exprimerez en fonction de p,
q, εx , εy .
— En admettant ces erreurs constantes, reformulez les équations d’état.
— Proposez un nouveau modèle de prédiction pour cet observateur et testez-le. Pensez à
l’initialiser judicieusement.
56 F. BATEMAN
2.4. Implémentation temps réel de la centrale d’attitude
T
— Écrivez l’équation de sortie (2.4) pour le vecteur des mesures y = accx accy tandis
T
que le vecteur d’état a pour expression x = φ θ .
— Déduisez-en l’expression de la matrice de sortie C et saisissez-là sous MATLAB.
— Calculez le gain L de l’observateur de sorte que les erreurs d’estimation convergent vers
zéro en un temps inférieur ou égal à 200 ms. En outre, ces erreurs doivent présenter des
régimes transitoires du second ordre avec des dépassements inférieurs ou égaux à 5%. Pour
traiter cette question, il est conseillé de chercher les pôles du système à temps continu
équivalent et d’en établir la représentation à temps discret z = epTs . Pour calculer L,
Vous pourrez avantageusement utiliser la fonction place de MATLAB pour laquelle vous
consulterez l’aide en ligne. Attention à transposer les matrices !
— Sous SIMULINK, complétez le modèle de prédiction pour réaliser l’observateur complet.
— Simulez la centrale d’attitude et observez les angles de gı̂te φ̂ et d’assiette estimés θ̂.
— Calculez le gain L de l’observateur de sorte que les pôles de l’observateur spe(A − LC) =
{−1 − 1i, −1 + 1i} et simulez à nouveau la centrale d’attitude.
— Pour estimer la qualité de l’estimation, vous pouvez calculer le carré de l’intégrale des
erreurs commises entre les angles de gı̂te et d’assiette calculés par la MTI avec ceux
fournis par votre estimateur.
— Affiner le choix des pôles pour réduire au maximum ces indicateurs.
— Donnez une explication au phénomène observé.
— On peut enfin, pour les grands angles, améliorer l’estimation en utilisant une expression
exacte des angles de gı̂te et d’assiette obtenus avec les mesures accélérométriques en lieu
et place de l’approximation faite.
La centrale d’attitude est connectée à la carte BigDsPic6 via un connecteur ODU, attention
à bien réaliser la connection, les points rouges sur les connecteurs mâles et femelles doivent
coı̈ncider. Il ne faut surtout pas forcer la connection et ne pas hésiter à demander
conseil si vous avez des doutes sur le branchement.
F. BATEMAN 57
TP 2. ESTIMATION D’ATTITUDE
58 F. BATEMAN
TP 3
3.1 Objectif
59
TP 3. ESTIMATION DE HAUTEUR PAR FILTRAGE DE KALMAN
60 F. BATEMAN
3.3. Présentation de la maquette
F. BATEMAN 61
TP 3. ESTIMATION DE HAUTEUR PAR FILTRAGE DE KALMAN
NaN y
x NaN
x NaN
Nan y
x NaN
x NaN
NaN y
... ...
Où NaN est l’acronyme de Not a Number. Il faut donc dans un premier temps reconstruire
un tableau dans lequel les NaN n’apparaissent pas.
— Écrivez un script sous MATLAB qui permette de stocker dans deux vecteurs, gamma et
height les données numériques contenues dans Rn. Vous pouvez utiliser avec profit les
fonctions suivantes :
— Rn( :,1), Rn( :,2) permettent respectivement d’accéder à la première et à la seconde
colonne de Rn.
— isnan
— ˜ l’opérateur logique NON
— find
— Représentez l’histogramme des valeurs contenues dans gamma et height ❀ hist.
— Calculez la moyenne et l’écart-type des bruits de mesure accéléromètre et capteur à
ultrason ❀ mean, std
— Proposez des procédures pour l’étalonnage des capteurs afin d’obtenir des mesures cali-
brées en m.s−2 et en m. Vous vous reporterez au §2.3.2 pour prendre connaissance de ce
que mesure effectivement un accéléromètre.
— Pour l’étalonnage du télémètre, opérez plusieurs mesures et exprimez la hauteur en
mètre par une relation affine en fonction du nombre entier délivré par le capteur.
— Pour l’étalonnage de l’accéléromètre, commencez par vérifier la planéité du support
avec le niveau à bulle puis alignez successivement l’axe sensible du capteur dans
une direction parallèle à la verticale locale et faites la lecture du nombre délivré par
le capteur. Réitérez cette opération en orientant l’axe sensible dans une direction
perpendiculaire à la verticale locale. Vous exprimerez l’accélération en m.s−2 par une
relation affine en fonction du nombre entier délivré par le capteur.
— Proposez un modèle (au sens des probabilités) pour les bruits de mesure de l’accéléromètre
et du capteur à ultrason exprimés dans des unités adh’oc .
62 F. BATEMAN
3.4. Implémentation du filtre de Kalman
— Ouvrez un nouveau Model et paramétrez-le de sorte que le Fixed-step size soit égal à
10ms avec un discrete Solver.
— Insérez deux blocs Sources❀Simin et les paramétrer avec les vecteurs gamma, t gamma,
height et t height. Vérifiez au moyen de Scopes la bonne restitution de ces mesures.
— Copiez-collez un bloc User Defined Functions❀ Embedded Matlab Function, (déjà utilisé
au §3.7.2). Vous noterez en particulier l’utilisation du type persistent qui permet de
sauvegarder en mémoire les variables calculées entre deux appels de la fonction. Cela sera
particulièrement utile pour propager l’état estimé et la covariance de l’erreur d’estimation.
— En vous inspirant du programme proposé au §3.7.2, implémentez les équations du filtre
de Kalman en prenant soin de traiter l’accélération mesurée toutes les 10ms et la mesure
du capteur à ultrasons toues les 20ms. Pratiquement le bloc Embedded Matlab Function
est appelé toutes les 10 ms et il faut mettre en œuvre un test qui ne prenne en compte la
mesure des ultrasons qu’une fois sur deux.
— Simulez et restituez les résultats pour des essais préalablement conduits avec le capteur
immobile puis en mouvement. Vous évaluerez notamment les effets de la méconnaissance
des conditions initiales sur le comportement du filtre.
— Visualisez les gains de Kalman et les coefficients p11 et p22 de la matrice de covariance
de l’erreur d’estimation et décrivez le comportement du filtre d’après leur évolution.
F. BATEMAN 63
TP 3. ESTIMATION DE HAUTEUR PAR FILTRAGE DE KALMAN
Dans cette dernière partie, on met en œuvre un filtre de Kalman stationnaire c.-à-d un filtre
dont les gains dépendent des seuls bruits d’état et de mesure et pas des conditions initiales.
L’intérêt de cette structure réside dans sa simplicité d’implémentation. Pratiquement, lorsque
k → +∞, on peut démontrer et on a observé que la matrice de covariance de l’erreur d’estimation
Pk|k → P = cte et par suite le gain de Kalman Lk → L = cte. Dans ces conditions, le filtre a la
même structure qu’un observateur déterministe tel qu’illustré sur la figure 3.3.
Uk Yk
Système
+
L
X̂k+1 -
+
G retard C
+ + T
Ŷk
F
X̂k
— Relevez sur les simulations précédentes la valeur du gain de Kalman L en régime perma-
nent.
— Réalisez le schéma du filtre de Kalman stationnaire sous SIMULINK dans le modèle de
simulation et testez-le.
— Copiez le schéma du filtre de Kalman stationnaire dans une copie de Collect Data.mdl,
insérez les blocs Tx Labview, compilez-le et visualisez la hauteur et la vitesse estimées
par le filtre.
On montre dans cette dernière partie que cet observateur peut être décrit par un filtre dont
64 F. BATEMAN
3.4. Implémentation du filtre de Kalman
!
γ(z)
z X̂(z) = (F − LC)X̂(z) + (G, L) (3.7)
h(z)
!
γ(z)
(zI − (F − LC)) X̂(z) = (G, L) (3.8)
h(z)
X̂(z) = (zI − F + LC)−1 G γ(z) + (zI − F + LC)−1 L h(z)
| {z } | {z }
dim 2×1 dim 2×1
Que l’on met sous la forme :
! ! !
ĥ(z) P11 (z) P12 (z)
= γ(z) + h(z) (3.9)
v̂(z) P21 (z) P22 (z)
Le calcul du gain de Kalman et des fonctions de transfert P11 (z), P21 (z), P12 (z) et P22 (z)
peuvent être conduits en suivant la démarche suivante :
— Relevez sur les simulations précédentes la valeur du gain de Kalman L en régime perma-
nent.
— Ouvrez un script et saisissez les matrices F, G, C, L.
— Saisissez avec la fonction ss à temps discret (Ts=10ms) de la représentation d’état sui-
vante : !
γk
X̂k+1 = (F − LC)X̂k + (G, L) (3.10)
hk
ζ̂k = I2 X̂k (3.11)
où ζ sont les sorties du filtre qui ne sont autres que les variables d’état, position et vitesse,
estimées.
— Calculez les fonctions de transfert correspondant à ce système avec la fonction tf. Vous
pouvez tracer leur diagramme de Bode
— La fonction tfdata permet d’accéder aux numérateurs et au dénominateurs des fonctions
de transferts. Au moyen de blocs Discrete Transfer Fcn, réalisez le schéma de ce filtre de
Kalman sous SIMULINK dans le modèle de simulation et testez-le.
F. BATEMAN 65
TP 3. ESTIMATION DE HAUTEUR PAR FILTRAGE DE KALMAN
— Copiez le schéma du filtre complémentaire dans une copie de Collect Data.mdl, insérez
les blocs Tx Labview, compilez-le et visualisez la hauteur et la vitesse estimées par le
filtre.
66 F. BATEMAN
TP 4
4.1 Objectifs
Mettre en œuvre différentes lois de commande dans le but de contrôler l’assiette d’un hexa-
coptère.
— Hexacoptère Mikrokopter,
— support à 4 d.d.l,
— boitier de programmation ICD3, câble de programmation, câble USB,
— câble FTDI pour le transfert des données entre l’hexacoptère et le PC,
— radiocommande SPEKTRUM 6 voies, 2.4GHz,
— PC + MATLAB-SIMULINK, MPLAB
— Lunettes, blouse et gants de protection à porter impérativement lors des essais.
L’hexacoptère à contrôler est représenté sur la figure 4.2. Le bras rouge matérialise l’axe de
roulis et porte l’hélice 1. L’axe de tangage est dirigé vers la droite de l’axe de roulis et l’axe de
lacet complète le trièdre. Les hélices sont comptées de 1 à 6 dans le sens horaire.
La radiocommande représentée sur cette même figure permet avec le joystick droit de contrô-
ler les gaz (déplacement vertical), l’angle de gı̂te (déplacement horizontal), le joystick gauche
contrôle l’assiette (déplacement vertical) et la vitesse de lacet (déplacement horizontal). Deux
switchs Gear et Flap servent à commuter entre les différents modes de fonctionnement du drone.
67
TP 4. CONTRÔLE DE L’ASSIETTE D’UN DRONE À VOILURE TOURNANTE
4.2 Modélisation
Le contrôle des angles de gı̂te et de cap est déjà réalisé. La poussée est contrôlée en boucle
ouverte via la commande des gaz, vous avez seulement à contrôler l’assiette. Pour cela vous
disposez :
— de la consigne d’assiette élaborée à partir de la radiocommande θref (pitch angle ref ),
— des mesures d’assiette θ (pitch angle) et de vitesse de tangage q (pitch). Ces mesures sont
opérées toutes les 10 ms.
On désigne par N1 et N4 les vitesses de rotation des hélices 1 et 4 en tr/s. Comme les
moteurs sont asservis, ces vitesses sont égales à leurs consignes N1ref et N4ref . M est le moment
de tangage. Pour cette étude simplifiée, le modèle du drone est :
Iy q̇ = M (4.1)
M = bℓ(N12 − N42 )
θ̇ = q
Ni = Niref avec i = {1, 4}
4.2.1 Equilibre
— En vol stationnaire, que valent l’assiette θ et la vitesse de tangage q ?
— Que valent les vitesses de rotation des hélices à l’équilibre N1e , N4e
68 F. BATEMAN
4.3. Lois de commande
En pratique, le moment de tangage est produit par le différentiel de vitesse des hélices n1 et
n4 . On suppose également que les vitesses de rotation des hélices n1 et n4 sont asservies à leurs
consignes n1ref et n4 ref .
— Modifiez le schéma précédent de sorte que les entrées de commande soient n1ref et n4ref .
Le schéma ainsi représenté est celui du drone dont les entrées de commande sont les vitesses de
consignes des moteurs n1ref et n4ref et la sortie à contrôler l’assiette θ. Encadrez ce schéma et
nommez-le drone. Cela permettra de bien distinguer l’objet à commander de la loi de commande
implémentée sur l’autopilot et qui est étudiée dans la section suivante.
Les lois de commande (correcteurs PD, PID, commandes par retour d’état simple et aug-
menté) génèrent un moment de tangage calculé mcalcul à partir duquel on calcule les vitesses de
rotation de consignes de hélices, soit n1ref et n4ref avec la contrainte n4ref = −n1 ref .
— Exprimez n1ref et n4ref en fonction du moment de tangage calculé mcalcul lequel sera
obtenu par les lois de commande qui seront étudiées infra.
— Complétez le schéma fonctionnel du drone linéarisé en y ajoutant le schéma correspondant
à cette partie de la loi de commande. Mettez en évidence les parties du schéma qui
décrivent le drone (objet physique) de celles qui représentent la commande (implémentée
sur l’autopilot).
Dans ce qui suit, on synthétise les correcteurs qui génèrent mcalcul à partir des mesures de
l’assiette θ et de la vitesse de tangage q mesurées par la centrale d’attitude.
F. BATEMAN 69
TP 4. CONTRÔLE DE L’ASSIETTE D’UN DRONE À VOILURE TOURNANTE
mcalcul = kd kp (θref − θ) −q (4.2)
| {z }
qref
— Calculez avec les gains k1 et k2 pour que les pôles du système corrigé soient égaux à
−10± 10i. Quelles performances dynamiques et statiques sont attendues pour ce réglage ?
— Calculez h de sorte qu’en régime permanent et en réponse à un échelon de consigne
d’amplitude θ(∞) = θref .
— Affinez les paramètres des correcteurs sous MATLAB sisotool et testez-les sur le modèle
de simulation Template Simu Hexa.slx.
Z t
mcalcul = kd kp (θref − θ) + ki (θref − θ)dτ −q (4.4)
{z 0
| }
qref
70 F. BATEMAN
4.4. Expérimentations
— Quel type de correcteur réalise la loi de commande de la boucle externe ? Montrez qu’il
Ti s + 1
peut se mettre sous la forme kp
Ti s
— En vous inspirant de la méthode dite de l’optimum symétrique http://eavr.u-strasbg.
fr/~laroche/student/MasterIT-ComMach/ComMach1/node58.html, calculez kp et ki .
Vous adopterez pour ce réglage a = 4.
— Affinez les paramètres des correcteurs sous MATLAB sisotool et testez-les sur le modèle
de simulation Template Simu Hexa.slx.
Z t
mcalcul (t) = h (θref (τ ) − θ(τ ))dτ − k1 θ(t) − k2 q(t) (4.5)
0
L’ajout d’un effet intégral vise à rendre le système davantage robuste aux perturbations. On
va opérer à une stratégie de placement de pôle sur le système augmenté, pour cela, on définit
Rt
une nouvelle variable d’état z = 0 (θref (τ ) − θ(τ ))dτ et par conséquent ż = θref − θ.
— Écrire l’équation d’état associée au système dont le vecteur d’état est désormais X =
T
θ q z et l’entrée θref .
— Montrez que la matrice d’état augmentée corrigée se met sous la forme :
0 1 0 0
1
Aaug − Baug Kaug = 0 0 0 − Iy k1 k2 −h
−1 0 0 0
— Calculez avec la fonction place de MATLAB les gains k1 , k2 et h pour que les pôles du
système corrigé soient égaux à −5, −5 ± 5i. Attention à modifier le signe de h calculé par
MATLAB.
— Affinez les paramètres des correcteurs sous MATLAB sisotool et testez-les sur le modèle
de simulation Template Simu Hexa.slx.
4.4 Expérimentations
Lors de toutes les phases d’expérimentation vous devrez impérativement porter lunettes de
protection et blouse.
Avant chaque test, assurez-vous que les hélices et les moteurs sont bien fixés, resserrez les
vis avec une clé 6 pans si nécessaire. Vérifiez que le drone ne risque pas de se désolidariser de
la liaison rotule sur laquelle il est monté.
— Depuis le bureau, copiez et renommez le dossier TME TP6 à votre nom puis ouvrez le
fichier Commande hexa template.mdl 1 . Sauvegardez ce fichier sous un autre nom dans
1. L’étude détaillée de la structure du programme représenté figure 4.2 de l’autopilot sera vue dans la dernière
partie du TME. Ce programme gère la radiocommande SPEKTRUM, la centrale d’attitude (IMU) NAVEOL ainsi
F. BATEMAN 71
TP 4. CONTRÔLE DE L’ASSIETTE D’UN DRONE À VOILURE TOURNANTE
où g1 , . . . , g6 sont des gains qui transforment mc en vitesse de rotation des hélices, en
particulier celles des hélices 1 et 4.
— Insérez des blocs TX Matlab Labview, ces blocs sont associés à l’UART 2 Vous relèverez
en particulier la consigne θref , l’assiette θ, la vitesse de tangage q et les vitesses de rotation
des moteurs 1 et 4. Les positions et les vitesses angulaires sont en radians et rad/s, il
180
convient de les multiplier par un facteur et de convertir le résultat en UINT16 pour
π
lire ces signaux avec rs232gui en degrés. Pour davantage de précision, utilisez un facteur
1800
.
π
que les six moteurs brushless et les cartes de contrôle (Bl-Ctrl).
72 F. BATEMAN
4.4. Expérimentations
F. BATEMAN 73
TP 4. CONTRÔLE DE L’ASSIETTE D’UN DRONE À VOILURE TOURNANTE
74 F. BATEMAN
4.4. Expérimentations
Commande Proportionnelle-Intégrale-Dérivée
— Dans Loi4 insérer la loi de commande par retour d’état augmenté (4.5) pour le contrôle
de l’assiette. vous traiterez l’intégrateur à temps discret comme au paragraphe précédent.
— Testez cette loi de commande.
F. BATEMAN 75
TP 4. CONTRÔLE DE L’ASSIETTE D’UN DRONE À VOILURE TOURNANTE
76 F. BATEMAN
TP 5
PLANIFICATION DE TRAJECTOIRES
Après avoir établi le modèle pour la commande du robot, vous étudierez et mettrez en œuvre,
pour un tel véhicule se déplaçant à vitesse constante et dans un environnement libre d’obstacles,
des trajectoires à longueur (ou temps) de parcours minimum. Ces trajectoires sont aussi appe-
lées chemins de Dubins. Dans un second temps, vous mettrez en œuvre et implémenterez une
stratégie de navigation par champs de potentiel artificiels, dans un environnement libre d’obs-
tacle ; puis dans le cas d’obstacles fixes dont les positions sont préalablement connue ; enfin dans
le cas d’obstacles dont mobiles. Ces différents scénarii seront joués dans un environnement de
simulation sous MATLAB.
1. Un robot non-holonome est tel que, en l’absence de glissement, la tangente à la trajectoire est portée par la
direction du véhicule, laquelle est perpendiculaire à l’entraxe des roues.
77
TP 5. PLANIFICATION DE TRAJECTOIRES
~xb
ψ
2a
r
~y
~x
~z
78 F. BATEMAN
5.2. Modèle du robot pour la commande
Trouver une commande pour ce système non linéaire consiste à calculer les vitesses de rotation
des roues qui permettent par exemple au robot de réaliser les coordonnées vx = ẋ et vy = ẏ de
la vitesse v. Or pour ces deux coordonnées la relation n’est pas inversible.
ω1 + ω2
ẋ = R cos ψ
2
ω1 − ω2
ẏ = sin ψ
2a
ψ̇ = r (5.4)
Pour pouvoir inverser cette relation, on va non plus piloter la position du centre du robot
mais celle d’un point situé sur l’axe −
→
x b à l’avant du robot à une distance ℓ1 du centre dont on
exprime les coordonnées :
x1 = x + ℓ1 cos ψ
y1 = y + ℓ1 sin ψ (5.5)
! ! ! !
R R
ẋ1 cos ψ −ℓ1 sin ψ 2 2 ω1
= R R (5.6)
ẏ1 sin ψ ℓ1 cos ψ 2a − 2a ω2
Question 2 : Comment montrez que cette relation est inversible ? Autrement dit, que l’on pourra
réaliser les vitesses de rotation des roues du robot à partir des vitesses dotx1 = vx1 et x˙2 = vy2
désirées.
On a en effet :
1 a 1 a
ω1 = cos ψ − sin ψ ẋ1 + sin ψ + cos ψ ẏ1 (5.7)
R ℓ1 R ℓ1
1 a 1 a
ω2 = cos ψ + sin ψ ẋ1 + sin ψ − cos ψ ẏ1
R ℓ1 R ℓ1
Ce qu’il faut bien comprendre c’est que le mouvement du robot est décrit par les équations
(5.6) et qu’on réalise une commande externe au robot décrite par les équations (5.7) dans les-
quelles on remplace ẋ1 et ẏ1 par ẋ1d et ẏ1d qui sont les vitesses désirées pour le robot ; on les
note vx1d et vy1d . C’est ce que représente le bloc appelé Inversion dynamique de la figure 5.3.
Question 3 : Exprimez dans ces conditions les équations d’état du robot. Par quels systèmes
linéaires simples le robot muni de sa loi de commande peut-il être représenté.
F. BATEMAN 79
TP 5. PLANIFICATION DE TRAJECTOIRES
x1d + εx ψ
correcteur vx1d ω1d ω1 x1
- cinématique ω1
y1d + εy robot
correcteur vy1d ω2d ω2 y1
-
Inversion Dynamique Robot
Loi de Commande
Ce modèle très simple du robot ne peut pas être contrôlé dans l’état, on propose de doter
chacun des axes d’un correcteur proportionnel intégral.
Question 4 :Vous trouverez le bloc cinématique robot dans la librairie Trajectographie. Construi-
sez sous SIMULINK le bloc correspondant aux équations (5.7) qui réalise l’inversion dynamique.
Associez-le au bloc cinématique robot et validez son fonctionnement.
Question 5 : Précisez pour quelle raison le modèle du robot établi à la question précédente n’est
pas satisfaisant en l’état pour contrôler sa position ? Saisissez la fonction de transfert d’un des
axes du robot sous MATLAB 2 et synthétisez un correcteur proportionnel-intégral qui respecte les
conditions sur les vitesses de rotation des roues
Question 6 : Construisez cette loi de commande sur le modèle du robot précédemment établi.
Testez-le avec des consignes de position x1d et y1d en échelon ou en rampe. Observez les réponses
et les vitesses de rotation des roues qui ne doivent pas excéder ±15rad/s.
80 F. BATEMAN
5.3. Trajectoire de Dubins
La détermination de la courbe consiste à tracer les quatre cercles tangents aux configurations
initiales et finales, à calculer les tangentes entre ces cercles et à conserver la trajectoire de
longueur minimale réalisable sans rotation du robot sur lui-même. Le rayon de courbure de la
trajectoire correspond alors au rayon des cercles de construction.
Pratiquement, la génération de trajectoire de Dubins est implémentée dans les fonctions
dubins core.m et dubins curve.m sous MATLAB. La première renvoie les caractéristiques d’une
trajectoire dont on donne les configurations de départ, d’arrivée et le rayon de gyration minimal ;
la seconde renvoie les coordonnées de cette même trajectoire. Vous consulterez l’aide de ces
fonctions pour prendre connaissance de la syntaxe.
Question 7 : En choisissant judicieusement et librement les configurations initiales dans un espace
de [−1, 1] × [−1, 1] et un rayon de gyration de 0.25, générez les quatre premières trajectoires
de Dubins de (5.8) avec dubins core.m et visualisez-les avec dubins curve.m. Vous devez pour
accéder à ces fonctions définir le path de MATLAB de sorte qu’il pointe dans le dossier où ces
fonctions sont déposées.
F. BATEMAN 81
TP 5. PLANIFICATION DE TRAJECTOIRES
l’opération A. ∗ A est effectuée pour élément à élément et le résultat est stocké dans un tableau
de même taille.
Question 9 : Au moyen d’un bloc From Worskpace, réalisez une trajectoire de Dubins RLR ou
LRL, calculez la longueur du chemin et déduisez-en un ordre de grandeurs pour la durée du
parcours. Générez ensuite un vecteur contenant les instants de simulation ( même longueur que
le tableau contenant le chemin de Dubins) et appliquez-là comme consigne de position au modèle
du robot muni des lois de commande établies précédemment.
La planification des trajectoires doit tenir compte des limites physiques du robot. En par-
ticulier, la vitesse v et le rayon de gyration ρ sont bornés. En effet, les vitesses de rotation des
roues sont supposées comprises dans l’intervalle [0, 15]rad/s et le contrôle du robot s’opère à une
période d’échantillonnage Ts = 50ms. Dans ces conditions, on cherche à réaliser des consignes
pour les trajectoires de Dubins compatibles avec le robot étudié.
On va représenter dans un même espace à trois dimensions les courbes de niveau de v(ω1 , ω2 )
et ρ(ω1 , ω2 ) − ρmin dans le but de maximiser la vitesse tout en respectant la contrainte sur le
rayon de gyration ρmin = 0.25m.
Question 10 : Générez l’espace des vitesses de rotation (ω1 , ω2 ) réalisables en utilisant meshgrid,
calculez et tracez avec la fonction contour les lignes de niveau de v et δρ = ρ − ρmin . Déduire des
isoδρ les vitesses ω1 et ω2 pour lesquelles la vitesse du robot est maximale. On suppose que la
vitesse v reste constante et égale à la vitesse maximale précédemment trouvée ; en ligne droite
comme sur les arcs de cercle.
Question 11 : Déduire de cette vitesse l’incrément de distance parcouru par le robot pendant une
période d’échantillonnage et recalculez la trajectoire avec ce pas.
Question 12 : Implémentez ces consignes de position dans un bloc From Workspace, pensez pour
faire fonctionner ce bloc à générer un vecteur temps de même longueur cadencé à la période
d’échantillonnage Ts . Pour stopper proprement le robot sur la consigne terminale, validez le
menu déroulant Form output after final data value by : Holding Final Value.
Question 13 : Simulez et représentez sur une même figure la trajectoire de consigne et la trajectoire
réalisée. Proposez et réalisez avec les outils de simulation un indicateur qui rende compte de la
qualité de la trajectoire réalisée par le robot.
82 F. BATEMAN
5.4. Champs de potentiel artificiels
Les vitesses de rotation des roues qui maximisent la vitesse sous les contraintes de rayon de
gyration ρmin et de vitesses de rotation des roues dans l’intervalle [0,o megamax ] peuvent être
calculées avec des algorithmes de minimisation sous contraintes égalité et inégalité à l’instar
de l’algorithme SQP (Sequential Programming Algorithm) implémenté sous MATLAB avec la
fonction fmincon. Maximiser une fonction f (x), c’est évidemment minimiser −f (x).
Question 15 : En utilisant l’aide de la fonction fmincon sous MATLAB, calculez les valeurs op-
timales de la vitesse des roues sous le contraintes précitées. Il est conseillé de s’inspirer de
l’exemple qui figure à la fin de l’aide. La fonction à maximiser et la fonction qui décrit la
contrainte non linéaire doivent figurer dans deux scripts distincts. Le nom du fichier afférent
doit être identique à celui de la fonction.
n
X
ϕt = ϕb + ϕoi (5.9)
i=1
Il est important de comprendre que ces champs n’existent pas dans l’environnement, ils sont
calculés par le contrôleur du robot. Il s’agit en fait d’un artifices de calcul à partir duquel sont
dérivés les efforts à appliquer aux actionneurs, ici les moteurs qui contrôlent les vitesses de
rotation des roues. Un tel champ de forces est représenté sur la figure 5.5 et la force qui en
dérive a pour expression :
−
→ −−→
F = −gradϕt (5.10)
∂ϕt
Fx = − (5.11)
∂x
∂ϕt
Fy = −
∂y
F. BATEMAN 83
TP 5. PLANIFICATION DE TRAJECTOIRES
1
ϕb = − ζ (x − xb )2 + (y − yb )2 (5.12)
2
!2
1
1 1
η p − d(x, y, xo , yo ) ≤ d0
ϕo = 2 2
(x − xo ) + (y − yo )2 d0 (5.13)
0 d(x, y) > d0
où d0 > 0 est une distance qui reflète l’influence de l’obstacle, ζ et η des paramètres qui per-
p
mettent de modeler les champs de potentiels et d(x, y) = (x − xo )2 + (y − yo )2 .
On montre que les forces qui dérivent du champ de potentiel ont pour expression :
1 1 x − xo
η
− 3
d(x, y) ≤ d0 , 0 si d(x, y) > d0
Fo = d(x, y) d0 d (x, y) (5.14)
1 1 y − yo
η
− d(x, y) ≤ d0 , 0 si d(x, y) > d0
d(x, y) d0 d3 (x, y)
Question 16 :Calculez la force φb qui dérive du potentiel attractif ; puis, sous SiMULINK, construi-
sez pour les forces d’attraction et de répulsion les modèles paramétrables qui correspondent à un
but et un obstacle. Chacune de ces forces doit être implémentée dans un bloc sous-système distinct
paramétrable. Consultez le Webinar https: // fr. mathworks. com/ videos/ creating-and-masking-subsystems-6
html pour apprendre à créer un bloc paramétrable ou masque de sous-système.
Les forces Fx et Fy calculées par le contrôleur du robot procèdent de la somme des forces
élémentaires. Elles doivent néanmoins être normalisées, de sorte qu’elles ne tendent pas vers
l’infini lorsque le robot est loin du but. Mais cette normalisation ne doit pas conduire à une
indétermination lorsque le robot est à proximité du but. On propose pour le modèle des forces
84 F. BATEMAN
5.4. Champs de potentiel artificiels
normalisées :
Fx
fx = q (5.15)
Fx2 + Fy2 + ε
Fy
fy = q (5.16)
Fx2 + Fy2 + ε
On choisit ε petit.
Question 17 : Construisez le modèle des forces normalisées et implémentez l’ensemble des fonctions
qui réalisent les forces dans un sous-système.
Question 18 : Le robot est toujours muni du bloc de contrôle Inversion Dynamique mais les correc-
teurs proportionnel-intégral sont supprimés et remplacés par les modèles des forces d’attraction
et de répulsion. Appliquez les forces normalisées aux entrées du bloc Inversion Dynamique.
Question 20 :Modifier le schéma pour rendre une des cibles mouvantes et contraindre le robot à
changer de trajectoire. On pourra par exemple utiliser une rampe retardée pour modifier l’une
des coordonnées de l’obstacle. Une telle trajectoire est illustrée sur la figure, elle n’est clairement
pas optimale.
F. BATEMAN 85
TP 5. PLANIFICATION DE TRAJECTOIRES
86 F. BATEMAN
TP 6
Branchez sur le réseau électrique le bloc d’alimentation des caméras puis mettez le PC 3
écrans sous tension, le mot de passe est projet. Depuis le bureau du PC 3 écrans, exécutez le
programme Qualisys Track Manager (QTM) et cliquez sur le bouton New Project que vous
nommerez TMEGroupeX où X est le numéro de votre groupe de travail défini au début des
enseignements de TME.
87
TP 6. CONTRÔLE DE LA TRAJECTOIRE D’UN DRONE
Dans le champ Base the new project on, choisissez l’option Default settings puis Ok. La
fenêtre suivante s’ouvre :
Cliquez sur Tools > Project Option > Camera System puis sur le bouton Locate System.
Lorsque les caméras sont localisées, l’adresse IP de la carte sur laquelle elles sont connectées est
affichée. Le bouton System Info renvoie l’adresse et des informations sur chacune des caméras.
En revanche, le MoCap reste à calibrer. Cliquez sur Ok. File ❀ New ❀ les vues prises par
88 F. BATEMAN
6.1. Calibration du système de capture de mouvements (Motion CAPture)
les six caméras apparaissent, les boutons Marker, Intensity et Video renvoient les images dans
différents modes. En particulier, le mode Marker permet seulement de visualiser les marqueurs
utilisés pour identifier et suivre la trajectoire d’un mobile. Le mode Intensity est utilisé pour
régler les seuils permettant de discriminer les marqueurs et suivre les mobiles ; le mode Video
permet à quant à lui de visualiser les zones imagées par les caméras. Notez la présence des
boutons All/None et 1, 2, 3, 4, 5, 6 qui permettent de visualiser les images prises par les caméras
sélectionnées.
Positionnez l’équerre munie de marqueurs au centre de l’arène et vérifiez qu’en mode Inten-
sity, pour les caméras sur lesquelles elle est visible, que les marqueurs présentent une couleur
jaune ou rouge (ces couleurs sont caractéristiques d’un seuillage efficace qui permet de discrimi-
ner les marqueurs). Passez ensuite en mode Marker. Des artefacts peuvent apparaı̂tre à l’instar
de ce que montre la figure 6.6. Il peut s’agir d’un mauvais masquage de la lumière du soleil ou
des flashs émis dans l’IR par les caméras auxquelles les marqueurs sont sensibles. Pour masquer
ces effets, on peut introduire des retards dans l’émission de ces flashs, de sorte que l’instant
d’émission de la caméra pollueuse et l’instant d’acquisition de la caméra polluée ne soient plus
synchronisés.
F. BATEMAN 89
TP 6. CONTRÔLE DE LA TRAJECTOIRE D’UN DRONE
Figure 6.6 – Vue de la courone de LeDs IR d’une caméra par une autre caméra
90 F. BATEMAN
6.1. Calibration du système de capture de mouvements (Motion CAPture)
Tools>Project Option>Calibration
Choisissez la calibration de type Wand et le Wand Kit 300 mm dont la longueur exacte est
300,8 puis validez en cliquant sur Apply et Ok. Utilisez pour l’orientation du repère les indications
suivantes, soit −
→
x E pointé vers le mur Est, −
→
y E vers le Sud et − →z E dirigé vers la terre. Toujours
en mode Marker, Capture ❀ Calibrate, choisissez un temps de calibration d’au moins 60 s, vous
pouvez également introduire un retard au déclenchement de la calibration, typiquement 10s.
Munissez-vous de la baguette de calibration qu’il faut manipuler avec le plus grand soin. Cliquez
sur Ok et positionnez-vous dans l’arène de vol, évoluez-y avec grâce en maniant la baguette de
manière à couvrir au mieux l’espace de l’arène. Pendant toute la durée de la calibration, les
couronnes de Leds des caméras clignotent.
F. BATEMAN 91
TP 6. CONTRÔLE DE LA TRAJECTOIRE D’UN DRONE
92 F. BATEMAN
6.2. Contrôle automatique de la trajectoire du drone
signifie que ces derniers ont été identifiés, il faut alors les sélectionner et les faire glisser dans la
fenêtre Labeled trajectories. Cliquez droit sur ces marqueurs préalablement sélectionnés et choisir
l’option Define Rigid body 6 DOF. Nommez l’objet (Drone1 par exemple) et validez. Puis dans
Tools>Project Options ❀ Processing, cochez les cases Calculate 6 DOF dans les menus Real time
Actions et Capture Actions, cliquez sur Apply et OK. Vérifiez que le repère associé au drone
a une orientation identique à celle du repère de référence. Si ce n’est pas le cas, modifiez son
orientation et sa position depuis Tools>Project Options ❀ 6DOF Tracking, sélectionnez Drone1
et modifiez la position de l’origine de son repère et son orientation avec les boutons Tranlate
et Rotate. On vérifie maintenant que le drone est bien identifié et que le MOCAP restitue sa
position. Déplacez le drone dans l’arène. Faites :
File ❀ New ❀ 3D et vérifiez que l’objet Drone1 a bien été déplacé.
Retirez le premier drone de l’arène de vol et procédez de même pour identifier le second
drone appelé Drone2.
F. BATEMAN 93
TP 6. CONTRÔLE DE LA TRAJECTOIRE D’UN DRONE
Depuis le menu de QTM, lancez une capture d’une durée d’une minute et effectuez un
vol ; assurez-vous de maintenir l’appareil dans la zone couverte par les caméras. Sauvegardez
la trajectoire capturée (non fichier.qtm). Pour visualiser la position, la vitesse, etc. du drone,
dans la fenêtre Labeled trajectories, sélectionnez le marqueur qui définit l’origine du repère drone
puis, sous la barre des menus, cliquez sur le bouton Analyze Trajectory et affichez les courbes
de position, vitesse, accélération. Notez qu’il est possible de traiter ces signaux (lissage, filtre
à moyenne glissante) et de les exporter vers un fichier *.TSV. Ces derniers s’ouvrent avec un
éditeur de texte et il est possible d’importer le tableau de points depuis MATLAB. Il faut toutefois
reconstruire la variable temps, par défaut la période d’échantillonnage vaut 10ms.
94 F. BATEMAN
6.2. Contrôle automatique de la trajectoire du drone
MOCAP Acquisition.slx.
Ce bloc est réalisé par une Embedded Matlab Function, commencez par le renommer Mon-
Nom MOCAP Acquisition.slx puis, vous y coderez un programme qui permet de calculer les
trois composantes de la vitesse du drone. Il faut également pouvoir renvoyer un message à
l’écran lorsque le drone n’est plus dans le champ visuel des caméras. Cette fonction doit ren-
voyer les coordonnées et les trois composantes de la vitesse du drone qu’il vous faut calculer dans
le repère de l’arène. Elle admet comme argument le numéro du drone (ici 0 ou 3) et la variable
q associée à la fonction QTM, celle-ci commande l’acquisition des positions toutes les 30 ms,
cette valeur est définie par le Sample Time de la constante associée à q. A ce sujet, pour le choix
de la période d’échantillonnage, les caméras délivrent théoriquement jusqu’à 100 informations
de positions par seconde. Il faut toutefois savoir que l’ARDrone 2 est contrôlé avec une période
d’échantillonnage de 30 ms. Lors de la rédaction du sujet de ce TP, c’est cette valeur de 30 ms
qui a été retenue, toutefois, rien ne vous empêche de conduire des essais à une cadence plus
élevée, dans le but par exemple de traiter les mesures de position au moyen d’un filtre RIF.
% i n i t i a l i z a t i o n du t a b l e a u data au p r e m i e r a p p e l de l a f o n c t i o n
data=z e r o s ( 6 , 4 ) ;
% i n i t i a l i z a t i o n de v a r i a b l e s u t i l e s au c a l c u l de l a v i t e s s e e a u
xa0 = 0 ;
ya0 = 0 ;
za0 = 0 ;
xa 1 =0;
ya 1 =0;
z a 1 =0;
end
% A c q u i s i t i o n d es p o s i t i o n s e t d es v i t e s s e s a n g u l a i r e s dans l a v a r i a b l e data
data = QMC( q ) ;
% C a l c u l d es v i t e s s e s
F. BATEMAN 95
TP 6. CONTRÔLE DE LA TRAJECTOIRE D’UN DRONE
% Renvoi d es s o r t i e s c a l c u l é e s
xa=
ya=
end
cos ψ sin ψ 0 0 0
n
F = − sin ψ cosψ 0 TbE 0 + 0
0 0 1 −P mg
| {z }
R(ψ)
Où R(ψ) désigne la matrice de rotation d’un angle ψ autour de l’axe de lacet. Cette matrice
est orthogonale et R(ψ)−1 = R(ψ)T = R(−ψ).
A l’équilibre, la portance équilibre le poids et P = mg. Montrez pour des petits angles φ et
θ que les forces dans le repère de navigation ont pour expression :
−mgθ
Fn = mgφ
(6.3)
0
96 F. BATEMAN
6.2. Contrôle automatique de la trajectoire du drone
Principe du guidage
F. BATEMAN 97
TP 6. CONTRÔLE DE LA TRAJECTOIRE D’UN DRONE
!n !E
εx εx
= R2×2 (ψ) (6.5)
εy εy
et génération d’une force de poussée orientée vers le waypoint à atteindre :
−mgθ
Fn ≈ mgφ
(6.6)
0
! ! !
E ẍE cos ψ − sin ψ −mgθ
F =m = (6.7)
ÿE sin ψ cosψ mgφ
A cap constant, la transformée de Laplace de ces équations s’écrit :
g
xE (s) = − (cos(ψ)θ(s) − sin(ψ)φ(s)) (6.8)
s2
g
yE (s) = (sin(ψ)θ(s) + cos(ψ)φ(s)) (6.9)
s2
98 F. BATEMAN
6.3. Loi de commande
On calcule les lois de commande en supposant le cap nul et on suppose les angles de gı̂te et
l’assiette parfaitement asservis à leur consigne. Ce sont ces consignes de gı̂te et d’assiette qui
jouent le rôle d’entrée de commande des boucles d’asservissement de trajectoire du drone. Soit
les lois de commandes et le schéma fonctionnel afférents :
θref = −kd kp (xEref − xE ) −µ (6.10)
| {z }
µref
φref = kd kp (yEref − yE ) −ν (6.11)
| {z }
νref
où (µ, ν) désignent les coordonnées du vecteur vitesse du drone dans le repère de navigation.
Les gains kd et kp sont réglés pour que le système en boucle fermée tende vers une fonction
de transfert de référence :
F. BATEMAN 99
TP 6. CONTRÔLE DE LA TRAJECTOIRE D’UN DRONE
Vous construirez les matrices de rotation au moyen de blocs User Defined Functions ❀
MATLAB Function et encapsulerez le modèle du drone dans un subsystem.
Générez la trajectoire de consigne suivante :
1. Décollage et maintien en vol stationnaire pendant 5s,
2. Trajectoire circulaire de rayon 1m parcourue en 4πs. Pratiquement, vous pouvez avanta-
geusement utiliser les blocs Sources ❀ Sine Wave Function.
On envisage trois stratégies de commande pour le suivi de trajectoire :
1. Contrôle des axes de tangage et de cap : le drone se déplace de sorte que l’axe − →
x b (axe
de visée de la caméra) soit colinéaire à celui du vecteur vitesse. Pour cela, réalisez une
fonction qui calcule le cap à suivre à partir des consignes de position. Après vous être
documentés sur les fonctions Atan et Atan2, vous les implémenterez au moyen du bloc
blocs Maths operation ❀ Trigonometric Function.
2. Contrôle des axes de tangage et de gı̂te à angle de cap constant. Pratiquement, l’axe − →xb
pointe toujours dans la même direction.
3. Contrôle des axes de tangage et de gı̂te tandis que la caméra est contrainte de viser un
point fixe.
6.3.2 Implémentation
Ouvrez le fichier Control ARdrone.slx et copiez-y le bloc Embedded Matlab Function réalisée
dans MonNom MOCAP Acquisition.slx et qui renvoie la position et la vitesse du drone.
Vous devez connecter le joystick au PC. La gâchette et le contrôleur de vues (bouton actionné
avec le pouce et situé sur le manche) permettent respectivement de faire décoller/atterrir le
quadrirotor et de le poser en cas d’urgence. Le bloc Joystick contient des bascules T pour
maintenir les états logiques après que les boutons poussoirs aient été relâchés. La machine à
état, bloc Chart, réalise :
1. Une séquence d’initialisation consistant en un recalage de la centrale d’attitude,
2. L’enfoncement de la gâchette fait décoller l’appareil qui est alors en boucle ouverte,
3. Après trois secondes, les lois de commande sont opérantes,
100 F. BATEMAN
6.4. Pour aller plus loin
1. Positionnez le drone sur l’origine du repère et testez son comportement du drone en vol
stationnaire pour des coordonnées de référence.
2. Testez ensuite les trajectoires circulaires simulées précédemment. Avant chaque vol, pré-
sentez votre schéma à un enseignant.
F. BATEMAN 101
TP 6. CONTRÔLE DE LA TRAJECTOIRE D’UN DRONE
102 F. BATEMAN
TP 7
103
TP 7. COMMANDE D’UN ESSAIM DE DRONES PAR CONSENSUS
— 1 Joystick
— MATLAB 2013a,
— une paire de crocs ...
Les fichiers utiles sont dans le dossier TP Consensus 2020 sur le bureau et sous Moodle dans
l’espace dédié à ce TME.
żi = ui (7.1)
Où ui est la commande du drone i. La hauteur de chaque drone est mesurée, soit zim cette
mesure de hauteur. Cette dernière est supposée parfaite c-à.d zim = zi .
Question 21 : Établissez les équations d’état et d’observation de l’essaim de drones, soit le vecteur
d’état X, de commande U, de mesures U et les matrices A, B, C et D.
104 F. BATEMAN
7.2. Commande par consensus du premier ordre
4 3
bc bc
bc bc
1 2
Figure 7.2 – Graphe non orienté décrivant les liaisons entre les drones
Question 22 : Pour les graphe des liaisons de données de la figure 7.2, écrivez les équations
d’état de l’essaim ainsi contrôlé et montrez que ces équations ont la même structure que celle
d’un système commandé par retour d’état pour lequel il n’y a pas d’entrée de consigne. Vous
préciserez en particulier l’expression de la matrice d’état corrigée qu’on notera −L. La matrice
L est aussi appelée en théorie des graphes matrice laplacienne.
Question 23 : Au vu de la structure de la matrice laplacienne, montrez que zéro est une valeur
propre de cette matrice et proposez une expression possible pour le vecteur propre associé.
Notez que la matrice laplacienne est réelle et symétrique, que par conséquent elle est toujours
diagonalisable sur R. Qu’en outre, la matrice de passage constituée des vecteurs propres associée
aux valeurs propres de L est orthogonale.
Question 24 : Pour le graphe des liaisons de données inter-drones qui vous a été communiqué,
saisissez sous MATLAB les matrices d’état et de commande de la représentation d’état corrigée.
Vous vérifierez que zéro est bien une des valeurs propres de la matrice d’état corrigée et que la
matrice de passage dans la base modale est orthogonale.
Question 25 : En utilisant la matrice de passage dans la base modale et les valeurs propres de
la matrice d’état corrigée calculées à la question précédente, établissez les solutions des équa-
tions d’état du drone t
corrigé dans la base modale en fonction des hauteurs initiales Z (0) =
z1 (0) . . . zN (0) .
Question 26 :
1. Montrez qu’il y a consensus c-à.d que les hauteurs convergent toutes vers une même valeur
non définie a priori et fonction des seules conditions initiales.
2. Que représente dans ces conditions le noyau de L ?
3. Précisez en justifiant votre réponse quelle sera la nature des modes et l’ordre de grandeur
du temps de réponse pour que l’essaim réalise le consensus.
Ouvrez le fichier Consensus 4 drones.slx. Ce fichier contient les modèles de quatre drones
dont les entrées de commande sont les consignes de gı̂te ψref , de tangage θref , de vitesse de lacet
rref et de vitesse ascensionnelle vzref . Vous pouvez accéder aux conditions initiales de chaque
F. BATEMAN 105
TP 7. COMMANDE D’UN ESSAIM DE DRONES PAR CONSENSUS
drone en double-cliquant sur le bloc représentant le drone considéré. Notez que les modèles im-
plémentés sont ceux utilisés lors des TP conduits sur l’ARDrone dans la volière en première
année.
Dans ce qui suit, la consigne de vitesse ascensionnelle vzref i du drone i joue le rôle de la com-
mande ui .
Question 27 : Réalisez la commande par consensus et testez-là. Visualisez et enregistrez les chro-
nogrammes des hauteurs et des commandes des drones. Relevez les caractéristiques des régimes
transitoires et comparez-les à ceux établis dans la partie théorique.
Question 28 : Sur des essais successifs, appliquez comme conditions initiales les vecteur propre
associés aux valeurs propres non nulles. Que constatez-vous ? Ce résultat était-il prévisible ? .
Question 29 :Donnez une interprétation qualitative des résultats obtenus en étudiant la structure
du graphe et la manière dont l’information est partagée pour réaliser le consensus.
Question 30 : Pour le graphe des liaisons de la figure 7.4, reprenez l’étude précédente sans refaire
les calculs théoriques. Vous observerez que la matrice L n’est pas symétrique et n’a donc plus les
propriétés de celle obtenue pour un graphe non-orienté. Ceci a évidemment des conséquences que
vous mettrez en évidence sur les simulations que vous ne manquerez pas de réaliser sur le même
modèle que précédemment. Cette fois cependant, la variable sur laquelle le consensus opère pour
le drone i est le cap ψi et la variable de commande est la vitesse de lacet de consigne rref i .
4 3
bc bc
bc bc
1 2
Figure 7.4 – Graphe non orienté décrivant les liaisons entre les drones
106 F. BATEMAN
7.2. Commande par consensus du premier ordre
7.2.3 EXPÉRIMENTATION
L’objet de cette expérimentation est de mettre en œuvre une commande par consensus pour
un essaim constitué de deux drones 1
Vous devrez dans un premier temps réaliser un programme codé sous MATLAB qui restitue
les positions et les vitesses de deux drones.
Dans un second temps, vous testerez les lois de commande étudiées en première année. Vous
pourrez modifier les réglages initiaux des gains pour l’action proportionnelle (kpθ = kpφ = 1)
et dérivée (−kdθ = kpφ = 0.4) en vue d’améliorer les performances dynamiques du drone. A ce
sujet, vous testerez ces commandes sur les deux drones.
Dans un troisième temps, vous mettrez en œuvre une stratégie de commande par consensus
du premier ordre dans le but de réaliser un consensus sur la hauteur.
Dans cette partie vous allez, sous MATLAB 2013a, en temps réel, estimer la vitesse du
drone à partir des mesures de position délivrées par QTM. Pour l’utilisation de QTM, vous vous
reporterez au TP 6. Pour ne pas à faire voler le drone, vous rejouerez de manière virtuelle et
répétée un vol précédemment effectué. Les données de position sont émises depuis QTM sur le
réseau et accessibles en temps réel sur les PC qui y sont connectés : Play ❀ Play with real time
output. Le fichier qui rejoue en continu ce vol virtuel est Rejoue Vol.qtm. Il doit être installé
et ouvert depuis le PC qui héberge QTM et qui contrôle le système de capture de mouvement
(MoCap).
Dans le même temps, sur une des machines du laboratoire, ouvrez MATLAB et définissez le
chemin pointant sur le dossier TME TP8. Si le PC utilisé pour QTM et MATLAB est le même,
il faut dans le fichier QMC conf3.txt utiliser le localhost soit choisir l’adresse IP 127.0.0.1, ce
qui est réalisé en supprimant le caractère de commentaire # devant cette adresse IP. Si les deux
PC sont différents, vous devrez utiliser l’adresse IP 192.168.0.2 qui est celle du serveur utilisé
par QTM et qui est hébergé sur le PC qui contrôle le MoCap. Sous le Command Windows de
MATLAB, à l’invite de commande, tapez et exécutez :
>> q= QMC(’QMC conf3.txt’)
1. Les capacités temps réels de SIMULINK d’une part et la taille conséquente des ARDrone ne permettent pas
de faire évoluer de façon satisfaisante plus de deux drones dans l’arène.
F. BATEMAN 107
TP 7. COMMANDE D’UN ESSAIM DE DRONES PAR CONSENSUS
Figure 7.5 – Acquisition de position et calcul de la vitesse d’un drone sous Simulink
Ce bloc est réalisé par une Embedded Matlab Function. Codez-y un programme qui permet de
calculer les trois composantes de la vitesse des deux drone. Il faut également pouvoir renvoyer un
message à l’écran lorsque le drone n’est plus dans le champ visuel des caméras. Cette fonction
doit renvoyer les coordonnées et les trois composantes de la vitesse du drone qu’il vous faut
calculer dans le repère de l’arène. Elle admet comme arguments les numéros identifiants les
drones (∈ [0, . . . , 3] ) et la variable q associée à la fonction QTM, celle-ci commande l’acquisition
des positions toutes les 30 ms, cette valeur est définie par le Sample Time de la constante associée
à q. A ce sujet, pour le choix de la période d’échantillonnage, les caméras délivrent théoriquement
jusqu’à 100 informations de positions par seconde. Il faut toutefois savoir que l’ARDrone 2 est
contrôlé avec une période d’échantillonnage de 30 ms. Lors de la rédaction du sujet de ce TP,
c’est cette valeur de 30 ms qui a été retenue, toutefois, rien ne vous empêche de conduire des
essais à une cadence plus élevée, dans le but par exemple de traiter les mesures de position au
moyen d’un filtre à réponse impulsionnelle finie (RIF).
f u n c t i o n [ xa , ya , za , vxa , vya , p s i a , xb , yb , zb , vxb , vyb , p s i b ]= f c n ( q , a , b )
c o d e r . e x t r i n s i c ( ’QMC’ )
xb0 = 0 ;
yb0 = 0 ;
zb0 = 0 ;
end
data = QMC( q ) ;
108 F. BATEMAN
7.2. Commande par consensus du premier ordre
xa = 0 . 0 0 1 ∗ data ( 1 , a ) ;
ya = 0 . 0 0 1 ∗ data ( 2 , a ) ;
za = 0 . 0 0 1 ∗ data ( 3 , a ) ;
psia = data ( 6 , a ) ∗ p i / 1 8 0 ;
% Drone b
xb = 0 . 0 0 1 ∗ data ( 1 , b ) ;
yb = 0 . 0 0 1 ∗ data ( 2 , b ) ;
zb = 0 . 0 0 1 ∗ data ( 3 , b ) ;
p s i b = data ( 6 , b ) ∗ p i / 1 8 0 ;
% T es te l a p ré s e n c e d ’ un NaN
i f is em p ty ( f i n d ( i s n a n ( data ( : , a ) ) ) )
% C a l c u l de l a v i t e s s e
% Pas de c a l c u l de l a v i t e s s e p o s s i b l e
else
d i s p ( ’ marche pas ’ )
end
end
Le contrôle de la trajectoire d’un drone a été étudié en première année. Vous vous reporterez
au TP 6 pour la structure de la loi de commande. Vous testerez successivement chacun des drones
seuls mais ils doivent tout deux être dans l’arène vus par les caméras pour que leurs positions
puissent être calculées. Il faut régulièrement depuis l’invite de commande exécuter des ping pour
s’assurer que les drones sont bien connectés. L’une des raisons aux dysfonctionnements observés
est le faible niveau des batteries ou une mauvaise orientation des repères attachés aux drones
( à ce sujet, vérifiez que les axes du trièdre sont colinéaires aux axes du drone et au besoin,
opérez depuis QTM aux corrections nécessaire). Des diodes Leds sur les batteries permettent
d’évaluer leur niveau de charge. Ouvrez le fichier Control ARDrone Duo et ajoutez-y le fichier
Mocap Acquisition préalablement modifié et testé. Pour ne faire voler qu’un seul des deux drones,
sélectionnez avec la souris le contrôleur et le chart que vous ne voulez pas mettre en vol, cliquez-
droit et validez l’option comment out. Testez séparément les drones puis testez les deux drones
Les ARDrones se prête particulièrement bien à la commande par consensus du premier ordre
lorsque celui porte sur la hauteur h (−z) et le cap ψ. En effet les entrées de commande naturelles
F. BATEMAN 109
TP 7. COMMANDE D’UN ESSAIM DE DRONES PAR CONSENSUS
Figure 7.6 – Graphe des essaims pour le consensus dans l’arène de vol
d’un l’ARDrone sont la vitesse ascensionnelle w (vzref ) et la vitesse de lacet r, ainsi on peut
écrire :
ḣ = w (7.3)
ψ̇ = r (7.4)
Ces équations ont la même structure que l’équation du modèle d’un agent de l’essaim 7.1,
laquelle a été ensuite utilisée pour étudier la commande par consensus. Dans cette partie, l’étude
expérimentale du consensus se fera sur la hauteur des drones.
Pour réaliser la commande par consensus, il est nécessaire d’amener dans un premier temps
chacun des drones à une hauteur initiale. Cette hauteur initiale sera réalisée par l’asservissement
de hauteur des deux drones initialement implémenté dans le fichier Control ARDrone Duo. Un
système de commutation utilisant des blocs Signal Routing❀Switch doit ensuite permettre
d’activer la commande par consensus.
— Modifiez le schéma du fichier Control ARDrone Duo pour réaliser la commande par
consensus sur la hauteur. La hauteur des drones ne devra pas dépasser 1.5 m. Pour
des hauteurs supérieures, on court le risque que les drones ne soient plus vus par les
caméras. Il vous faut pour cela prévoir :
— Une phase de contrôle des drones les amenant à leur hauteur initiale.
— La commutation sur la commande par consensus.
— La visualisation des données que vous récupèrerez dans le bloc Sinks❀ToWorkspace.
Par défaut, le format sous lequel sont enregistrées les données est de type TimeSerie et
la variable de sauvegarde est nommée simout, vous pouvez évidemment la renommer.
Vous accéderez au signal et au temps en appelant simout.Time et simout.Data
— Il est possible depuis QTM de réaliser en images de synthèse une vidéo des évolutions
des deux drones.
110 F. BATEMAN
7.3. Consensus du second ordre
ẍi = vi (7.5)
ÿi = wi (7.6)
Comme ce modèle est décrit par des équations différentielles d’ordre deux, le consensus est dit
du second ordre. Pour chaque drone, les coordonnées de sa position (xi , yi ) et de sa vitesse (vxi ,
vyi ) du drone i sont mesurées et ces mesures sont supposées parfaites. Par souci de simplicité
et jusqu’à nouvel ordre, on étudie le mouvement du drone et la loi de commande par consensus
uniquement dans la direction ~x.
Question 31 : Etablissez les équations d’état et d’observation pour un essaim de N = 4 drones.
Vous adopterez t
comme vecteur d’état X = (x1 . . . xn , vx1 . . . vxn ) qu’on notera de façon conden-
sée xt vx t . On notera Y le vecteur des mesures.
7.3.2 Le consensus
Où l’on montre que les drones, initialement dans des positions quelconques, font consensus,
c-à.d qu’ils se retrouvent tous en un même point de l’espace.
Le calcul des valeurs propres de la matrice d’état montre qu’elle possèdent des valeurs propres
ayant un ordre de multiplicité égal à deux et pour lesquelles les vecteurs propres associés sont
colinéaires. Dans ces conditions, la matrice de passage n’est pas inversible. On peut néanmoins
faire apparaı̂tre les modes propres en opérant à une réduction Jordan de la matrice d’état. On
exprime alors les équations d’état dans la base de Jordan en utilisant les mêmes formules de
changement de base que celles utilisées pour passer dans la base modale. On note ζ le vecteur
d’état dans la base de Jordan.
Question 33 :Avec MATLAB, fonction jordan, calculez pour votre essaim la forme de jordan de
matrice d’état et la matrice de passage afférente.
Question 34 : Exprimez les équations d’état dans la base de Jordan, intégrez-ces équations. Donnez
les expressions des ζi (t) en régime permanent et montrez que les drones font consensus.
F. BATEMAN 111
TP 7. COMMANDE D’UN ESSAIM DE DRONES PAR CONSENSUS
Question 35 : Pour des conditions initiales x(0) de votre choix et v(0) = 0, calculez numériquement
au moyen de la matrice de passage dans la base de Jordan et des coordonnées de ζ le vecteur
d’état X en régime permanent et concluez sur l’existence d’un consensus.
Question 36 : Sur le fichier Consensus 4 drones.slx de l’essaim réalisé sous SIMULINK, implé-
mentez la commande par consensus au second ordre. La commande −θref i joue ici le rôle de vi
pour le contrôle de xi et φref i joue ici le rôle de vi pour le contrôle de yi . Faites attention à
prendre le signe − qui apparaı̂t dans le contrôle de l’assiette ; vous devrez multiplier par −1 la
commande calculée par consensus avant de l’appliquer à θref i .
n
X
ẍi = − kij (xi − xj − rij ) + ξkij (ẋi − ẋj ) (7.9)
j=1
Xn
ÿi = − kij (yi − yj − ρij ) + ξkij (ẏi − ẏj ) (7.10)
j=1
où rij (resp. ρij ) est l’écart souhaitée entre les drones i et j selon ~x (resp. ~y. On peut reformuler
ces équations :
n
X
ẍi = − kij (xi − xj ) + ξkij (ẋi − ẋj ) + ri (7.11)
j=1
Xn
ÿi = − kij (yi − yj ) + ξkij (ẏi − ẏj ) + ρi (7.12)
j=1
Pn Pn
où ri = j=1 mij rij et ρi = j=1 mij ρij
Question 37 :Modifiez le modèle sous SIMULINK pour réaliser cette mise en formation. Vérifier
qu’en régime permanent les écarts entre les drones sont ceux désirés.
112 F. BATEMAN
7.4. Formations étudiées
1 b
1 b
1 1
0 b b
0 b b
4 2 4 2
-1 b
-1 b
3 3
-2 -2
-2 -1 0 1 2 -2 -1 0 1 2
α β
2 2
1 1 b b
4 1
0 b b b b
0
4 3 2 1
-1 -1 b b
3 2
-2 -2
-2 -1 0 1 2 -2 -1 0 1 2
γ δ
F. BATEMAN 113
Bibliographie
Bibliographie
[1] Edgar G. Johnson and Alfred O. Nier. Angular aberrations in sector shaped electromagnetic
lenses for focusing beams of charged particles. Physical Review, 91(1), jul 1953.
[2] Matthieu Massonneau. Conception d’un planificateur de trajectoires pour un robot mobile.
[3] Wei Ren and Randal W. Beard. Distributed Consensus in Multi-vehicle Cooperative
Control : Theory and Applications. Springer Publishing Company, Incorporated, 1st edi-
tion, 2007.
[4] Joe Sfeir. Navigation d’un robot mobile en environnement inconnu utilisant les champs de
potentiels artificiels. PhD thesis, École de technologie supérieure, 2009.
[5] Ramon Silva-Ortigoza, Celso Márquez-Sánchez, Fernando Carrizosa-Corral, Victor Ma-
nuel Hernández-Guzmán, Jose Rafael Garcia-Sánchez, Hind Taud, Magdalena Marciano-
Melchor, and Jesus Antonio Alvarez-Cedillo. Obstacle avoidance task for a wheeled mobile
robotâ=
C”a matlab-simulink-based didactic application. MATLAB : Applications for the Prac-
tical Engineer, pages 79–102, 2014.
115