Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
fr:informatics:trajectoires_complexes [23/11/2024 16:44]
Keuronde
fr:informatics:trajectoires_complexes [24/11/2024 14:40] (Version actuelle)
Keuronde [La rotation] Ajout image
Ligne 5: Ligne 5:
   * des lignes droites ;   * des lignes droites ;
   * des arcs de cercles ;   * des arcs de cercles ;
-  * des courbes de Bézier +  * des courbes de Bézier ; 
-  * des rotations pures+  * des rotations pures.
 ===== Pré-requis ===== ===== Pré-requis =====
  
Ligne 21: Ligne 21:
 ==== La ligne droite ==== ==== La ligne droite ====
  
-#IMG ligne droite+{{ :fr:informatics:trajectoire_ligne_droite.png?400 |}}
  
 Elle se définit par deux points, D départ et A, arrivée. Elle se définit par deux points, D départ et A, arrivée.
Ligne 36: Ligne 36:
 L’arc de cercle se définit par un centre, un rayon et deux angles, celui de début et celui de fin. L’arc de cercle se définit par un centre, un rayon et deux angles, celui de début et celui de fin.
  
-#ING arc de cercle+{{ :fr:informatics:trajectoire_arc_cercle.png?400 |}}
  
 La longueur se calcule avec : $Longueur = \lvert \textrm{angle_fin} - \textrm{angle_debut} \rvert \cdot rayon$ La longueur se calcule avec : $Longueur = \lvert \textrm{angle_fin} - \textrm{angle_debut} \rvert \cdot rayon$
Ligne 54: Ligne 54:
 La courbe de Bézier cubique est probablement la trajectoire la plus pratique, car elle permet de relier deux points en tenant compte des contraintes d’orientation du PAMI en début et en fin de trajectoire. La courbe de Bézier cubique est probablement la trajectoire la plus pratique, car elle permet de relier deux points en tenant compte des contraintes d’orientation du PAMI en début et en fin de trajectoire.
  
-#IMG courbe de Bézier+{{ :fr:informatics:trajectoire_bezier.png?400 |}}
  
 Elle se définit par 4 points. Le point de départ (D) et le point d’arrivée (A) ainsi que deux poignées de contrôle que nous nommerons D’ pour celle du côté du départ et A’ pour celle du côté de l’arrivée. Elle se définit par 4 points. Le point de départ (D) et le point d’arrivée (A) ainsi que deux poignées de contrôle que nous nommerons D’ pour celle du côté du départ et A’ pour celle du côté de l’arrivée.
Ligne 76: Ligne 76:
 Si l’erreur est supérieure au seuil souhaité (1 % par exemple), nous calculons la nouvelle abscisse : Si l’erreur est supérieure au seuil souhaité (1 % par exemple), nous calculons la nouvelle abscisse :
  
-Ainsi de suite jusqu’avoir une erreur en dessous du seuil souhaité. +$$ t" = t + (t-t') \cdot \frac{\textrm{distance_désirée}}{\textrm{distance_obtenue}}$$ 
-Pour plus d’information, l’article de Wikipédia (https://fr.wikipedia.org/wiki/Courbe_de_B%C3%A9zierpermet de s’initier tandis que « A Primer on Bézier Curves » (https://pomax.github.io/bezierinfo/(en anglais) offre une étude approfondie de ces courbes. + 
-La rotation+Ainsi de suite jusqu’à avoir une erreur en dessous du seuil souhaité. 
 + 
 +Pour plus d’information, l’article de [[https://fr.wikipedia.org/wiki/Courbe_de_B%C3%A9zier | Wikipédia]] permet de s’initier tandis que « [[https://pomax.github.io/bezierinfo/|A Primer on Bézier Curves]] »  (en anglais) offre une étude approfondie de ces courbes. 
 + 
 +==== La rotation ==== 
 Malgré les trajectoires précédentes vous aurez probablement besoin d’effectuer une rotation sans déplacer le PAMI, un changement d’orientation… Malgré les trajectoires précédentes vous aurez probablement besoin d’effectuer une rotation sans déplacer le PAMI, un changement d’orientation…
-#IMG Rotation+ 
 +{{ :fr:informatics:trajectoire_rotation.png?400 |}} 
 Votre trajectoire se définit par un angle de départ et un angle d’arrivé. Votre trajectoire se définit par un angle de départ et un angle d’arrivé.
 +
 Là, vous avez le choix. Soit vous raisonnez en angle, votre longueur à parcourir sera un angle, votre vitesse, une vitesse angulaire et votre accélération, une accélération angulaire. Les calculs du module « Trajet » seront toujours valables, mais, si comme nous, vous précisez l’unité dans les noms de variables, vous aurez des écarts du type :  Là, vous avez le choix. Soit vous raisonnez en angle, votre longueur à parcourir sera un angle, votre vitesse, une vitesse angulaire et votre accélération, une accélération angulaire. Les calculs du module « Trajet » seront toujours valables, mais, si comme nous, vous précisez l’unité dans les noms de variables, vous aurez des écarts du type : 
-distance_mm = 3 ; // radians + 
-Soit vous raisonnez en distance en considérant que la longueur à parcourir est celle que doit parcourir une roue. Cette approche à l’avantage de rester cohérent au niveau des unités. C’est celle-ci que nous choisirons. +  distance_mm = 3 ; // radians 
-La longueur se calcule avec :+ 
 +Soit vous raisonnez en distance en considérant que la longueur à parcourir est celle que doit parcourir l'une des roues. Cette approche à l’avantage de rester cohérent au niveau des unités. C’est celle-ci que nous choisirons. 
 + 
 +La longueur se calcule avec : $Longueur=\lvert \textrm{angle_fin} - \textrm{angle_debut} \rvert \cdot \textrm{distance_roue_centre}$ 
 La position à partir de l’abscisse curviligne s’obtient avec : La position à partir de l’abscisse curviligne s’obtient avec :
  
-L’abscisse permettant de parcourir la distance désirée s’obtient : +$$P(t) = \textrm{orientation_début} \cdot (1-t) + \textrm{orientation_fin} \cdot t$$ 
-Structure du code + 
-Données+L’abscisse permettant de parcourir la distance désirée s’obtient : $t' = t + \frac{distance}{longueur}$ 
 +=====Structure du code===== 
 +==== Données ====
 Pour que toutes les trajectoires soient compatibles, elles doivent toute se servir des mêmes structures de données. En interface entre les modules, nous avons deux principales structures de données : Pour que toutes les trajectoires soient compatibles, elles doivent toute se servir des mêmes structures de données. En interface entre les modules, nous avons deux principales structures de données :
-    • Celle qui contient les informations de la trajectoire +  * Celle qui contient les informations de la trajectoire 
-    • Celle qui contient les informations de la consigne de position+  Celle qui contient les informations de la consigne de position 
 +  * 
 Si vous implémentez la rotation pure, votre fonction renvoie une orientation au lieu d’un couple (X, Y). Soit vous renvoyez un point orienté (X, Y, orientation) pour toutes vos trajectoires. Soit vous renvoyer un point (X, Y) et stockez la consigne d’orientation dans X… Nous préférons la première solution. Si vous implémentez la rotation pure, votre fonction renvoie une orientation au lieu d’un couple (X, Y). Soit vous renvoyez un point orienté (X, Y, orientation) pour toutes vos trajectoires. Soit vous renvoyer un point (X, Y) et stockez la consigne d’orientation dans X… Nous préférons la première solution.
-Module Trajet+==== Module Trajet ==== 
 À l’initialisation, celui-ci reçoit et stocke une structure qui contient les données de la trajectoire. C’est cette structure qui sera passée en argument à chaque fonction Trajectoire. À l’initialisation, celui-ci reçoit et stocke une structure qui contient les données de la trajectoire. C’est cette structure qui sera passée en argument à chaque fonction Trajectoire.
-Module Trajectoire+==== Module Trajectoire ==== 
 Toutes les fonctions prennent comme argument une structure de données contenant les informations de la trajectoire. Nommons cette structure trajectoire_t. Toutes les fonctions prennent comme argument une structure de données contenant les informations de la trajectoire. Nommons cette structure trajectoire_t.
 Elle est composée des champs suivants : Elle est composée des champs suivants :
-type_de_trajectoire (enum type_de_trajectoire_t) : trajectoire_droite, trajectoire_arc_de_cercle, trajectoire_bezier, trajectoire_rotation_pure + 
-P1, P2, P3, P4 (struct point_t) : les points de la trajectoire – tous ne sont pas utiles pour tous les types de trajectoire.  +  * type_de_trajectoire (enum type_de_trajectoire_t) : trajectoire_droite, trajectoire_arc_de_cercle, trajectoire_bezier, trajectoire_rotation_pure 
-angle_debut, angle_fin (float) : contiennent les angles de début et de fin pour la trajectoire en arc de cercle ou la rotation +  P1, P2, P3, P4 (struct point_t) : les points de la trajectoire – tous ne sont pas utiles pour tous les types de trajectoire.  
-longueur (float):initialement à -1, elle n’est calculée qu’une fois afin d’économiser des cycles de calcul +  angle_debut, angle_fin (float) : contiennent les angles de début et de fin pour la trajectoire en arc de cercle ou la rotation 
-Rayon (float) : uniquement pour l’arc de cercle+  longueur (float):initialement à -1, elle n’est calculée qu’une fois afin d’économiser des cycles de calcul 
 +  Rayon (float) : uniquement pour l’arc de cercle 
 La structure point_t contient x_mm et y_mm, les coordonnées du point. La structure point_t contient x_mm et y_mm, les coordonnées du point.
 +
 Le module trajectoire contient aussi les fonctions pour initialiser n’importe quelle trajectoire. L’initialisation d’une trajectoire consiste à stocker les données au bon endroit dans la structure. Par exemple, pour une ligne droite, nous allons stocker le point de début et celui de fin, dans les points P1 et P2. C’est notre convention arbitraire, comme cela aurait pu être P1 et P4. Le module trajectoire contient aussi les fonctions pour initialiser n’importe quelle trajectoire. L’initialisation d’une trajectoire consiste à stocker les données au bon endroit dans la structure. Par exemple, pour une ligne droite, nous allons stocker le point de début et celui de fin, dans les points P1 et P2. C’est notre convention arbitraire, comme cela aurait pu être P1 et P4.
 +
 Les fonctions « trajectoire_get_longueur », « trajectoire_get_position » et « trajectoire_avance » sont des fonctions aiguillages qui, dépendant du type de trajectoire, vont appeler la fonction définie pour le type de trajectoire en question, que nous stockons dans un fichier séparé. Les fonctions « trajectoire_get_longueur », « trajectoire_get_position » et « trajectoire_avance » sont des fonctions aiguillages qui, dépendant du type de trajectoire, vont appeler la fonction définie pour le type de trajectoire en question, que nous stockons dans un fichier séparé.
 +
 Nous obtenons ainsi autant de sous-modules (couple de fichier .c et .h) que de types de trajectoire, chacun implémentant ces trois fonctions. Nous obtenons ainsi autant de sous-modules (couple de fichier .c et .h) que de types de trajectoire, chacun implémentant ces trois fonctions.
-Code de démonstration+===== Code de démonstration ===== 
 Créez un code de démonstration par type de trajectoire avec les paramètres donnés ci-dessous. Le PAMI part de (0,0) avec une orientation à 0° (selon le vecteur X du repère). Créez un code de démonstration par type de trajectoire avec les paramètres donnés ci-dessous. Le PAMI part de (0,0) avec une orientation à 0° (selon le vecteur X du repère).
-Ligne droite +==== Ligne droite ==== 
-    • Vitesse : 300 mm/s + 
-    • Accélération : 600 mm/s² +  Vitesse : 300 mm/s 
-    • Départ : (0,0) +  Accélération : 600 mm/s² 
-    • Arrivée : X= 500 mm, Y = 0  +  Départ : (0,0) 
-Arc de cercle +  Arrivée : X= 500 mm, Y = 0  
-    • Vitesse : 200 mm/s +==== Arc de cercle ==== 
-    • Accélération : 400 mm/s² + 
-    • Centre : X = 0, Y = 200 +  Vitesse : 200 mm/s 
-    • Angle de début : -π/2 +  Accélération : 400 mm/s² 
-    • Angle de fin : π/2 +  Centre : X = 0, Y = 200 
-    • Rayon : 200 mm +  Angle de début : -π/2 
-Rotation pure +  Angle de fin : π/2 
-    • Vitesse : 200 mm/s +  Rayon : 200 mm 
-    • Accélération : 400 mm/s² +==== Rotation pure ==== 
-    • Centre : X = 0, Y = 0 + 
-    • Angle début : 0 +  Vitesse : 200 mm/s 
-    • Angle fin : π +  Accélération : 400 mm/s² 
-Courbe de Bézier +  Centre : X = 0, Y = 0 
-    • Vitesse : 200 mm/s +  Angle début : 0 
-    • Accélération : 600 mm/s² +  Angle fin : π 
-    • P1 : (0, 0) +==== Courbe de Bézier ==== 
-    • P2 : (280, 0) + 
-    • P3 : (390, 530) +  Vitesse : 200 mm/s 
-    • P4 : (475, 0)+  Accélération : 600 mm/s² 
 +  P1 : (0, 0) 
 +  P2 : (280, 0) 
 +  P3 : (390, 530) 
 +  P4 : (475, 0)
 # Insérer une image de la coube + vidéo des trajectoires # Insérer une image de la coube + vidéo des trajectoires