summaryrefslogtreecommitdiff
path: root/digital/asserv/tools
diff options
context:
space:
mode:
Diffstat (limited to 'digital/asserv/tools')
-rw-r--r--digital/asserv/tools/asserv/asserv.py19
-rw-r--r--digital/asserv/tools/asserv/init.py26
-rw-r--r--digital/asserv/tools/inter_asserv.py2
-rw-r--r--digital/asserv/tools/test_goto.py33
4 files changed, 66 insertions, 14 deletions
diff --git a/digital/asserv/tools/asserv/asserv.py b/digital/asserv/tools/asserv/asserv.py
index 997b05fb..4f386d7a 100644
--- a/digital/asserv/tools/asserv/asserv.py
+++ b/digital/asserv/tools/asserv/asserv.py
@@ -269,6 +269,15 @@ class Proto:
self.proto.send ('f', 'BB', backward and 1 or 0, self.mseq)
self.wait (self.finished, auto = True)
+ def ptw (self, backward = True, init_x = None, init_y = None,
+ init_a = None):
+ """Push the wall."""
+ self.mseq += 1
+ self.proto.send ('f', 'BllHB', backward and 1 or 0,
+ self._dist_f248 (init_x), self._dist_f248 (init_y),
+ self._angle_f16 (init_a), self.mseq)
+ self.wait (self.finished, auto = True)
+
def set_simu_pos (self, x, y, a):
"""Set simulated position."""
self.proto.send ('h', 'chhh', 'X', int (round (x)), int (round (y)),
@@ -381,10 +390,16 @@ class Proto:
return int (round (d / self.param['scale']))
def _dist_f248 (self, d):
- return int (round ((1 << 8) * d / self.param['scale']))
+ if d is None:
+ return -1
+ else:
+ return int (round ((1 << 8) * d / self.param['scale']))
def _angle_f16 (self, a):
- return int (round ((1 << 16) * a / (2 * math.pi))) & 0xffff
+ if a is None:
+ return 0xffff
+ else:
+ return int (round ((1 << 16) * a / (2 * math.pi))) & 0xffff
def _angle_f824 (self, a):
return int (round ((1 << 24) * a / (2 * math.pi)))
diff --git a/digital/asserv/tools/asserv/init.py b/digital/asserv/tools/asserv/init.py
index 3f0afa36..c845af03 100644
--- a/digital/asserv/tools/asserv/init.py
+++ b/digital/asserv/tools/asserv/init.py
@@ -12,10 +12,19 @@ host_marcel = dict (
E = 0x3ff, D = 0x1ff,
l = 0x1000,
)
+host_robospierre = dict (
+ scale = 0.0395840674352314, f = 0xdd1,
+ tkp = 1, tkd = 16,
+ ta = 0.75, tsm = 0x60, tss = 0x10,
+ akp = 2, akd = 16,
+ aa = 0.25, asm = 0x60, ass = 0x10,
+ E = 0x3ff, D = 0x1ff,
+ l = 0x1000,
+ )
host = {
'giboulee': host_marcel,
'marcel': host_marcel,
- 'robospierre': host_marcel,
+ 'robospierre': host_robospierre,
}
target_marcel = dict (
scale = 0.0415178942124, f = 0xcef,
@@ -34,8 +43,21 @@ target_marcel = dict (
l = 0x1000,
w = 0x09,
)
+target_robospierre = dict (
+ scale = 0.0317975134344, f = 0x134e,
+ c = float (0xffa897) / (1 << 24),
+ tkp = 1, tkd = 16,
+ ta = 0.75, tsm = 0x60, tss = 0x10,
+ tbe = 256, tbs = 0x08, tbc = 40,
+ akp = 2, akd = 16,
+ aa = 0.5, asm = 0x60, ass = 0x10,
+ abe = 128, abs = 0x08, abc = 40,
+ E = 0x3ff, D = 0x1ff,
+ l = 0x1000,
+ w = 0x00,
+ )
target = {
'giboulee': target_marcel,
'marcel': target_marcel,
- 'robospierre': target_marcel,
+ 'robospierre': target_robospierre,
}
diff --git a/digital/asserv/tools/inter_asserv.py b/digital/asserv/tools/inter_asserv.py
index 82a92c32..72e31f60 100644
--- a/digital/asserv/tools/inter_asserv.py
+++ b/digital/asserv/tools/inter_asserv.py
@@ -43,7 +43,7 @@ class InterAsserv (Inter):
self.tk.createfilehandler (self.a, READABLE, self.read)
self.timeout ()
# Query position.
- self.a.register_pos ()
+ self.a.register_pos (interval = 225 / 20)
self.a.position.register (self.pos)
def createWidgets (self):
diff --git a/digital/asserv/tools/test_goto.py b/digital/asserv/tools/test_goto.py
index 2cbbb350..f2aa2535 100644
--- a/digital/asserv/tools/test_goto.py
+++ b/digital/asserv/tools/test_goto.py
@@ -3,14 +3,29 @@ import math
import asserv
import asserv.init
-from utils.init_proto import init_proto
+from utils.init_proto import InitProto
-a = init_proto (None, asserv.Proto, asserv.init)
-for i in xrange (10):
- x = random.randrange (2000)
- y = random.randrange (1100)
- a.goto (x, y)
- a.goto_angle (math.radians (random.randrange (360)))
-a.goto (0, 0)
-a.goto_angle (0)
+ip = InitProto (None, asserv.Proto, asserv.init)
+ip.parser.add_option ('-i', '--iterations',
+ help = "number of test iterations", metavar = 'NB', default = 10)
+ip.parser.add_option ('-t', '--type',
+ help = "test type, one of random or linear", metavar = 'TYPE',
+ default = 'random')
+ip.parse_args ()
+a = ip.get_proto ()
+try:
+ if ip.options.type == 'random':
+ for i in xrange (ip.options.iterations):
+ x = random.randrange (2000)
+ y = random.randrange (1100)
+ a.goto (x, y)
+ a.goto_angle (math.radians (random.randrange (360)))
+ a.goto (0, 0)
+ a.goto_angle (0)
+ elif ip.options.type == 'linear':
+ for i in xrange (ip.options.iterations):
+ a.speed_pos ('t', 1000)
+ a.speed_pos ('t', -1000)
+except:
+ pass
a.close ()