1 Le module ne fonctionne qu'avec un asserv composes des modules
2 control_system_manager, position_manager, quadramp, robot_system.
3 Il utilise le module vect2.
6 QUESTIONS (et reponses) QUI RESTENT
9 - quand on donne l'ordre d'aller a un point tres proche du robot, mais
10 different en angle, ca fait des gros pivots. Solution ?
11 - pour le trajectory_nearly_finished(), doit-on utiliser une fenetre, ou
12 etre en fonction de la rampe ? Pour la rampe, la distance en pas c'est
14 - bien preciser les unites dans les noms des variables, ca rend le
15 code plus clair (par exemple les angles en deg ou rad, les distances
17 - l'angle target.angle de la structure est entre 0 et 2 pi ?
18 - pour le 'nearly finished' dans le cas d'une trajectoire sans evenement,
20 - quid du position manager, qui retourne un angle entre -pi et pi, et ca,
22 - dans position manager, il manque les unites dans les noms de var
23 - l'evenement trajectory est supprime lorsque l'on s'approche du point, du
24 coup on n'est plus asservi sur le point x,y a partir d'une certaine
26 - la vitesse pourrait etre specifiee en cm/s et deg/s
30 void trajectory_init(struct trajectory * traj);
32 Initialisation de la structure. Met tout a zero, et le scheduler_task
36 void trajectory_set_cs(struct trajectory * traj, struct cs * cs_d, struct cs * cs_a);
38 Associe les structures d'asservissement a la structure traj.
40 void trajectory_set_robot_params(struct trajectory * traj, struct robot_system * rs,
41 struct robot_position * pos);
43 Associe les structures robot_system et position a la structure traj.
46 void trajectory_set_windows(struct trajectory * traj, double d_win, double a_win)
48 Definit la fenetre de fin de trajectoire, en angle comme en distance
51 void trajectory_set_speed( struct trajectory * traj, int16_t speed_d, int16_t speed_a);
53 Definit la vitesse lineaire et angulaire max
59 enum trajectory_state state; /*<< describe the type of target, and if we reached the target */
62 vect2_cart vect; /**<< target, if it is a vector */
63 double angle; /**<< target, if it is an angle */
66 double d_win; /**<< distance window (for END_NEAR) */
67 double a_win_rad; /**<< angle window (for END_NEAR) */
69 uint16_t d_speed; /**<< distance speed consign */
70 uint16_t a_speed; /**<< angle speed consign */
72 struct robot_position * position; /**<< associated robot_position */
73 struct robot_system * robot; /**<< associated robot_system */
74 struct cs * csm_angle; /**<< associated control system (angle) */
75 struct cs * csm_distance; /**<< associated control system (distance) */
77 int8_t scheduler_task; /**<< id of current task (-1 if no running task) */
81 FONCTIONS ET MACROS STATIQUES
83 - modulo_pi(a) : retourne a entre -pi et pi
84 - modulo_2pi(a) : retourne a entre 0 et 2.pi
85 - modulo_180(a) : retourne a entre -180 et 180
86 - modulo_360(a) : retourne a entre 0 et 360
87 (on considere que le a d'origine n'est pas a plus d'un
88 tour [2.pi ou 360] de son intervalle)
90 - is_in_dist_window(t) : vrai si on a dans la fenetre de dist
91 - is_in_angle_window(t) : vrai si on a dans la fenetre d'angle
93 - schedule_traj_event(t) : ajoute l'evenement de gestion de traj
94 - delete_traj_event(t) : le supprime
99 Donnees d'entree, fournies par l'utilisateur du module
100 - vitesse lineaire max et vitesse angulaire max
101 - le point de destination du robot (relatif ou absolu)
102 - fenetre de fin de trajectoire (distance, precise a l'init)
103 - marche avant, arriere, ou le plus court des deux.
106 - la position du robot
107 - les parametres du quadramp
110 Les fonctions ne re retournent rien, on sait lorsque l'on arrive en
112 - trajectory_finished() : le robot est arrive a destination, la
113 consigne d'asservissement en position correspond alors a la
114 consigne de position filtree (apres quadramp). Le robot est sense
115 etre a l'arret, ou presque.
116 - trajectory_in_window() : le robot est entre dans la fenetre
117 d'arrivee, de distance ou d'angle.
118 - trajectory_in_deceleration() : le robot est arrive assez pres du
119 point, juste avant la rampe de deceleration. Permet d'enchainer
120 des trajectoires sans ralentir. Si ca ne va pas avec la rampe de
121 deceleration, alors il faut au moins quelque chose qui depende de
125 - La consigne de vitesse passee a l'asservissement depend de l'angle
126 du robot pour aller vers le point suivant
127 - La consigne de position en distance est la distance vers le point
128 - La consigne de position en angle est l'angle vers le point
130 void trajectory_goto_xy_abs( struct trajectory * traj, double x, double y );
131 void trajectory_goto_xy_rel( struct trajectory * traj, double x, double y );
132 void trajectory_goto_da_rel( struct trajectory * traj, double d, double a_deg );
137 TRAJS SIMPLE (pas d'event)
138 void trajectory_d_a_rel ( struct trajectory * traj, double d, double a );
139 void trajectory_d_rel( struct trajectory * traj, double d, double a );
140 void trajectory_a_rel( struct trajectory * traj, double d, double a );
141 void trajectory_a_abs( struct trajectory * traj, double a );
142 void trajectory_turnto_xy_abs( struct trajectory* traj, double tx, double ty );
143 void trajectory_only_d( struct trajectory * traj, double d );
144 void trajectory_only_a( struct trajectory * traj, double a );
145 void trajectory_stop( struct trajectory * traj );
146 void trajectory_hardstop( struct trajectory * traj );