# loader FSM loader Handle Eurobot 2010 robot clamp, elevator and output door. States: *LOADER_IDLE wait start LOADER_WAIT_JACK_IN wait until the jack is inserted for the first time LOADER_WAIT_JACK_OUT wait until the jack is removed to initialise robot LOADER_INIT_ELEVATOR_ZERO move the elevator down to find zero position LOADER_INIT_CLAMP_CLOSE test clamp closing LOADER_INIT_CLAMP_ZERO find clamp zero position LOADER_INIT_GATE_ZERO find gate zero LOADER_INIT_ELEVATOR_UP move the elevator up so that the robot can go to the wall LOADER_INIT_GATE_WAIT[timeout=225] wait with gate open LOADER_INIT_GATE_CLOSE close gate before start LOADER_UP up position, clamp is protected LOADER_DOWN down position, ready to take an element LOADER_UPING moving to the up position LOADER_DOWNING moving to the down position LOADER_ERROR error while moving up, stop in an unknown state LOADER_ERROR_DOWNING error recovery moving down LOADER_ERROR_DOWNING_OPEN error recovery moving down, open clamp LOADER_ERROR_UPING error recovery moving up LOADER_ERROR_UPING_OPEN error recovery moving up, open clamp LOADER_LOAD_CLOSING close clamp LOADER_LOAD_UPING move load up to the unload position LOADER_LOAD_UNLOADING open clamp to unload, wait until unload position LOADER_LOAD_UNLOADING_OPEN check clamp is open LOADER_LOAD_EMPTY_OPEN open clamp due to no elements to pick Events: elevator_succeed asserv success result elevator_failed asserv failure result elevator_unload_position elevator above unloading position clamp_succeed asserv success result clamp_failed asserv failure result gate_succeed asserv success result gate_failed asserv failure result loader_element element sensed between clamp to be loaded loader_down make the loader ready to load an element loader_up protect the clamp by moving it up loader_downed posted when loader successfully moved down loader_uped posted when loader successfully moved up loader_errored posted when loader in an unknown state due to error while moving up LOADER_IDLE: start -> LOADER_WAIT_JACK_IN LOADER_WAIT_JACK_IN: jack_inserted_into_bot -> LOADER_WAIT_JACK_OUT LOADER_WAIT_JACK_OUT: jack_removed_from_bot -> LOADER_INIT_ELEVATOR_ZERO find elevator zero close clamp find gate zero LOADER_INIT_ELEVATOR_ZERO: elevator_succeed -> LOADER_INIT_CLAMP_CLOSE LOADER_INIT_CLAMP_CLOSE: clamp_succeed -> LOADER_INIT_CLAMP_ZERO move elevator up find clamp zero LOADER_INIT_CLAMP_ZERO: clamp_succeed -> LOADER_INIT_GATE_ZERO LOADER_INIT_GATE_ZERO: gate_succeed -> LOADER_INIT_ELEVATOR_UP LOADER_INIT_ELEVATOR_UP: elevator_succeed -> LOADER_INIT_GATE_WAIT elevator_failed -> LOADER_IDLE initialisation failure LOADER_INIT_GATE_WAIT: state_timeout -> LOADER_INIT_GATE_CLOSE close gate LOADER_INIT_GATE_CLOSE: gate_succeed -> LOADER_UP LOADER_UP: loader_down -> LOADER_DOWNING move down LOADER_DOWN: loader_up -> LOADER_UPING move up loader_element -> LOADER_LOAD_CLOSING clamp LOADER_ERROR: loader_down -> LOADER_ERROR_DOWNING move down loader_up -> LOADER_ERROR_UPING move up LOADER_ERROR_DOWNING: elevator_succeed -> LOADER_ERROR_DOWNING_OPEN release elevator motor open clamp elevator_failed -> LOADER_ERROR post loader_errored event loader_element -> LOADER_ERROR emergency stop post loader_errored event LOADER_ERROR_DOWNING_OPEN: clamp_succeed -> LOADER_DOWN post loader_downed event LOADER_ERROR_UPING: elevator_succeed -> LOADER_ERROR_UPING_OPEN open clamp elevator_failed -> LOADER_ERROR post loader_errored event LOADER_ERROR_UPING_OPEN: clamp_succeed -> LOADER_UP post loader_uped event LOADER_DOWNING: elevator_succeed -> LOADER_DOWN release elevator motor post loader_downed event elevator_failed -> LOADER_ERROR post loader_errored event loader_element -> LOADER_ERROR emergency stop post loader_errored event loader_up -> LOADER_UPING move up LOADER_UPING: elevator_succeed -> LOADER_UP post loader_uped event elevator_failed -> LOADER_ERROR post loader_errored event loader_down -> LOADER_DOWNING move down LOADER_LOAD_CLOSING: clamp_succeed: full -> LOADER_LOAD_UPING move up count one element clamp_succeed: empty -> LOADER_LOAD_EMPTY_OPEN open clamp LOADER_LOAD_UPING: elevator_unload_position -> LOADER_LOAD_UNLOADING open clamp elevator_failed -> LOADER_ERROR post loader_errored event open clamp LOADER_LOAD_UNLOADING: elevator_succeed -> LOADER_LOAD_UNLOADING_OPEN elevator_failed -> LOADER_ERROR post loader_errored event open clamp LOADER_LOAD_UNLOADING_OPEN: clamp_succeed: down -> LOADER_DOWNING move down clamp_succeed: up -> LOADER_UPING move up LOADER_LOAD_EMPTY_OPEN: clamp_succeed: down -> LOADER_DOWN clamp_succeed: up -> LOADER_UPING move up