diff --git a/duinobot.py b/duinobot.py index 65868e5c786263c0e4c092046ffa355790822a03..8fbc38c3d3c26b0f98e85d2360d544a0f33d076e 100644 --- a/duinobot.py +++ b/duinobot.py @@ -44,18 +44,16 @@ class Board(object): principalmente si invierten el sentido de giro de los motores, deben limitarse a 100ms por recomendación del fabricante.''' now = datetime.now() - old_time, old_left, old_right = self.__last_move.get( - robot_id, (now - timedelta(0, 1, 0), 0 , 0) + old_time = self._last_move.get( + robot_id, now - timedelta(0, 1, 0) ) - if left is None: - left = old_left - if right is None: - right = old_right - if now - old_time <= self.MOTOR_DELAY_TB6612\ - and (abs(left) > 0 or abs(right) > 0): + if left == 0 and right == 0: + # Siempre dejar pasar los stop() sin registrarlos + return False + if now - old_time <= self.MOTOR_DELAY_TB6612: return True - self.__last_move[robot_id] = (now, left, right) + self._last_move[robot_id] = now return False def __init__(self, device='/dev/ttyUSB0'): @@ -68,7 +66,7 @@ class Board(object): it.setDaemon(True) it.start() self.board.pass_time(0.1) - self.__last_move = dict() + self._last_move = dict() def __del__(self): self.exit() @@ -110,7 +108,7 @@ class Board(object): self.board.nearest_obstacle[robotid] = None self.board.send_sysex(3, [robotid]) # A veces hay que esperar más de 0.04 segundos - for i in xrange(3): + for i in xrange(6): # wait 20ms (ping delay) + 20ms (comm) self.board.pass_time(0.04) if self.board.nearest_obstacle[robotid] is not None: diff --git a/test/test_helper.py b/test/test_helper.py index 23e7838908a406434f1306bbb169f9c68226cb94..a44cd8e6b12649a8da193f685759b75c71c5bace 100644 --- a/test/test_helper.py +++ b/test/test_helper.py @@ -93,4 +93,4 @@ class MockBoard(duinobot.Board): def __init__(self, *args, **kwargs): self.board = MockLowLevelBoard(*args, **kwargs) - self._last_motors_invocation = dict() + self._last_move = dict()