}
break;
case EV_OBSTACLE_BEHIND:
- FSM_TRANSITION(wait_and_try_again);
+ if (robot.moves_backward && robot.use_back_switch)
+ FSM_TRANSITION(wait_and_try_again);
break;
case EV_TRAJECTORY_LOST:
FSM_TRANSITION(lost);
FSM_TRANSITION(wait_for_command);
break;
case EV_OBSTACLE_BEHIND:
- FSM_TRANSITION(wait_and_try_again);
+ if (robot.moves_backward && robot.use_back_switch)
+ FSM_TRANSITION(wait_and_try_again);
break;
case EV_TRAJECTORY_LOST:
case EV_TIMER:
FSM_TRANSITION(wait_for_command);
break;
case EV_OBSTACLE_BEHIND:
- FSM_TRANSITION(wait_and_try_again);
break;
case EV_NEW_TARGET:
case EV_TRAJECTORY_LOST:
pthread_mutex_t lock_camera;
/* competition parameters */
-#define team_color orte.camera_control.game_color
-// enum team_color team_color;
+ enum team_color team_color;
/** State variable used for controlling the robot by pluggin
* in and out start connector. */
}
}
+void rcv_robot_switches_cb(const ORTERecvInfo *info, void *vinstance,
+ void *recvCallBackParam)
+{
+ struct robot_switches_type *instance = (struct robot_switches_type *)vinstance;
+ switch (info->status) {
+ case NEW_DATA:
+ robot.team_color = instance->team_color;
+ if (instance->bumper_pressed)
+ FSM_SIGNAL(MOTION, EV_OBSTACLE_BEHIND, NULL);
+ break;
+ case DEADLINE:
+ break;
+ }
+}
+
#define HIST_CNT 5
#if 0
static int cmp_double(const void *v1, const void *v2)
robottype_subscriber_robot_cmd_create(&robot.orte, rcv_robot_cmd_cb, &robot.orte);
robottype_subscriber_hokuyo_scan_create(&robot.orte, rcv_hokuyo_scan_cb, &robot.orte);
robottype_subscriber_vidle_status_create(&robot.orte, rcv_vidle_status_cb, &robot.orte);
+ robottype_subscriber_robot_switches_create(&robot.orte, rcv_robot_switches_cb, &robot.orte);
robottype_subscriber_camera_result_create(&robot.orte, rcv_camera_result_cb, &robot.orte);
return rv;