From: Jérémie D. <Ba...@us...> - 2010-02-11 20:39:47
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "krobot". The branch, master has been updated via f96b27abd1f34c12f5dd40ab2c2c532e812f0936 (commit) via 5fb431106f3ad37b156b341be84a8bc2e7721f23 (commit) via d4d5b0aaafe5449491e064bbcf44648f93156ef7 (commit) from cb2666ad63d7de5c68a47ea0803cb113b8a264a3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit f96b27abd1f34c12f5dd40ab2c2c532e812f0936 Author: Jérémie Dimino <je...@di...> Date: Thu Feb 11 21:39:20 2010 +0100 [driver] typos commit 5fb431106f3ad37b156b341be84a8bc2e7721f23 Author: Jérémie Dimino <je...@di...> Date: Thu Feb 11 21:36:36 2010 +0100 [clients] added some tests commit d4d5b0aaafe5449491e064bbcf44648f93156ef7 Author: Jérémie Dimino <je...@di...> Date: Thu Feb 11 21:36:04 2010 +0100 [driver] adapt trajectory conrol to the new firmware ----------------------------------------------------------------------- Changes: diff --git a/PC_Mainboard/Makefile b/PC_Mainboard/Makefile index 56af001..121732e 100644 --- a/PC_Mainboard/Makefile +++ b/PC_Mainboard/Makefile @@ -21,3 +21,7 @@ all: .PHONY: clean clean: $(OC) -clean + +.PHONY: send +send: + scp $(wildcard _build/**/*.best) ol...@mr...:bin diff --git a/PC_Mainboard/_tags b/PC_Mainboard/_tags index 103ccce..818fd97 100644 --- a/PC_Mainboard/_tags +++ b/PC_Mainboard/_tags @@ -55,3 +55,10 @@ <tools/forward_dbus.ml>: syntax_camlp4o, pkg_lwt.syntax, pkg_lwt.syntax.log, pkg_obus.syntax <tools/forward_dbus.*>: pkg_obus + +# +------------------------------------------------------------------+ +# | Tests | +# +------------------------------------------------------------------+ + +<tests/**/*.ml>: syntax_camlp4o, pkg_lwt.syntax, pkg_lwt.syntax.log, pkg_obus.syntax +<tests/**>: pkg_lwt.unix, pkg_obus diff --git a/PC_Mainboard/clients/script.ml b/PC_Mainboard/clients/script.ml index 3ea209e..ef69fe9 100644 --- a/PC_Mainboard/clients/script.ml +++ b/PC_Mainboard/clients/script.ml @@ -107,38 +107,41 @@ let move thread = return () let exec krobot line = - let action, args = Script_lexer.whole_command (Lexing.from_string line) in - let arg_int key default = try int_of_string (List.assoc key args) with Not_found -> default in - let arg_string key default = try List.assoc key args with Not_found -> default in - match action with - | "forward" -> - move (Krobot.move krobot ~dist:(arg_int "dist" 100) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)) - | "backward" -> - move (Krobot.move krobot ~dist:(-(arg_int "dist" 100)) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)) - | "left" -> - move (Krobot.turn krobot ~angle:(arg_int "dist" 100) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)) - | "right" -> - move (Krobot.turn krobot ~angle:(-(arg_int "dist" 100)) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)) - | "stop-motors" -> - Krobot.stop_motors krobot - ~motor:(motor_of_string (arg_string "motor" "both")) - ~mode:(match arg_string "mode" "off" with - | "off" -> `Off - | "abrupt" -> `Abrupt - | "smooth" -> `Smooth - | _ -> failwith "Script.exec: invalid stop mode") - | "set-speed" -> - Krobot.set_speed krobot - ~motor:(motor_of_string (arg_string "motor" "both")) - ~speed:(arg_int "speed" 100) - ~acc:(arg_int "acc" 800) - | "bootloader" -> - Krobot.Card.bootloader krobot - (match arg_string "card" "" with - | "interface" -> `Interface - | "motor" -> `Motor - | "sensor" -> `Sensor - | _ -> failwith "Script.exec: invalid card") - | _ -> - return () - + try_lwt + let action, args = Script_lexer.whole_command (Lexing.from_string line) in + let arg_int key default = try int_of_string (List.assoc key args) with Not_found -> default in + let arg_string key default = try List.assoc key args with Not_found -> default in + match action with + | "forward" -> + move (Krobot.move krobot ~dist:(arg_int "dist" 100) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)) + | "backward" -> + move (Krobot.move krobot ~dist:(-(arg_int "dist" 100)) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)) + | "left" -> + move (Krobot.turn krobot ~angle:(arg_int "dist" 100) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)) + | "right" -> + move (Krobot.turn krobot ~angle:(-(arg_int "dist" 100)) ~speed:(arg_int "speed" 400) ?acc:(arg_int "acc" 800)) + | "stop-motors" -> + Krobot.stop_motors krobot + ~motor:(motor_of_string (arg_string "motor" "both")) + ~mode:(match arg_string "mode" "off" with + | "off" -> `Off + | "abrupt" -> `Abrupt + | "smooth" -> `Smooth + | _ -> failwith "Script.exec: invalid stop mode") + | "set-speed" -> + Krobot.set_speed krobot + ~motor:(motor_of_string (arg_string "motor" "both")) + ~speed:(arg_int "speed" 100) + ~acc:(arg_int "acc" 800) + | "bootloader" -> + Krobot.Card.bootloader krobot + (match arg_string "card" "" with + | "interface" -> `Interface + | "motor" -> `Motor + | "sensor" -> `Sensor + | _ -> failwith "Script.exec: invalid card") + | _ -> + return () + with exn -> + Log#exn exn "command failed with"; + fail exn diff --git a/PC_Mainboard/driver/driver.ml b/PC_Mainboard/driver/driver.ml index c9ee93c..801319b 100644 --- a/PC_Mainboard/driver/driver.ml +++ b/PC_Mainboard/driver/driver.ml @@ -241,7 +241,9 @@ struct type move_state = | Ms_static (* No movement *) - | Ms_moving of unit Lwt.u * [ `Forward | `Backward | `Turn ] + | Ms_stopping + (* The trajectory has been stopped *) + | Ms_moving of [ `Forward | `Backward | `Turn ] (* Currently moving. The argument is a wakener to stop the mover. *) @@ -287,11 +289,10 @@ struct let stop_move dev = match dev.move_state with - | Ms_static -> + | Ms_moving _ -> + dev.move_state <- Ms_stopping + | _ -> () - | Ms_moving(wakener, _) -> - dev.move_state <- Ms_static; - wakeup wakener () let reset_speed dev = dev.speed_left <- 0; @@ -300,7 +301,7 @@ struct let move dev dist speed acc = Log#info "motor: move(dist=%d, speed=%d, acc=%d)" dist speed acc; match dev.move_state with - | Ms_moving _ -> + | Ms_moving _ | Ms_stopping -> fail (Failure "already moving") | Ms_static -> let date = Unix.gettimeofday () in @@ -308,10 +309,14 @@ struct fail (Failure "inhibited move") else begin reset_speed dev; - let waiter, wakener = wait () in - dev.move_state <- Ms_moving(wakener, if dist > 0 then `Forward else `Backward); - lwt () = Commands.Motor.move dev.card dist speed acc in - lwt result = select [Lwt_event.next dev.traj_completed >> return `OK; waiter >> return `Stopped] in + dev.move_state <- Ms_moving(if dist > 0 then `Forward else `Backward); + lwt () = Commands.Motor.move dev.card dist speed acc and _ = Lwt_event.next dev.traj_completed in + let result = match dev.move_state with + | Ms_stopping -> + `Stopped + | _ -> + `OK + in dev.move_state <- Ms_static; return result end @@ -319,14 +324,18 @@ struct let turn dev angle speed acc = Log#info "motor: turn(angle=%d, speed=%d, acc=%d)" angle speed acc; match dev.move_state with - | Ms_moving _ -> + | Ms_moving _ | Ms_stopping -> fail (Failure "already moving") | Ms_static -> reset_speed dev; - let waiter, wakener = wait () in - dev.move_state <- Ms_moving(wakener, `Turn); - lwt () = Commands.Motor.turn dev.card angle speed acc in - lwt result = select [Lwt_event.next dev.traj_completed >> return `OK; waiter >> return `Stopped] in + dev.move_state <- Ms_moving `Turn; + lwt () = Commands.Motor.turn dev.card angle speed acc and _ = Lwt_event.next dev.traj_completed in + let result = match dev.move_state with + | Ms_stopping -> + `Stopped + | _ -> + `OK + in dev.move_state <- Ms_static; return result @@ -396,10 +405,10 @@ struct dev.inhibit_forward_until <- until; ignore (inhibited_forward_changed dev until); match dev.move_state with - | Ms_moving(_, `Forward) -> - stop_motors dev `Both `Smooth + | Ms_moving `Forward -> + stop_motors dev `Both `Abrupt | Ms_static when dev.speed_left > 0 || dev.speed_right > 0 -> - stop_motors dev `Both `Smooth + stop_motors dev `Both `Abrupt | _ -> return () @@ -409,10 +418,10 @@ struct dev.inhibit_backward_until <- until; ignore (inhibited_backward_changed dev until); match dev.move_state with - | Ms_moving(_, `Backward) -> - stop_motors dev `Both `Smooth + | Ms_moving `Backward -> + stop_motors dev `Both `Abrupt | Ms_static when dev.speed_left < 0 || dev.speed_right < 0 -> - stop_motors dev `Both `Smooth + stop_motors dev `Both `Abrupt | _ -> return () diff --git a/PC_Mainboard/myocamlbuild.ml b/PC_Mainboard/myocamlbuild.ml index fc811df..d70ead8 100644 --- a/PC_Mainboard/myocamlbuild.ml +++ b/PC_Mainboard/myocamlbuild.ml @@ -75,6 +75,9 @@ let targets = List.filter_opt (function (true, target) -> Some target | (false, (* Services *) (have_lwt_unix && have_obus, "services/hard_stop.best"); + + (* Tests *) + (have_lwt_unix && have_obus, "tests/double_move.best"); ] (* +-----------------------------------------------------------------+ hooks/post-receive -- krobot |