summaryrefslogtreecommitdiff
path: root/digital/mimot/tools/mimot/mex.py
diff options
context:
space:
mode:
Diffstat (limited to 'digital/mimot/tools/mimot/mex.py')
-rw-r--r--digital/mimot/tools/mimot/mex.py76
1 files changed, 22 insertions, 54 deletions
diff --git a/digital/mimot/tools/mimot/mex.py b/digital/mimot/tools/mimot/mex.py
index 5724189e..f39d3ebf 100644
--- a/digital/mimot/tools/mimot/mex.py
+++ b/digital/mimot/tools/mimot/mex.py
@@ -29,75 +29,43 @@ import simu.mex.msg
class Mex:
"""Handle communications with simulated mimot."""
- class Aux (Observable):
- """Auxiliary motor angle.
+ class Position (Observable):
+ """Robot position.
+ - pos: (x, y) millimeters.
- angle: radian.
"""
- def __init__ (self):
+ def __init__ (self, node, instance):
Observable.__init__ (self)
+ self.pos = None
self.angle = None
+ node.register (instance + ':position', self.__handle)
- class Pack:
- """Handle reception of several Aux for one message."""
+ def __handle (self, msg):
+ x, y, a = msg.pop ('hhl')
+ self.pos = (x, y)
+ self.angle = float (a) / 1024
+ self.notify ()
- def __init__ (self, node, instance, list):
- self.__list = list
- node.register (instance + ':aux', self.__handle)
+ class PWM (Observable):
+ """Motor PWM.
- def __handle (self, msg):
- angles = msg.pop ('%dl' % len (self.__list))
- for aux, angle in zip (self.__list, angles):
- aux.angle = float (angle) / 1024
- aux.notify ()
-
- class Limits (Observable):
- """Motor limits.
-
- - min, max: limits in radian.
+ - pwm: current PWM values (hardware unit).
"""
- def __init__ (self, pack, index):
+ def __init__ (self, node, instance):
Observable.__init__ (self)
- self.pack = pack
- self.index = index
- self.min = None
- self.max = None
- self.register (self.__notified)
-
- def __notified (self):
- self.pack.set (self.index, self.min, self.max)
-
- class Pack:
- """Handle emission of several limits for one message."""
-
- def __init__ (self, node, instance):
- self.node = node
- self.mtype = node.reserve (instance + ':limits')
- self.limits = [ None, None, None, None ]
-
- def set (self, index, min, max):
- self.limits[index * 2] = min
- self.limits[index * 2 + 1] = max
- self.__send ()
+ self.pwm = None
+ node.register (instance + ':pwm', self.__handle)
- def __send (self):
- m = simu.mex.msg.Msg (self.mtype)
- for l in self.limits:
- if l is None:
- li = -1
- else:
- li = int (l * 1024)
- m.push ('l', li)
- self.node.send (m)
+ def __handle (self, msg):
+ self.pwm = msg.pop ('hh')
+ self.notify ()
def __init__ (self, node, instance = 'mimot0'):
- self.aux = (self.Aux (), self.Aux ())
- self.__aux_pack = self.Aux.Pack (node, instance, self.aux)
- self.__limits_pack = self.Limits.Pack (node, instance)
- for index, aux in enumerate (self.aux):
- aux.limits = self.Limits (self.__limits_pack, index)
+ self.position = self.Position (node, instance)
+ self.pwm = self.PWM (node, instance)