hex-zmq-servers 0.3.16__tar.gz → 1.0.0__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 (127) hide show
  1. hex_zmq_servers-1.0.0/PKG-INFO +188 -0
  2. hex_zmq_servers-1.0.0/README.md +145 -0
  3. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/__init__.py +18 -6
  4. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/berxel/cam_berxel.py +11 -3
  5. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/robot_hexarm.json +14 -3
  6. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6.py +44 -20
  7. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop.py +68 -35
  8. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/__init__.py +14 -6
  9. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/robot_hexarm.py +54 -50
  10. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/robot_hexarm_srv.py +2 -3
  11. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/zmq_base.py +10 -3
  12. hex_zmq_servers-1.0.0/hex_zmq_servers.egg-info/PKG-INFO +188 -0
  13. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers.egg-info/requires.txt +6 -3
  14. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/pyproject.toml +5 -4
  15. hex_zmq_servers-0.3.16/PKG-INFO +0 -147
  16. hex_zmq_servers-0.3.16/README.md +0 -106
  17. hex_zmq_servers-0.3.16/hex_zmq_servers.egg-info/PKG-INFO +0 -147
  18. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/LICENSE +0 -0
  19. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/MANIFEST.in +0 -0
  20. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/__init__.py +0 -0
  21. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/berxel/__init__.py +0 -0
  22. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/berxel/cam_berxel_cli.py +0 -0
  23. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/berxel/cam_berxel_srv.py +0 -0
  24. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/cam_base.py +0 -0
  25. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/dummy/__init__.py +0 -0
  26. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/dummy/cam_dummy.py +0 -0
  27. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/dummy/cam_dummy_cli.py +0 -0
  28. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/dummy/cam_dummy_srv.py +0 -0
  29. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/realsense/__init__.py +0 -0
  30. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/realsense/cam_realsense.py +0 -0
  31. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/realsense/cam_realsense_cli.py +0 -0
  32. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/realsense/cam_realsense_srv.py +0 -0
  33. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/rgb/__init__.py +0 -0
  34. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/rgb/cam_rgb.py +0 -0
  35. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/rgb/cam_rgb_cli.py +0 -0
  36. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/cam/rgb/cam_rgb_srv.py +0 -0
  37. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/cam_berxel.json +0 -0
  38. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/cam_dummy.json +0 -0
  39. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/cam_realsense.json +0 -0
  40. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/cam_rgb.json +0 -0
  41. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/mujoco_archer_y6.json +0 -0
  42. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/mujoco_e3_desktop.json +0 -0
  43. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/robot_dummy.json +0 -0
  44. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/robot_gello.json +0 -0
  45. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/config/zmq_dummy.json +0 -0
  46. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/device_base.py +0 -0
  47. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/hex_launch.py +0 -0
  48. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/__init__.py +0 -0
  49. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/__init__.py +0 -0
  50. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_base_link.STL +0 -0
  51. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_1.STL +0 -0
  52. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_2.STL +0 -0
  53. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_3.STL +0 -0
  54. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_4.STL +0 -0
  55. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_5.STL +0 -0
  56. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/assets.xml +0 -0
  57. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/camera_link.STL +0 -0
  58. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_base_link.STL +0 -0
  59. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_helper_link.STL +0 -0
  60. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_link_1.STL +0 -0
  61. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_link_2.STL +0 -0
  62. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_helper_link.STL +0 -0
  63. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_link_1.STL +0 -0
  64. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_link_2.STL +0 -0
  65. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/assets/table_link.STL +0 -0
  66. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/joint_class.xml +0 -0
  67. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/robot.xml +0 -0
  68. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/scene.xml +0 -0
  69. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/model/setting.xml +0 -0
  70. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6_cli.py +0 -0
  71. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6_srv.py +0 -0
  72. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/__init__.py +0 -0
  73. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_base_link.STL +0 -0
  74. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_1.STL +0 -0
  75. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_2.STL +0 -0
  76. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_3.STL +0 -0
  77. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_4.STL +0 -0
  78. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_5.STL +0 -0
  79. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/assets.xml +0 -0
  80. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/camera_link.STL +0 -0
  81. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/e3_desktop_base_link.STL +0 -0
  82. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_base_link.STL +0 -0
  83. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_helper_link.STL +0 -0
  84. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_link_1.STL +0 -0
  85. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_link_2.STL +0 -0
  86. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_helper_link.STL +0 -0
  87. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_link_1.STL +0 -0
  88. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_link_2.STL +0 -0
  89. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/assets/table_link.STL +0 -0
  90. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/joint_class.xml +0 -0
  91. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/robot.xml +0 -0
  92. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/scene.xml +0 -0
  93. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/model/setting.xml +0 -0
  94. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop_cli.py +0 -0
  95. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop_srv.py +0 -0
  96. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/mujoco/mujoco_base.py +0 -0
  97. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/dummy/__init__.py +0 -0
  98. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/dummy/robot_dummy.py +0 -0
  99. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/dummy/robot_dummy_cli.py +0 -0
  100. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/dummy/robot_dummy_srv.py +0 -0
  101. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/gello/__init__.py +0 -0
  102. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/gello/robot_gello.py +0 -0
  103. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/gello/robot_gello_cli.py +0 -0
  104. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/gello/robot_gello_srv.py +0 -0
  105. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/__init__.py +0 -0
  106. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/robot_hexarm_cli.py +0 -0
  107. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/empty.urdf +0 -0
  108. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100.urdf +0 -0
  109. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_handle.urdf +0 -0
  110. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_p050.urdf +0 -0
  111. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_p050_handle.urdf +0 -0
  112. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/empty.urdf +0 -0
  113. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100.urdf +0 -0
  114. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_handle.urdf +0 -0
  115. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_p050.urdf +0 -0
  116. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_p050_handle.urdf +0 -0
  117. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/empty.urdf +0 -0
  118. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100.urdf +0 -0
  119. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_handle.urdf +0 -0
  120. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_p050.urdf +0 -0
  121. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_p050_handle.urdf +0 -0
  122. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/hexarm/urdf/firefly_y6/empty.urdf +0 -0
  123. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers/robot/robot_base.py +0 -0
  124. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers.egg-info/SOURCES.txt +0 -0
  125. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers.egg-info/dependency_links.txt +0 -0
  126. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/hex_zmq_servers.egg-info/top_level.txt +0 -0
  127. {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.0}/setup.cfg +0 -0
@@ -0,0 +1,188 @@
1
+ Metadata-Version: 2.4
2
+ Name: hex_zmq_servers
3
+ Version: 1.0.0
4
+ Summary: HEXFELLOW ZMQ Servers
5
+ Author-email: Dong Zhaorui <joray.dong@hexfellow.com>
6
+ Maintainer-email: jecjune <zejun.chen@hexfellow.com>, Dong Zhaorui <joray.dong@hexfellow.com>
7
+ License-Expression: Apache-2.0
8
+ Project-URL: Homepage, https://github.com/hexfellow/hex_zmq_servers
9
+ Project-URL: Repository, https://github.com/hexfellow/hex_zmq_servers.git
10
+ Project-URL: Bug Tracker, https://github.com/hexfellow/hex_zmq_servers/issues
11
+ Project-URL: Documentation, https://github.com/hexfellow/hex_zmq_servers/wiki
12
+ Keywords: hex_zmq_servers
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Operating System :: POSIX :: Linux
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: pyzmq>=27.0.1
26
+ Requires-Dist: hex_device<1.4.0,>=1.3.14
27
+ Requires-Dist: hex_robo_utils<0.3.0,>=0.2.0
28
+ Requires-Dist: opencv-python>=4.2
29
+ Provides-Extra: berxel
30
+ Requires-Dist: berxel_py_wrapper>=2.0.182; extra == "berxel"
31
+ Provides-Extra: realsense
32
+ Requires-Dist: pyrealsense2>=2.56.5.9235; extra == "realsense"
33
+ Provides-Extra: dynamixel
34
+ Requires-Dist: dynamixel-sdk==3.8.4; extra == "dynamixel"
35
+ Provides-Extra: mujoco
36
+ Requires-Dist: mujoco>=3.3.3; extra == "mujoco"
37
+ Provides-Extra: all
38
+ Requires-Dist: berxel_py_wrapper>=2.0.182; extra == "all"
39
+ Requires-Dist: pyrealsense2>=2.56.5.9235; extra == "all"
40
+ Requires-Dist: dynamixel-sdk==3.8.4; extra == "all"
41
+ Requires-Dist: mujoco>=3.3.3; extra == "all"
42
+ Dynamic: license-file
43
+
44
+ <h1 align="center">HEXFELLOW ZMQ SERVERS</h1>
45
+
46
+ <p align="center">
47
+ <a href="https://github.com/hexfellow/hex_zmq_servers/stargazers">
48
+ <img src="https://img.shields.io/github/stars/hexfellow/hex_zmq_servers?style=flat-square&logo=github" />
49
+ </a>
50
+ <a href="https://github.com/hexfellow/hex_zmq_servers/forks">
51
+ <img src="https://img.shields.io/github/forks/hexfellow/hex_zmq_servers?style=flat-square&logo=github" />
52
+ </a>
53
+ <a href="https://doi.org/10.5281/zenodo.18309954">
54
+ <img src="https://zenodo.org/badge/1088506315.svg" alt="DOI">
55
+ </a>
56
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
57
+ <a href="https://github.com/hexfellow/hex_zmq_servers/issues">
58
+ <img src="https://img.shields.io/github/issues/hexfellow/hex_zmq_servers?style=flat-square&logo=github" />
59
+ </a>
60
+ </p>
61
+
62
+ ---
63
+
64
+ # 📖 Overview
65
+
66
+ ## What is `hex_zmq_servers`
67
+
68
+ `hex_zmq_servers` provides a client–server layer on top of ZeroMQ to control and stream data from HEXFELLOW hardware (robots, RGB/RGB-D cameras) and MuJoCo-based simulators. Servers run device logic and command loops; clients send requests (e.g. `get_rgb`, `get_state`, `set_target`) and receive headers plus optional binary buffers (e.g. images, joint state).
69
+
70
+ ## What problem it solves
71
+
72
+ - **Decoupled control**: Run device drivers and control loops in separate processes; clients connect over TCP.
73
+ - **Unified transport**: All devices use the same ZMQ request/response pattern (JSON header + NumPy buffer).
74
+ - **Multi-node management**: `HexLaunch` and `HexNodeConfig` start and monitor multiple server/client nodes from one process.
75
+
76
+ ## Target users
77
+
78
+ - Engineers integrating HEXFELLOW robots into their systems.
79
+ - Researchers running experiments with HEXFELLOW robots.
80
+
81
+ ---
82
+
83
+ # 📦 Installation
84
+
85
+ ## Requirements
86
+
87
+ - **Python**
88
+ - **OS**: `Linux` / `macOS`
89
+ - **Core dependencies**:
90
+ - `pyzmq`
91
+ - `hex_device`
92
+ - `hex_robo_utils`
93
+ - `opencv-python`
94
+
95
+ Optional device support (install via extras):
96
+
97
+ | Extra | Purpose |
98
+ | ----------- | ----------------------------------------------- |
99
+ | `berxel` | Berxel RGB-D: `berxel_py_wrapper` |
100
+ | `realsense` | RealSense RGB-D: `pyrealsense2` |
101
+ | `dynamixel` | Dynamixel: `dynamixel-sdk` |
102
+ | `mujoco` | MuJoCo sims: `mujoco` |
103
+ | `all` | `berxel` + `dynamixel` + `realsense` + `mujoco` |
104
+
105
+ ## Install from PyPI
106
+
107
+ For those who don't need examples, you can install the package from PyPI.
108
+
109
+ - **Full install**: includes all optional devices (Berxel, RealSense, Dynamixel, MuJoCo)
110
+
111
+ ```bash
112
+ pip install hex_zmq_servers[all]
113
+ ```
114
+
115
+ - **Core install**: only the core package (no optional devices)
116
+
117
+ ```bash
118
+ pip install hex_zmq_servers
119
+ ```
120
+
121
+ ## Install from Source
122
+
123
+ For those who need examples, you can install the package from source code with examples.
124
+
125
+ **Noet**: We use [**uv**](https://github.com/astral-sh/uv) to manage the Python environment. Please install it first.
126
+
127
+ 1. Clone and install in editable mode. The `venv.sh` script expects [uv](https://github.com/astral-sh/uv).
128
+
129
+ ```bash
130
+ git clone https://github.com/hexfellow/hex_zmq_servers.git
131
+ cd hex_zmq_servers
132
+ ./venv.sh
133
+ ```
134
+
135
+ - `./venv.sh` — creates `.venv`, installs `hex_zmq_servers` with `[all]` and `examples/adv/requirements.txt` (e.g. `pygame` for some examples).
136
+ - `./venv.sh --min` — installs the core package only (no optional device extras). Some examples will not run.
137
+ - `./venv.sh --pkg-only` — installs the package only, skips example-related dependencies.
138
+
139
+ 2. Activate before running examples:
140
+
141
+ ```bash
142
+ source .venv/bin/activate
143
+ ```
144
+
145
+ ---
146
+
147
+ # 📚 Tutorial
148
+
149
+ See [**Tutorial**](docs/tutorial.md) for details of all tutorials.
150
+
151
+ # 📑 API
152
+
153
+ See [**API**](docs/api.md) for details of all APIs.
154
+
155
+ # 💡 Example
156
+
157
+ See [**Example**](docs/example.md) for details of all examples.
158
+
159
+ ---
160
+
161
+ # 🏷️ Citation
162
+
163
+ If you want to cite this project in your work, you can use the following BibTeX entry:
164
+
165
+ ```bibtex
166
+ @software{hex_zmq_servers,
167
+ author = {Dong, Zhaorui},
168
+ title = {Hex ZMQ Servers: A ZeroMQ-Based Embodied AI Communication Framework},
169
+ year = {2025},
170
+ publisher = {Zenodo},
171
+ version = {v1.0.0},
172
+ doi = {10.5281/zenodo.18309960},
173
+ url = {https://doi.org/10.5281/zenodo.18309960}
174
+ }
175
+ ```
176
+
177
+ ---
178
+
179
+ # 📄 License
180
+
181
+ Apache License 2.0. See [LICENSE](LICENSE).
182
+
183
+ ---
184
+
185
+ # 🌟 Star History
186
+
187
+ [![Star History Chart](https://api.star-history.com/svg?repos=hexfellow/hex_zmq_servers&type=Date)](https://star-history.com/#hexfellow/hex_zmq_servers&Date)
188
+
@@ -0,0 +1,145 @@
1
+ <h1 align="center">HEXFELLOW ZMQ SERVERS</h1>
2
+
3
+ <p align="center">
4
+ <a href="https://github.com/hexfellow/hex_zmq_servers/stargazers">
5
+ <img src="https://img.shields.io/github/stars/hexfellow/hex_zmq_servers?style=flat-square&logo=github" />
6
+ </a>
7
+ <a href="https://github.com/hexfellow/hex_zmq_servers/forks">
8
+ <img src="https://img.shields.io/github/forks/hexfellow/hex_zmq_servers?style=flat-square&logo=github" />
9
+ </a>
10
+ <a href="https://doi.org/10.5281/zenodo.18309954">
11
+ <img src="https://zenodo.org/badge/1088506315.svg" alt="DOI">
12
+ </a>
13
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
14
+ <a href="https://github.com/hexfellow/hex_zmq_servers/issues">
15
+ <img src="https://img.shields.io/github/issues/hexfellow/hex_zmq_servers?style=flat-square&logo=github" />
16
+ </a>
17
+ </p>
18
+
19
+ ---
20
+
21
+ # 📖 Overview
22
+
23
+ ## What is `hex_zmq_servers`
24
+
25
+ `hex_zmq_servers` provides a client–server layer on top of ZeroMQ to control and stream data from HEXFELLOW hardware (robots, RGB/RGB-D cameras) and MuJoCo-based simulators. Servers run device logic and command loops; clients send requests (e.g. `get_rgb`, `get_state`, `set_target`) and receive headers plus optional binary buffers (e.g. images, joint state).
26
+
27
+ ## What problem it solves
28
+
29
+ - **Decoupled control**: Run device drivers and control loops in separate processes; clients connect over TCP.
30
+ - **Unified transport**: All devices use the same ZMQ request/response pattern (JSON header + NumPy buffer).
31
+ - **Multi-node management**: `HexLaunch` and `HexNodeConfig` start and monitor multiple server/client nodes from one process.
32
+
33
+ ## Target users
34
+
35
+ - Engineers integrating HEXFELLOW robots into their systems.
36
+ - Researchers running experiments with HEXFELLOW robots.
37
+
38
+ ---
39
+
40
+ # 📦 Installation
41
+
42
+ ## Requirements
43
+
44
+ - **Python**
45
+ - **OS**: `Linux` / `macOS`
46
+ - **Core dependencies**:
47
+ - `pyzmq`
48
+ - `hex_device`
49
+ - `hex_robo_utils`
50
+ - `opencv-python`
51
+
52
+ Optional device support (install via extras):
53
+
54
+ | Extra | Purpose |
55
+ | ----------- | ----------------------------------------------- |
56
+ | `berxel` | Berxel RGB-D: `berxel_py_wrapper` |
57
+ | `realsense` | RealSense RGB-D: `pyrealsense2` |
58
+ | `dynamixel` | Dynamixel: `dynamixel-sdk` |
59
+ | `mujoco` | MuJoCo sims: `mujoco` |
60
+ | `all` | `berxel` + `dynamixel` + `realsense` + `mujoco` |
61
+
62
+ ## Install from PyPI
63
+
64
+ For those who don't need examples, you can install the package from PyPI.
65
+
66
+ - **Full install**: includes all optional devices (Berxel, RealSense, Dynamixel, MuJoCo)
67
+
68
+ ```bash
69
+ pip install hex_zmq_servers[all]
70
+ ```
71
+
72
+ - **Core install**: only the core package (no optional devices)
73
+
74
+ ```bash
75
+ pip install hex_zmq_servers
76
+ ```
77
+
78
+ ## Install from Source
79
+
80
+ For those who need examples, you can install the package from source code with examples.
81
+
82
+ **Noet**: We use [**uv**](https://github.com/astral-sh/uv) to manage the Python environment. Please install it first.
83
+
84
+ 1. Clone and install in editable mode. The `venv.sh` script expects [uv](https://github.com/astral-sh/uv).
85
+
86
+ ```bash
87
+ git clone https://github.com/hexfellow/hex_zmq_servers.git
88
+ cd hex_zmq_servers
89
+ ./venv.sh
90
+ ```
91
+
92
+ - `./venv.sh` — creates `.venv`, installs `hex_zmq_servers` with `[all]` and `examples/adv/requirements.txt` (e.g. `pygame` for some examples).
93
+ - `./venv.sh --min` — installs the core package only (no optional device extras). Some examples will not run.
94
+ - `./venv.sh --pkg-only` — installs the package only, skips example-related dependencies.
95
+
96
+ 2. Activate before running examples:
97
+
98
+ ```bash
99
+ source .venv/bin/activate
100
+ ```
101
+
102
+ ---
103
+
104
+ # 📚 Tutorial
105
+
106
+ See [**Tutorial**](docs/tutorial.md) for details of all tutorials.
107
+
108
+ # 📑 API
109
+
110
+ See [**API**](docs/api.md) for details of all APIs.
111
+
112
+ # 💡 Example
113
+
114
+ See [**Example**](docs/example.md) for details of all examples.
115
+
116
+ ---
117
+
118
+ # 🏷️ Citation
119
+
120
+ If you want to cite this project in your work, you can use the following BibTeX entry:
121
+
122
+ ```bibtex
123
+ @software{hex_zmq_servers,
124
+ author = {Dong, Zhaorui},
125
+ title = {Hex ZMQ Servers: A ZeroMQ-Based Embodied AI Communication Framework},
126
+ year = {2025},
127
+ publisher = {Zenodo},
128
+ version = {v1.0.0},
129
+ doi = {10.5281/zenodo.18309960},
130
+ url = {https://doi.org/10.5281/zenodo.18309960}
131
+ }
132
+ ```
133
+
134
+ ---
135
+
136
+ # 📄 License
137
+
138
+ Apache License 2.0. See [LICENSE](LICENSE).
139
+
140
+ ---
141
+
142
+ # 🌟 Star History
143
+
144
+ [![Star History Chart](https://api.star-history.com/svg?repos=hexfellow/hex_zmq_servers&type=Date)](https://star-history.com/#hexfellow/hex_zmq_servers&Date)
145
+
@@ -15,7 +15,6 @@ from .zmq_base import HexZMQDummyClient, HexZMQDummyServer
15
15
 
16
16
  from .robot import HexRobotBase, HexRobotClientBase, HexRobotServerBase
17
17
  from .robot import HexRobotDummy, HexRobotDummyClient, HexRobotDummyServer
18
- from .robot import HexRobotGello, HexRobotGelloClient, HexRobotGelloServer
19
18
  from .robot import HexRobotHexarm, HexRobotHexarmClient, HexRobotHexarmServer, HEXARM_URDF_PATH_DICT
20
19
 
21
20
  from .cam import HexCamBase, HexCamClientBase, HexCamServerBase
@@ -28,7 +27,6 @@ file_dir = os.path.dirname(os.path.abspath(__file__))
28
27
  HEX_ZMQ_SERVERS_PATH_DICT = {
29
28
  "zmq_dummy": f"{file_dir}/zmq_base.py",
30
29
  "robot_dummy": f"{file_dir}/robot/dummy/robot_dummy_srv.py",
31
- "robot_gello": f"{file_dir}/robot/gello/robot_gello_srv.py",
32
30
  "robot_hexarm": f"{file_dir}/robot/hexarm/robot_hexarm_srv.py",
33
31
  "cam_dummy": f"{file_dir}/cam/dummy/cam_dummy_srv.py",
34
32
  "cam_rgb": f"{file_dir}/cam/rgb/cam_rgb_srv.py",
@@ -36,7 +34,6 @@ HEX_ZMQ_SERVERS_PATH_DICT = {
36
34
  HEX_ZMQ_CONFIGS_PATH_DICT = {
37
35
  "zmq_dummy": f"{file_dir}/config/zmq_dummy.json",
38
36
  "robot_dummy": f"{file_dir}/config/robot_dummy.json",
39
- "robot_gello": f"{file_dir}/config/robot_gello.json",
40
37
  "robot_hexarm": f"{file_dir}/config/robot_hexarm.json",
41
38
  "cam_dummy": f"{file_dir}/config/cam_dummy.json",
42
39
  "cam_rgb": f"{file_dir}/config/cam_rgb.json",
@@ -80,9 +77,6 @@ __all__ = [
80
77
  "HexRobotDummy",
81
78
  "HexRobotDummyClient",
82
79
  "HexRobotDummyServer",
83
- "HexRobotGello",
84
- "HexRobotGelloClient",
85
- "HexRobotGelloServer",
86
80
  "HexRobotHexarm",
87
81
  "HexRobotHexarmClient",
88
82
  "HexRobotHexarmServer",
@@ -104,6 +98,7 @@ from importlib.util import find_spec
104
98
 
105
99
  _HAS_BERXEL = find_spec("berxel_py_wrapper") is not None
106
100
  _HAS_REALSENSE = find_spec("pyrealsense2") is not None
101
+ _HAS_DYNAMIXEL = find_spec("dynamixel-sdk") is not None
107
102
  _HAS_MUJOCO = find_spec("mujoco") is not None
108
103
 
109
104
  # Optional: berxel
@@ -140,6 +135,23 @@ if _HAS_REALSENSE:
140
135
  "HexCamRealsenseServer",
141
136
  ])
142
137
 
138
+ # Optional: dynamixel
139
+ if _HAS_DYNAMIXEL:
140
+ from .robot import HexRobotGello, HexRobotGelloClient, HexRobotGelloServer
141
+ HEX_ZMQ_SERVERS_PATH_DICT.update({
142
+ "robot_gello":
143
+ f"{file_dir}/robot/gello/robot_gello_srv.py",
144
+ })
145
+ HEX_ZMQ_CONFIGS_PATH_DICT.update({
146
+ "robot_gello":
147
+ f"{file_dir}/config/robot_gello.json",
148
+ })
149
+ __all__.extend([
150
+ "HexRobotGello",
151
+ "HexRobotGelloClient",
152
+ "HexRobotGelloServer",
153
+ ])
154
+
143
155
  # Optional: mujoco
144
156
  if _HAS_MUJOCO:
145
157
  from .mujoco import HexMujocoBase, HexMujocoClientBase, HexMujocoServerBase
@@ -47,8 +47,8 @@ class HexCamBerxel(HexCamBase):
47
47
 
48
48
  # variables
49
49
  # berxel variables
50
- self.__context = None
51
- self.__device = None
50
+ self.__context: BerxelHawkContext | None = None
51
+ self.__device: BerxelHawkDevice | None = None
52
52
  # camera variables
53
53
  self.__intri = np.zeros(4)
54
54
 
@@ -214,7 +214,15 @@ class HexCamBerxel(HexCamBase):
214
214
  return True
215
215
 
216
216
  def __start_stream(self):
217
- self.__device.setColorExposureGain(self.__exposure, self.__gain)
217
+ if self.__serial_number.startswith('P008'):
218
+ self.__device.setSonixAEStatus(False)
219
+ self.__device.setSonixExposureTime(int(self.__exposure // 100))
220
+ else:
221
+ self.__device.setColorExposureGain(self.__exposure, self.__gain)
222
+ self.__device.setDepthElectricCurrent(700)
223
+ self.__device.setDepthAE(False)
224
+ self.__device.setDepthExposure(43)
225
+ self.__device.setDepthGain(1)
218
226
  self.__device.setRegistrationEnable(True)
219
227
  self.__device.setFrameSync(True)
220
228
  while self.__device.setSystemClock() != 0:
@@ -13,7 +13,6 @@
13
13
  "device_port": 8439,
14
14
  "control_hz": 1000,
15
15
  "arm_type": "archer_l6y",
16
- "use_gripper": true,
17
16
  "mit_kp": [
18
17
  200.0,
19
18
  200.0,
@@ -21,7 +20,13 @@
21
20
  75.0,
22
21
  15.0,
23
22
  15.0,
24
- 20.0
23
+ 20.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 0.0,
28
+ 0.0,
29
+ 0.0
25
30
  ],
26
31
  "mit_kd": [
27
32
  12.5,
@@ -30,7 +35,13 @@
30
35
  6.0,
31
36
  0.31,
32
37
  0.31,
33
- 1.0
38
+ 1.0,
39
+ 0.0,
40
+ 0.0,
41
+ 0.0,
42
+ 0.0,
43
+ 0.0,
44
+ 0.0
34
45
  ],
35
46
  "sens_ts": true
36
47
  }
@@ -76,21 +76,36 @@ class HexMujocoArcherY6(HexMujocoBase):
76
76
  mujoco.mj_resetData(self.__model, self.__data)
77
77
 
78
78
  # state init
79
- self.__state_robot_idx = [0, 1, 2, 3, 4, 5, 6]
80
- self.__state_obj_idx = [12, 13, 14, 15, 16, 17, 18]
81
- self.__ctrl_robot_idx = [0, 1, 2, 3, 4, 5, 6]
82
- self.__ctrl_obj_idx = [0, 1, 2, 3, 4, 5, 6]
83
- self._limits = np.stack(
84
- [self.__model.jnt_range[self.__state_robot_idx, :]],
85
- axis=0,
86
- )
79
+ self.__state_idx = {
80
+ "robot_arm": ([0, 1, 2, 3, 4, 5]),
81
+ "robot_gripper": [6],
82
+ "obj": [12, 13, 14, 15, 16, 17, 18],
83
+ }
84
+ self.__ctrl_idx = {
85
+ "robot_arm": [0, 1, 2, 3, 4, 5],
86
+ "robot_gripper": [6],
87
+ }
88
+ self.__limit_idx = {
89
+ "robot_arm":
90
+ np.arange(len(self.__state_idx["robot_arm"])).tolist(),
91
+ "robot_gripper":
92
+ (np.arange(len(self.__state_idx["robot_gripper"])) +
93
+ len(self.__state_idx["robot_arm"])).tolist(),
94
+ }
95
+ print(f"self.__limit_idx: {self.__limit_idx}")
96
+ self._limits = self.__model.jnt_range[np.concatenate(
97
+ [self.__state_idx["robot_arm"], self.
98
+ __state_idx["robot_gripper"]]), :].copy().reshape(-1, 1, 2)
87
99
  if not self.__tau_ctrl:
88
100
  self.__mit_kp = np.ascontiguousarray(np.asarray(self.__mit_kp))
89
101
  self.__mit_kd = np.ascontiguousarray(np.asarray(self.__mit_kd))
90
102
  self.__mit_ctrl = CtrlUtil()
91
103
  self.__gripper_ratio = 1.33 / 1.52
92
104
  self._limits[0, -1] *= self.__gripper_ratio
93
- self._dofs = np.array([len(self.__state_robot_idx)])
105
+ self._dofs = np.array([
106
+ len(self.__state_idx["robot_arm"]),
107
+ len(self.__state_idx["robot_gripper"])
108
+ ])
94
109
  keyframe_id = mujoco.mj_name2id(
95
110
  self.__model,
96
111
  mujoco.mjtObj.mjOBJ_KEY,
@@ -242,16 +257,25 @@ class HexMujocoArcherY6(HexMujocoBase):
242
257
  pos = copy.deepcopy(self.__data.qpos)
243
258
  vel = copy.deepcopy(self.__data.qvel)
244
259
  eff = copy.deepcopy(self.__data.qfrc_actuator)
245
- pos[self.__state_robot_idx[-1]] = pos[
246
- self.__state_robot_idx[-1]] * self.__gripper_ratio
260
+ pos[self.__state_idx["robot_gripper"]] = pos[
261
+ self.__state_idx["robot_gripper"]] * self.__gripper_ratio
247
262
  return self.__mujoco_ts() if self.__sens_ts else hex_zmq_ts_now(
248
263
  ), np.array([
249
- pos[self.__state_robot_idx],
250
- vel[self.__state_robot_idx],
251
- eff[self.__state_robot_idx],
252
- ]).T, self.__data.qpos[self.__state_obj_idx].copy()
264
+ pos[self.__state_idx["robot_arm"] +
265
+ self.__state_idx["robot_gripper"]],
266
+ vel[self.__state_idx["robot_arm"] +
267
+ self.__state_idx["robot_gripper"]],
268
+ eff[self.__state_idx["robot_arm"] +
269
+ self.__state_idx["robot_gripper"]],
270
+ ]).T, self.__data.qpos[self.__state_idx["obj"]].copy()
253
271
 
254
272
  def __set_cmds(self, cmds: np.ndarray):
273
+ state_idx = self.__state_idx["robot_arm"] + self.__state_idx[
274
+ "robot_gripper"]
275
+ ctrl_idx = self.__ctrl_idx["robot_arm"] + self.__ctrl_idx[
276
+ "robot_gripper"]
277
+ limit_idx = self.__limit_idx["robot_arm"] + self.__limit_idx[
278
+ "robot_gripper"]
255
279
  tau_cmds = None
256
280
  if not self.__tau_ctrl:
257
281
  cmd_pos = None
@@ -278,8 +302,8 @@ class HexMujocoArcherY6(HexMujocoBase):
278
302
  raise ValueError(f"The shape of cmds is invalid: {cmds.shape}")
279
303
  tar_pos = self._apply_pos_limits(
280
304
  cmd_pos,
281
- self._limits[0, :, 0],
282
- self._limits[0, :, 1],
305
+ self._limits[limit_idx, 0, 0],
306
+ self._limits[limit_idx, 0, 1],
283
307
  )
284
308
  tar_pos[-1] /= self.__gripper_ratio
285
309
  tau_cmds = self.__mit_ctrl(
@@ -287,13 +311,13 @@ class HexMujocoArcherY6(HexMujocoBase):
287
311
  cmd_kd,
288
312
  tar_pos,
289
313
  tar_vel,
290
- self.__data.qpos[self.__state_robot_idx],
291
- self.__data.qvel[self.__state_robot_idx],
314
+ self.__data.qpos[state_idx],
315
+ self.__data.qvel[state_idx],
292
316
  cmd_tor,
293
317
  )
294
318
  else:
295
319
  tau_cmds = cmds.copy()
296
- self.__data.ctrl[self.__ctrl_robot_idx] = tau_cmds
320
+ self.__data.ctrl[ctrl_idx] = tau_cmds
297
321
 
298
322
  def __get_rgb(self):
299
323
  self.__rgb_cam.update_scene(self.__data, "end_camera")