begin (load_module ("srs10Module")) (NOP Program based on qbl_robot2.txt using only a classical decision maker Note that the QDM is still ran here to keep the timing of the two programs the same The actual decision of the QDM is not used in this program (the classical decision is used) ) (NOP 1 = left) (new qbl::QDM QDM) (qbl::qdm::new (get QDM)) (new qbl::qdm::ActionList actions.0) (set actions.0 (qbl::qdm::ActionList (qbl::qdm::Action (qbl::qdm::Point -2) left) (qbl::qdm::Action (qbl::qdm::Point 0) forward) (qbl::qdm::Action (qbl::qdm::Point 2) right) ) ) (new qbl::qdm::ActionList actions.1) (set actions.1 (qbl::qdm::ActionList (qbl::qdm::Action (qbl::qdm::Point -2) chirp1) (qbl::qdm::Action (qbl::qdm::Point 0) silent) (qbl::qdm::Action (qbl::qdm::Point 2) chirp2) ) ) (new qbl::qdm::ActionSpace A.0) (new qbl::qdm::ActionSpace A.1) (qbl::qdm::set_action_space movementMap A.0 -1 1) (qbl::qdm::set_action_space points A.0 actions.0) (qbl::qdm::set_action_space gridSize A.0 15) (qbl::qdm::set_action_space resetDelta A.0 0) (qbl::qdm::set_action_space movementMap A.1 -1 1) (qbl::qdm::set_action_space points A.1 actions.1) (qbl::qdm::set_action_space gridSize A.1 11) (qbl::qdm::set_action_space resetDelta A.1 0) (qbl::qdm::add_action_space QDM A.0) (qbl::qdm::add_action_space QDM A.1) (qbl::qdm::finalize QDM) (qbl::load QDM ("qbl_robot_test1.dat")) (qbl::qdm::shell (get QDM)) (srs10::connect 0) (new double deltaHead) (new double headRotation) (set deltaHead 20.0) (srs10::add_robot robot1 0) (srs10::add_sensor robot1 IR left 0.75 40.0) (srs10::add_sensor robot1 IR right 0.75 -40.0) (srs10::add_sensor robot1 PROXIMITY front_prox 2.5 4) (srs10::add_sensor robot1 PROXIMITY left_prox 2.5 5) (srs10::add_sensor robot1 PROXIMITY back_prox 2.5 6) (srs10::add_sensor robot1 PROXIMITY right_prox 2.5 7) (new integer ir_left) (new integer ir_right) (new integer hearChirp1) (new integer hearChirp2) (new integer time.1) (new integer time.2) (set time.1 0) (set time.2 0) (new string action_str) (new integer action) (new srs10::Event e) (qbl::qdm::prepare QDM) (set hearChirp1 0) (set hearChirp2 0) (while 1 (srs10::poll_sensors robot1) (set ir_left (or ir_left (srs10::get_sensor robot1 left) ) ) (set ir_right (or ir_right (srs10::get_sensor robot1 right) ) ) (NOP Process Events ) (srs10::poll_events robot1) (while (srs10::events_exist robot1) (set e (srs10::get_next_event robot1)) (case (srs10::event::get (get e) creator) 2 (begin (set hearChirp1 1) (if (and (> (srs10::event::get (get e) direction) 20.0) (< (srs10::event::get (get e) direction) 160.0) ) (set ir_left 1) (nop) ) (if (and (> (srs10::event::get (get e) direction) 210.0) (< (srs10::event::get (get e) direction) 340.0) ) (set ir_right 1) (nop) ) (nop case (srs10::event::get (get e) direction_str) Left (set ir_right 1) Right (set ir_left 1) ) ) 3 (begin (set hearChirp2 1) (if (and (> (srs10::event::get (get e) direction) 20.0) (< (srs10::event::get (get e) direction) 160.0) ) (set ir_right 1) (nop) ) (if (and (> (srs10::event::get (get e) direction) 210.0) (< (srs10::event::get (get e) direction) 340.0) ) (set ir_left 1) (nop) ) (nop case (srs10::event::get (get e) direction_str) Left (set ir_left 1) Right (set ir_right 1) ) ) ) ) (NOP Motor inputs ) (cond (get ir_left) (qbl::qdm::apply_op (get QDM) left_ir) (get ir_right) (qbl::qdm::apply_op (get QDM) right_ir) (not (or (get hearChirp1) (get hearChirp2)) ) (qbl::qdm::apply_op (get QDM) no_ir) ) (nop if (get hearChirp1) (qbl::qdm::apply_op (get QDM) chirp1) (nop) ) (nop if (get hearChirp2) (qbl::qdm::apply_op (get QDM) chirp2) (nop) ) (NOP Done with input processing ) (qbl::qdm::think QDM) (set time.1 (+ time.1 1) ) (set time.2 (+ time.2 1) ) (if (< (get time.1) 5 ) (nop) (begin (set time.1 0) (if (< (qbl::rand 100) 85) (cond ir_right (begin (srs10::move robot1 0.70 1.75) (srs10::create_event robot1 80.0 3 11 1.0 0.0 0.0)) ir_left (begin (srs10::move robot1 0.70 -1.75) (srs10::create_event robot1 80.0 2 10 0.0 1.0 0.0)) 1 (if (not (or ir_left ir_right)) (srs10::move robot1 1.5 0.0) (srs10::move robot1 0.0 0.0) ) ) (begin (cond ir_right (begin (srs10::move robot1 0.70 -1.75)) ir_left (begin (srs10::move robot1 0.70 1.75)) 1 (if (not (or ir_left ir_right)) (if (< (qbl::rand 100) 50) (srs10::move robot1 0.7 -1.75) (srs10::move robot1 0.7 1.75)) (srs10::move robot1 0.0 0.0) ) ) (if (< (qbl::rand 100) 50) (srs10::create_event robot1 80.0 2 10 0.0 1.0 0.0) (srs10::create_event robot1 80.0 3 11 0.0 1.0 0.0) ) ) ) (set ir_left 0) (set ir_right 0) ) ) (if (< (get time.2) 5 ) (nop) (begin (set time.2 0) (nop case (qbl::qdm::decide_str QDM 1) chirp1 (srs10::create_event robot1 80.0 2 10 0.0 1.0 0.0) chirp2 (srs10::create_event robot1 80.0 3 11 1.0 0.0 0.0) ) (set hearChirp1 0) (set hearChirp2 0) ) ) ) (qbl::qdm::free QDM) (srs10::disconnect 0) (print done)