From 4efe3705ecf9014e014ffc3775680697a36287c0 Mon Sep 17 00:00:00 2001 From: Andrey Pohilko Date: Tue, 26 Dec 2017 18:49:15 +0300 Subject: [PATCH] Minor tweaks --- README.md | 2 +- examples/plotter/__init__.py | 37 ++++++++++-------------------------- examples/plotter/try.py | 8 ++++---- 3 files changed, 15 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 4388c7c..9088b48 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Methods to activate motors are: - `angled(angle, speed_primary, speed_secondary)` - makes motor to rotate to specified angle, `angle` value is integer degrees, can be negative and can be more than 360 for several rounds - `stop()` - stops motor at once, it is equivalent for `constant(0)` -Parameter `speed_secondary` is used when it is motor group of `motor_AB` running together. By default, `speed_secondary` equals `speed_primary`. Speed values range is `-1.0` to `1.0`, float values. +Parameter `speed_secondary` is used when it is motor group of `motor_AB` running together. By default, `speed_secondary` equals `speed_primary`. Speed values range is `-1.0` to `1.0`, float values. _Note: In group angled mode, total rotation angle is distributed across 2 motors according to motor speeds ratio._ All these methods are synchronous by default, means method does not return untill it gets confirmation from Hub that command has completed. You can pass `async=True` parameter to any of methods to switch into asynchronous, which means command will return immediately, without waiting for rotation to complete. Be careful with asynchronous calls, as they make Hub to stop reporting synchronizing statuses. diff --git a/examples/plotter/__init__.py b/examples/plotter/__init__.py index 527ae55..389c509 100644 --- a/examples/plotter/__init__.py +++ b/examples/plotter/__init__.py @@ -6,7 +6,7 @@ from pylgbst import ColorDistanceSensor, COLORS, COLOR_RED, COLOR_CYAN class Plotter(object): - MOTOR_RATIO = 1.45 + MOTOR_RATIO = 1.425 ROTATE_UNIT = 2100 def __init__(self, hub, base_speed=1.0): @@ -20,7 +20,6 @@ class Plotter(object): self.both = self._hub.motor_AB self.base_speed = float(base_speed) - self.field_width = 1.0 / self.base_speed self.xpos = 0 self.ypos = 0 self.is_tool_down = False @@ -41,9 +40,9 @@ class Plotter(object): return self._hub.color_distance_sensor.subscribe(self._on_distance, mode=ColorDistanceSensor.COLOR_DISTANCE_FLOAT) - self.caret.timed(0.5, self.base_speed) + self.caret.timed(0.5, 1) try: - self.caret.constant(-self.base_speed) + self.caret.constant(-1) count = 0 max_tries = 50 while self._marker_color not in (COLOR_RED, COLOR_CYAN) and count < max_tries: @@ -59,9 +58,9 @@ class Plotter(object): self._hub.color_distance_sensor.unsubscribe(self._on_distance) if self._marker_color == COLOR_CYAN: - self.move(-self.field_width * 0.1, 0) + self.move(- 0.1, 0) else: - self.move(-self.field_width, 0) + self.move(-1.0, 0) def _on_distance(self, color, distance): self._marker_color = None @@ -89,6 +88,7 @@ class Plotter(object): def _tool_down(self): self.is_tool_down = True self._hub.motor_external.angled(-270, 1) + time.sleep(1.0) # for laser to heat up def _tool_up(self): self._hub.motor_external.angled(270, 1) @@ -109,15 +109,6 @@ class Plotter(object): logging.warning("No movement, ignored") return - if self.xpos + movx < -self.field_width: - logging.warning("Invalid xpos: %s", self.xpos) - # movx += self.xpos - self.field_width - - if self.xpos + movx > self.field_width: - logging.warning("Invalid xpos: %s", self.xpos) - # movx -= self.xpos - self.field_width - # self.xpos -= self.xpos - self.field_width - self._compensate_wheels_backlash(movy) self.xpos += movx @@ -127,9 +118,9 @@ class Plotter(object): logging.info("Motors: %.3f with %.3f/%.3f", length, speed_a, speed_b) if not speed_b: - self.caret.angled(length * 2.0, -speed_a * self.base_speed) + self.caret.angled(length * 2.0, -speed_a * self.base_speed * 0.75) # slow down to cut better elif not speed_a: - self.wheels.angled(length * 2.0, -speed_b * self.base_speed) + self.wheels.angled(length * 2.0, -speed_b * self.base_speed * 0.75) # slow down to cut better else: self.both.angled(length, -speed_a * self.base_speed, -speed_b * self.base_speed) @@ -235,19 +226,11 @@ class Plotter(object): self.line(0, -height) if solid: - max_step = 0.1 + max_step = 0.01 rounds = int(math.ceil(height / max_step)) step = height / rounds flip = 1 - self.line(0, step) # luft - for r in range(1, rounds + 3): + for r in range(1, rounds): self.line(0, step) self.line(width * flip, 0) flip = -flip - - -class LaserPlotter(Plotter): - - def _tool_down(self): - super(LaserPlotter, self)._tool_down() - time.sleep(1.0) diff --git a/examples/plotter/try.py b/examples/plotter/try.py index 68ca46c..a85eef1 100644 --- a/examples/plotter/try.py +++ b/examples/plotter/try.py @@ -2,7 +2,7 @@ import logging import time import traceback -from examples.plotter import LaserPlotter +from examples.plotter import Plotter from pylgbst import EncodedMotor, PORT_AB, PORT_C, PORT_A, PORT_B, MoveHub from pylgbst.comms import DebugServerConnection, BLEConnection from tests import HubMock @@ -269,8 +269,8 @@ if __name__ == '__main__': hub = MoveHub(conn) if 1 else get_hub_mock() - plotter = LaserPlotter(hub, 0.4) - FIELD_WIDTH = plotter.field_width * 0.9 + plotter = Plotter(hub, 0.75) + FIELD_WIDTH = 0.9 try: plotter.initialize() @@ -290,7 +290,7 @@ if __name__ == '__main__': # plotter.spiral(4, 0.02) # plotter.rectangle(FIELD_WIDTH / 5.0, FIELD_WIDTH / 5.0, solid=True) - square_spiral() + # square_spiral() # lego() # christmas_tree() # snowflake(0.5)