Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed X_NUCLEO_IHM02A1
Diff: odometrie.cpp
- Revision:
- 4:deef042e9c02
- Parent:
- 3:1dba6eca01ad
diff -r 1dba6eca01ad -r deef042e9c02 odometrie.cpp
--- a/odometrie.cpp Mon May 06 13:48:45 2019 +0000
+++ b/odometrie.cpp Wed May 08 20:46:46 2019 +0000
@@ -4,8 +4,8 @@
#include "reglages.h"
#include "math_precalc.h"
-long int x_actuel;
-long int y_actuel;
+double x_actuel;
+double y_actuel;
double angle; // angle du robot
@@ -68,83 +68,26 @@
angle = borne_angle_r(angle);
- x_actuel = (int) (cx + R * sin(angle) + 0.5);
- y_actuel = (int) (cy - R * cos(angle) + 0.5);
+ x_actuel = cx + R * sin(angle);
+ y_actuel = cy - R * cos(angle);
}
else if (dep_roue_G == dep_roue_D){ // cas où la trajectoire est une parfaite ligne droite
- x_actuel += (int) (dep_roue_G * cos(angle) + 0.5);
- y_actuel += (int) (dep_roue_D * sin(angle) + 0.5);
+ x_actuel +=dep_roue_G * cos(angle);
+ y_actuel +=dep_roue_D * sin(angle);
}
- printf("tick d : %d, tick g : %d, x : %d, y : %d. angle : %lf\n", nbr_tick_D, nbr_tick_G, x_actuel, y_actuel, angle*180/PI);
+ //printf("tick d : %d, tick g : %d, x : %lf, y : %lf. angle : %lf\n", nbr_tick_D, nbr_tick_G, x_actuel, y_actuel, angle*180/PI);
+
}
-void actualise_position_test()
-{
-
- //on suppose les valeurs de vd et vg constantes pendant t, la trajectoire decrite par le robot est alors un cercle
-
-
- //------recuperation de la rotation des roues---------
- long int nbr_tick_D=get_nbr_tick_D();
- long int nbr_tick_G=get_nbr_tick_G();
-
- //calcul du nombre de tick
- long int nbr_tick_D_actuel=nbr_tick_D-nbr_tick_D_prec;
- long int nbr_tick_G_actuel=nbr_tick_G-nbr_tick_G_prec;
-
- //sauvegarde
- nbr_tick_D_prec=nbr_tick_D;
- nbr_tick_G_prec=nbr_tick_G;
-
- double dep_roue_G = nbr_tick_G_actuel * DISTANCE_PAR_TICK_G; // deplacement des roues
- double dep_roue_D = nbr_tick_D_actuel * DISTANCE_PAR_TICK_D;
-
-
- //------calcul de la trajectoire---------
-
- // determination du cercle décrit par la trajectoire et de la vitesse du robot sur ce cercle
- if (dep_roue_G != dep_roue_D){
-
- double R = 0; // rayon du cercle decrit par la trajectoire
- double d = 0; // vitesse du robot
- double cx = 0; // position du centre du cercle decrit par la trajectoire
- double cy = 0;
-
- R = ECART_ROUE / 2 * (dep_roue_D + dep_roue_G) / (dep_roue_D - dep_roue_G); // rayon du cercle
- cx = x_actuel - R * sin(angle);
- cy = y_actuel + R * cos(angle);
- d = (dep_roue_G + dep_roue_D) / 2;
-
- // mise à jour des coordonnées du robot
- if (dep_roue_G + dep_roue_D != 0){
- angle += d / R;
- }
- else{
- angle += dep_roue_D * 2 / ECART_ROUE;
- }
-
- angle = borne_angle_r(angle);
-
- x_actuel = (int) (cx + R * sin(angle) + 0.5);
- y_actuel = (int) (cy - R * cos(angle) + 0.5);
- printf("cx : %lf cy : %lf ",cx + R * sin(angle) + 0.5,cy - R * cos(angle) + 0.5);
- }
- else if (dep_roue_G == dep_roue_D){ // cas où la trajectoire est une parfaite ligne droite
- x_actuel += (int) (dep_roue_G * cos(angle) + 0.5);
- y_actuel += (int) (dep_roue_D * sin(angle) + 0.5);
- }
-
- printf("tick d : %d, tick g : %d, x : %d, y : %d. angle : %lf\n", nbr_tick_D, nbr_tick_G, x_actuel, y_actuel, angle*180/PI);
-}
-long int get_x_actuel()
+double get_x_actuel()
{
return x_actuel;
}
-long int get_y_actuel()
+double get_y_actuel()
{
return y_actuel;
}