machine-logic-sdk 3.0.0__tar.gz → 3.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/PKG-INFO +3 -3
  2. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/README.md +1 -1
  3. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/idigital_input.py +4 -0
  4. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/idigital_io_shared.py +7 -6
  5. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/irobot_move_sequence.py +7 -5
  6. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/robot_move.py +4 -4
  7. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/robot_move_sequence.py +3 -3
  8. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_robot_move.py +15 -9
  9. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_robot_move_sequence.py +2 -2
  10. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/pyproject.toml +2 -2
  11. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/__init__.py +0 -0
  12. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/decorators/__init__.py +0 -0
  13. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/decorators/deprecated.py +0 -0
  14. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/decorators/future_api.py +0 -0
  15. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/decorators/tests/__init__.py +0 -0
  16. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/decorators/tests/test_deprecated.py +0 -0
  17. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/decorators/tests/test_future_api.py +0 -0
  18. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/decorators/tests/test_undocumented.py +0 -0
  19. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/decorators/undocumented.py +0 -0
  20. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/__init__.py +0 -0
  21. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/event_listener.py +0 -0
  22. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/exception.py +0 -0
  23. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/handle.py +0 -0
  24. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/iac_motor.py +0 -0
  25. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/iactuator.py +0 -0
  26. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/iactuator_group.py +0 -0
  27. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/icalibration_frame.py +0 -0
  28. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/icamera.py +0 -0
  29. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/icartesian_target.py +0 -0
  30. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/idigital_output.py +0 -0
  31. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/igeneric_joint_constraint.py +0 -0
  32. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/ijoint_target.py +0 -0
  33. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/imachine.py +0 -0
  34. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/imachine_motion.py +0 -0
  35. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/ipath_follower.py +0 -0
  36. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/ipneumatic.py +0 -0
  37. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/ireference_frame.py +0 -0
  38. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/irobot.py +0 -0
  39. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/irobot_alarm.py +0 -0
  40. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/iscene.py +0 -0
  41. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/machine_configuration.py +0 -0
  42. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/mqtt_client.py +0 -0
  43. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/__init__.py +0 -0
  44. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_batch_move.py +0 -0
  45. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_event_listener.py +0 -0
  46. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_icartesian_target.py +0 -0
  47. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_idigital_input.py +0 -0
  48. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_idigital_output.py +0 -0
  49. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_igeneric_joint_constraint.py +0 -0
  50. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_ijoint_target.py +0 -0
  51. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_imachine.py +0 -0
  52. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_ipath_follower.py +0 -0
  53. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_ireference_frame.py +0 -0
  54. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_irobot.py +0 -0
  55. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/tests/test_mqtt_client.py +0 -0
  56. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/__init__.py +0 -0
  57. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/ac_motor_details.py +0 -0
  58. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/actuator_details.py +0 -0
  59. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/batch_move.py +0 -0
  60. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/estop_status.py +0 -0
  61. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/input_details.py +0 -0
  62. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/output_details.py +0 -0
  63. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/path_follower_status.py +0 -0
  64. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/path_follower_tool.py +0 -0
  65. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/pneumatic_details.py +0 -0
  66. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/robot_calibration.py +0 -0
  67. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/robot_pose.py +0 -0
  68. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/robot_tcp.py +0 -0
  69. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/robot_types.py +0 -0
  70. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/types/scene_assets.py +0 -0
  71. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/util/__init__.py +0 -0
  72. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/ivention/util/inheritance.py +0 -0
  73. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/__init__.py +0 -0
  74. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/ac_motor.py +0 -0
  75. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/actuator.py +0 -0
  76. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/actuator_group.py +0 -0
  77. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/calibration_frame.py +0 -0
  78. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/camera.py +0 -0
  79. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/cartesian_target.py +0 -0
  80. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/digital_input.py +0 -0
  81. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/digital_output.py +0 -0
  82. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/env_conf.py +0 -0
  83. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/execution_engine_api.py +0 -0
  84. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/firmware_api.py +0 -0
  85. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/joint_target.py +0 -0
  86. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/machine.py +0 -0
  87. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/machine_motion.py +0 -0
  88. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/motion_profile.py +0 -0
  89. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/path_follower.py +0 -0
  90. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/pneumatic.py +0 -0
  91. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/reference_frame.py +0 -0
  92. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/__init__.py +0 -0
  93. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/generic_joint_constraint.py +0 -0
  94. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/listener.py +0 -0
  95. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/robot.py +0 -0
  96. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/robot_alarm.py +0 -0
  97. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/robot_state.py +0 -0
  98. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/robot_utils.py +0 -0
  99. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/robot/vrmcs_client_adapter.py +0 -0
  100. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/scene.py +0 -0
  101. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/MatrixAssertionsMixin.py +0 -0
  102. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/__init__.py +0 -0
  103. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_ac_motor.py +0 -0
  104. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_actuator.py +0 -0
  105. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_actuator_group.py +0 -0
  106. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_calibration_frame.py +0 -0
  107. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_cartesian_target.py +0 -0
  108. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_compute_position_relative_to_base.py +0 -0
  109. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_env_conf.py +0 -0
  110. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_firmware_api.py +0 -0
  111. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_joint_target.py +0 -0
  112. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_listener.py +0 -0
  113. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_machine.py +0 -0
  114. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_path_follower.py +0 -0
  115. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_pneumatic.py +0 -0
  116. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_pose_conversions.py +0 -0
  117. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_reference_frame.py +0 -0
  118. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_robot.py +0 -0
  119. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_robot_state.py +0 -0
  120. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_robot_transforms.py +0 -0
  121. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_scene.py +0 -0
  122. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/tests/test_vrmcs_client_adapter.py +0 -0
  123. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/utils/__init__.py +0 -0
  124. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/utils/compute_position_relative_to_base.py +0 -0
  125. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/utils/robot_pose_conversions.py +0 -0
  126. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/machinelogic/utils/robot_transforms.py +0 -0
  127. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/measurements/__init__.py +0 -0
  128. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/measurements/angle.py +0 -0
  129. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/measurements/distance.py +0 -0
  130. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/measurements/tests/__init__.py +0 -0
  131. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/measurements/tests/angle_test.py +0 -0
  132. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/measurements/tests/distance_test.py +0 -0
  133. {machine_logic_sdk-3.0.0 → machine_logic_sdk-3.0.2}/machinelogic/types/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: machine-logic-sdk
3
- Version: 3.0.0
3
+ Version: 3.0.2
4
4
  Summary: SDK for controlling Vention hardware
5
5
  License: Proprietary
6
6
  Keywords: Vention,MachineLogic,SDK,Robot,Automation
@@ -22,7 +22,7 @@ Requires-Dist: toml (>=0.10,<0.11)
22
22
  Requires-Dist: typing_extensions (>=4.8,<5.0)
23
23
  Requires-Dist: urllib3 (>=2.6.3)
24
24
  Requires-Dist: uv (>=0.6,<0.7)
25
- Requires-Dist: vention-firmware-grpc-client (==0.0.2)
25
+ Requires-Dist: vention-firmware-grpc-client (==0.1.1)
26
26
  Project-URL: Documentation, https://vention.io/resources/guides/machinelogic-python-programming-514
27
27
  Description-Content-Type: text/markdown
28
28
 
@@ -61,7 +61,7 @@ pip install machine-logic-sdk
61
61
  ## Compatibility:
62
62
 
63
63
  Please pay close attention to the compatibility table provided in the [Official machine-logic-sdk Documentation](https://docs.vention.io/docs/en/vention-python-api)
64
- to determine which version of the sdk is compatible with your version of MachineMotion
64
+ to determine which version of the sdk is compatible with your version of MachineMotion.
65
65
 
66
66
  For development installations, see the [Development](#development) section below.
67
67
 
@@ -33,7 +33,7 @@ pip install machine-logic-sdk
33
33
  ## Compatibility:
34
34
 
35
35
  Please pay close attention to the compatibility table provided in the [Official machine-logic-sdk Documentation](https://docs.vention.io/docs/en/vention-python-api)
36
- to determine which version of the sdk is compatible with your version of MachineMotion
36
+ to determine which version of the sdk is compatible with your version of MachineMotion.
37
37
 
38
38
  For development installations, see the [Development](#development) section below.
39
39
 
@@ -24,6 +24,10 @@ class IDigitalInput(ABC):
24
24
  """
25
25
  A software representation of an DigitalInput. It is not recommended that you
26
26
  construct this object yourself. Rather, you should query it from a Machine instance.
27
+ DigitalInput peripherals can be connected to the controller via the following devices:
28
+ - IO Module
29
+ - Push Button Module
30
+ - Conveyor Motor
27
31
  """
28
32
 
29
33
  def __init__(self, configuration: DigitalInputConfiguration) -> None:
@@ -1,4 +1,5 @@
1
1
  from abc import ABC
2
+ from typing import Literal
2
3
 
3
4
 
4
5
  class DigitalIOState:
@@ -37,7 +38,7 @@ class DigitalIOConfiguration(ABC):
37
38
  device_id: int,
38
39
  controller_id: str,
39
40
  controller_port: int,
40
- pin: int,
41
+ pin: int | Literal["A", "B"],
41
42
  active_high: bool,
42
43
  ) -> None:
43
44
  self._uuid: str = uuid
@@ -45,7 +46,7 @@ class DigitalIOConfiguration(ABC):
45
46
  self._device_id: int = device_id
46
47
  self._controller_id: str = controller_id
47
48
  self._controller_port: int = controller_port
48
- self._pin: int = pin
49
+ self._pin: int | Literal["A", "B"] = pin
49
50
  self._active_high: bool = active_high
50
51
 
51
52
  @property
@@ -65,7 +66,7 @@ class DigitalIOConfiguration(ABC):
65
66
 
66
67
  @property
67
68
  def device_id(self) -> int:
68
- """The device number of the DigitalInput/DigitalOutput."""
69
+ """The device number of the device that the DigitalInput/DigitalOutput is connected to."""
69
70
  return self._device_id
70
71
 
71
72
  @property
@@ -75,12 +76,12 @@ class DigitalIOConfiguration(ABC):
75
76
 
76
77
  @property
77
78
  def controller_port(self) -> int:
78
- """The MachineMotion controller port of the DigitalInput/DigitalOutput."""
79
+ """The MachineMotion controller port of the device that the DigitalInput/DigitalOutput is connected to."""
79
80
  return self._controller_port
80
81
 
81
82
  @property
82
- def pin(self) -> int:
83
- """The pin number of the DigitalInput/DigitalOutput."""
83
+ def pin(self) -> int | Literal["A", "B"]:
84
+ """The pin number or letter of the DigitalInput/DigitalOutput."""
84
85
  return self._pin
85
86
 
86
87
  @property
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from abc import ABC, abstractmethod
4
- from typing import List, Union
4
+ from typing import List, Optional, Union
5
5
 
6
6
  from machinelogic.decorators.undocumented import undocumented, undocumented_property
7
7
  from machinelogic.ivention.types.robot_types import (
@@ -59,7 +59,7 @@ class IRobotMoveSequence(ABC):
59
59
  target: JointAnglesDegrees,
60
60
  velocity: DegreesPerSecond = 10.0,
61
61
  acceleration: DegreesPerSecondSquared = 10.0,
62
- blend_radius: Millimeters = 0.0,
62
+ blend_radius: Optional[Millimeters] = None,
63
63
  ) -> IRobotMoveSequence:
64
64
  """
65
65
  Append a joint move to the sequence.
@@ -68,7 +68,8 @@ class IRobotMoveSequence(ABC):
68
68
  target: A list of 6 target joint angles in degrees.
69
69
  velocity: Joint velocity in degrees per second
70
70
  acceleration: Joint acceleration in degrees per second squared
71
- blend_radius: Blend radius in millimeters for smooth transitions between moves
71
+ blend_radius: Blend radius in millimeters for smooth transitions between moves.
72
+ If None, the robot controller will use its default behavior (no blending).
72
73
 
73
74
  Returns:
74
75
  Self for method chaining
@@ -80,7 +81,7 @@ class IRobotMoveSequence(ABC):
80
81
  target: CartesianPose,
81
82
  velocity: MillimetersPerSecond = 100.0,
82
83
  acceleration: MillimetersPerSecondSquared = 100.0,
83
- blend_radius: Millimeters = 0.0,
84
+ blend_radius: Optional[Millimeters] = None,
84
85
  reference_frame: Union[CartesianPose, None] = None,
85
86
  ) -> IRobotMoveSequence:
86
87
  """
@@ -90,7 +91,8 @@ class IRobotMoveSequence(ABC):
90
91
  target: Target Cartesian pose [x, y, z, rx, ry, rz] in mm and degrees
91
92
  velocity: Linear velocity in millimeters per second
92
93
  acceleration: Linear acceleration in millimeters per second squared
93
- blend_radius: Blend radius in millimeters for smooth transitions between moves
94
+ blend_radius: Blend radius in millimeters for smooth transitions between moves.
95
+ If None, the robot controller will use its default behavior (no blending).
94
96
  reference_frame: Optional reference frame for the target pose. If None, uses robot base frame.
95
97
 
96
98
  Returns:
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import math
4
- from typing import Union, cast
4
+ from typing import Optional, Union, cast
5
5
 
6
6
  from vrmcs.types import (
7
7
  CartesianConstraints,
@@ -38,7 +38,7 @@ class RobotMove:
38
38
  target: Union[CartesianPose, JointAnglesDegrees],
39
39
  velocity: Union[DegreesPerSecond, MillimetersPerSecond],
40
40
  acceleration: Union[DegreesPerSecondSquared, MillimetersPerSecondSquared],
41
- blend_radius: Millimeters,
41
+ blend_radius: Optional[Millimeters] = None,
42
42
  ):
43
43
  self.move_type = move_type
44
44
  self.target = target
@@ -72,7 +72,7 @@ class RobotMove:
72
72
  move_type=MoveType.MOVE_TYPE_JOINT,
73
73
  joint_goal=joint_goal,
74
74
  joint_constraints=joint_constraints,
75
- blend_radius=self.blend_radius / 1000.0, # mm to meters
75
+ blend_radius=(None if self.blend_radius is None else self.blend_radius / 1000.0),
76
76
  )
77
77
 
78
78
  def _to_vrmcs_cartesian_segment(self) -> MoveSegment:
@@ -112,5 +112,5 @@ class RobotMove:
112
112
  move_type=MoveType.MOVE_TYPE_CARTESIAN,
113
113
  cartesian_goal=cartesian_goal,
114
114
  cartesian_constraints=cartesian_constraints,
115
- blend_radius=self.blend_radius / 1000.0, # mm to meters
115
+ blend_radius=(None if self.blend_radius is None else self.blend_radius / 1000.0),
116
116
  )
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import TYPE_CHECKING, Any, List, Union
5
+ from typing import TYPE_CHECKING, Any, List, Optional, Union
6
6
 
7
7
  from vrmcs.types import MoveType
8
8
 
@@ -58,7 +58,7 @@ class RobotMoveSequence(IRobotMoveSequence):
58
58
  target: JointAnglesDegrees,
59
59
  velocity: DegreesPerSecond = 10.0,
60
60
  acceleration: DegreesPerSecondSquared = 10.0,
61
- blend_radius: Millimeters = 0.0,
61
+ blend_radius: Optional[Millimeters] = None,
62
62
  ) -> RobotMoveSequence:
63
63
  self.moves.append(
64
64
  RobotMove(
@@ -76,7 +76,7 @@ class RobotMoveSequence(IRobotMoveSequence):
76
76
  target: CartesianPose,
77
77
  velocity: MillimetersPerSecond = 100.0,
78
78
  acceleration: MillimetersPerSecondSquared = 100.0,
79
- blend_radius: Millimeters = 0.0,
79
+ blend_radius: Optional[Millimeters] = None,
80
80
  reference_frame: Union[CartesianPose, None] = None,
81
81
  ) -> RobotMoveSequence:
82
82
  if reference_frame is None:
@@ -173,7 +173,6 @@ class TestRobotMove(unittest.TestCase):
173
173
  target=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
174
174
  velocity=10.0,
175
175
  acceleration=5.0,
176
- blend_radius=0.0,
177
176
  )
178
177
 
179
178
  with self.assertRaises(ValueError) as context:
@@ -181,8 +180,20 @@ class TestRobotMove(unittest.TestCase):
181
180
 
182
181
  self.assertIn("Unknown move type", str(context.exception))
183
182
 
184
- def test_to_vrmcs_segment_zero_blend_radius(self) -> None:
185
- """Test to_vrmcs_segment with zero blend radius."""
183
+ def test_to_vrmcs_segment_none_blend_radius(self) -> None:
184
+ """Test to_vrmcs_segment with None blend radius omits the field."""
185
+ move = RobotMove(
186
+ move_type=MoveType.MOVE_TYPE_JOINT,
187
+ target=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
188
+ velocity=10.0,
189
+ acceleration=5.0,
190
+ )
191
+
192
+ segment = move.to_vrmcs_segment()
193
+ self.assertIsNone(segment.blend_radius)
194
+
195
+ def test_to_vrmcs_segment_explicit_zero_blend_radius(self) -> None:
196
+ """Test to_vrmcs_segment with explicit zero blend radius sends 0.0."""
186
197
  move = RobotMove(
187
198
  move_type=MoveType.MOVE_TYPE_JOINT,
188
199
  target=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
@@ -192,6 +203,7 @@ class TestRobotMove(unittest.TestCase):
192
203
  )
193
204
 
194
205
  segment = move.to_vrmcs_segment()
206
+ self.assertIsNotNone(segment.blend_radius)
195
207
  self.assertEqual(segment.blend_radius, 0.0)
196
208
 
197
209
  def test_to_vrmcs_segment_joint_angle_conversion(self) -> None:
@@ -202,7 +214,6 @@ class TestRobotMove(unittest.TestCase):
202
214
  target=target,
203
215
  velocity=10.0,
204
216
  acceleration=5.0,
205
- blend_radius=0.0,
206
217
  )
207
218
 
208
219
  segment = move.to_vrmcs_segment()
@@ -228,7 +239,6 @@ class TestRobotMove(unittest.TestCase):
228
239
  target=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
229
240
  velocity=velocity,
230
241
  acceleration=acceleration,
231
- blend_radius=0.0,
232
242
  )
233
243
 
234
244
  segment = move.to_vrmcs_segment()
@@ -248,7 +258,6 @@ class TestRobotMove(unittest.TestCase):
248
258
  target=target,
249
259
  velocity=100.0,
250
260
  acceleration=50.0,
251
- blend_radius=0.0,
252
261
  )
253
262
 
254
263
  segment = move.to_vrmcs_segment()
@@ -268,7 +277,6 @@ class TestRobotMove(unittest.TestCase):
268
277
  target=[100.0, 200.0, 300.0, 0.0, 90.0, 180.0],
269
278
  velocity=velocity,
270
279
  acceleration=acceleration,
271
- blend_radius=0.0,
272
280
  )
273
281
 
274
282
  segment = move.to_vrmcs_segment()
@@ -285,7 +293,6 @@ class TestRobotMove(unittest.TestCase):
285
293
  target=target,
286
294
  velocity=100.0,
287
295
  acceleration=50.0,
288
- blend_radius=0.0,
289
296
  )
290
297
 
291
298
  move.to_vrmcs_segment()
@@ -300,7 +307,6 @@ class TestRobotMove(unittest.TestCase):
300
307
  target=target,
301
308
  velocity=100.0,
302
309
  acceleration=50.0,
303
- blend_radius=0.0,
304
310
  )
305
311
 
306
312
  segment = move.to_vrmcs_segment()
@@ -86,7 +86,7 @@ class TestRobotMoveSequence(unittest.TestCase):
86
86
  self.assertEqual(move.target, target)
87
87
  self.assertEqual(move.velocity, 10.0) # default velocity
88
88
  self.assertEqual(move.acceleration, 10.0) # default acceleration
89
- self.assertEqual(move.blend_radius, 0.0) # default blend radius
89
+ self.assertIsNone(move.blend_radius) # default blend radius
90
90
 
91
91
  def test_movel_basic(self) -> None:
92
92
  """Test basic append_movel functionality."""
@@ -135,7 +135,7 @@ class TestRobotMoveSequence(unittest.TestCase):
135
135
  self.assertEqual(move.target, target)
136
136
  self.assertEqual(move.velocity, 100.0) # default velocity
137
137
  self.assertEqual(move.acceleration, 100.0) # default acceleration
138
- self.assertEqual(move.blend_radius, 0.0) # default blend radius
138
+ self.assertIsNone(move.blend_radius) # default blend radius
139
139
 
140
140
  def test_movel_with_reference_frame(self) -> None:
141
141
  """Test append_movel with reference frame transformation."""
@@ -11,7 +11,7 @@ addopts = "--cov --cov-report html:'../../coverage/projects/machine-code/libs/ma
11
11
 
12
12
  [tool.poetry]
13
13
  name = "machine-logic-sdk"
14
- version = "3.0.0"
14
+ version = "3.0.2"
15
15
  description = "SDK for controlling Vention hardware"
16
16
  authors = [ "VentionCo" ]
17
17
  license = "Proprietary"
@@ -39,7 +39,7 @@ classifiers = [
39
39
  docstring-parser = ">=0.16,<0.17"
40
40
  toml = ">=0.10,<0.11"
41
41
  python-statemachine = ">=2.5,<3.0"
42
- vention-firmware-grpc-client = "0.0.2"
42
+ vention-firmware-grpc-client = "0.1.1"
43
43
  uv = ">=0.6,<0.7"
44
44
 
45
45
  [tool.poetry.group.dev.dependencies]