From b313abd7449af357d6815e1116975d5987a39364 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sun, 8 May 2011 15:43:13 +0200 Subject: digital/*/tools: use robot specific init parameters --- digital/ai/tools/marcel.py | 6 +++--- digital/ai/tools/robospierre.py | 6 +++--- digital/asserv/tools/asserv/init.py | 14 ++++++++++++-- digital/asserv/tools/inter_asserv.py | 16 ++++------------ digital/asserv/tools/step.py | 11 ++--------- digital/asserv/tools/test_goto.py | 12 ++---------- digital/asserv/tools/write_eeprom.py | 11 ++--------- digital/io-hub/tools/io_hub/init.py | 6 ++++-- digital/io/tools/dump_usdist.py | 7 ++----- digital/io/tools/io/init.py | 14 ++++++++++---- digital/io/tools/io/io.py | 5 +++-- digital/mimot/tools/mimot/init.py | 17 +++++++---------- digital/mimot/tools/write_eeprom.py | 17 ++++------------- host/utils/init_proto.py | 36 ++++++++++++++++++++++++++++++++++++ 14 files changed, 94 insertions(+), 84 deletions(-) create mode 100644 host/utils/init_proto.py diff --git a/digital/ai/tools/marcel.py b/digital/ai/tools/marcel.py index 32995326..08314ca3 100644 --- a/digital/ai/tools/marcel.py +++ b/digital/ai/tools/marcel.py @@ -27,11 +27,11 @@ class Robot: mimot_cmd = ('../../mimot/src/dirty/dirty.host', '-m9', 'marcel') io_cmd = ('../../io/src/io.host') self.asserv = asserv.Proto (PopenIO (asserv_cmd), proto_time, - **asserv.init.host) + **asserv.init.host['marcel']) self.mimot = mimot.Proto (PopenIO (mimot_cmd), proto_time, - **mimot.init.host) + **mimot.init.host['marcel']) self.io = io.Proto (PopenIO (io_cmd), proto_time, - **io.init.host) + **io.init.host['marcel']) self.robot_start_pos = { False: (300, 2100 - 305, math.radians (-270)), True: (3000 - 300, 2100 - 305, math.radians (-270)) diff --git a/digital/ai/tools/robospierre.py b/digital/ai/tools/robospierre.py index 59023184..09be4bea 100644 --- a/digital/ai/tools/robospierre.py +++ b/digital/ai/tools/robospierre.py @@ -27,11 +27,11 @@ class Robot: mimot_cmd = ('../../mimot/src/dirty/dirty.host', '-m9', 'marcel') io_hub_cmd = ('../../io-hub/src/robospierre/io_hub.host') self.asserv = asserv.Proto (PopenIO (asserv_cmd), proto_time, - **asserv.init.host) + **asserv.init.host['robospierre']) self.mimot = mimot.Proto (PopenIO (mimot_cmd), proto_time, - **mimot.init.host) + **mimot.init.host['robospierre']) self.io = io_hub.Proto (PopenIO (io_hub_cmd), proto_time, - **io_hub.init.host) + **io_hub.init.host['robospierre']) self.robot_start_pos = { False: (700, 2100 - 250, math.radians (-270)), True: (3000 - 700, 2100 - 250, math.radians (-270)) diff --git a/digital/asserv/tools/asserv/init.py b/digital/asserv/tools/asserv/init.py index 29596a77..3f0afa36 100644 --- a/digital/asserv/tools/asserv/init.py +++ b/digital/asserv/tools/asserv/init.py @@ -1,5 +1,5 @@ """Default parameters for asserv.""" -host = dict ( +host_marcel = dict ( scale = 0.0395840674352314, f = 0xdd1, tkp = 1, tkd = 16, ta = 0.75, tsm = 0x20, tss = 0x10, @@ -12,7 +12,12 @@ host = dict ( E = 0x3ff, D = 0x1ff, l = 0x1000, ) -target = dict ( +host = { + 'giboulee': host_marcel, + 'marcel': host_marcel, + 'robospierre': host_marcel, + } +target_marcel = dict ( scale = 0.0415178942124, f = 0xcef, c = float (0x00ffbabf) / (1 << 24), tkp = 1, tkd = 16, @@ -29,3 +34,8 @@ target = dict ( l = 0x1000, w = 0x09, ) +target = { + 'giboulee': target_marcel, + 'marcel': target_marcel, + 'robospierre': target_marcel, + } diff --git a/digital/asserv/tools/inter_asserv.py b/digital/asserv/tools/inter_asserv.py index f2c74a5c..82a92c32 100644 --- a/digital/asserv/tools/inter_asserv.py +++ b/digital/asserv/tools/inter_asserv.py @@ -26,8 +26,7 @@ import math import asserv import asserv.init -import proto.popen_io -import serial +from utils.init_proto import init_proto from inter.inter import Inter from Tkinter import * @@ -35,15 +34,9 @@ from Tkinter import * class InterAsserv (Inter): """Inter, communicating with the asserv board.""" - def __init__ (self, argv): + def __init__ (self): # Asserv. - if argv[0] == '!': - io = proto.popen_io.PopenIO (argv[1:]) - i = asserv.init.host - else: - io = serial.Serial (argv[0]) - i = asserv.init.target - self.a = asserv.Proto (io, **i) + self.a = init_proto ('giboulee', asserv.Proto, asserv.init) self.a.async = True # Inter. Inter.__init__ (self) @@ -128,8 +121,7 @@ class InterAsserv (Inter): self.a.ftw (self.backwardVar.get ()) if __name__ == '__main__': - import sys - app = InterAsserv (sys.argv[1:]) + app = InterAsserv () try: app.mainloop () finally: diff --git a/digital/asserv/tools/step.py b/digital/asserv/tools/step.py index 5b5040b1..b9f798ef 100644 --- a/digital/asserv/tools/step.py +++ b/digital/asserv/tools/step.py @@ -1,19 +1,12 @@ -import sys - import Gnuplot import asserv -import proto.popen_io -import serial +from utils.init_proto import init_proto def step (name, offset, kp, ki, kd, plots, **param): - if sys.argv[1] == '!': - io = proto.popen_io.PopenIO (sys.argv[2:]) - else: - io = serial.Serial (sys.argv[1]) p = { name + 'kp': kp, name + 'ki': ki, name + 'kd': kd} p.update (param) - a = asserv.Proto (io, **p) + a = init_proto (None, asserv.Proto, init = p) a.stats (*plots) a.consign (name, offset) #a.speed (name, 16) diff --git a/digital/asserv/tools/test_goto.py b/digital/asserv/tools/test_goto.py index da9ee41c..2cbbb350 100644 --- a/digital/asserv/tools/test_goto.py +++ b/digital/asserv/tools/test_goto.py @@ -1,19 +1,11 @@ -import sys import random import math import asserv import asserv.init -import proto.popen_io -import serial +from utils.init_proto import init_proto -if sys.argv[1] == '!': - io = proto.popen_io.PopenIO (sys.argv[2:]) - init = asserv.init.host -else: - io = serial.Serial (sys.argv[1]) - init = asserv.init.target -a = asserv.Proto (io, **init) +a = init_proto (None, asserv.Proto, asserv.init) for i in xrange (10): x = random.randrange (2000) y = random.randrange (1100) diff --git a/digital/asserv/tools/write_eeprom.py b/digital/asserv/tools/write_eeprom.py index b6b9abd9..09a727ea 100644 --- a/digital/asserv/tools/write_eeprom.py +++ b/digital/asserv/tools/write_eeprom.py @@ -2,15 +2,8 @@ import sys import asserv import asserv.init -import proto.popen_io -import serial +from utils.init_proto import init_proto -if sys.argv[1] == '!': - io = proto.popen_io.PopenIO (sys.argv[2:]) - init = asserv.init.host -else: - io = serial.Serial (sys.argv[1]) - init = asserv.init.target -a = asserv.Proto (io, **init) +a = init_proto (None, asserv.Proto, asserv.init) a.write_eeprom () a.close () diff --git a/digital/io-hub/tools/io_hub/init.py b/digital/io-hub/tools/io_hub/init.py index aa5aa10c..2adaa85c 100644 --- a/digital/io-hub/tools/io_hub/init.py +++ b/digital/io-hub/tools/io_hub/init.py @@ -1,4 +1,6 @@ """Default parameters for io-hub.""" -host = dict ( - ) +host = { + 'robospierre': dict ( + ), + } target = host diff --git a/digital/io/tools/dump_usdist.py b/digital/io/tools/dump_usdist.py index 43e0724e..001a8cc7 100644 --- a/digital/io/tools/dump_usdist.py +++ b/digital/io/tools/dump_usdist.py @@ -1,11 +1,8 @@ -import sys - import io import io.init -import serial +from utils.init_proto import init_proto -fd = serial.Serial (sys.argv[1]) -p = io.Proto (fd, **io.init.target) +p = init_proto ('marcel', io.Proto, io.init) def cb (*val): l = [ ] for v in val: diff --git a/digital/io/tools/io/init.py b/digital/io/tools/io/init.py index 059ea408..ebcb1ec9 100644 --- a/digital/io/tools/io/init.py +++ b/digital/io/tools/io/init.py @@ -1,6 +1,12 @@ """Default parameters for io.""" -host = dict ( - servo_pos = ((1, 255), (255, 1), (1, 255), (1, 255), (1, 255), - (1, 255), (1, 255), (1, 255)), - ) +host = { + 'aquajim': dict ( + servo_pos = ((1, 255), (255, 1), (1, 255), (1, 255), (1, 255), + (1, 255), (1, 255), (1, 255)), + ), + 'marcel': dict ( + ), + 'robospierre': dict ( + ), + } target = host diff --git a/digital/io/tools/io/io.py b/digital/io/tools/io/io.py index 375ad38d..edefbd9d 100644 --- a/digital/io/tools/io/io.py +++ b/digital/io/tools/io/io.py @@ -34,8 +34,9 @@ class Proto: def send_param (self): p = self.param - for i, t in enumerate (p['servo_pos']): - self.proto.send ('p', 'BBB', i, *t) + if ('servo_pos') in p: + for i, t in enumerate (p['servo_pos']): + self.proto.send ('p', 'BBB', i, *t) def write_eeprom (self): self.proto.send ('p', 'cc', 'E', 's') diff --git a/digital/mimot/tools/mimot/init.py b/digital/mimot/tools/mimot/init.py index 116cebb5..682b29cb 100644 --- a/digital/mimot/tools/mimot/init.py +++ b/digital/mimot/tools/mimot/init.py @@ -1,14 +1,5 @@ """Default parameters for asserv.""" -host = dict ( - a0kp = 4, - a0a = 16, a0sm = 0x60, a0ss = 0x10, - a0be = 256, a0bs = 0x18, a0bc = 5, - a1kp = 4, - a1a = 16, a1sm = 0x60, a1ss = 0x10, - a1be = 256, a1bs = 0x18, a1bc = 5, - E = 0x3ff, D = 0x1ff, - ) -target = dict ( +target_marcel = dict ( a0kp = 4, a0a = 16, a0sm = 0x60, a0ss = 0x10, a0be = 256, a0bs = 0x18, a0bc = 5, @@ -18,3 +9,9 @@ target = dict ( E = 0x3ff, D = 0x1ff, w = 0x03, ) +target = { + 'marcel': target_marcel, + 'robospierre': target_marcel, + } + +host = target diff --git a/digital/mimot/tools/write_eeprom.py b/digital/mimot/tools/write_eeprom.py index ab2ae315..7fe54342 100644 --- a/digital/mimot/tools/write_eeprom.py +++ b/digital/mimot/tools/write_eeprom.py @@ -1,16 +1,7 @@ -import sys - import mimot import mimot.init -import proto.popen_io -import serial +from utils.init_proto import init_proto -if sys.argv[1] == '!': - io = proto.popen_io.PopenIO (sys.argv[2:]) - init = mimot.init.host -else: - io = serial.Serial (sys.argv[1]) - init = mimot.init.target -a = mimot.Proto (io, **init) -a.write_eeprom () -a.close () +m = init_proto (None, mimot.Proto, mimot.init) +m.write_eeprom () +m.close () diff --git a/host/utils/init_proto.py b/host/utils/init_proto.py new file mode 100644 index 00000000..f5c2bfa4 --- /dev/null +++ b/host/utils/init_proto.py @@ -0,0 +1,36 @@ +"""Helper to create a Proto instance.""" +import proto.popen_io +import serial +import optparse + +def init_proto (default_robot, proto_class, init_module = None, init = None): + """Helper to create a Proto instance from command line arguments.""" + if init_module is None and init is None: + init = { } + # Parse arguments. + parser = optparse.OptionParser ( + usage = "usage: %prog [options] TTY|! PROGRAM...", + description = "TTY is a device name (example: %prog " + "/dev/ttyUSB0), PROGRAM is a host program with its arguments " + "(example: %prog -- ! ../src/board.host board_arg).") + if init_module: + parser.add_option ('-r', '--robot', help = "use specified robot", + metavar = 'NAME', default = default_robot) + (options, args) = parser.parse_args () + if init_module and options.robot is None: + parser.error ("no robot specified") + if not args: + parser.error ("not enough arguments") + # Create parameters. + if args[0] == '!': + io = proto.popen_io.PopenIO (args[1:]) + if init_module: + init = init_module.host[options.robot] + else: + if len (args) != 1: + parser.error ("too many arguments after device") + io = serial.Serial (args[0]) + if init_module: + init = init_module.target[options.robot] + return proto_class (io, **init) + -- cgit v1.2.3