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:
parent
e667d33c4c
commit
5f108d3537
@ -28,6 +28,7 @@ Trajectoire.c
|
||||
Trajectoire_bezier.c
|
||||
Trajectoire_circulaire.c
|
||||
Trajectoire_droite.c
|
||||
Trajectoire_rotation.c
|
||||
Servomoteur.c
|
||||
spi_nb.c)
|
||||
|
||||
|
@ -58,7 +58,7 @@ Asservissement en position
|
||||
|
||||
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
|
||||
- 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).
|
||||
|
38
Test.c
38
Test.c
@ -261,7 +261,7 @@ int test_i2c_lecture_pico_annex_nb(){
|
||||
|
||||
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->tar = adresse;
|
||||
i2c0->hw->enable = 1;
|
||||
@ -400,7 +400,6 @@ int test_i2c_bus(){
|
||||
ret = PICO_ERROR_GENERIC;
|
||||
else
|
||||
ret = i2c_read_blocking(i2c_default, addr, &rxdata, 1, false);
|
||||
//ret = i2c_write_blocking(i2c_default, addr, &rxdata, 1, false);
|
||||
|
||||
printf(ret < 0 ? "." : "@");
|
||||
printf(addr % 16 == 15 ? "\n" : " ");
|
||||
@ -468,7 +467,9 @@ int test_aller_retour(){
|
||||
printf("B - Bezier\n");
|
||||
printf("C - Circulaire\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{
|
||||
lettre = getchar_timeout_us(TEST_TIMEOUT_US);
|
||||
stdio_flush();
|
||||
@ -476,25 +477,42 @@ int test_aller_retour(){
|
||||
switch(lettre){
|
||||
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");
|
||||
break;
|
||||
|
||||
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");
|
||||
break;
|
||||
|
||||
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");
|
||||
break;
|
||||
|
||||
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_fin_rad = M_PI;
|
||||
printf("Trajectoire droite avec rotation\n");
|
||||
@ -560,19 +578,19 @@ int test_trajectoire(){
|
||||
switch(lettre){
|
||||
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");
|
||||
break;
|
||||
|
||||
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");
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
case 'D':
|
||||
Trajectoire_droite(&trajectoire, 0, 0, 0, 700);
|
||||
Trajectoire_droite(&trajectoire, 0, 0, 0, 700, 0, 0);
|
||||
printf("Trajectoire droite\n");
|
||||
break;
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include "Trajectoire_bezier.h"
|
||||
#include "Trajectoire_circulaire.h"
|
||||
#include "Trajectoire_droite.h"
|
||||
#include "Trajectoire_rotation.h"
|
||||
|
||||
#include "math.h"
|
||||
|
||||
@ -9,7 +10,8 @@
|
||||
#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->p1.x = centre_x;
|
||||
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->rayon = rayon;
|
||||
trajectoire->longueur = -1;
|
||||
trajectoire->orientation_debut_rad = 0;
|
||||
trajectoire->orientation_fin_rad = 0;
|
||||
trajectoire->orientation_debut_rad = orientation_debut_rad;
|
||||
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->p1.x = p1_x;
|
||||
trajectoire->p1.y = p1_y;
|
||||
trajectoire->p2.x = p2_x;
|
||||
trajectoire->p2.y = p2_y;
|
||||
trajectoire->longueur = -1;
|
||||
trajectoire->orientation_debut_rad = 0;
|
||||
trajectoire->orientation_fin_rad = 0;
|
||||
trajectoire->orientation_debut_rad = orientation_debut_rad;
|
||||
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->p1.x = p1_x;
|
||||
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.y = p4_y;
|
||||
trajectoire->longueur = -1;
|
||||
trajectoire->orientation_debut_rad = 0;
|
||||
trajectoire->orientation_fin_rad = 0;
|
||||
trajectoire->orientation_debut_rad = orientation_debut_rad;
|
||||
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){
|
||||
@ -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.orientation = Trajectoire_get_orientation_rad(trajectoire, abscisse);
|
||||
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;
|
||||
}
|
||||
@ -137,8 +155,12 @@ double Trajectoire_avance(struct trajectoire_t * trajectoire, double abscisse, d
|
||||
if(distance_mm == 0){
|
||||
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);
|
||||
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 );
|
||||
|
||||
// Sur les trajectoires de bézier, il peut être nécessaire d'affiner
|
||||
|
@ -4,7 +4,8 @@
|
||||
enum trajectoire_type_t{
|
||||
TRAJECTOIRE_DROITE,
|
||||
TRAJECTOIRE_CIRCULAIRE,
|
||||
TRAJECTOIRE_BEZIER
|
||||
TRAJECTOIRE_BEZIER,
|
||||
TRAJECTOIRE_ROTATION,
|
||||
};
|
||||
|
||||
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_avance(struct trajectoire_t * trajectoire, double abscisse, double distance_mm);
|
||||
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_droite(struct trajectoire_t * trajectoire, double p1_x, double p1_y, double p2_x, double p2_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);
|
||||
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);
|
||||
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);
|
||||
|
||||
#endif
|
||||
|
16
Trajectoire_rotation.c
Normal file
16
Trajectoire_rotation.c
Normal 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
4
Trajectoire_rotation.h
Normal 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);
|
2
Trajet.c
2
Trajet.c
@ -9,7 +9,7 @@ double Trajet_calcul_vitesse(double temps_s);
|
||||
double abscisse; // Position entre 0 et 1 sur la trajectoire
|
||||
double position_mm; // Position en mm sur la trajectoire
|
||||
double vitesse_mm_s;
|
||||
double vitesse_max_trajet_mm_s=1000;
|
||||
double vitesse_max_trajet_mm_s=500;
|
||||
double acceleration_mm_ss;
|
||||
struct trajectoire_t trajet_trajectoire;
|
||||
struct position_t position_consigne;
|
||||
|
7
Trajet.h
7
Trajet.h
@ -5,6 +5,13 @@ enum trajet_etat_t{
|
||||
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_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 |
@ -7,9 +7,9 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1163.9067mm"
|
||||
height="339.91183mm"
|
||||
viewBox="0 0 1163.9067 339.91183"
|
||||
width="1173.7749mm"
|
||||
height="338.62747mm"
|
||||
viewBox="0 0 1173.7749 338.62747"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
|
||||
@ -39,9 +39,9 @@
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.54838704"
|
||||
inkscape:cx="3048.8334"
|
||||
inkscape:cy="1048.0463"
|
||||
inkscape:zoom="0.32793568"
|
||||
inkscape:cx="1221.6943"
|
||||
inkscape:cy="150.91722"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1016"
|
||||
inkscape:window-x="0"
|
||||
@ -55,12 +55,68 @@
|
||||
inkscape:snap-nodes="false"
|
||||
inkscape:snap-others="false">
|
||||
<sodipodi:guide
|
||||
position="1098.4647,155.13162"
|
||||
position="1108.3329,155.13163"
|
||||
orientation="1,0"
|
||||
id="guide3153" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
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
|
||||
style="overflow:visible"
|
||||
id="marker3980"
|
||||
@ -259,7 +315,8 @@
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Mend"
|
||||
inkscape:isstock="true">
|
||||
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"
|
||||
@ -295,21 +352,6 @@
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 Z"
|
||||
id="path1425" />
|
||||
</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
|
||||
style="overflow:visible"
|
||||
id="marker1325"
|
||||
@ -389,7 +431,7 @@
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(419.9942,85.209211)">
|
||||
transform="translate(429.86237,83.924844)">
|
||||
<g
|
||||
id="g1125"
|
||||
transform="translate(73.433542)">
|
||||
@ -572,31 +614,6 @@
|
||||
y="30.357273"
|
||||
rx="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
|
||||
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"
|
||||
@ -609,42 +626,24 @@
|
||||
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(#marker1269)"
|
||||
d="M -285.15724,29.31563 V -45.526719"
|
||||
d="M -260.81542,29.31563 V -45.526719"
|
||||
id="path1265"
|
||||
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(#marker1325)"
|
||||
d="M -278.94723,-47.4974 V 27.344949"
|
||||
d="M -254.60541,-47.4974 V 27.344949"
|
||||
id="path1321"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<g
|
||||
id="g1541"
|
||||
transform="translate(-263.18584)">
|
||||
<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(#marker1427)"
|
||||
d="M -49.929084,29.826385 -80.746446,0.2189067"
|
||||
d="m -298.54584,30.767142 -9.47941,-69.597164"
|
||||
id="path1411"
|
||||
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(#marker1417)"
|
||||
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"
|
||||
d="M -199.60446,8.5812099 -246.46564,28.576767"
|
||||
id="path1569"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<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"
|
||||
@ -972,7 +971,7 @@
|
||||
id="tspan2799">Trame SPI</tspan></text>
|
||||
<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)"
|
||||
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"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<text
|
||||
@ -1002,6 +1001,34 @@
|
||||
x="-250.08659"
|
||||
y="55.114014"
|
||||
style="fill:#ff0000;stroke-width:0.638136px">Trajectoire.c</tspan></text>
|
||||
<g
|
||||
id="g1167"
|
||||
transform="translate(17.742742,-38.662131)">
|
||||
<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" />
|
||||
<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"
|
||||
@ -1013,9 +1040,10 @@
|
||||
x="-354.55753"
|
||||
y="-5.5514426"
|
||||
style="fill:#ff0000;stroke-width:0.638136px">Trajectoire_droite.c</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g3137"
|
||||
transform="translate(-263.18584,2.3067419)">
|
||||
transform="translate(-190.94094,3.591109)">
|
||||
<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"
|
||||
@ -1055,7 +1083,7 @@
|
||||
</g>
|
||||
<g
|
||||
id="g3151"
|
||||
transform="translate(-180.33557,48.466968)">
|
||||
transform="translate(-127.43216,61.952822)">
|
||||
<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"
|
||||
@ -1257,5 +1285,65 @@
|
||||
y="114.73338"
|
||||
style="fill:#008000;stroke-width:0.638136px"
|
||||
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>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 56 KiB |
Loading…
Reference in New Issue
Block a user