1
0
mirror of https://github.com/undera/pylgbst.git synced 2020-11-18 19:37:26 -08:00

BB8 joystick is ready

This commit is contained in:
Andrey Pokhilko 2019-08-15 11:43:26 +03:00
parent e1e650220f
commit 3a8d17737b
3 changed files with 18 additions and 11 deletions

View File

@ -9,7 +9,7 @@ from examples.bb8joystick.joystick import Joystick
if __name__ == "__main__": if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG if 'pydevd' in sys.modules else logging.WARNING) logging.basicConfig(level=logging.DEBUG if 'pydevd' in sys.modules else logging.WARNING)
bb8 = BB8("BB-CC13") bb8 = BB8()
joystick = Joystick() joystick = Joystick()
@ -28,7 +28,7 @@ if __name__ == "__main__":
def roll(speed, direction): def roll(speed, direction):
print("Roll", speed, direction) print("Roll", speed, direction)
if speed < 2: if speed < 3:
speed = 0 speed = 0
bb8.roll(speed, direction) bb8.roll(speed, direction)
@ -39,7 +39,9 @@ if __name__ == "__main__":
bb8.roll(0, 0) bb8.roll(0, 0)
else: else:
print("Stabilize") print("Stabilize")
bb8.color(255, 0, 255)
bb8.stabilize() bb8.stabilize()
bb8.color(0, 0, 0)
try: try:

View File

@ -48,7 +48,8 @@ class _SpheroImproved(spheropy.Sphero):
class BB8(object): class BB8(object):
def __init__(self, name): def __init__(self, name="BB-CC13"):
self._heading = 0
# marry sync with async https://www.aeracode.org/2018/02/19/python-async-simplified/ # marry sync with async https://www.aeracode.org/2018/02/19/python-async-simplified/
self._loop = asyncio.new_event_loop() self._loop = asyncio.new_event_loop()
asyncio.set_event_loop(self._loop) asyncio.set_event_loop(self._loop)
@ -73,14 +74,18 @@ class BB8(object):
def heading(self, heading): def heading(self, heading):
self._wait_loop() self._wait_loop()
self._loop.run_until_complete(self._sphero.set_heading(heading)) heading = 359 - heading
# self._loop.run_until_complete(self._sphero.roll(1, heading, spheropy.RollMode.IN_PLACE_ROTATE)) self._heading = heading
# self._loop.run_until_complete(self._sphero.set_heading(359 - heading))
self._loop.run_until_complete(self._sphero.roll(1, heading, spheropy.RollMode.IN_PLACE_ROTATE))
def roll(self, speed=10, direction=0): def roll(self, speed=10, direction=0):
self._wait_loop() self._wait_loop()
direction += self._heading
direction %= 360
speed = int(255 * speed / 10) speed = int(255 * speed / 10)
speed *= 0.5 # throttle down a bit speed *= 0.75 # throttle down a bit
self._loop.run_until_complete(self._sphero.roll(speed, direction)) self._loop.run_until_complete(self._sphero.roll(int(speed), direction))
def stop(self): def stop(self):
self._wait_loop() self._wait_loop()

View File

@ -110,7 +110,7 @@ class Joystick(object):
self._on_joystick.add(callback) self._on_joystick.add(callback)
def _calc_joystick(self): def _calc_joystick(self):
norm_a = -self._angle_A / self.RANGE_A norm_a = self._angle_A / self.RANGE_A
norm_b = self._angle_C / self.RANGE_C norm_b = self._angle_C / self.RANGE_C
logging.debug("%s / %s", self._angle_A, self._angle_C) logging.debug("%s / %s", self._angle_A, self._angle_C)
logging.debug("%s / %s", norm_a, norm_b) logging.debug("%s / %s", norm_a, norm_b)
@ -130,7 +130,7 @@ class Joystick(object):
direction = 270 - direction direction = 270 - direction
for callback in self._on_joystick: for callback in self._on_joystick:
callback(round(10 * speed), 359 - int(direction)) callback(int(round(10 * speed)), int(direction))
if __name__ == '__main__': if __name__ == '__main__':
@ -139,7 +139,7 @@ if __name__ == '__main__':
stick = Joystick() stick = Joystick()
stick.on_button(lambda x: logging.info("Button: %s" % x)) stick.on_button(lambda x: logging.info("Button: %s" % x))
stick.on_rotation(lambda x: logging.info("Motor B: %s" % x)) stick.on_rotation(lambda x: logging.info("Rotation: %s" % x))
stick.on_joystick(lambda speed, head: logging.info("Speed: %.2f, dir: %s" % (speed, head))) stick.on_joystick(lambda speed, head: logging.info("Speed: %s, Direction: %s" % (speed, head)))
time.sleep(100) time.sleep(100)