-
Notifications
You must be signed in to change notification settings - Fork 9
toio.py motor_3() example fails with more than 3 targets #7
Description
Hello,
While using the TOIO python bindings, tutorial, and examples in Toio for Python, I encountered a possible bug.
I am running on Window 10 Home. Python 3.11.5 via command prompt access and IDLE and Pyton 3.12.7 within VSCode. Note: The crash/bug is the same via straight Python environment or within VSCode.
At the bottom I also list the package dependencies.
The Problem
When using the example for cube.api.motor.motor_control_multiple_targets with 3 or more targets defined, it crashes and a Traceback occurs (see below) and the Cube does not move.
cube.api.motor.motor_control_multiple_targets is supposed to be able to handle up to 29 targets according to
To recreate the error, see motor_3() at https://pypi.org/project/toio.py/ and add a 3rd target to the targets list.
Same code located at the github. See https://github.com/toio/toio.py/blob/main/examples/motor_control.py
Code Snipet with an added 3rd target
targets = [
TargetPosition(
cube_location=CubeLocation(point=Point(x=250, y=250), angle=0),
rotation_option=RotationOption.AbsoluteOptimal,
),
TargetPosition(
cube_location=CubeLocation(point=Point(x=120, y=170), angle=0),
rotation_option=RotationOption.AbsoluteOptimal,
),
TargetPosition(
cube_location=CubeLocation(point=Point(x=170, y=100), angle=0),
rotation_option=RotationOption.AbsoluteOptimal,
),
Run and Traceback
C:\Users\IdeaLINQ\Documents\Development\TOIO>python "test_motor3.py"
Traceback (most recent call last):
File "C:\Users\IdeaLINQ\Documents\Development\TOIO\test_motor3.py", line 30, in
asyncio.run(motor_3())
File "C:\Users\IdeaLINQ\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "C:\Users\IdeaLINQ\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\IdeaLINQ\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:\Users\IdeaLINQ\Documents\Development\TOIO\test_motor3.py", line 18, in motor_3
await cube.api.motor.motor_control_multiple_targets(
File "C:\Users\IdeaLINQ\AppData\Local\Programs\Python\Python311\Lib\site-packages\toio\cube\api\motor.py", line 591, in motor_control_multiple_targets
await self._write_without_response(bytes(motor_target))
File "C:\Users\IdeaLINQ\AppData\Local\Programs\Python\Python311\Lib\site-packages\toio\cube\api\base_class.py", line 108, in write_without_response
return await self.interface.write(self.uuid, data, response=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\IdeaLINQ\AppData\Local\Programs\Python\Python311\Lib\site-packages\toio\device_interface\ble.py", line 106, in write
await self.device.write_gatt_char(char_uuid, data, response)
File "C:\Users\IdeaLINQ\AppData\Local\Programs\Python\Python311\Lib\site-packages\bleak_init.py", line 786, in write_gatt_char
await self._backend.write_gatt_char(characteristic, data, response)
File "C:\Users\IdeaLINQ\AppData\Local\Programs\Python\Python311\Lib\site-packages\bleak\backends\winrt\client.py", line 906, in write_gatt_char
await characteristic.obj.write_value_with_result_async(buf, response),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [WinError -2147024809] The parameter is incorrect
For convenience, here is the full program that works with 2 targets but not 3 or more. Example code below has 3 targets and test_motor1 and test_motor2 have been removed (they work).
# -*- coding: utf-8 -*-
# ************************************************************
#
# motor_control.py
#
# Copyright 2022 Sony Interactive Entertainment Inc.
#
# ************************************************************
import asyncio
from toio import *
def notification_handler(payload: bytearray, info: NotificationHandlerInfo):
motor_info = Motor.is_my_data(payload)
print(info.get_notified_cube().name, type(motor_info), str(motor_info))
async def test_motor_3():
"""
example ToioCoreCube.api.motor.motor_control_multiple_targets()
"""
async with ToioCoreCube() as cube:
await cube.api.motor.register_notification_handler(notification_handler)
targets = [
TargetPosition(
cube_location=CubeLocation(point=Point(x=250, y=250), angle=0),
rotation_option=RotationOption.AbsoluteOptimal,
),
TargetPosition(
cube_location=CubeLocation(point=Point(x=120, y=170), angle=0),
rotation_option=RotationOption.AbsoluteOptimal,
),
TargetPosition(
cube_location=CubeLocation(point=Point(x=170, y=100), angle=0),
rotation_option=RotationOption.AbsoluteOptimal,
),
]
await cube.api.motor.motor_control_multiple_targets(
timeout=5,
movement_type=MovementType.Linear,
speed=Speed(
max=100, speed_change_type=SpeedChangeType.AccelerationAndDeceleration
),
mode=WriteMode.Overwrite,
target_list=targets,
)
await asyncio.sleep(5)
async def main():
print("3: motor_control_multiple_targets()")
await test_motor_3()
Package Dependencies
Requirement already satisfied: setuptools in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (75.3.0)
Requirement already satisfied: typing-extensions in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (4.12.2)
Requirement already satisfied: bleak in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (0.22.3)
Requirement already satisfied: bleak-winrt<2.0.0,>=1.2.0 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from bleak) (1.2.0)
Requirement already satisfied: typing-extensions>=4.7.0 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from bleak) (4.12.2)
Requirement already satisfied: toio-py in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (1.1.0)
Requirement already satisfied: bleak>=0.22.1 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from toio-py) (0.22.3)
Collecting setuptools<70.0.0,>=69.5.1 (from toio-py)
Using cached setuptools-69.5.1-py3-none-any.whl.metadata (6.2 kB)
Requirement already satisfied: typing-extensions<5.0.0,>=4.10.0 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from toio-py) (4.12.2)
Requirement already satisfied: bleak-winrt<2.0.0,>=1.2.0 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from bleak>=0.22.1->toio-py) (1.2.0)
Using cached setuptools-69.5.1-py3-none-any.whl (894 kB)
Installing collected packages: setuptools
Attempting uninstall: setuptools
Found existing installation: setuptools 75.3.0
Uninstalling setuptools-75.3.0:
Successfully uninstalled setuptools-75.3.0
Successfully installed setuptools-69.5.1
Requirement already satisfied: ipykernel in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (6.29.5)
Requirement already satisfied: comm>=0.1.1 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (0.2.2)
Requirement already satisfied: debugpy>=1.6.5 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (1.8.7)
Requirement already satisfied: ipython>=7.23.1 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (8.29.0)
Requirement already satisfied: jupyter-client>=6.1.12 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (8.6.3)
Requirement already satisfied: jupyter-core!=5.0.,>=4.12 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (5.7.2)
Requirement already satisfied: matplotlib-inline>=0.1 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (0.1.7)
Requirement already satisfied: nest-asyncio in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (1.6.0)
Requirement already satisfied: packaging in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (24.1)
Requirement already satisfied: psutil in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (6.1.0)
Requirement already satisfied: pyzmq>=24 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (26.2.0)
Requirement already satisfied: tornado>=6.1 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (6.4.1)
Requirement already satisfied: traitlets>=5.4.0 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipykernel) (5.14.3)
Requirement already satisfied: decorator in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipython>=7.23.1->ipykernel) (5.1.1)
Requirement already satisfied: jedi>=0.16 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipython>=7.23.1->ipykernel) (0.19.1)
Requirement already satisfied: prompt-toolkit<3.1.0,>=3.0.41 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipython>=7.23.1->ipykernel) (3.0.48)
Requirement already satisfied: pygments>=2.4.0 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipython>=7.23.1->ipykernel) (2.18.0)
Requirement already satisfied: stack-data in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipython>=7.23.1->ipykernel) (0.6.3)
Requirement already satisfied: typing-extensions>=4.6 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipython>=7.23.1->ipykernel) (4.12.2)
Requirement already satisfied: colorama in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from ipython>=7.23.1->ipykernel) (0.4.6)
Requirement already satisfied: python-dateutil>=2.8.2 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from jupyter-client>=6.1.12->ipykernel) (2.9.0.post0)
Requirement already satisfied: platformdirs>=2.5 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from jupyter-core!=5.0.,>=4.12->ipykernel) (4.3.6)
Requirement already satisfied: pywin32>=300 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from jupyter-core!=5.0.*,>=4.12->ipykernel) (308)
Requirement already satisfied: parso<0.9.0,>=0.8.3 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from jedi>=0.16->ipython>=7.23.1->ipykernel) (0.8.4)
Requirement already satisfied: wcwidth in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from prompt-toolkit<3.1.0,>=3.0.41->ipython>=7.23.1->ipykernel) (0.2.13)
Requirement already satisfied: six>=1.5 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from python-dateutil>=2.8.2->jupyter-client>=6.1.12->ipykernel) (1.16.0)
Requirement already satisfied: executing>=1.2.0 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from stack-data->ipython>=7.23.1->ipykernel) (2.1.0)
Requirement already satisfied: asttokens>=2.1.0 in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from stack-data->ipython>=7.23.1->ipykernel) (2.4.1)
Requirement already satisfied: pure-eval in c:\users\idealinq\appdata\local\programs\python\python311\lib\site-packages (from stack-data->ipython>=7.23.1->ipykernel) (0.2.3)