void actuators_home()
{
-// act_jaws(CLOSE);
+ act_jaws(CLOSE);
// bool pokus = robot.fsm.motion.state_name == "wait_and_try_again";
// drive lift to home position
- //act_lift(0, 0, 1);
+ act_lift(0, 0, 1);
// unset the homing request
//act_lift(0, 0, 0);
}
{
switch(FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new(&tcSlow); // new trajectory
+ robot_trajectory_new(&tcVeryFast); // new trajectory
robot_trajectory_add_point_trans(
- 0.5,
+ 0.6,
PLAYGROUND_HEIGHT_M - (ROBOT_WIDTH_M/2.0));
robot_trajectory_add_point_trans(
0.64,
// NO_TURN());
break;
case EV_MOTION_DONE:
- FSM_TIMER(2000);
+ act_jaws(OPEN);
+ FSM_TIMER(1000);
break;
case EV_TIMER:
FSM_TRANSITION(catch_central_buillon);
{
switch(FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new(&tcSlow); // new trajectory
+ robot_trajectory_new(&tcFast); // new trajectory
robot_trajectory_add_final_point_trans(
1.3,
0.58,
NO_TURN());
break;
case EV_MOTION_DONE:
- FSM_TIMER(2000);
+ act_jaws(CATCH);
+ FSM_TIMER(500);
break;
case EV_TIMER:
FSM_TRANSITION(leave_central_buillon);
{
switch(FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new_backward(&tcSlow); // new trajectory
+ robot_trajectory_new_backward(&tcFast); // new trajectory
robot_trajectory_add_final_point_trans(
0.85,
0.38,
NO_TURN());
break;
case EV_MOTION_DONE:
- enable_bumpers(false);
SUBFSM_RET(NULL);
break;
default:
{
switch(FSM_EVENT) {
case EV_ENTRY:
+ robot.use_back_bumpers = false;
robot_trajectory_new_backward(&tcSlow); // new trajectory
robot_trajectory_add_point_trans(
0.7,
0.3);
robot_trajectory_add_final_point_trans(
0.64+0.08,
- ROBOT_AXIS_TO_BACK_M + 0.05,
+ ROBOT_AXIS_TO_BACK_M + 0.01,
ARRIVE_FROM(DEG2RAD(270), 0.10));
break;
case EV_MOTION_DONE:
{
switch(FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new(&tcSlow); // new trajectory
+ robot_trajectory_new(&tcFast); // new trajectory
robot_trajectory_add_point_trans(
0.64 + 0.08,
- 0.7);
+ 0.8);
robot_trajectory_add_final_point_trans(
- 0.4,
- 1.0,
- ARRIVE_FROM(DEG2RAD(180), 0.10));
+ 0.55,
+ 1.1,
+ ARRIVE_FROM(DEG2RAD(180), 0.01));
break;
case EV_MOTION_DONE:
- enable_bumpers(true);
- FSM_TIMER(2000);
+ robot.use_back_bumpers = true;
+ act_jaws(OPEN);
+ FSM_TIMER(1000);
break;
case EV_TIMER:
SUBFSM_RET(NULL);
{
switch(FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new_backward(&tcSlow); // new trajectory
- robot_trajectory_add_final_point_trans(
- 0.6,
- 1.0,
- NO_TURN());
+ //robot_trajectory_new_backward(&tcSlow); // new trajectory
+ robot_move_by(-0.18, NO_TURN(), &tcSlow);
break;
case EV_MOTION_DONE:
+ act_jaws(CLOSE);
FSM_TRANSITION(leave_home_for_totem);
break;
default:
{
switch(FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new(&tcSlow); // new trajectory
+ robot_trajectory_new(&tcFast); // new trajectory
if(up) {
robot_trajectory_add_final_point_trans(
- 0.64,
+ 0.7,
1.3,
NO_TURN());
}
else {
robot_trajectory_add_final_point_trans(
- 0.64,
0.7,
+ 0.9,
NO_TURN());
}
break;
{
switch(FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new(&tcSlow); // new trajectory
+ robot_trajectory_new(&tcFast); // new trajectory
robot_trajectory_add_final_point_trans(
totem_x,
- 0.48,
+ 0.4,
TURN_CCW(DEG2RAD(90)));
break;
case EV_MOTION_DONE:
- FSM_TIMER(2000);
+ act_lift(UP, 0, 0);
+ act_jaws(OPEN);
+ FSM_TIMER(1000);
break;
case EV_TIMER:
FSM_TRANSITION(catch_totem_buillon_down);
ARRIVE_FROM(DEG2RAD(90), 0.10));
break;
case EV_MOTION_DONE:
- FSM_TIMER(2000);
+ act_jaws(CATCH);
+ FSM_TIMER(500);
break;
case EV_TIMER:
FSM_TRANSITION(leave_totem_down);
robot_trajectory_new_backward(&tcSlow); // new trajectory
robot_trajectory_add_final_point_trans(
totem_x,
- 0.48,
+ 0.42,
NO_TURN());
break;
case EV_MOTION_DONE:
+ act_jaws(OPEN);
+ act_lift(DOWN, 0, 0);
+ FSM_TIMER(2000);
+ break;
+ case EV_TIMER:
FSM_TRANSITION(place_buillon_home);
+ break;
default:
break;
}
{
switch(FSM_EVENT) {
case EV_ENTRY:
+ act_jaws(CATCH);
robot_trajectory_new(&tcSlow); // new trajectory
if(up) {
robot_trajectory_add_point_trans(
0.8);
}
robot_trajectory_add_final_point_trans(
- 0.4,
- 1.0,
- ARRIVE_FROM(DEG2RAD(180),0.10));
+ 0.55,
+ 1.1,
+ ARRIVE_FROM(DEG2RAD(180),0.01));
break;
case EV_MOTION_DONE:
- FSM_TIMER(2000);
+ act_jaws(OPEN);
+ FSM_TIMER(1000);
break;
case EV_TIMER:
SUBFSM_RET(NULL);
{
switch(FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new(&tcSlow); // new trajectory
+ robot_trajectory_new(&tcFast); // new trajectory
robot_trajectory_add_final_point_trans(
totem_x,
- 1.52,
+ 1.6,
TURN_CW(DEG2RAD(270)));
break;
case EV_MOTION_DONE:
+ act_jaws(OPEN);
+ act_lift(UP, 0, 0);
FSM_TIMER(2000);
break;
case EV_TIMER:
ARRIVE_FROM(DEG2RAD(270), 0.10));
break;
case EV_MOTION_DONE:
- FSM_TIMER(2000);
+ act_jaws(CATCH);
+ FSM_TIMER(500);
break;
case EV_TIMER:
FSM_TRANSITION(leave_totem_up);
robot_trajectory_new_backward(&tcSlow); // new trajectory
robot_trajectory_add_final_point_trans(
totem_x,
- 1.52,
+ 1.6,
NO_TURN());
break;
case EV_MOTION_DONE:
+ act_jaws(OPEN);
+ act_lift(DOWN, 0, 0);
SUBFSM_RET(NULL);
default:
break;
}
+}
+
+
+FSM_STATE(push_second_bottle_fw)
+{
+ switch(FSM_EVENT) {
+ case EV_ENTRY:
+ robot_trajectory_new(&tcFast); // new trajectory
+// robot_trajectory_add_point_trans(0.7, 0.5);
+ robot_goto_notrans(
+ 1.85,
+ ROBOT_AXIS_TO_FRONT_M,
+ ARRIVE_FROM(DEG2RAD(270), 0.15), &tcFast);
+ break;
+ case EV_MOTION_DONE:
+ SUBFSM_RET(NULL);
+ default:
+ break;
+ }
+}
+
+FSM_STATE(go_back_from_home)
+{
+ switch(FSM_EVENT) {
+ case EV_ENTRY:
+ act_jaws(OPEN);
+ robot_move_by(-0.2, NO_TURN(), &tcSlow);
+ break;
+ case EV_MOTION_DONE:
+ act_jaws(CLOSE);
+ FSM_TRANSITION(push_second_bottle_fw);
+ break;
+ default:
+ break;
+ }
}
\ No newline at end of file
#include <ul_log.h>
-UL_LOG_CUST(ulogd_strategy_get_central_buillon); /* Log domain name = ulogd + name of the file */
+UL_LOG_CUST(ulogd_strategy_central_buillon_wait_for_start); /* Log domain name = ulogd + name of the file */
static FSM_STATE_DECL(pick_central_buillon);
-FSM_STATE(get_central_buillon_first)
+FSM_STATE(central_buillon_wait_for_start)
{
switch (FSM_EVENT) {
case EV_ENTRY:
FSM_STATE_DECL(bottle_bw);
FSM_STATE_DECL(pick_buillon_from_totem1);
FSM_STATE_DECL(pick_buillon_from_totem2);
+FSM_STATE_DECL(push_second_bottle);
FSM_STATE(pick_central_buillon)
SUBFSM_TRANSITION(leave_home,NULL);
break;
case EV_RETURN:
- FSM_TRANSITION(pick_buillon_from_totem2);
+ FSM_TRANSITION(push_second_bottle);
break;
default:
break;
default:
break;
}
+}
+
+FSM_STATE(push_second_bottle)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY:
+ SUBFSM_TRANSITION(go_back_from_home, NULL);
+ break;
+ case EV_RETURN:
+ break;
+ }
}
\ No newline at end of file
//#endif
case EV_START:
start_go();
- robot.obstacle_avoidance_enabled = false;
robot.use_back_bumpers = false;
robot.odo_cal_a = 1;
robot.odo_cal_b = 1;
start_exit();
break;
case EV_SWITCH_STRATEGY:
- FSM_TRANSITION(get_central_buillon_first);
+ FSM_TRANSITION(central_buillon_wait_for_start);
break;
default:;
}
PLAYGROUND_HEIGHT_M - (ROBOT_WIDTH_M/2.0),
0);
robot_move_by(-1.1, NO_TURN(), &tcVerySlow);
- FSM_TIMER(50);
+ FSM_TIMER(2000);
break;
case EV_MOTION_DONE:
ROBOT_LOCK(est_pos_odo);
printf("Left%f\n", x1);
printf("Right%f\n", y1);
FILE * file;
- file = fopen ("odometry_cal_data","a+");
+ file = fopen ("odometry_cal_data","w");
sprintf(buffer, "%4.4f", -1/x1);
fputs (buffer,file);
fputs (" ", file);
fputs ("\n", file);
fclose(file);
}
- FSM_TRANSITION(get_central_buillon_first);
+ FSM_TRANSITION(central_buillon_wait_for_start);
break;
case EV_TIMER:
ROBOT_LOCK(est_pos_odo);
if(x1 == robot.odo_distance_a){
x1 = robot.odo_distance_a;
y1 = robot.odo_distance_b;
+ //robot_stop();
FSM_SIGNAL(MOTION,EV_MOVE_STOP, NULL);
FSM_SIGNAL(MAIN, EV_MOTION_DONE, NULL);
} else {