summaryrefslogtreecommitdiffhomepage
path: root/digital/io/src/gutter.fsm
blob: 966ee8f05622ddbc4fed5585be3be6d6d60fd56e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Gutter FSM
# Drop balls from the inside of the bot into the gutter to score points.
gutter

States:
 IDLE
  waiting for the beginning of the gutter FSM
 ROTATE_REAR_SIDE_TO_GUTTER
  stand back to the gutter
 GO_TO_THE_GUTTER_WALL
  make the bot reversing against the gutter
 DROP_BALLS
  open the collector to let the balls fall into the gutter

Events:
 start
  initialize the FSM
 bot_move_succeed
  the bot has finished to moved successfully
 bot_move_failed
  the bot movement failed (blocked by something for example)
 wait_finished
  we have wait the desired time

IDLE:
 start -> ROTATE_REAR_SIDE_TO_GUTTER
  put the bot back to the gutter

ROTATE_REAR_SIDE_TO_GUTTER:
 bot_move_succeed -> GO_TO_THE_GUTTER_WALL
  make the bot reversing against the gutter 

GO_TO_THE_GUTTER_WALL:
 bot_move_succeed -> DROP_BALLS
  open the collector to drop the balls
  wait for a while
# TODO: handle the case where a ball is between the bot and the border,
# preventing from fucking the wall
# The best way is probably to abort this FSM with an error, tell the upper one
# (top) we need to try at another place (the gutter is quite long).
# bot_move_failed

DROP_BALLS:
 wait_finished -> IDLE
  close the rear panel
  tell the top FSM we have finished