git.droids-corp.org
/
aversive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
update and reliabilize strats
[aversive.git]
/
projects
/
microb2010
/
mainboard
/
strat_base.c
diff --git
a/projects/microb2010/mainboard/strat_base.c
b/projects/microb2010/mainboard/strat_base.c
index
a6724ad
..
acded68
100644
(file)
--- a/
projects/microb2010/mainboard/strat_base.c
+++ b/
projects/microb2010/mainboard/strat_base.c
@@
-103,6
+103,8
@@
const char *get_err(uint8_t err)
void strat_hardstop(void)
{
void strat_hardstop(void)
{
+ DEBUG(E_USER_STRAT, "strat_hardstop");
+
trajectory_hardstop(&mainboard.traj);
pid_reset(&mainboard.angle.pid);
pid_reset(&mainboard.distance.pid);
trajectory_hardstop(&mainboard.traj);
pid_reset(&mainboard.angle.pid);
pid_reset(&mainboard.distance.pid);
@@
-209,6
+211,11
@@
void strat_set_speed(uint16_t d, uint16_t a)
IRQ_UNLOCK(flags);
}
IRQ_UNLOCK(flags);
}
+void strat_set_acc(double d, double a)
+{
+ trajectory_set_acc(&mainboard.traj, d, a);
+}
+
void strat_get_speed(uint16_t *d, uint16_t *a)
{
uint8_t flags;
void strat_get_speed(uint16_t *d, uint16_t *a)
{
uint8_t flags;
@@
-218,6
+225,15
@@
void strat_get_speed(uint16_t *d, uint16_t *a)
IRQ_UNLOCK(flags);
}
IRQ_UNLOCK(flags);
}
+void strat_get_acc(double *d, double *a)
+{
+ uint8_t flags;
+ IRQ_LOCK(flags);
+ *d = mainboard.traj.d_acc;
+ *a = mainboard.traj.a_acc;
+ IRQ_UNLOCK(flags);
+}
+
void strat_limit_speed_enable(void)
{
strat_limit_speed_enabled = 1;
void strat_limit_speed_enable(void)
{
strat_limit_speed_enabled = 1;
@@
-228,7
+244,7
@@
void strat_limit_speed_disable(void)
strat_limit_speed_enabled = 0;
}
strat_limit_speed_enabled = 0;
}
-/* called periodically */
+/* called periodically
(note: disabled in 2010)
*/
void strat_limit_speed(void)
{
uint16_t lim_d = 0, lim_a = 0;
void strat_limit_speed(void)
{
uint16_t lim_d = 0, lim_a = 0;
@@
-278,13
+294,15
@@
void strat_limit_speed(void)
/* start the strat */
void strat_start(void)
{
/* start the strat */
void strat_start(void)
{
- int8_t i;
uint8_t err;
strat_preinit();
uint8_t err;
strat_preinit();
+#ifndef HOST_VERSION
/* if start sw not plugged */
if (sensor_get(S_START_SWITCH)) {
/* if start sw not plugged */
if (sensor_get(S_START_SWITCH)) {
+ int8_t i;
+
printf_P(PSTR("No start switch, press a key or plug it\r\n"));
/* while start sw not plugged */
printf_P(PSTR("No start switch, press a key or plug it\r\n"));
/* while start sw not plugged */
@@
-306,6
+324,7
@@
void strat_start(void)
/* while start sw plugged */
while (!sensor_get(S_START_SWITCH));
}
/* while start sw plugged */
while (!sensor_get(S_START_SWITCH));
}
+#endif
strat_init();
err = strat_main();
strat_init();
err = strat_main();
@@
-324,8
+343,7
@@
uint8_t strat_obstacle(void)
return 0;
/* no opponent detected */
return 0;
/* no opponent detected */
- if (get_opponent_xyda(&opp_x, &opp_y,
- &opp_d, &opp_a))
+ if (get_opponent_xyda(&opp_x, &opp_y, &opp_d, &opp_a))
return 0;
/* save obstacle position */
return 0;
/* save obstacle position */
@@
-334,6
+352,9
@@
uint8_t strat_obstacle(void)
opponent_obstacle.d = opp_d;
opponent_obstacle.a = opp_a;
opponent_obstacle.d = opp_d;
opponent_obstacle.a = opp_a;
+ if (!is_in_area(opp_x, opp_y, 250))
+ return 0;
+
/* sensor are temporarily disabled */
if (sensor_obstacle_is_disabled())
return 0;
/* sensor are temporarily disabled */
if (sensor_obstacle_is_disabled())
return 0;
@@
-343,7
+364,7
@@
uint8_t strat_obstacle(void)
y_rel = sin(RAD(opp_a)) * (double)opp_d;
/* opponent too far */
y_rel = sin(RAD(opp_a)) * (double)opp_d;
/* opponent too far */
- if (opp_d >
6
00)
+ if (opp_d >
5
00)
return 0;
/* opponent is in front of us */
return 0;
/* opponent is in front of us */