hex-zmq-servers 0.3.7__tar.gz → 0.3.9__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 (116) hide show
  1. {hex_zmq_servers-0.3.7/hex_zmq_servers.egg-info → hex_zmq_servers-0.3.9}/PKG-INFO +1 -1
  2. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/berxel/cam_berxel.py +2 -1
  3. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/berxel/cam_berxel_cli.py +2 -0
  4. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/berxel/cam_berxel_srv.py +4 -1
  5. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/cam_base.py +33 -12
  6. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/dummy/cam_dummy.py +2 -2
  7. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/dummy/cam_dummy_cli.py +2 -0
  8. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/dummy/cam_dummy_srv.py +4 -1
  9. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/realsense/cam_realsense.py +5 -3
  10. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/realsense/cam_realsense_cli.py +2 -0
  11. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/realsense/cam_realsense_srv.py +4 -1
  12. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/rgb/cam_rgb.py +5 -3
  13. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/rgb/cam_rgb_cli.py +2 -0
  14. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/rgb/cam_rgb_srv.py +4 -1
  15. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/cam_berxel.json +2 -0
  16. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/cam_dummy.json +2 -0
  17. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/cam_realsense.json +2 -0
  18. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/cam_rgb.json +2 -0
  19. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/mujoco_archer_y6.json +2 -0
  20. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/mujoco_e3_desktop.json +2 -0
  21. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/robot_dummy.json +2 -0
  22. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/robot_gello.json +2 -0
  23. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/robot_hexarm.json +2 -0
  24. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/config/zmq_dummy.json +2 -0
  25. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/device_base.py +2 -1
  26. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6.py +9 -6
  27. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6_cli.py +4 -1
  28. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6_srv.py +10 -6
  29. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop.py +24 -17
  30. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop_cli.py +76 -20
  31. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop_srv.py +19 -14
  32. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/mujoco_base.py +87 -35
  33. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/dummy/robot_dummy.py +4 -2
  34. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/dummy/robot_dummy_cli.py +2 -0
  35. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/dummy/robot_dummy_srv.py +4 -1
  36. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/gello/robot_gello.py +4 -2
  37. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/gello/robot_gello_cli.py +2 -0
  38. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/gello/robot_gello_srv.py +4 -1
  39. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/robot_hexarm.py +4 -3
  40. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/robot_hexarm_cli.py +2 -0
  41. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/robot_hexarm_srv.py +4 -1
  42. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/robot_base.py +22 -10
  43. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/zmq_base.py +13 -0
  44. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9/hex_zmq_servers.egg-info}/PKG-INFO +1 -1
  45. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/pyproject.toml +1 -1
  46. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/LICENSE +0 -0
  47. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/MANIFEST.in +0 -0
  48. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/README.md +0 -0
  49. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/__init__.py +0 -0
  50. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/__init__.py +0 -0
  51. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/berxel/__init__.py +0 -0
  52. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/dummy/__init__.py +0 -0
  53. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/realsense/__init__.py +0 -0
  54. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/cam/rgb/__init__.py +0 -0
  55. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/hex_launch.py +0 -0
  56. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/__init__.py +0 -0
  57. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/__init__.py +0 -0
  58. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_base_link.STL +0 -0
  59. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_1.STL +0 -0
  60. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_2.STL +0 -0
  61. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_3.STL +0 -0
  62. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_4.STL +0 -0
  63. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_5.STL +0 -0
  64. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/assets.xml +0 -0
  65. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/camera_link.STL +0 -0
  66. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_base_link.STL +0 -0
  67. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_helper_link.STL +0 -0
  68. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_link_1.STL +0 -0
  69. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_link_2.STL +0 -0
  70. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_helper_link.STL +0 -0
  71. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_link_1.STL +0 -0
  72. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_link_2.STL +0 -0
  73. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/assets/table_link.STL +0 -0
  74. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/robot.xml +0 -0
  75. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/scene.xml +0 -0
  76. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/archer_y6/model/setting.xml +0 -0
  77. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/__init__.py +0 -0
  78. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_base_link.STL +0 -0
  79. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_1.STL +0 -0
  80. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_2.STL +0 -0
  81. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_3.STL +0 -0
  82. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_4.STL +0 -0
  83. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_5.STL +0 -0
  84. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/assets.xml +0 -0
  85. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/camera_link.STL +0 -0
  86. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/e3_desktop_base_link.STL +0 -0
  87. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_base_link.STL +0 -0
  88. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_helper_link.STL +0 -0
  89. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_link_1.STL +0 -0
  90. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_link_2.STL +0 -0
  91. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_helper_link.STL +0 -0
  92. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_link_1.STL +0 -0
  93. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_link_2.STL +0 -0
  94. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/assets/table_link.STL +0 -0
  95. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/robot.xml +0 -0
  96. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/scene.xml +0 -0
  97. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/mujoco/e3_desktop/model/setting.xml +0 -0
  98. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/__init__.py +0 -0
  99. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/dummy/__init__.py +0 -0
  100. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/gello/__init__.py +0 -0
  101. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/__init__.py +0 -0
  102. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/empty.urdf +0 -0
  103. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100.urdf +0 -0
  104. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_handle.urdf +0 -0
  105. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_p050.urdf +0 -0
  106. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_p050_handle.urdf +0 -0
  107. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/empty.urdf +0 -0
  108. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100.urdf +0 -0
  109. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_handle.urdf +0 -0
  110. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_p050.urdf +0 -0
  111. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_p050_handle.urdf +0 -0
  112. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers.egg-info/SOURCES.txt +0 -0
  113. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers.egg-info/dependency_links.txt +0 -0
  114. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers.egg-info/requires.txt +0 -0
  115. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/hex_zmq_servers.egg-info/top_level.txt +0 -0
  116. {hex_zmq_servers-0.3.7 → hex_zmq_servers-0.3.9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hex_zmq_servers
3
- Version: 0.3.7
3
+ Version: 0.3.9
4
4
  Summary: HEXFELLOW ZMQ Servers
5
5
  Author-email: Dong Zhaorui <joray.dong@hexfellow.com>
6
6
  Maintainer-email: jecjune <zejun.chen@hexfellow.com>, Dong Zhaorui <joray.dong@hexfellow.com>
@@ -30,8 +30,9 @@ class HexCamBerxel(HexCamBase):
30
30
  def __init__(
31
31
  self,
32
32
  camera_config: dict = CAMERA_CONFIG,
33
+ realtime_mode: bool = False,
33
34
  ):
34
- HexCamBase.__init__(self)
35
+ HexCamBase.__init__(self, realtime_mode)
35
36
 
36
37
  try:
37
38
  self.__serial_number = camera_config["serial_number"]
@@ -11,6 +11,8 @@ from ..cam_base import HexCamClientBase
11
11
  NET_CONFIG = {
12
12
  "ip": "127.0.0.1",
13
13
  "port": 12345,
14
+ "realtime_mode": False,
15
+ "deque_maxlen": 10,
14
16
  "client_timeout_ms": 200,
15
17
  "server_timeout_ms": 1_000,
16
18
  "server_num_workers": 4,
@@ -24,6 +24,8 @@ except (ImportError, ValueError):
24
24
  NET_CONFIG = {
25
25
  "ip": "127.0.0.1",
26
26
  "port": 12345,
27
+ "realtime_mode": False,
28
+ "deque_maxlen": 10,
27
29
  "client_timeout_ms": 200,
28
30
  "server_timeout_ms": 1_000,
29
31
  "server_num_workers": 4,
@@ -48,7 +50,8 @@ class HexCamBerxelServer(HexCamServerBase):
48
50
  HexCamServerBase.__init__(self, net_config)
49
51
 
50
52
  # camera
51
- self._device = HexCamBerxel(params_config)
53
+ self._device = HexCamBerxel(params_config,
54
+ net_config.get("realtime_mode", False))
52
55
 
53
56
  def _process_request(self, recv_hdr: dict, recv_buf: np.ndarray):
54
57
  if recv_hdr["cmd"] == "is_working":
@@ -17,6 +17,8 @@ from ..zmq_base import HexZMQClientBase, HexZMQServerBase, HexRate
17
17
  NET_CONFIG = {
18
18
  "ip": "127.0.0.1",
19
19
  "port": 12345,
20
+ "realtime_mode": False,
21
+ "deque_maxlen": 10,
20
22
  "client_timeout_ms": 200,
21
23
  "server_timeout_ms": 1_000,
22
24
  "server_num_workers": 4,
@@ -25,8 +27,8 @@ NET_CONFIG = {
25
27
 
26
28
  class HexCamBase(HexDeviceBase):
27
29
 
28
- def __init__(self):
29
- HexDeviceBase.__init__(self)
30
+ def __init__(self, realtime_mode: bool = False):
31
+ HexDeviceBase.__init__(self, realtime_mode)
30
32
 
31
33
  def __del__(self):
32
34
  HexDeviceBase.__del__(self)
@@ -47,24 +49,40 @@ class HexCamClientBase(HexZMQClientBase):
47
49
  def __init__(self, net_config: dict = NET_CONFIG):
48
50
  HexZMQClientBase.__init__(self, net_config)
49
51
  self._rgb_seq = 0
52
+ self._used_rgb_seq = 0
50
53
  self._depth_seq = 0
51
- self._rgb_queue = deque(maxlen=10)
52
- self._depth_queue = deque(maxlen=10)
54
+ self._used_depth_seq = 0
55
+ self._rgb_queue = deque(maxlen=self._deque_maxlen)
56
+ self._depth_queue = deque(maxlen=self._deque_maxlen)
53
57
 
54
58
  def __del__(self):
55
59
  HexZMQClientBase.__del__(self)
56
60
 
57
61
  def get_rgb(self, newest: bool = False):
58
62
  try:
59
- return self._rgb_queue.popleft(
60
- ) if not newest else self._rgb_queue[-1]
63
+ if self._realtime_mode or newest:
64
+ hdr, img = self._rgb_queue[-1]
65
+ if self._used_rgb_seq != hdr["args"]:
66
+ self._used_rgb_seq = hdr["args"]
67
+ return hdr, img
68
+ else:
69
+ return None, None
70
+ else:
71
+ return self._rgb_queue.popleft()
61
72
  except IndexError:
62
73
  return None, None
63
74
 
64
75
  def get_depth(self, newest: bool = False):
65
76
  try:
66
- return self._depth_queue.popleft(
67
- ) if not newest else self._depth_queue[-1]
77
+ if self._realtime_mode or newest:
78
+ hdr, img = self._depth_queue[-1]
79
+ if self._used_depth_seq != hdr["args"]:
80
+ self._used_depth_seq = hdr["args"]
81
+ return hdr, img
82
+ else:
83
+ return None, None
84
+ else:
85
+ return self._depth_queue.popleft()
68
86
  except IndexError:
69
87
  return None, None
70
88
 
@@ -117,8 +135,8 @@ class HexCamServerBase(HexZMQServerBase):
117
135
  def __init__(self, net_config: dict = NET_CONFIG):
118
136
  HexZMQServerBase.__init__(self, net_config)
119
137
  self._device: HexDeviceBase = None
120
- self._rgb_queue = deque(maxlen=10)
121
- self._depth_queue = deque(maxlen=10)
138
+ self._rgb_queue = deque(maxlen=self._deque_maxlen)
139
+ self._depth_queue = deque(maxlen=self._deque_maxlen)
122
140
 
123
141
  def __del__(self):
124
142
  HexZMQServerBase.__del__(self)
@@ -143,9 +161,12 @@ class HexCamServerBase(HexZMQServerBase):
143
161
 
144
162
  try:
145
163
  if depth_flag:
146
- ts, count, img = self._depth_queue.popleft()
164
+ ts, count, img = self._depth_queue[
165
+ -1] if self._realtime_mode else self._depth_queue.popleft(
166
+ )
147
167
  else:
148
- ts, count, img = self._rgb_queue.popleft()
168
+ ts, count, img = self._rgb_queue[
169
+ -1] if self._realtime_mode else self._rgb_queue.popleft()
149
170
  except IndexError:
150
171
  return {"cmd": f"{recv_hdr['cmd']}_failed"}, None
151
172
  except Exception as e:
@@ -20,8 +20,8 @@ from ...hex_launch import hex_log, HEX_LOG_LEVEL
20
20
 
21
21
  class HexCamDummy(HexCamBase):
22
22
 
23
- def __init__(self, params_config: dict = {}):
24
- HexCamBase.__init__(self)
23
+ def __init__(self, params_config: dict = {}, realtime_mode: bool = False):
24
+ HexCamBase.__init__(self, realtime_mode)
25
25
  self._working.set()
26
26
 
27
27
  def __del__(self):
@@ -11,6 +11,8 @@ from ..cam_base import HexCamClientBase
11
11
  NET_CONFIG = {
12
12
  "ip": "127.0.0.1",
13
13
  "port": 12345,
14
+ "realtime_mode": False,
15
+ "deque_maxlen": 10,
14
16
  "client_timeout_ms": 200,
15
17
  "server_timeout_ms": 1_000,
16
18
  "server_num_workers": 4,
@@ -24,6 +24,8 @@ except (ImportError, ValueError):
24
24
  NET_CONFIG = {
25
25
  "ip": "127.0.0.1",
26
26
  "port": 12345,
27
+ "realtime_mode": False,
28
+ "deque_maxlen": 10,
27
29
  "client_timeout_ms": 200,
28
30
  "server_timeout_ms": 1_000,
29
31
  "server_num_workers": 4,
@@ -40,7 +42,8 @@ class HexCamDummyServer(HexCamServerBase):
40
42
  HexCamServerBase.__init__(self, net_config)
41
43
 
42
44
  # camera
43
- self._device = HexCamDummy(params_config)
45
+ self._device = HexCamDummy(params_config,
46
+ net_config.get("realtime_mode", False))
44
47
 
45
48
  def _process_request(self, recv_hdr: dict, recv_buf: np.ndarray):
46
49
  if recv_hdr["cmd"] == "is_working":
@@ -32,8 +32,9 @@ class HexCamRealsense(HexCamBase):
32
32
  def __init__(
33
33
  self,
34
34
  camera_config: dict = CAMERA_CONFIG,
35
+ realtime_mode: bool = False,
35
36
  ):
36
- HexCamBase.__init__(self)
37
+ HexCamBase.__init__(self, realtime_mode)
37
38
 
38
39
  try:
39
40
  self.__serial_number = camera_config["serial_number"]
@@ -134,8 +135,9 @@ class HexCamRealsense(HexCamBase):
134
135
  color_frame = aligned_frames.get_color_frame()
135
136
  if color_frame:
136
137
 
137
- rgb_queue.append((sen_ts if self.__sens_ts else cur_ns, rgb_count,
138
- np.asanyarray(color_frame.get_data())))
138
+ rgb_queue.append(
139
+ (sen_ts if self.__sens_ts else cur_ns, rgb_count,
140
+ np.asanyarray(color_frame.get_data())))
139
141
  rgb_count = (rgb_count + 1) % self._max_seq_num
140
142
 
141
143
  # collect depth frame
@@ -11,6 +11,8 @@ from ..cam_base import HexCamClientBase
11
11
  NET_CONFIG = {
12
12
  "ip": "127.0.0.1",
13
13
  "port": 12345,
14
+ "realtime_mode": False,
15
+ "deque_maxlen": 10,
14
16
  "client_timeout_ms": 200,
15
17
  "server_timeout_ms": 1_000,
16
18
  "server_num_workers": 4,
@@ -24,6 +24,8 @@ except (ImportError, ValueError):
24
24
  NET_CONFIG = {
25
25
  "ip": "127.0.0.1",
26
26
  "port": 12345,
27
+ "realtime_mode": False,
28
+ "deque_maxlen": 10,
27
29
  "client_timeout_ms": 200,
28
30
  "server_timeout_ms": 1_000,
29
31
  "server_num_workers": 4,
@@ -47,7 +49,8 @@ class HexCamRealsenseServer(HexCamServerBase):
47
49
  HexCamServerBase.__init__(self, net_config)
48
50
 
49
51
  # camera
50
- self._device = HexCamRealsense(params_config)
52
+ self._device = HexCamRealsense(params_config,
53
+ net_config.get("realtime_mode", False))
51
54
 
52
55
  def _process_request(self, recv_hdr: dict, recv_buf: np.ndarray):
53
56
  if recv_hdr["cmd"] == "is_working":
@@ -35,8 +35,9 @@ class HexCamRGB(HexCamBase):
35
35
  def __init__(
36
36
  self,
37
37
  camera_config: dict = CAMERA_CONFIG,
38
+ realtime_mode: bool = False,
38
39
  ):
39
- HexCamBase.__init__(self)
40
+ HexCamBase.__init__(self, realtime_mode)
40
41
 
41
42
  try:
42
43
  self.__cam_path = camera_config["cam_path"]
@@ -106,8 +107,9 @@ class HexCamRGB(HexCamBase):
106
107
 
107
108
  rgb_count = 0
108
109
  depth_queue.append((hex_zmq_ts_now(), 0,
109
- np.zeros((self.__resolution[1], self.__resolution[0]),
110
- dtype=np.uint16)))
110
+ np.zeros(
111
+ (self.__resolution[1], self.__resolution[0]),
112
+ dtype=np.uint16)))
111
113
  rate = HexRate(self.__frame_rate * 5)
112
114
  while self._working.is_set() and not stop_event.is_set():
113
115
  # read frame
@@ -12,6 +12,8 @@ from ...zmq_base import HexRate
12
12
  NET_CONFIG = {
13
13
  "ip": "127.0.0.1",
14
14
  "port": 12345,
15
+ "realtime_mode": False,
16
+ "deque_maxlen": 10,
15
17
  "client_timeout_ms": 200,
16
18
  "server_timeout_ms": 1_000,
17
19
  "server_num_workers": 4,
@@ -24,6 +24,8 @@ except (ImportError, ValueError):
24
24
  NET_CONFIG = {
25
25
  "ip": "127.0.0.1",
26
26
  "port": 12345,
27
+ "realtime_mode": False,
28
+ "deque_maxlen": 10,
27
29
  "client_timeout_ms": 200,
28
30
  "server_timeout_ms": 1_000,
29
31
  "server_num_workers": 4,
@@ -47,7 +49,8 @@ class HexCamRGBServer(HexCamServerBase):
47
49
  HexCamServerBase.__init__(self, net_config)
48
50
 
49
51
  # camera
50
- self._device = HexCamRGB(params_config)
52
+ self._device = HexCamRGB(params_config,
53
+ net_config.get("realtime_mode", False))
51
54
 
52
55
  def _process_request(self, recv_hdr: dict, recv_buf: np.ndarray):
53
56
  if recv_hdr["cmd"] == "is_working":
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -2,6 +2,8 @@
2
2
  "net": {
3
3
  "ip": "127.0.0.1",
4
4
  "port": 12345,
5
+ "realtime_mode": false,
6
+ "deque_maxlen": 10,
5
7
  "client_timeout_ms": 200,
6
8
  "server_timeout_ms": 1000,
7
9
  "server_num_workers": 4
@@ -15,9 +15,10 @@ from .zmq_base import MAX_SEQ_NUM
15
15
 
16
16
  class HexDeviceBase(ABC):
17
17
 
18
- def __init__(self):
18
+ def __init__(self, realtime_mode: bool = False):
19
19
  # variables
20
20
  self._max_seq_num = MAX_SEQ_NUM
21
+ self._realtime_mode = realtime_mode
21
22
  # thread
22
23
  self._working = threading.Event()
23
24
 
@@ -49,8 +49,9 @@ class HexMujocoArcherY6(HexMujocoBase):
49
49
  def __init__(
50
50
  self,
51
51
  mujoco_config: dict = MUJOCO_CONFIG,
52
+ realtime_mode: bool = False,
52
53
  ):
53
- HexMujocoBase.__init__(self)
54
+ HexMujocoBase.__init__(self, realtime_mode)
54
55
 
55
56
  try:
56
57
  states_rate = mujoco_config["states_rate"]
@@ -163,11 +164,11 @@ class HexMujocoArcherY6(HexMujocoBase):
163
164
  self.__bias_ns = hex_ns_now() - self.__data.time * 1_000_000_000
164
165
  init_ts = self.__mujoco_ts() if self.__sens_ts else hex_zmq_ts_now()
165
166
  rgb_queue.append((init_ts, 0,
166
- np.zeros((self.__height, self.__width, 3),
167
- dtype=np.uint8)))
167
+ np.zeros((self.__height, self.__width, 3),
168
+ dtype=np.uint8)))
168
169
  depth_queue.append((init_ts, 0,
169
- np.zeros((self.__height, self.__width),
170
- dtype=np.uint16)))
170
+ np.zeros((self.__height, self.__width),
171
+ dtype=np.uint16)))
171
172
  while self._working.is_set() and not stop_event.is_set():
172
173
  states_trig_count += 1
173
174
  if states_trig_count >= self.__states_trig_thresh:
@@ -194,7 +195,9 @@ class HexMujocoArcherY6(HexMujocoBase):
194
195
  # cmds
195
196
  cmds_robot_pack = None
196
197
  try:
197
- cmds_robot_pack = cmds_robot_queue.popleft()
198
+ cmds_robot_pack = cmds_robot_queue[
199
+ -1] if self._realtime_mode else cmds_robot_queue.popleft(
200
+ )
198
201
  except IndexError:
199
202
  pass
200
203
  if cmds_robot_pack is not None:
@@ -12,6 +12,8 @@ from ...zmq_base import HexRate
12
12
  NET_CONFIG = {
13
13
  "ip": "127.0.0.1",
14
14
  "port": 12345,
15
+ "realtime_mode": False,
16
+ "deque_maxlen": 10,
15
17
  "client_timeout_ms": 200,
16
18
  "server_timeout_ms": 1_000,
17
19
  "server_num_workers": 4,
@@ -60,7 +62,8 @@ class HexMujocoArcherY6Client(HexMujocoClientBase):
60
62
  self._depth_queue.append((hdr, img))
61
63
 
62
64
  try:
63
- cmds = self._cmds_queue.popleft()
65
+ cmds = self._cmds_queue[
66
+ -1] if self._realtime_mode else self._cmds_queue.popleft()
64
67
  _ = self._set_cmds_inner(cmds)
65
68
  except IndexError:
66
69
  pass
@@ -25,6 +25,8 @@ except (ImportError, ValueError):
25
25
  NET_CONFIG = {
26
26
  "ip": "127.0.0.1",
27
27
  "port": 12345,
28
+ "realtime_mode": False,
29
+ "deque_maxlen": 10,
28
30
  "client_timeout_ms": 200,
29
31
  "server_timeout_ms": 1_000,
30
32
  "server_num_workers": 4,
@@ -48,13 +50,14 @@ class HexMujocoArcherY6Server(HexMujocoServerBase):
48
50
  HexMujocoServerBase.__init__(self, net_config)
49
51
 
50
52
  # mujoco
51
- self._device = HexMujocoArcherY6(params_config)
53
+ self._device = HexMujocoArcherY6(
54
+ params_config, net_config.get("realtime_mode", False))
52
55
 
53
56
  # values
54
- self._states_robot_queue = deque(maxlen=10)
55
- self._states_obj_queue = deque(maxlen=10)
56
- self._rgb_queue = deque(maxlen=10)
57
- self._depth_queue = deque(maxlen=10)
57
+ self._states_robot_queue = deque(maxlen=self._deque_maxlen)
58
+ self._states_obj_queue = deque(maxlen=self._deque_maxlen)
59
+ self._rgb_queue = deque(maxlen=self._deque_maxlen)
60
+ self._depth_queue = deque(maxlen=self._deque_maxlen)
58
61
 
59
62
  def work_loop(self):
60
63
  try:
@@ -87,7 +90,8 @@ class HexMujocoArcherY6Server(HexMujocoServerBase):
87
90
  f"unknown robot name: {robot_name} in {recv_hdr['cmd']}")
88
91
 
89
92
  try:
90
- ts, count, states = queue.popleft()
93
+ ts, count, states = queue[
94
+ -1] if self._realtime_mode else queue.popleft()
91
95
  except IndexError:
92
96
  return {"cmd": f"{recv_hdr['cmd']}_failed"}, None
93
97
  except Exception as e:
@@ -50,8 +50,9 @@ class HexMujocoE3Desktop(HexMujocoBase):
50
50
  def __init__(
51
51
  self,
52
52
  mujoco_config: dict = MUJOCO_CONFIG,
53
+ realtime_mode: bool = False,
53
54
  ):
54
- HexMujocoBase.__init__(self)
55
+ HexMujocoBase.__init__(self, realtime_mode)
55
56
 
56
57
  try:
57
58
  states_rate = mujoco_config["states_rate"]
@@ -198,23 +199,23 @@ class HexMujocoE3Desktop(HexMujocoBase):
198
199
  self.__bias_ns = hex_ns_now() - self.__data.time * 1_000_000_000
199
200
  init_ts = self.__mujoco_ts() if self.__sens_ts else hex_zmq_ts_now()
200
201
  head_rgb_queue.append((init_ts, 0,
201
- np.zeros((self.__height, self.__width, 3),
202
- dtype=np.uint8)))
202
+ np.zeros((self.__height, self.__width, 3),
203
+ dtype=np.uint8)))
203
204
  head_depth_queue.append((init_ts, 0,
204
- np.zeros((self.__height, self.__width),
205
- dtype=np.uint16)))
205
+ np.zeros((self.__height, self.__width),
206
+ dtype=np.uint16)))
206
207
  left_rgb_queue.append((init_ts, 0,
207
- np.zeros((self.__height, self.__width, 3),
208
- dtype=np.uint8)))
208
+ np.zeros((self.__height, self.__width, 3),
209
+ dtype=np.uint8)))
209
210
  left_depth_queue.append((init_ts, 0,
210
- np.zeros((self.__height, self.__width),
211
- dtype=np.uint16)))
211
+ np.zeros((self.__height, self.__width),
212
+ dtype=np.uint16)))
212
213
  right_rgb_queue.append((init_ts, 0,
213
- np.zeros((self.__height, self.__width, 3),
214
- dtype=np.uint8)))
214
+ np.zeros((self.__height, self.__width, 3),
215
+ dtype=np.uint8)))
215
216
  right_depth_queue.append((init_ts, 0,
216
- np.zeros((self.__height, self.__width),
217
- dtype=np.uint16)))
217
+ np.zeros((self.__height, self.__width),
218
+ dtype=np.uint16)))
218
219
  while self._working.is_set() and not stop_event.is_set():
219
220
  states_trig_count += 1
220
221
  if states_trig_count >= self.__states_trig_thresh:
@@ -244,7 +245,9 @@ class HexMujocoE3Desktop(HexMujocoBase):
244
245
  # cmds
245
246
  cmds_left_pack = None
246
247
  try:
247
- cmds_left_pack = cmds_left_queue.popleft()
248
+ cmds_left_pack = cmds_left_queue[
249
+ -1] if self._realtime_mode else cmds_left_queue.popleft(
250
+ )
248
251
  except IndexError:
249
252
  pass
250
253
  if cmds_left_pack is not None:
@@ -258,7 +261,9 @@ class HexMujocoE3Desktop(HexMujocoBase):
258
261
 
259
262
  cmds_right_pack = None
260
263
  try:
261
- cmds_right_pack = cmds_right_queue.popleft()
264
+ cmds_right_pack = cmds_right_queue[
265
+ -1] if self._realtime_mode else cmds_right_queue.popleft(
266
+ )
262
267
  except IndexError:
263
268
  pass
264
269
  if cmds_right_pack is not None:
@@ -286,7 +291,8 @@ class HexMujocoE3Desktop(HexMujocoBase):
286
291
  if self.__head_depth:
287
292
  ts, depth_img = self.__get_depth("head_camera")
288
293
  if depth_img is not None:
289
- head_depth_queue.append((ts, head_depth_count, depth_img))
294
+ head_depth_queue.append(
295
+ (ts, head_depth_count, depth_img))
290
296
  head_depth_count = (head_depth_count +
291
297
  1) % self._max_seq_num
292
298
 
@@ -302,7 +308,8 @@ class HexMujocoE3Desktop(HexMujocoBase):
302
308
  if self.__left_depth:
303
309
  ts, depth_img = self.__get_depth("left_camera")
304
310
  if depth_img is not None:
305
- left_depth_queue.append((ts, left_depth_count, depth_img))
311
+ left_depth_queue.append(
312
+ (ts, left_depth_count, depth_img))
306
313
  left_depth_count = (left_depth_count +
307
314
  1) % self._max_seq_num
308
315