RUNNING_CIRCLE,
};
+struct circle_target {
+ vect2_cart center; /**< center of the circle */
+ double radius; /**< radius of the circle */
+ int32_t dest_angle; /**< dst angle in inc */
+
+#define TRIGO 1 /* rotation is counterclockwise */
+#define FORWARD 2 /* go forward or backward */
+ uint8_t flags; /**< flags for this trajectory */
+};
struct trajectory {
enum trajectory_state state; /*<< describe the type of target, and if we reached the target */
union {
vect2_cart cart; /**<< target, if it is a x,y vector */
struct rs_polar pol; /**<< target, if it is a d,a vector */
+ struct circle_target circle; /**<< target, if it is a circle */
} target;
double d_win; /**<< distance window (for END_NEAR) */
double a_win_rad; /**<< angle window (for END_NEAR) */
double a_start_rad;/**<< in xy consigns, start to move in distance
* when a_target < a_start */
-
+ double circle_coef;/**<< corrective circle coef */
+
uint16_t d_speed; /**<< distance speed consign */
uint16_t a_speed; /**<< angle speed consign */
struct robot_system *robot; /**<< associated robot_system */
struct cs *csm_angle; /**<< associated control system (angle) */
struct cs *csm_distance; /**<< associated control system (distance) */
-
+
int8_t scheduler_task; /**<< id of current task (-1 if no running task) */
};
void trajectory_set_windows(struct trajectory *traj, double d_win,
double a_win_deg, double a_start_deg);
+/**
+ * Set coef for circle trajectory. The objective of this value is to
+ * fix the radius of the circle which is not correctly what we asked.
+ */
+void trajectory_set_circle_coef(struct trajectory *traj, double coef);
+
/** return true if the position consign is equal to the filtered
* position consign (after quadramp filter), for angle and
* distance. */
/** go forward to a x,y relative point, using a trajectory event */
void trajectory_goto_xy_rel(struct trajectory *traj, double x_rel_mm, double y_rel_mm);
+/** make the robot orbiting around (x,y) on a circle whose radius is
+ * radius_mm, and exit when relative destination angle is reached. The
+ * flags set if we go forward or backwards, and CW/CCW. */
+void trajectory_circle_rel(struct trajectory *traj, double x, double y,
+ double radius_mm, double rel_a_deg, uint8_t flags);
+
#endif //TRAJECTORY_MANAGER