hex-zmq-servers 0.3.16__tar.gz → 1.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.
- hex_zmq_servers-1.0.1/PKG-INFO +195 -0
- hex_zmq_servers-1.0.1/README.md +152 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/__init__.py +18 -6
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/berxel/cam_berxel.py +11 -3
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/robot_hexarm.json +14 -3
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6.py +44 -20
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop.py +68 -35
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/__init__.py +14 -6
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/__init__.py +2 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/robot_hexarm.py +54 -50
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/robot_hexarm_srv.py +2 -3
- hex_zmq_servers-1.0.1/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp80.urdf +208 -0
- hex_zmq_servers-1.0.1/hex_zmq_servers/robot/hexarm/urdf/firefly_y6/gp80.urdf +208 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/zmq_base.py +10 -3
- hex_zmq_servers-1.0.1/hex_zmq_servers.egg-info/PKG-INFO +195 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers.egg-info/SOURCES.txt +3 -1
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers.egg-info/requires.txt +6 -3
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/pyproject.toml +7 -6
- hex_zmq_servers-0.3.16/PKG-INFO +0 -147
- hex_zmq_servers-0.3.16/README.md +0 -106
- hex_zmq_servers-0.3.16/hex_zmq_servers.egg-info/PKG-INFO +0 -147
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/LICENSE +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/MANIFEST.in +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/berxel/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/berxel/cam_berxel_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/berxel/cam_berxel_srv.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/cam_base.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/dummy/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/dummy/cam_dummy.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/dummy/cam_dummy_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/dummy/cam_dummy_srv.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/realsense/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/realsense/cam_realsense.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/realsense/cam_realsense_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/realsense/cam_realsense_srv.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/rgb/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/rgb/cam_rgb.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/rgb/cam_rgb_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/cam/rgb/cam_rgb_srv.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/cam_berxel.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/cam_dummy.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/cam_realsense.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/cam_rgb.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/mujoco_archer_y6.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/mujoco_e3_desktop.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/robot_dummy.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/robot_gello.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/config/zmq_dummy.json +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/device_base.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/hex_launch.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_base_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_1.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_2.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_3.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_4.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/arm_link_5.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/assets.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/camera_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_base_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_helper_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_link_1.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_left_link_2.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_helper_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_link_1.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/gripper_right_link_2.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/assets/table_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/joint_class.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/robot.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/scene.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/model/setting.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/archer_y6/mujoco_archer_y6_srv.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_base_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_1.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_2.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_3.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_4.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_5.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/assets.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/camera_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/e3_desktop_base_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_base_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_helper_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_link_1.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_link_2.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_helper_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_link_1.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_link_2.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/assets/table_link.STL +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/joint_class.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/robot.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/scene.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/model/setting.xml +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop_srv.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/mujoco/mujoco_base.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/dummy/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/dummy/robot_dummy.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/dummy/robot_dummy_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/dummy/robot_dummy_srv.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/gello/__init__.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/gello/robot_gello.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/gello/robot_gello_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/gello/robot_gello_srv.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/robot_hexarm_cli.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/empty.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_handle.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_p050.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_p050_handle.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/empty.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_handle.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_p050.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_p050_handle.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/empty.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_handle.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_p050.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/archer_y6/gp100_p050_handle.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/hexarm/urdf/firefly_y6/empty.urdf +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers/robot/robot_base.py +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers.egg-info/dependency_links.txt +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/hex_zmq_servers.egg-info/top_level.txt +0 -0
- {hex_zmq_servers-0.3.16 → hex_zmq_servers-1.0.1}/setup.cfg +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: hex_zmq_servers
|
|
3
|
+
Version: 1.0.1
|
|
4
|
+
Summary: HEXFELLOW ZMQ Servers
|
|
5
|
+
Author-email: Dong Zhaorui <dzr159@gmail.com>
|
|
6
|
+
Maintainer-email: jecjune <zejun.chen@hexfellow.com>, Dong Zhaorui <dzr159@gmail.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
|
+
|
|
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 and Chen, Zejun},
|
|
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
|
+
[](https://star-history.com/#hexfellow/hex_zmq_servers&Date)
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
# 👥 Contributors
|
|
192
|
+
|
|
193
|
+
<a href="https://github.com/hexfellow/hex_zmq_servers/graphs/contributors">
|
|
194
|
+
<img src="https://contrib.rocks/image?repo=hexfellow/hex_zmq_servers" />
|
|
195
|
+
</a>
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
|
|
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 and Chen, Zejun},
|
|
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
|
+
[](https://star-history.com/#hexfellow/hex_zmq_servers&Date)
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
# 👥 Contributors
|
|
149
|
+
|
|
150
|
+
<a href="https://github.com/hexfellow/hex_zmq_servers/graphs/contributors">
|
|
151
|
+
<img src="https://contrib.rocks/image?repo=hexfellow/hex_zmq_servers" />
|
|
152
|
+
</a>
|
|
@@ -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.
|
|
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.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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([
|
|
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.
|
|
246
|
-
self.
|
|
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.
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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,
|
|
282
|
-
self._limits[0,
|
|
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[
|
|
291
|
-
self.__data.qvel[
|
|
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[
|
|
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")
|