44 #define sign(x) (x>0?+1:x<0?-1:0)
45 #define stringfy(x) #x
46 #define setState(x) {state=x;}
47 #define setStateVel(x,v,w) {setState(x);setVel(v,w);}
73 ROBOT_STATE_STR[0] =
"IDLE";
74 ROBOT_STATE_STR[1] =
"DONE";
75 ROBOT_STATE_STR[2] =
"DOCKED_IN";
76 ROBOT_STATE_STR[3] =
"BUMPED_DOCK";
77 ROBOT_STATE_STR[4] =
"BUMPED";
78 ROBOT_STATE_STR[5] =
"SCAN";
79 ROBOT_STATE_STR[6] =
"FIND_STREAM";
80 ROBOT_STATE_STR[7] =
"GET_STREAM";
81 ROBOT_STATE_STR[8] =
"ALIGNED";
82 ROBOT_STATE_STR[9] =
"ALIGNED_FAR";
83 ROBOT_STATE_STR[10] =
"ALIGNED_NEAR";
84 ROBOT_STATE_STR[11] =
"UNKNOWN";
85 ROBOT_STATE_STR[12] =
"LOST";
100 if (mode ==
"run")
can_run =
true;
101 if (mode ==
"stop")
can_run =
false;
116 ,
const unsigned char &bumper
117 ,
const unsigned char &charger
121 std::vector<unsigned char> signal_filt(signal.size(), 0);
126 if(bumper || charger) {
153 pose_update.x( std::sqrt( dx*dx + dy*dy ) );
154 pose_update.heading( pose.heading() -
pose_priv.heading() );
176 for (
unsigned int i = 0; i <
past_signals.size(); i++) {
179 for (
unsigned int j = 0; j < signal_filt.size(); j++)
201 if(charger && bumper) {
241 std::ostringstream oss;
249 current_state = new_state =
state;
250 switch((
unsigned int)current_state) {
252 idle(new_state, new_vx, new_wz);
255 scan(new_state, new_vx, new_wz, signal_filt, pose_update,
debug_str);
258 find_stream(new_state, new_vx, new_wz, signal_filt);
261 get_stream(new_state, new_vx, new_wz, signal_filt);
272 oss <<
"Wrong state : " << current_state;
292 for(i = 0; i < signal_filt.size(); i++)
294 if(signal_filt[i] &
state)