Différences
Ci-dessous, les différences entre deux révisions de la page.
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 | + | {{ : |
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 | + | {{ : |
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 | + | {{ : |
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, | + | |
- | La rotation | + | Ainsi de suite jusqu’à avoir une erreur en dessous du seuil souhaité. |
+ | |||
+ | Pour plus d’information, | ||
+ | |||
+ | ==== 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 | + | |
+ | {{ : | ||
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, | 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, | ||
- | 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. | + | |
- | La longueur se calcule avec : | + | |
+ | Soit vous raisonnez en distance en considérant que la longueur à parcourir est celle que doit parcourir | ||
+ | |||
+ | La longueur se calcule avec : | ||
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 : |
+ | =====Structure du code===== | ||
+ | ==== Données | ||
Pour que toutes les trajectoires soient compatibles, | Pour que toutes les trajectoires soient compatibles, | ||
- | • Celle qui contient les informations de la trajectoire | + | * Celle qui contient les informations de la trajectoire |
- | | + | |
+ | * | ||
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, | À l’initialisation, | ||
- | 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) : | + | |
- | 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) : |
- | angle_debut, | + | |
- | longueur (float): | + | |
- | 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 », | Les fonctions « trajectoire_get_longueur », | ||
+ | |||
Nous obtenons ainsi autant de sous-modules (couple de fichier .c et .h) que de types de trajectoire, | Nous obtenons ainsi autant de sous-modules (couple de fichier .c et .h) que de types de trajectoire, | ||
- | 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 |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | Arc de cercle | + | |
- | | + | ==== Arc de cercle |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | Rotation pure | + | |
- | | + | |
- | | + | ==== Rotation pure ==== |
- | | + | |
- | | + | |
- | | + | |
- | Courbe de Bézier | + | |
- | | + | |
- | | + | |
- | | + | ==== Courbe de Bézier |
- | | + | |
- | | + | |
- | | + | |
+ | | ||
+ | | ||
+ | | ||
+ | | ||
# Insérer une image de la coube + vidéo des trajectoires | # Insérer une image de la coube + vidéo des trajectoires |