# Get samples FSM # A general remark on this FSM: it is not its responsibility to put the bot in # front of the distributor, it the responsibility of the top FSM using the # move FSM. # For example, the top FSM will order the bot to move in front of the # distributor using the move FSM. Then, when it is arrived, it will the get # sample FSM that will ensure we well placed (in term of angle for example). get_samples Get samples from the distributor States: IDLE waiting for the beginning of the get samples FSM FACE_DISTRIBUTOR face the distributor OPEN_INPUT_HOLE move the arm to let the samples enter into the bot by the input hole APPROACH_DISTRIBUTOR make the bot move forward in order to be in contact with the distributor TAKE_SAMPLES take one or more samples MOVE_AWAY_FROM_DISTRIBUTOR move the bot away from the distributor by going backward CLOSE_INPUT_HOLE put the arm back in front of the input hole to prevent sample to enter Events: start initialize the FSM # For the moment, this event is currently not managed. # TODO: manage it bot_move_failed the bot movement failed (blocked by something for example) bot_move_succeed the bot has finished to moved and arrived at the desired position arm_move_succeed the arm has reached the desired position arm_pass_noted_position the arm has just passed the 'noted' position IDLE: start -> FACE_DISTRIBUTOR do a goto angle to make the bot facing the distributor FACE_DISTRIBUTOR: bot_move_succeed -> OPEN_INPUT_HOLE move the arm to open the input hole OPEN_INPUT_HOLE: arm_move_succeed -> APPROACH_DISTRIBUTOR start approaching the distributor now APPROACH_DISTRIBUTOR: bot_move_succeed -> TAKE_SAMPLES start taking some samples TAKE_SAMPLES: arm_pass_noted_position: more -> . prepare the classification of the taken sample take a new one arm_pass_noted_position: no_more -> MOVE_AWAY_FROM_DISTRIBUTOR go backward MOVE_AWAY_FROM_DISTRIBUTOR: bot_move_succeed -> CLOSE_INPUT_HOLE close input hole CLOSE_INPUT_HOLE: arm_move_succeed -> IDLE tell the top FSM we have finished