agx-bus 0.0.1__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.

Potentially problematic release.


This version of agx-bus might be problematic. Click here for more details.

Files changed (254) hide show
  1. agx_bus-0.0.1/PKG-INFO +11 -0
  2. agx_bus-0.0.1/pyproject.toml +37 -0
  3. agx_bus-0.0.1/pyproject.toml.orig +37 -0
  4. agx_bus-0.0.1/src/agx_bus/__init__.py +3 -0
  5. agx_bus-0.0.1/src/agx_bus/bus.py +390 -0
  6. agx_bus-0.0.1/src/agx_bus/pyAgxArm/.log/__init__.py +0 -0
  7. agx_bus-0.0.1/src/agx_bus/pyAgxArm/__init__.py +13 -0
  8. agx_bus-0.0.1/src/agx_bus/pyAgxArm/__init__.pyi +7 -0
  9. agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/__init__.py +12 -0
  10. agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/__init__.pyi +6 -0
  11. agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/agx_arm_factory.py +256 -0
  12. agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/agx_arm_factory.pyi +530 -0
  13. agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/arm_options.py +69 -0
  14. agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/constants.py +194 -0
  15. agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/firmware.py +118 -0
  16. agx_bus-0.0.1/src/agx_bus/pyAgxArm/api/firmware.pyi +1 -0
  17. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/DEMO.md +0 -0
  18. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/__init__.py +0 -0
  19. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/detect_nero_series.py +357 -0
  20. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/detect_piper_series.py +412 -0
  21. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/manage_vcan.py +95 -0
  22. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/nero/__init__.py +0 -0
  23. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/nero/test1.py +358 -0
  24. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper/__init__.py +0 -0
  25. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper/test1.py +379 -0
  26. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_h/__init__.py +0 -0
  27. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_h/test1.py +379 -0
  28. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_l/__init__.py +0 -0
  29. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_l/test1.py +379 -0
  30. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_x/__init__.py +0 -0
  31. agx_bus-0.0.1/src/agx_bus/pyAgxArm/demos/piper_x/test1.py +379 -0
  32. agx_bus-0.0.1/src/agx_bus/pyAgxArm/extensions/__init__.py +0 -0
  33. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/__init__.py +0 -0
  34. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/__init__.py +0 -0
  35. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/__init__.py +14 -0
  36. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can20_canfd.py +407 -0
  37. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can_comm.py +243 -0
  38. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can_sys_utils/__init__.py +8 -0
  39. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can_sys_utils/base_util.py +13 -0
  40. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/can_sys_utils/linux_util.py +76 -0
  41. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/comm_factory.py +50 -0
  42. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/comm_factory.pyi +27 -0
  43. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/core/__init__.py +0 -0
  44. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/core/can_comm_base.py +45 -0
  45. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/core/comm_abstract.py +27 -0
  46. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/comms/core/comm_interface.py +61 -0
  47. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/__init__.py +67 -0
  48. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/__init__.py +5 -0
  49. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/arm_driver_abstract.py +506 -0
  50. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/arm_driver_context.py +4 -0
  51. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/arm_driver_interface.py +80 -0
  52. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/driver_context.py +337 -0
  53. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/effector_driver_context.py +4 -0
  54. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/protocol_parser_abstract.py +32 -0
  55. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/protocol_parser_interface.py +16 -0
  56. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/submodel_driver_context_abstract.py +41 -0
  57. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/submodel_driver_context_interface.py +19 -0
  58. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/core/table_driven.py +67 -0
  59. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/__init__.py +11 -0
  60. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/agx_gripper/__init__.py +3 -0
  61. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/agx_gripper/default/__init__.py +4 -0
  62. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/agx_gripper/default/driver.py +587 -0
  63. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/agx_gripper/default/parser.py +160 -0
  64. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2/__init__.py +3 -0
  65. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2/default/__init__.py +4 -0
  66. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2/default/driver.py +407 -0
  67. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2/default/parser.py +174 -0
  68. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_pro/__init__.py +3 -0
  69. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_pro/default/__init__.py +3 -0
  70. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_pro/default/driver.py +1133 -0
  71. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_pro/default/libstark_bridge.py +177 -0
  72. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_touch/__init__.py +3 -0
  73. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_touch/default/__init__.py +3 -0
  74. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/effector/revo2_touch/default/driver.py +131 -0
  75. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/__init__.py +13 -0
  76. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/default/__init__.py +4 -0
  77. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/default/driver.py +1950 -0
  78. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/default/parser.py +321 -0
  79. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/driver_load.py +0 -0
  80. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/__init__.py +0 -0
  81. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v111/__init__.py +4 -0
  82. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v111/driver.py +359 -0
  83. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v111/parser.py +97 -0
  84. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v112/__init__.py +4 -0
  85. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v112/driver.py +1038 -0
  86. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v112/parser.py +231 -0
  87. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v120/__init__.py +3 -0
  88. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v120/driver.py +194 -0
  89. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v121/__init__.py +3 -0
  90. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/v121/driver.py +59 -0
  91. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/nero/versions/version_load.py +0 -0
  92. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/__init__.py +11 -0
  93. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/default/__init__.py +4 -0
  94. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/default/driver.py +3182 -0
  95. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/default/parser.py +1064 -0
  96. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/driver_load.py +0 -0
  97. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/__init__.py +7 -0
  98. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v183/__init__.py +3 -0
  99. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v183/driver.py +182 -0
  100. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v188/__init__.py +4 -0
  101. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v188/driver.py +281 -0
  102. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v188/parser.py +121 -0
  103. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v189/__init__.py +3 -0
  104. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/v189/driver.py +33 -0
  105. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper/versions/version_load.py +0 -0
  106. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/__init__.py +11 -0
  107. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/default/__init__.py +0 -0
  108. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/default/driver.py +31 -0
  109. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/__init__.py +7 -0
  110. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v183/__init__.py +3 -0
  111. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v183/driver.py +31 -0
  112. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v188/__init__.py +3 -0
  113. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v188/driver.py +31 -0
  114. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v189/__init__.py +3 -0
  115. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_h/versions/v189/driver.py +31 -0
  116. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/__init__.py +11 -0
  117. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/default/__init__.py +0 -0
  118. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/default/driver.py +31 -0
  119. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/__init__.py +7 -0
  120. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v183/__init__.py +3 -0
  121. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v183/driver.py +31 -0
  122. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v188/__init__.py +3 -0
  123. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v188/driver.py +31 -0
  124. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v189/__init__.py +3 -0
  125. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_l/versions/v189/driver.py +31 -0
  126. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/__init__.py +11 -0
  127. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/default/__init__.py +0 -0
  128. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/default/driver.py +77 -0
  129. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/__init__.py +7 -0
  130. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v183/__init__.py +3 -0
  131. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v183/driver.py +77 -0
  132. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v188/__init__.py +3 -0
  133. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v188/driver.py +92 -0
  134. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v189/__init__.py +3 -0
  135. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/drivers/piper_x/versions/v189/driver.py +68 -0
  136. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/__init__.py +0 -0
  137. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/__init__.py +15 -0
  138. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/attritube_base.py +99 -0
  139. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/enum_base.py +77 -0
  140. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/msg_abstract.py +48 -0
  141. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/core/msg_interface.py +28 -0
  142. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/__init__.py +0 -0
  143. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/__init__.py +1 -0
  144. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/__init__.py +12 -0
  145. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/feedback/__init__.py +9 -0
  146. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/feedback/arm_feedback_gripper.py +86 -0
  147. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/feedback/arm_feedback_gripper_teaching_param.py +46 -0
  148. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/transmit/__init__.py +7 -0
  149. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/transmit/arm_gripper_ctrl.py +70 -0
  150. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/agx_gripper/default/transmit/arm_gripper_teaching_param_config.py +55 -0
  151. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/__init__.py +0 -0
  152. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/__init__.py +15 -0
  153. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/__init__.py +12 -0
  154. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/feedback_finger_current.py +46 -0
  155. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/feedback_finger_pos.py +46 -0
  156. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/feedback_finger_spd.py +46 -0
  157. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/feedback/feedback_hand_status.py +69 -0
  158. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/__init__.py +12 -0
  159. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/finger_current_ctrl.py +55 -0
  160. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/finger_pos_ctrl.py +55 -0
  161. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/finger_pos_time_ctrl.py +66 -0
  162. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/effector/revo2/default/transmit/finger_spd_ctrl.py +55 -0
  163. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/__init__.py +0 -0
  164. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/__init__.py +85 -0
  165. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/__init__.py +93 -0
  166. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_cpv_response.py +8 -0
  167. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_crash_protection_rating.py +90 -0
  168. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_current_motor_angle_limit_max_spd.py +72 -0
  169. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_current_motor_max_acc_limit.py +57 -0
  170. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_high_spd.py +112 -0
  171. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_joint_states.py +59 -0
  172. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_leader_joint_states.py +104 -0
  173. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_low_spd.py +101 -0
  174. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/feedback/arm_feedback_status.py +421 -0
  175. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/__init__.py +72 -0
  176. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_cpv_settings_and_queries.py +8 -0
  177. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_crash_protection_rating_config.py +81 -0
  178. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_joint_config.py +79 -0
  179. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_joint_ctrl.py +58 -0
  180. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_joint_mit_ctrl.py +71 -0
  181. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_mode_ctrl.py +167 -0
  182. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_motor_angle_limit_max_spd_config.py +64 -0
  183. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_motor_enable_disable.py +59 -0
  184. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/default/transmit/arm_search_motor_max_angle_spd_acc_limit.py +55 -0
  185. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/__init__.py +11 -0
  186. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v111/__init__.py +11 -0
  187. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v111/arm_feedback_status.py +36 -0
  188. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v111/arm_mode_ctrl.py +21 -0
  189. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v112/__init__.py +15 -0
  190. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/nero/versions/v112/arm_feedback_ik.py +94 -0
  191. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/__init__.py +0 -0
  192. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/__init__.py +87 -0
  193. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/__init__.py +73 -0
  194. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_cpv_response.py +76 -0
  195. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_crash_protection_rating.py +95 -0
  196. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_current_end_vel_acc_param.py +76 -0
  197. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_current_motor_angle_limit_max_spd.py +80 -0
  198. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_current_motor_max_acc_limit.py +62 -0
  199. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_end_pose.py +78 -0
  200. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_firmware.py +16 -0
  201. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_high_spd.py +122 -0
  202. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_joint_assistance_rating.py +58 -0
  203. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_joint_states.py +78 -0
  204. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_low_spd.py +198 -0
  205. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_set_instruction_response.py +70 -0
  206. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/feedback/arm_feedback_status.py +414 -0
  207. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/__init__.py +70 -0
  208. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_circular_pattern.py +50 -0
  209. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_cpv_settings_and_queries.py +79 -0
  210. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_crash_protection_rating_config.py +81 -0
  211. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_end_pose_ctrl.py +68 -0
  212. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_end_vel_acc_param_config.py +65 -0
  213. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_joint_assistance_rating_config.py +49 -0
  214. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_joint_config.py +95 -0
  215. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_joint_ctrl.py +79 -0
  216. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_joint_mit_ctrl.py +106 -0
  217. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_leader_arm_move_to_home.py +42 -0
  218. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_leader_follower_config.py +102 -0
  219. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_mode_ctrl.py +167 -0
  220. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_motion_ctrl.py +120 -0
  221. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_motor_angle_limit_max_spd_config.py +71 -0
  222. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_motor_enable_disable.py +66 -0
  223. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_param_enquiry_and_config.py +139 -0
  224. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_req_firmware.py +8 -0
  225. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/default/transmit/arm_search_motor_max_angle_spd_acc_limit.py +60 -0
  226. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/msg_load.py +84 -0
  227. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/msg_load.pyi +22 -0
  228. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/__init__.py +11 -0
  229. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/v188/__init__.py +21 -0
  230. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/v188/arm_feedback_ik.py +82 -0
  231. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/v188/arm_feedback_status.py +36 -0
  232. agx_bus-0.0.1/src/agx_bus/pyAgxArm/protocols/can_protocol/msgs/piper/versions/v188/arm_mode_ctrl.py +21 -0
  233. agx_bus-0.0.1/src/agx_bus/pyAgxArm/py.typed +0 -0
  234. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/__init__.py +0 -0
  235. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/__init__.py +0 -0
  236. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/can_activate.sh +145 -0
  237. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/can_config.sh +282 -0
  238. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/can_find_and_config.sh +72 -0
  239. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/can_muti_activate.sh +188 -0
  240. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/linux/find_all_can_port.sh +30 -0
  241. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/__init__.py +0 -0
  242. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/can_activate.sh +145 -0
  243. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/can_config.sh +282 -0
  244. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/can_find_and_config.sh +72 -0
  245. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/can_muti_activate.sh +188 -0
  246. agx_bus-0.0.1/src/agx_bus/pyAgxArm/scripts/ubuntu/find_all_can_port.sh +30 -0
  247. agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/__init__.py +21 -0
  248. agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/fps.py +145 -0
  249. agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/logger_mag.py +265 -0
  250. agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/mdh_kinematics.py +83 -0
  251. agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/numeric_codec.py +412 -0
  252. agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/tf.py +448 -0
  253. agx_bus-0.0.1/src/agx_bus/pyAgxArm/utiles/validator.py +187 -0
  254. agx_bus-0.0.1/src/agx_bus/pyAgxArm/version.py +4 -0
agx_bus-0.0.1/PKG-INFO ADDED
@@ -0,0 +1,11 @@
1
+ Metadata-Version: 2.3
2
+ Name: agx-bus
3
+ Version: 0.0.1
4
+ Requires-Dist: numpy>=2.0.0,<2.3.0
5
+ Requires-Dist: python-can>=3.3.4
6
+ Requires-Dist: typing-extensions>=3.7.4.3
7
+ Requires-Dist: ruff ; extra == 'dev'
8
+ Requires-Dist: ty ; extra == 'dev'
9
+ Requires-Dist: mypy ; extra == 'dev'
10
+ Requires-Python: >=3.10
11
+ Provides-Extra: dev
@@ -0,0 +1,37 @@
1
+ [build-system]
2
+ requires = ["uv_build >= 0.12.10, <0.13.0"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ name = "agx-bus"
7
+ requires-python = ">=3.10"
8
+ dependencies = [
9
+ "numpy>=2.0.0,<2.3.0",
10
+ "python-can>=3.3.4",
11
+ "typing-extensions>=3.7.4.3",
12
+ ]
13
+ version = "0.0.1"
14
+
15
+ [project.optional-dependencies]
16
+ dev = [
17
+ "ruff",
18
+ "ty",
19
+ "mypy",
20
+ ]
21
+
22
+ [tool.ruff]
23
+ line-length = 88
24
+ exclude = ["src/agx_bus/pyAgxArm"]
25
+
26
+ [tool.ruff.lint]
27
+ select = [
28
+ "E",
29
+ "W",
30
+ "F",
31
+ "I",
32
+ ]
33
+ ignore = []
34
+
35
+ [tool.ty.src]
36
+ include = ["src"]
37
+ exclude = ["src/agx_bus/pyAgxArm"]
@@ -0,0 +1,37 @@
1
+ [build-system]
2
+ requires = ["uv_build >= 0.12.10, <0.13.0"]
3
+ build-backend = "uv_build"
4
+
5
+
6
+ [project]
7
+ name = "agx-bus"
8
+ requires-python = ">=3.10"
9
+ dependencies = [
10
+ "numpy>=2.0.0,<2.3.0",
11
+ # pyAgxArm dependencies
12
+ "python-can>=3.3.4",
13
+ "typing-extensions>=3.7.4.3",
14
+ ]
15
+ version = "0.0.1"
16
+
17
+ [project.optional-dependencies]
18
+ dev = [
19
+ "ruff",
20
+ "ty",
21
+ "mypy",
22
+ ]
23
+
24
+
25
+ [tool.ruff]
26
+ line-length = 88
27
+ exclude = ["src/agx_bus/pyAgxArm"]
28
+
29
+ [tool.ruff.lint]
30
+ select = [
31
+ "E", "W", "F", "I"
32
+ ]
33
+ ignore = []
34
+
35
+ [tool.ty.src]
36
+ include = ["src"]
37
+ exclude = ["src/agx_bus/pyAgxArm"]
@@ -0,0 +1,3 @@
1
+ from .bus import Bus
2
+
3
+ __all__ = ["Bus"]
@@ -0,0 +1,390 @@
1
+ import time
2
+ from dataclasses import dataclass
3
+ from enum import IntEnum, unique
4
+ from typing import Literal
5
+
6
+ import numpy as np
7
+ from numpy.typing import ArrayLike, NDArray
8
+
9
+ from .pyAgxArm import (
10
+ AgxArmFactory,
11
+ ArmModel,
12
+ create_agx_arm_config,
13
+ )
14
+
15
+
16
+ @dataclass(frozen=True)
17
+ class Joints:
18
+ timestamp: NDArray[np.float64]
19
+
20
+ position: NDArray[np.float64]
21
+ velocity: NDArray[np.float64]
22
+
23
+ torque: NDArray[np.float64]
24
+ current: NDArray[np.float64]
25
+
26
+
27
+ @dataclass(frozen=True)
28
+ class Gripper:
29
+ timestamp: float
30
+
31
+ width: float
32
+ force: float
33
+
34
+
35
+ @unique
36
+ class ControlType(IntEnum):
37
+ STANDBY = 0x00
38
+ CAN = 0x01
39
+ TEACHING = 0x02
40
+ ETHERNET = 0x03
41
+ WIFI = 0x04
42
+ REMOTE = 0x05
43
+ LINKAGE_TEACHING_INPUT = 0x06
44
+ OFFLINE_TRAJECTORY = 0x07
45
+ UNKNOWN = 0xFF
46
+
47
+
48
+ class ArmStatus(IntEnum):
49
+ NORMAL = 0x00
50
+ EMERGENCY_STOP = 0x01
51
+ NO_SOLUTION = 0x02
52
+ SINGULARITY_POINT = 0x03
53
+ TARGET_POS_EXCEEDS_LIMIT = 0x04
54
+ JOINT_COMMUNICATION_ERR = 0x05
55
+ JOINT_BRAKE_NOT_RELEASED = 0x06
56
+ COLLISION_OCCURRED = 0x07
57
+ OVERSPEED_DURING_TEACHING_DRAG = 0x08
58
+ JOINT_STATUS_ERR = 0x09
59
+ OTHER_ERROR = 0x0A
60
+ TEACHING_RECORD = 0x0B
61
+ TEACHING_EXECUTION = 0x0C
62
+ TEACHING_PAUSE = 0x0D
63
+ MAIN_CONTROLLER_NTC_OVER_TEMPERATURE = 0x0E
64
+ RELEASE_RESISTOR_NTC_OVER_TEMPERATURE = 0x0F
65
+ UNKNOWN = 0xFF
66
+
67
+
68
+ @unique
69
+ class MoveType(IntEnum):
70
+ POSITION = 0x00
71
+ JOINT = 0x01
72
+ LINE = 0x02
73
+ CURVE = 0x03
74
+ MIT = 0x04 # Piper firmware < v188; v188+ uses 0x06
75
+ CPV = 0x05
76
+ UNKNOWN = 0xFF
77
+
78
+
79
+ @unique
80
+ class TeachingStatus(IntEnum):
81
+ DISABLED = 0x00 # Stop
82
+ START_RECORDING = 0x01 # Start recording (enter drag-to-teach mode)
83
+ STOP_RECORDING = 0x02 # Stop recording (exit drag-to-teach mode)
84
+ EXECUTE_TRAJECTORY = 0x03 # Execute trajectory (replay recorded trajectory)
85
+ PAUSE_EXECUTION = 0x04 # Pause execution
86
+ RESUME_EXECUTION = 0x05 # Resume execution (continue trajectory replay)
87
+ TERMINATE_EXECUTION = 0x06 # Terminate execution
88
+ MOVE_TO_START = 0x07 # Move to trajectory start point
89
+
90
+
91
+ @unique
92
+ class MotionStatus(IntEnum):
93
+ REACHED = 0x00
94
+ MOVING = 0x01
95
+ UNKNOWN = 0xFF
96
+
97
+
98
+ @dataclass
99
+ class Status:
100
+ arm: ArmStatus
101
+ control: ControlType
102
+ move: MoveType
103
+
104
+ motion: MotionStatus
105
+ teaching: TeachingStatus
106
+
107
+ comm_errors: dict[str, bool]
108
+ limit_exceeds: dict[str, bool]
109
+
110
+ def is_standby(self) -> bool | None:
111
+ if self.control == ControlType.STANDBY:
112
+ return True
113
+ elif self.control == ControlType.CAN:
114
+ return False
115
+
116
+ return None
117
+
118
+ def reached(self) -> bool | None:
119
+ if self.move == MotionStatus.REACHED:
120
+ return True
121
+ elif self.move == MotionStatus.MOVING:
122
+ return False
123
+
124
+ return None
125
+
126
+ def comm_ok(self) -> bool:
127
+ return not any(self.comm_errors)
128
+
129
+ def limit_exceeded(self) -> bool:
130
+ return any(self.limit_exceeds)
131
+
132
+
133
+ class Bus:
134
+ joint_names: tuple[str, ...] = (
135
+ "base",
136
+ "shoulder",
137
+ "elbow",
138
+ "wrist_roll",
139
+ "wrist_pitch",
140
+ "tool_roll",
141
+ )
142
+
143
+ def __init__(
144
+ self, channel: str, *, version: str = "default", timeout: float = 1.0
145
+ ) -> None:
146
+ self.timeout = timeout
147
+ self.name_to_idx: dict[str, Literal[1, 2, 3, 4, 5, 6]] = {
148
+ "base": 1,
149
+ "shoulder": 2,
150
+ "elbow": 3,
151
+ "wrist_roll": 4,
152
+ "wrist_pitch": 5,
153
+ "tool_roll": 6,
154
+ }
155
+
156
+ version_map: dict[str, Literal["default", "v183", "v188", "v189"]] = {
157
+ "default": "default",
158
+ "v183": "v183",
159
+ "v188": "v188",
160
+ "v189": "v189",
161
+ }
162
+
163
+ cfg = create_agx_arm_config(
164
+ robot=ArmModel.PIPER,
165
+ channel=channel,
166
+ firmeware_version=version_map[version],
167
+ )
168
+
169
+ self.arm = arm = AgxArmFactory.create_arm(cfg)
170
+ self.ee = arm.init_effector(arm.OPTIONS.EFFECTOR.AGX_GRIPPER)
171
+
172
+ def connect(self) -> None:
173
+ self.arm.connect()
174
+
175
+ self.arm.set_speed_percent(percent=100)
176
+ time.sleep(0.1)
177
+
178
+ def disconnect(self) -> None:
179
+ self.arm.disconnect()
180
+
181
+ def __enter__(self):
182
+ self.connect()
183
+ return self
184
+
185
+ def __exit__(self, exc_type, exc_value, exc_tb):
186
+ self.disconnect()
187
+ return False
188
+
189
+ def enable_control(self, percent: int = 100) -> None:
190
+ if percent < 0 or percent > 100:
191
+ raise ValueError
192
+
193
+ self.arm.set_speed_percent(percent)
194
+
195
+ def enable_torque(self) -> None:
196
+ def enable():
197
+ result = set()
198
+
199
+ for name in self.joint_names:
200
+ result.add(self.arm.enable(self.name_to_idx[name]))
201
+
202
+ enabled = False not in result
203
+ return enabled
204
+
205
+ t0 = time.perf_counter()
206
+
207
+ enabled = enable()
208
+ while not enabled:
209
+ if time.perf_counter() - t0 >= self.timeout:
210
+ raise TimeoutError
211
+
212
+ time.sleep(0.01)
213
+
214
+ enabled = enable()
215
+
216
+ def disable_torque(self) -> None:
217
+ def disable():
218
+ result = set()
219
+ for name in self.joint_names:
220
+ result.add(self.arm.disable(self.name_to_idx[name]))
221
+
222
+ disabled = False not in result
223
+ return disabled
224
+
225
+ t0 = time.perf_counter()
226
+
227
+ disabled = disable()
228
+ while not disabled:
229
+ if time.perf_counter() - t0 >= self.timeout:
230
+ raise TimeoutError
231
+
232
+ time.sleep(0.01)
233
+
234
+ disabled = disable()
235
+
236
+ def move_joints(self, joints: ArrayLike) -> None:
237
+ joints = np.asarray(joints, dtype=np.float64)
238
+ self.arm.move_j(list(joints))
239
+
240
+ def move_mit(
241
+ self,
242
+ pos: ArrayLike,
243
+ vel: ArrayLike | None = None,
244
+ kp: float = 10.0,
245
+ kd: float = 0.5,
246
+ t_ff: float = 0.0,
247
+ ):
248
+ pos = np.asarray(pos)
249
+
250
+ if vel is None:
251
+ vel = np.zeros_like(pos)
252
+ else:
253
+ vel = np.asarray(vel)
254
+
255
+ for i, name in enumerate(self.joint_names):
256
+ self.arm.move_mit(self.name_to_idx[name], pos[i], vel[i], kp, kd, t_ff)
257
+
258
+ def read_joints(self) -> Joints:
259
+ def read():
260
+ timestamp: list[float] = []
261
+ position: list[float] = []
262
+ velocity: list[float] = []
263
+ torque: list[float] = []
264
+ current: list[float] = []
265
+
266
+ motor_states = [
267
+ self.arm.get_motor_states(self.name_to_idx[name])
268
+ for name in self.joint_names
269
+ ]
270
+
271
+ for ms in motor_states:
272
+ if ms is None:
273
+ return None
274
+
275
+ timestamp.append(ms.timestamp)
276
+
277
+ msg = ms.msg
278
+
279
+ position.append(msg.position)
280
+ velocity.append(msg.velocity)
281
+ torque.append(msg.torque)
282
+ current.append(msg.current)
283
+
284
+ def float64(x: ArrayLike):
285
+ return np.asarray(x, dtype=np.float64)
286
+
287
+ return Joints(
288
+ float64(timestamp),
289
+ float64(position),
290
+ float64(velocity),
291
+ float64(torque),
292
+ float64(current),
293
+ )
294
+
295
+ t0 = time.perf_counter()
296
+
297
+ joints = read()
298
+ while joints is None:
299
+ if time.perf_counter() - t0 >= self.timeout:
300
+ raise TimeoutError
301
+
302
+ time.sleep(0)
303
+
304
+ joints = read()
305
+
306
+ return joints
307
+
308
+ def move_gripper(
309
+ self,
310
+ width: float,
311
+ *,
312
+ force: float = 1.0,
313
+ ) -> None:
314
+ self.ee.move_gripper_m(width, force)
315
+
316
+ def read_gripper(self) -> Gripper:
317
+ def read():
318
+ gs = self.ee.get_gripper_status()
319
+
320
+ if gs is None:
321
+ return None
322
+
323
+ msg = gs.msg
324
+
325
+ return Gripper(
326
+ timestamp=gs.timestamp,
327
+ width=msg.value,
328
+ force=msg.force,
329
+ )
330
+
331
+ t0 = time.perf_counter()
332
+ gripper = read()
333
+ while gripper is None:
334
+ if time.perf_counter() - t0 >= self.timeout:
335
+ raise TimeoutError
336
+
337
+ time.sleep(0)
338
+
339
+ gripper = read()
340
+
341
+ return gripper
342
+
343
+ def read_status(self) -> Status:
344
+ def read():
345
+ status = self.arm.get_arm_status()
346
+
347
+ if status is None:
348
+ return None
349
+
350
+ msg = status.msg
351
+
352
+ error = msg.err_status
353
+
354
+ comm_errors = {
355
+ name: getattr(error, f"communication_status_joint_{i + 1}")
356
+ for i, name in enumerate(self.joint_names)
357
+ }
358
+ limit_exceeds = {
359
+ name: getattr(error, f"joint_{i + 1}_angle_limit")
360
+ for i, name in enumerate(self.joint_names)
361
+ }
362
+
363
+ return Status(
364
+ ArmStatus(msg.arm_status),
365
+ ControlType(msg.ctrl_mode),
366
+ MoveType(msg.mode_feedback),
367
+ MotionStatus(msg.motion_status),
368
+ TeachingStatus(msg.teach_status),
369
+ comm_errors,
370
+ limit_exceeds,
371
+ )
372
+
373
+ t0 = time.perf_counter()
374
+
375
+ status = read()
376
+ while status is None:
377
+ if time.perf_counter() - t0 >= self.timeout:
378
+ raise TimeoutError
379
+
380
+ time.sleep(0)
381
+
382
+ status = read()
383
+
384
+ return status
385
+
386
+ def calibrate(self, name: str) -> None:
387
+ self.arm.calibrate_joint(self.name_to_idx[name])
388
+
389
+ def reset(self):
390
+ self.arm.reset()
File without changes
@@ -0,0 +1,13 @@
1
+ from .api import create_agx_arm_config, AgxArmFactory, resolve_firmware_profile
2
+ from .api import ArmModel, PiperFW, NeroFW
3
+ from .version import __version__
4
+
5
+ __all__ = [
6
+ 'create_agx_arm_config',
7
+ 'AgxArmFactory',
8
+ 'ArmModel',
9
+ 'PiperFW',
10
+ 'NeroFW',
11
+ 'resolve_firmware_profile',
12
+ '__version__',
13
+ ]
@@ -0,0 +1,7 @@
1
+ from .api import create_agx_arm_config as create_agx_arm_config
2
+ from .api import AgxArmFactory as AgxArmFactory
3
+ from .api import ArmModel as ArmModel
4
+ from .api import PiperFW as PiperFW
5
+ from .api import NeroFW as NeroFW
6
+ from .api import resolve_firmware_profile as resolve_firmware_profile
7
+ from .version import __version__ as __version__
@@ -0,0 +1,12 @@
1
+ from .agx_arm_factory import create_agx_arm_config, AgxArmFactory
2
+ from .arm_options import ArmModel, PiperFW, NeroFW
3
+ from .firmware import resolve_firmware_profile
4
+
5
+ __all__ = [
6
+ 'create_agx_arm_config',
7
+ 'AgxArmFactory',
8
+ 'ArmModel',
9
+ 'PiperFW',
10
+ 'NeroFW',
11
+ 'resolve_firmware_profile',
12
+ ]
@@ -0,0 +1,6 @@
1
+ from .agx_arm_factory import create_agx_arm_config as create_agx_arm_config
2
+ from .agx_arm_factory import AgxArmFactory as AgxArmFactory
3
+ from .arm_options import ArmModel as ArmModel
4
+ from .arm_options import PiperFW as PiperFW
5
+ from .arm_options import NeroFW as NeroFW
6
+ from .firmware import resolve_firmware_profile as resolve_firmware_profile