Ajout de la "trajectoire" rotation pure + intégration des consigne d'orientation au début et à la fin des trajectoires dans les foncitons trajectoires

This commit is contained in:
Samuel 2023-03-03 16:37:36 +01:00
parent e667d33c4c
commit 5f108d3537
11 changed files with 277 additions and 117 deletions

View File

@ -28,6 +28,7 @@ Trajectoire.c
Trajectoire_bezier.c Trajectoire_bezier.c
Trajectoire_circulaire.c Trajectoire_circulaire.c
Trajectoire_droite.c Trajectoire_droite.c
Trajectoire_rotation.c
Servomoteur.c Servomoteur.c
spi_nb.c) spi_nb.c)

View File

@ -58,7 +58,7 @@ Asservissement en position
Gestion des trajets Gestion des trajets
------------------- -------------------
Cette fonction permet de parcourir une trajectoire en tenant compte des contraintes de vitesse. Cette fonction permet de parcourir une trajectoire en tenant compte des contraintes de vitesse. Elle calcule la vitesse désirée et l'avancement désiré du robot sur la trajectoire (en millimètre). Elle délègue ensuite aux fonctions des trajectoires le calcul du point consigne qui sera envoyé à l'asservissement en position.
1. Calcul de la vitesse 1. Calcul de la vitesse
- Prise en compte de l'accélération maximale - Prise en compte de l'accélération maximale
- Prise en compte de la décélération pour s'arrêter. Voir [cet article](http://poivron-robotique.fr/Consigne-de-vitesse.html). - Prise en compte de la décélération pour s'arrêter. Voir [cet article](http://poivron-robotique.fr/Consigne-de-vitesse.html).

38
Test.c
View File

@ -261,7 +261,7 @@ int test_i2c_lecture_pico_annex_nb(){
time_i2c[0] = time_us_32(); time_i2c[0] = time_us_32();
// On charge l'adresse de l'escalve // On charge l'adresse de l'esclave
i2c0->hw->enable = 0; i2c0->hw->enable = 0;
i2c0->hw->tar = adresse; i2c0->hw->tar = adresse;
i2c0->hw->enable = 1; i2c0->hw->enable = 1;
@ -400,7 +400,6 @@ int test_i2c_bus(){
ret = PICO_ERROR_GENERIC; ret = PICO_ERROR_GENERIC;
else else
ret = i2c_read_blocking(i2c_default, addr, &rxdata, 1, false); ret = i2c_read_blocking(i2c_default, addr, &rxdata, 1, false);
//ret = i2c_write_blocking(i2c_default, addr, &rxdata, 1, false);
printf(ret < 0 ? "." : "@"); printf(ret < 0 ? "." : "@");
printf(addr % 16 == 15 ? "\n" : " "); printf(addr % 16 == 15 ? "\n" : " ");
@ -468,7 +467,9 @@ int test_aller_retour(){
printf("B - Bezier\n"); printf("B - Bezier\n");
printf("C - Circulaire\n"); printf("C - Circulaire\n");
printf("D - Droite\n"); printf("D - Droite\n");
printf("E - Avance et tourne\n"); printf("E - Avance et tourne (ok)\n");
printf("F - Avance et tourne (Nok)\n");
printf("R - Rotation pure\n");
do{ do{
lettre = getchar_timeout_us(TEST_TIMEOUT_US); lettre = getchar_timeout_us(TEST_TIMEOUT_US);
stdio_flush(); stdio_flush();
@ -476,25 +477,42 @@ int test_aller_retour(){
switch(lettre){ switch(lettre){
case 'b': case 'b':
case 'B': case 'B':
Trajectoire_bezier(&trajectoire, 0, 0, -200., 450, 250, 450, 0, 0); Trajet_config(TRAJECT_CONFIG_AVANCE_DROIT);
Trajectoire_bezier(&trajectoire, 0, 0, -200., 450, 250, 450, 0, 0, 0, 0);
printf("Trajectoire de Bézier\n"); printf("Trajectoire de Bézier\n");
break; break;
case 'c': case 'c':
case 'C': case 'C':
Trajectoire_circulaire(&trajectoire, 0, 700, -90, 90, 350); Trajet_config(TRAJECT_CONFIG_AVANCE_DROIT);
Trajectoire_circulaire(&trajectoire, 0, 700, -90, 90, 350, 0, 0);
printf("Trajectoire circulaire\n"); printf("Trajectoire circulaire\n");
break; break;
case 'd': case 'd':
case 'D': case 'D':
Trajectoire_droite(&trajectoire, 0, 0, 0, 700); Trajectoire_droite(&trajectoire, 0, 0, 0, 700, 0, 0);
Trajet_config(TRAJECT_CONFIG_AVANCE_DROIT);
printf("Trajectoire droite\n"); printf("Trajectoire droite\n");
break; break;
case 'e': case 'e':
case 'E': case 'E':
Trajectoire_droite(&trajectoire, 0, 0, 0, 700); Trajet_config(TRAJECT_CONFIG_AVANCE_ET_TOURNE);
Trajectoire_droite(&trajectoire, 0, 0, 0, 700, 0, M_PI);
printf("Trajectoire droite avec rotation (OK)\n");
break;
case 'f':
case 'F':
Trajet_config(TRAJECT_CONFIG_AVANCE_DROIT);
Trajectoire_droite(&trajectoire, 0, 0, 0, 700, 0, M_PI);
printf("Trajectoire droite avec rotation (Nok)\n");
break;
case 'r':
case 'R':
Trajectoire_rotation(&trajectoire, 0, 0, 0, 700);
trajectoire.orientation_debut_rad = 0; trajectoire.orientation_debut_rad = 0;
trajectoire.orientation_fin_rad = M_PI; trajectoire.orientation_fin_rad = M_PI;
printf("Trajectoire droite avec rotation\n"); printf("Trajectoire droite avec rotation\n");
@ -560,19 +578,19 @@ int test_trajectoire(){
switch(lettre){ switch(lettre){
case 'b': case 'b':
case 'B': case 'B':
Trajectoire_bezier(&trajectoire, 0, 0, -200., 450, 250, 450, 0, 0); Trajectoire_bezier(&trajectoire, 0, 0, -200., 450, 250, 450, 0, 0, 0, 0);
printf("Trajectoire Bezier\n"); printf("Trajectoire Bezier\n");
break; break;
case 'c': case 'c':
case 'C': case 'C':
Trajectoire_circulaire(&trajectoire, 0, 250, -90, 90, 250); Trajectoire_circulaire(&trajectoire, 0, 250, -90, 90, 250, 0, 0);
printf("Trajectoire circulaire\n"); printf("Trajectoire circulaire\n");
break; break;
case 'd': case 'd':
case 'D': case 'D':
Trajectoire_droite(&trajectoire, 0, 0, 0, 700); Trajectoire_droite(&trajectoire, 0, 0, 0, 700, 0, 0);
printf("Trajectoire droite\n"); printf("Trajectoire droite\n");
break; break;

View File

@ -2,6 +2,7 @@
#include "Trajectoire_bezier.h" #include "Trajectoire_bezier.h"
#include "Trajectoire_circulaire.h" #include "Trajectoire_circulaire.h"
#include "Trajectoire_droite.h" #include "Trajectoire_droite.h"
#include "Trajectoire_rotation.h"
#include "math.h" #include "math.h"
@ -9,7 +10,8 @@
#define PRECISION_ABSCISSE 0.001 #define PRECISION_ABSCISSE 0.001
void Trajectoire_circulaire(struct trajectoire_t * trajectoire, double centre_x, double centre_y, double angle_debut_degre, double angle_fin_degre, double rayon){ void Trajectoire_circulaire(struct trajectoire_t * trajectoire, double centre_x, double centre_y, double angle_debut_degre, double angle_fin_degre, double rayon,
double orientation_debut_rad, double orientation_fin_rad){
trajectoire->type = TRAJECTOIRE_CIRCULAIRE; trajectoire->type = TRAJECTOIRE_CIRCULAIRE;
trajectoire->p1.x = centre_x; trajectoire->p1.x = centre_x;
trajectoire->p1.y = centre_y; trajectoire->p1.y = centre_y;
@ -17,22 +19,24 @@ void Trajectoire_circulaire(struct trajectoire_t * trajectoire, double centre_x,
trajectoire->angle_fin_degre = angle_fin_degre; trajectoire->angle_fin_degre = angle_fin_degre;
trajectoire->rayon = rayon; trajectoire->rayon = rayon;
trajectoire->longueur = -1; trajectoire->longueur = -1;
trajectoire->orientation_debut_rad = 0; trajectoire->orientation_debut_rad = orientation_debut_rad;
trajectoire->orientation_fin_rad = 0; trajectoire->orientation_fin_rad = orientation_fin_rad;
} }
void Trajectoire_droite(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_y){ void Trajectoire_droite(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_y,
double orientation_debut_rad, double orientation_fin_rad){
trajectoire->type = TRAJECTOIRE_DROITE; trajectoire->type = TRAJECTOIRE_DROITE;
trajectoire->p1.x = p1_x; trajectoire->p1.x = p1_x;
trajectoire->p1.y = p1_y; trajectoire->p1.y = p1_y;
trajectoire->p2.x = p2_x; trajectoire->p2.x = p2_x;
trajectoire->p2.y = p2_y; trajectoire->p2.y = p2_y;
trajectoire->longueur = -1; trajectoire->longueur = -1;
trajectoire->orientation_debut_rad = 0; trajectoire->orientation_debut_rad = orientation_debut_rad;
trajectoire->orientation_fin_rad = 0; trajectoire->orientation_fin_rad = orientation_fin_rad;
} }
void Trajectoire_bezier(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_y, double p3_x, double p3_y, double p4_x, double p4_y){ void Trajectoire_bezier(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_y, double p3_x, double p3_y, double p4_x, double p4_y,
double orientation_debut_rad, double orientation_fin_rad){
trajectoire->type = TRAJECTOIRE_BEZIER; trajectoire->type = TRAJECTOIRE_BEZIER;
trajectoire->p1.x = p1_x; trajectoire->p1.x = p1_x;
trajectoire->p1.y = p1_y; trajectoire->p1.y = p1_y;
@ -43,8 +47,17 @@ void Trajectoire_bezier(struct trajectoire_t * trajectoire, double p1_x, double
trajectoire->p4.x = p4_x; trajectoire->p4.x = p4_x;
trajectoire->p4.y = p4_y; trajectoire->p4.y = p4_y;
trajectoire->longueur = -1; trajectoire->longueur = -1;
trajectoire->orientation_debut_rad = 0; trajectoire->orientation_debut_rad = orientation_debut_rad;
trajectoire->orientation_fin_rad = 0; trajectoire->orientation_fin_rad = orientation_fin_rad;
}
void Trajectoire_rotation(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double orientation_debut_rad, double orientation_fin_rad){
trajectoire->type = TRAJECTOIRE_ROTATION;
trajectoire->p1.x = p1_x;
trajectoire->p1.y = p1_y;
trajectoire->longueur = -1;
trajectoire->orientation_debut_rad = orientation_debut_rad;
trajectoire->orientation_fin_rad = orientation_fin_rad;
} }
void Trajectoire_inverse(struct trajectoire_t * trajectoire){ void Trajectoire_inverse(struct trajectoire_t * trajectoire){
@ -119,6 +132,11 @@ struct point_xyo_t Trajectoire_get_point(struct trajectoire_t * trajectoire, dou
point_xyo.point_xy = Trajectoire_bezier_get_point(trajectoire, abscisse); point_xyo.point_xy = Trajectoire_bezier_get_point(trajectoire, abscisse);
point_xyo.orientation = Trajectoire_get_orientation_rad(trajectoire, abscisse); point_xyo.orientation = Trajectoire_get_orientation_rad(trajectoire, abscisse);
break; break;
case TRAJECTOIRE_ROTATION:
point_xyo.point_xy = Trajectoire_rotation_get_point(trajectoire, abscisse);
point_xyo.orientation = Trajectoire_get_orientation_rad(trajectoire, abscisse);
break;
} }
return point_xyo; return point_xyo;
} }
@ -137,8 +155,12 @@ double Trajectoire_avance(struct trajectoire_t * trajectoire, double abscisse, d
if(distance_mm == 0){ if(distance_mm == 0){
return abscisse; return abscisse;
} }
// Ceci permet d'avoir une abscisse exact sur les trajectoires droites et les trajectoires circulaires // Ceci permet d'avoir une abscisse exact sur les trajectoires droites, les trajectoires circulaires et les rotations
delta_abscisse = distance_mm / Trajectoire_get_longueur_mm(trajectoire); delta_abscisse = distance_mm / Trajectoire_get_longueur_mm(trajectoire);
if(trajectoire->type == TRAJECTOIRE_ROTATION || trajectoire->type == TRAJECTOIRE_CIRCULAIRE || trajectoire->type == TRAJECTOIRE_DROITE){
return abscisse + delta_abscisse;
}
delta_mm = distance_points(Trajectoire_get_point(trajectoire, abscisse).point_xy, Trajectoire_get_point(trajectoire, abscisse + delta_abscisse).point_xy ); delta_mm = distance_points(Trajectoire_get_point(trajectoire, abscisse).point_xy, Trajectoire_get_point(trajectoire, abscisse + delta_abscisse).point_xy );
// Sur les trajectoires de bézier, il peut être nécessaire d'affiner // Sur les trajectoires de bézier, il peut être nécessaire d'affiner

View File

@ -4,7 +4,8 @@
enum trajectoire_type_t{ enum trajectoire_type_t{
TRAJECTOIRE_DROITE, TRAJECTOIRE_DROITE,
TRAJECTOIRE_CIRCULAIRE, TRAJECTOIRE_CIRCULAIRE,
TRAJECTOIRE_BEZIER TRAJECTOIRE_BEZIER,
TRAJECTOIRE_ROTATION,
}; };
struct point_xy_t{ struct point_xy_t{
@ -29,9 +30,12 @@ struct point_xyo_t Trajectoire_get_point(struct trajectoire_t * trajectoire, dou
double Trajectoire_get_orientation_rad(struct trajectoire_t * trajectoire, double abscisse); double Trajectoire_get_orientation_rad(struct trajectoire_t * trajectoire, double abscisse);
double Trajectoire_avance(struct trajectoire_t * trajectoire, double abscisse, double distance_mm); double Trajectoire_avance(struct trajectoire_t * trajectoire, double abscisse, double distance_mm);
double distance_points(struct point_xy_t point, struct point_xy_t point_old); double distance_points(struct point_xy_t point, struct point_xy_t point_old);
void Trajectoire_circulaire(struct trajectoire_t * trajectoire, double centre_x, double centre_y, double angle_debut_degre, double angle_fin_degre, double rayon); void Trajectoire_circulaire(struct trajectoire_t * trajectoire, double centre_x, double centre_y, double angle_debut_degre, double angle_fin_degre,
void Trajectoire_droite(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_y); double rayon, double orientation_debut_rad, double orientation_fin_rad);
void Trajectoire_bezier(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_y, double p3_x, double p3_y, double p4_x, double p4_y); void Trajectoire_droite(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_y, double orientation_debut_rad, double orientation_fin_rad);
void Trajectoire_bezier(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_y, double p3_x, double p3_y, double p4_x, double p4_y,
double orientation_debut_rad, double orientation_fin_rad);
void Trajectoire_rotation(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double orientation_debut_rad, double orientation_fin_rad);
void Trajectoire_inverse(struct trajectoire_t * trajectoire); void Trajectoire_inverse(struct trajectoire_t * trajectoire);
#endif #endif

16
Trajectoire_rotation.c Normal file
View File

@ -0,0 +1,16 @@
#include "Trajectoire_rotation.h"
// ATTENTION, alors que toutes les autres trajectoires se déplacent
// en distance en mètre avec une vitesse en mètres/seconde, ici, il s'agit de radian et de radian/seconde.
void Trajectoire_rotation_get_longueur(struct trajectoire_t * trajectoire){
trajectoire->longueur = trajectoire->orientation_fin_rad - trajectoire->orientation_debut_rad;
if(trajectoire->longueur < 0){
trajectoire->longueur = -trajectoire->longueur;
}
}
// Le robot reste sur place
struct point_xy_t Trajectoire_rotation_get_point(struct trajectoire_t * trajectoire, double abscisse){
return trajectoire->p1;
}

4
Trajectoire_rotation.h Normal file
View File

@ -0,0 +1,4 @@
#include "Trajectoire.h"
void Trajectoire_rotation_get_longueur(struct trajectoire_t * trajectoire);
struct point_xy_t Trajectoire_rotation_get_point(struct trajectoire_t * trajectoire, double abscisse);

View File

@ -9,7 +9,7 @@ double Trajet_calcul_vitesse(double temps_s);
double abscisse; // Position entre 0 et 1 sur la trajectoire double abscisse; // Position entre 0 et 1 sur la trajectoire
double position_mm; // Position en mm sur la trajectoire double position_mm; // Position en mm sur la trajectoire
double vitesse_mm_s; double vitesse_mm_s;
double vitesse_max_trajet_mm_s=1000; double vitesse_max_trajet_mm_s=500;
double acceleration_mm_ss; double acceleration_mm_ss;
struct trajectoire_t trajet_trajectoire; struct trajectoire_t trajet_trajectoire;
struct position_t position_consigne; struct position_t position_consigne;

View File

@ -5,6 +5,13 @@ enum trajet_etat_t{
TRAJET_TERMINE TRAJET_TERMINE
}; };
// Vitesse et acceleration pour translation pure (en mm/s et mm/s²)
#define TRAJECT_CONFIG_AVANCE_DROIT 1000, 500
// Vitesse et acceleration pour un mouvement complexe (en mm et mm/s²)
#define TRAJECT_CONFIG_AVANCE_ET_TOURNE 300, 500
// Vitesse et acceleration pour une rotation (rad/s et rad/s²)
#define TRAJECT_CONFIG_ROTATION_PURE 2, 2
void Trajet_init(); void Trajet_init();
void Trajet_config(double _vitesse_max_trajet_mm_s, double _acceleration_mm_ss); void Trajet_config(double _vitesse_max_trajet_mm_s, double _acceleration_mm_ss);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

After

Width:  |  Height:  |  Size: 256 KiB

View File

@ -7,9 +7,9 @@
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1163.9067mm" width="1173.7749mm"
height="339.91183mm" height="338.62747mm"
viewBox="0 0 1163.9067 339.91183" viewBox="0 0 1173.7749 338.62747"
version="1.1" version="1.1"
id="svg5" id="svg5"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)" inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
@ -39,9 +39,9 @@
inkscape:pagecheckerboard="0" inkscape:pagecheckerboard="0"
inkscape:document-units="mm" inkscape:document-units="mm"
showgrid="false" showgrid="false"
inkscape:zoom="0.54838704" inkscape:zoom="0.32793568"
inkscape:cx="3048.8334" inkscape:cx="1221.6943"
inkscape:cy="1048.0463" inkscape:cy="150.91722"
inkscape:window-width="1920" inkscape:window-width="1920"
inkscape:window-height="1016" inkscape:window-height="1016"
inkscape:window-x="0" inkscape:window-x="0"
@ -55,12 +55,68 @@
inkscape:snap-nodes="false" inkscape:snap-nodes="false"
inkscape:snap-others="false"> inkscape:snap-others="false">
<sodipodi:guide <sodipodi:guide
position="1098.4647,155.13162" position="1108.3329,155.13163"
orientation="1,0" orientation="1,0"
id="guide3153" /> id="guide3153" />
</sodipodi:namedview> </sodipodi:namedview>
<defs <defs
id="defs2"> id="defs2">
<marker
style="overflow:visible"
id="marker2001"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1999" />
</marker>
<marker
style="overflow:visible"
id="marker1736"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1734" />
</marker>
<marker
style="overflow:visible"
id="marker1221"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1219" />
</marker>
<marker
style="overflow:visible"
id="marker1211"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1209" />
</marker>
<marker <marker
style="overflow:visible" style="overflow:visible"
id="marker3980" id="marker3980"
@ -259,7 +315,8 @@
refY="0" refY="0"
orient="auto" orient="auto"
inkscape:stockid="Arrow1Mend" inkscape:stockid="Arrow1Mend"
inkscape:isstock="true"> inkscape:isstock="true"
inkscape:collect="always">
<path <path
transform="matrix(-0.4,0,0,-0.4,-4,0)" transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
@ -295,21 +352,6 @@
d="M 0,0 5,-5 -12.5,0 5,5 Z" d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1425" /> id="path1425" />
</marker> </marker>
<marker
style="overflow:visible"
id="marker1417"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true"
inkscape:collect="always">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path1415" />
</marker>
<marker <marker
style="overflow:visible" style="overflow:visible"
id="marker1325" id="marker1325"
@ -389,7 +431,7 @@
inkscape:label="Calque 1" inkscape:label="Calque 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1" id="layer1"
transform="translate(419.9942,85.209211)"> transform="translate(429.86237,83.924844)">
<g <g
id="g1125" id="g1125"
transform="translate(73.433542)"> transform="translate(73.433542)">
@ -572,31 +614,6 @@
y="30.357273" y="30.357273"
rx="4.640729" rx="4.640729"
ry="4.640729" /> ry="4.640729" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="-413.33109"
y="-27.002911"
id="text865"><tspan
sodipodi:role="line"
id="tspan863"
style="stroke-width:0.264583"
x="-413.33109"
y="-27.002911">Trajectoire</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.264583"
x="-413.33109"
y="-16.419611"
id="tspan881">droite</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round"
id="rect867"
width="101.60324"
height="35.545925"
x="-418.9942"
y="-37.155365"
rx="4.640729"
ry="4.640729" />
<path <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
d="m -329.69534,74.484131 13.40343,-14.609079" d="m -329.69534,74.484131 13.40343,-14.609079"
@ -609,42 +626,24 @@
sodipodi:nodetypes="cc" /> sodipodi:nodetypes="cc" />
<path <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1269)" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1269)"
d="M -285.15724,29.31563 V -45.526719" d="M -260.81542,29.31563 V -45.526719"
id="path1265" id="path1265"
sodipodi:nodetypes="cc" /> sodipodi:nodetypes="cc" />
<path <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1325)" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1325)"
d="M -278.94723,-47.4974 V 27.344949" d="M -254.60541,-47.4974 V 27.344949"
id="path1321" id="path1321"
sodipodi:nodetypes="cc" /> sodipodi:nodetypes="cc" />
<g <path
id="g1541" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1427)"
transform="translate(-263.18584)"> d="m -298.54584,30.767142 -9.47941,-69.597164"
<path id="path1411"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1427)" sodipodi:nodetypes="cc" />
d="M -49.929084,29.826385 -80.746446,0.2189067" <path
id="path1411" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1585)"
sodipodi:nodetypes="cc" /> d="M -199.60446,8.5812099 -246.46564,28.576767"
<path id="path1569"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1417)" sodipodi:nodetypes="cc" />
d="M -74.771376,-1.0799154 -44.671437,28.677714"
id="path1413"
sodipodi:nodetypes="cc" />
</g>
<g
id="g1571"
transform="matrix(-1,0,0,1,-305.09936,-0.20775309)">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1575)"
d="M -49.929084,29.826385 -80.746446,0.2189067"
id="path1567"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1585)"
d="M -88.733659,-1.0799154 -58.63372,28.677714"
id="path1569"
sodipodi:nodetypes="cc" />
</g>
<text <text
xml:space="preserve" xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.8068px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.638136px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.8068px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.638136px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
@ -972,7 +971,7 @@
id="tspan2799">Trame SPI</tspan></text> id="tspan2799">Trame SPI</tspan></text>
<path <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2977)" style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2977)"
d="m 182.2974,188.90282 -246.49723,0 v -74.69875" d="M 182.2974,188.90282 H -64.19983 v -74.69875"
id="path2967" id="path2967"
sodipodi:nodetypes="ccc" /> sodipodi:nodetypes="ccc" />
<text <text
@ -1002,20 +1001,49 @@
x="-250.08659" x="-250.08659"
y="55.114014" y="55.114014"
style="fill:#ff0000;stroke-width:0.638136px">Trajectoire.c</tspan></text> style="fill:#ff0000;stroke-width:0.638136px">Trajectoire.c</tspan></text>
<text <g
xml:space="preserve" id="g1167"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.8068px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.638136px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" transform="translate(17.742742,-38.662131)">
x="-354.55753" <text
y="-5.5514426" xml:space="preserve"
id="text3115"><tspan style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
sodipodi:role="line" x="-413.33109"
id="tspan3113" y="-27.002911"
id="text865"><tspan
sodipodi:role="line"
id="tspan863"
style="stroke-width:0.264583"
x="-413.33109"
y="-27.002911">Trajectoire</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.264583"
x="-413.33109"
y="-16.419611"
id="tspan881">droite</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round"
id="rect867"
width="101.60324"
height="35.545925"
x="-418.9942"
y="-37.155365"
rx="4.640729"
ry="4.640729" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.8068px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.638136px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-354.55753" x="-354.55753"
y="-5.5514426" y="-5.5514426"
style="fill:#ff0000;stroke-width:0.638136px">Trajectoire_droite.c</tspan></text> id="text3115"><tspan
sodipodi:role="line"
id="tspan3113"
x="-354.55753"
y="-5.5514426"
style="fill:#ff0000;stroke-width:0.638136px">Trajectoire_droite.c</tspan></text>
</g>
<g <g
id="g3137" id="g3137"
transform="translate(-263.18584,2.3067419)"> transform="translate(-190.94094,3.591109)">
<text <text
xml:space="preserve" xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
@ -1055,7 +1083,7 @@
</g> </g>
<g <g
id="g3151" id="g3151"
transform="translate(-180.33557,48.466968)"> transform="translate(-127.43216,61.952822)">
<text <text
xml:space="preserve" xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
@ -1257,5 +1285,65 @@
y="114.73338" y="114.73338"
style="fill:#008000;stroke-width:0.638136px" style="fill:#008000;stroke-width:0.638136px"
id="tspan4111">du robot)</tspan></text> id="tspan4111">du robot)</tspan></text>
<g
id="g1181"
transform="translate(-9.8681703,23.459814)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="-413.33109"
y="-18.018301"
id="text1173"><tspan
sodipodi:role="line"
style="stroke-width:0.264583"
x="-413.33109"
y="-18.018301"
id="tspan1171">Rotation pure</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:round"
id="rect1175"
width="101.60327"
height="27.222868"
x="-418.9942"
y="-28.832308"
rx="4.640729"
ry="4.640729" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.8068px;line-height:125%;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.638136px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-358.79092"
y="-5.5514426"
id="text1179"><tspan
sodipodi:role="line"
id="tspan1177"
x="-358.79092"
y="-5.5514426"
style="fill:#ff0000;stroke-width:0.638136px">Trajectoire_rotation.c</tspan></text>
</g>
<g
id="g1207"
transform="matrix(0.3507944,0,0,0.34507833,-300.45437,19.114151)"
style="stroke-width:2.87419">
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.87419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1211)"
d="M -74.06478,43.627597 -104.88214,14.020121"
id="path1203"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.87419;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1221)"
d="M -74.771376,-1.0799154 -44.671437,28.677714"
id="path1205"
sodipodi:nodetypes="cc" />
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1736)"
d="m -312.2598,-40.715195 9.47941,69.597164"
id="path1732"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2001)"
d="M -239.15636,29.708773 -199.2016,12.566624"
id="path1997"
sodipodi:nodetypes="cc" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 56 KiB