static void actuators_home()
{
- act_vidle(VIDLE_UP, VIDLE_FAST_SPEED);
+ static int tmp = 0;
+ act_vidle(VIDLE_UP - tmp, VIDLE_FAST_SPEED);
+ tmp = 1 - tmp; // Force movement (we need to change the target position)
}
void start_entry()
void start_exit()
{
robot.corns = get_all_corns(robot.corns_conf_side, robot.corns_conf_center);
+ act_camera_off();
}
/************************************************************************
case EV_ENTRY: {
// disables using side switches on bumpers when going up
enable_switches(false);
- act_vidle(VIDLE_DOWN, VIDLE_FAST_SPEED);
+ act_vidle(VIDLE_LOAD_PREPARE, VIDLE_FAST_SPEED);
robot.ignore_hokuyo = true;
/* create the trajectory and go */
robot_trajectory_new_backward(&tcSlow);
}
}
-/* one-state-subautomaton to load oranges in two stages */
+/* subautomaton to load oranges in two stages */
+FSM_STATE_DECL(load_oranges2);
FSM_STATE(load_oranges)
{
switch(FSM_EVENT) {
case EV_ENTRY:
- FSM_TIMER(500);
act_vidle(VIDLE_MIDDLE, VIDLE_MEDIUM_SPEED);
break;
+ case EV_VIDLE_DONE:
+ FSM_TIMER(500);
+ break;
case EV_TIMER:
- // FIXME: respond to VIDLE EVENT
+ FSM_TRANSITION(load_oranges2);
+ break;
+ case EV_MOTION_DONE:
+ case EV_START:
+ case EV_RETURN:
+ case EV_MOTION_ERROR:
+ case EV_SWITCH_STRATEGY:
+ DBG_PRINT_EVENT("unhandled event");
+ case EV_EXIT:
+ break;
+ }
+}
+
+FSM_STATE(load_oranges2)
+{
+ switch(FSM_EVENT) {
+ case EV_ENTRY:
act_vidle(VIDLE_UP, VIDLE_FAST_SPEED);
+ break;
+ case EV_VIDLE_DONE:
SUBFSM_RET(NULL);
break;
+ case EV_TIMER:
case EV_MOTION_DONE:
case EV_START:
case EV_RETURN:
- case EV_VIDLE_DONE:
case EV_MOTION_ERROR:
case EV_SWITCH_STRATEGY:
DBG_PRINT_EVENT("unhandled event");