hex-zmq-servers 0.2.3__tar.gz → 0.2.5__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-0.2.3/hex_zmq_servers.egg-info → hex_zmq_servers-0.2.5}/PKG-INFO +45 -17
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/README.md +34 -10
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/__init__.py +57 -40
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/__init__.py +6 -13
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/berxel/cam_berxel.py +16 -4
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/cam_base.py +7 -2
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/dummy/cam_dummy.py +11 -2
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/config/mujoco_archer_d6y.json +1 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/config/mujoco_e3_desktop.json +1 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/config/robot_hexarm.json +1 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/device_base.py +1 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/robot.xml +7 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/scene.xml +1 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/mujoco_archer_d6y.py +38 -15
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/mujoco_archer_d6y_srv.py +4 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/robot.xml +14 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/scene.xml +1 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop.py +39 -16
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop_srv.py +9 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/mujoco_base.py +17 -1
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/dummy/robot_dummy.py +12 -3
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/dummy/robot_dummy_srv.py +2 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/gello/robot_gello.py +12 -5
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/gello/robot_gello_srv.py +2 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/robot_hexarm.py +46 -17
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/robot_hexarm_srv.py +2 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/robot_base.py +22 -2
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/zmq_base.py +22 -4
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5/hex_zmq_servers.egg-info}/PKG-INFO +45 -17
- hex_zmq_servers-0.2.5/hex_zmq_servers.egg-info/requires.txt +17 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/pyproject.toml +6 -7
- hex_zmq_servers-0.2.3/hex_zmq_servers.egg-info/requires.txt +0 -12
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/LICENSE +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/MANIFEST.in +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/berxel/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/berxel/cam_berxel_cli.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/berxel/cam_berxel_srv.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/dummy/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/dummy/cam_dummy_cli.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/cam/dummy/cam_dummy_srv.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/config/cam_berxel.json +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/config/cam_dummy.json +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/config/robot_dummy.json +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/config/robot_gello.json +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/config/zmq_dummy.json +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/hex_launch.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/arm_base_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/arm_link_1.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/arm_link_2.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/arm_link_3.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/arm_link_4.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/arm_link_5.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/assets.xml +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/camera_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/gripper_base_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/gripper_left_helper_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/gripper_left_link_1.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/gripper_left_link_2.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/gripper_right_helper_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/gripper_right_link_1.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/gripper_right_link_2.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/assets/table_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/setting.xml +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/mujoco_archer_d6y_cli.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_base_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_1.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_2.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_3.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_4.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/arm_link_5.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/assets.xml +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/camera_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/e3_desktop_base_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_base_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_helper_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_link_1.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_left_link_2.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_helper_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_link_1.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/gripper_right_link_2.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/assets/table_link.STL +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/model/setting.xml +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/e3_desktop/mujoco_e3_desktop_cli.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/dummy/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/dummy/robot_dummy_cli.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/gello/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/gello/robot_gello_cli.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/__init__.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/robot_hexarm_cli.py +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/empty.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_handle.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_p050.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_d6y/gp100_p050_handle.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/empty.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_handle.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_p050.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/robot/hexarm/urdf/archer_l6y/gp100_p050_handle.urdf +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers.egg-info/SOURCES.txt +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers.egg-info/dependency_links.txt +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers.egg-info/top_level.txt +0 -0
- {hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hex_zmq_servers
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.5
|
|
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>
|
|
@@ -22,15 +22,19 @@ Requires-Python: >=3.8
|
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
24
|
Requires-Dist: pyzmq>=27.0.1
|
|
25
|
-
Requires-Dist:
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist: hex_device>=1.2.1
|
|
28
|
-
Requires-Dist: hex_robo_utils>=0.1.18
|
|
25
|
+
Requires-Dist: hex_device<1.4.0,>=1.3.1
|
|
26
|
+
Requires-Dist: hex_robo_utils<0.2.0,>=0.1.19
|
|
29
27
|
Requires-Dist: dynamixel-sdk==3.8.4
|
|
30
|
-
Provides-Extra:
|
|
31
|
-
Requires-Dist: berxel_py_wrapper>=2.0; extra == "
|
|
28
|
+
Provides-Extra: camera
|
|
29
|
+
Requires-Dist: berxel_py_wrapper>=2.0; extra == "camera"
|
|
30
|
+
Requires-Dist: opencv-python>=4.2; extra == "camera"
|
|
31
|
+
Provides-Extra: mujoco
|
|
32
|
+
Requires-Dist: mujoco>=3.3.3; extra == "mujoco"
|
|
33
|
+
Requires-Dist: opencv-python>=4.2; extra == "mujoco"
|
|
32
34
|
Provides-Extra: all
|
|
33
35
|
Requires-Dist: berxel_py_wrapper>=2.0; extra == "all"
|
|
36
|
+
Requires-Dist: mujoco>=3.3.3; extra == "all"
|
|
37
|
+
Requires-Dist: opencv-python>=4.2; extra == "all"
|
|
34
38
|
Dynamic: license-file
|
|
35
39
|
|
|
36
40
|
# hex_zmq_servers
|
|
@@ -76,21 +80,45 @@ hex_zmq_servers/
|
|
|
76
80
|
|
|
77
81
|
### Install from PyPI
|
|
78
82
|
|
|
79
|
-
For those who only want to use the library in their projects, it is recommended to install it from PyPI.
|
|
83
|
+
1. For those who only want to use the library in their projects, it is recommended to install it from PyPI.
|
|
80
84
|
|
|
81
|
-
```bash
|
|
82
|
-
pip install hex_zmq_servers
|
|
83
|
-
```
|
|
85
|
+
```bash
|
|
86
|
+
pip install hex_zmq_servers[all]
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
2. If you don't want to install the extra dependencies for extra devices, you can run:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
pip install hex_zmq_servers
|
|
93
|
+
```
|
|
84
94
|
|
|
85
95
|
### Install from Source Code
|
|
86
96
|
|
|
87
|
-
For those who want to test the examples or contribute to the project, you can install it from source code.
|
|
97
|
+
1. For those who want to test the examples or contribute to the project, you can install it from source code.
|
|
88
98
|
|
|
89
|
-
```bash
|
|
90
|
-
git clone https://github.com/hexfellow/hex_zmq_servers.git
|
|
91
|
-
cd hex_zmq_servers
|
|
92
|
-
./venv.sh
|
|
93
|
-
```
|
|
99
|
+
```bash
|
|
100
|
+
git clone https://github.com/hexfellow/hex_zmq_servers.git
|
|
101
|
+
cd hex_zmq_servers
|
|
102
|
+
./venv.sh
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
2. If you don't want to install the extra dependencies for extra devices, you can run:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
git clone https://github.com/hexfellow/hex_zmq_servers.git
|
|
109
|
+
cd hex_zmq_servers
|
|
110
|
+
./venv.sh --min
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
(**Important**) Some examples would not work without the extra dependencies.
|
|
114
|
+
|
|
115
|
+
3. If you don't want to install the examples, you can run:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
git clone https://github.com/hexfellow/hex_zmq_servers.git
|
|
119
|
+
cd hex_zmq_servers
|
|
120
|
+
./venv.sh --pkg-only
|
|
121
|
+
```
|
|
94
122
|
|
|
95
123
|
## Examples
|
|
96
124
|
|
|
@@ -41,21 +41,45 @@ hex_zmq_servers/
|
|
|
41
41
|
|
|
42
42
|
### Install from PyPI
|
|
43
43
|
|
|
44
|
-
For those who only want to use the library in their projects, it is recommended to install it from PyPI.
|
|
44
|
+
1. For those who only want to use the library in their projects, it is recommended to install it from PyPI.
|
|
45
45
|
|
|
46
|
-
```bash
|
|
47
|
-
pip install hex_zmq_servers
|
|
48
|
-
```
|
|
46
|
+
```bash
|
|
47
|
+
pip install hex_zmq_servers[all]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
2. If you don't want to install the extra dependencies for extra devices, you can run:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pip install hex_zmq_servers
|
|
54
|
+
```
|
|
49
55
|
|
|
50
56
|
### Install from Source Code
|
|
51
57
|
|
|
52
|
-
For those who want to test the examples or contribute to the project, you can install it from source code.
|
|
58
|
+
1. For those who want to test the examples or contribute to the project, you can install it from source code.
|
|
53
59
|
|
|
54
|
-
```bash
|
|
55
|
-
git clone https://github.com/hexfellow/hex_zmq_servers.git
|
|
56
|
-
cd hex_zmq_servers
|
|
57
|
-
./venv.sh
|
|
58
|
-
```
|
|
60
|
+
```bash
|
|
61
|
+
git clone https://github.com/hexfellow/hex_zmq_servers.git
|
|
62
|
+
cd hex_zmq_servers
|
|
63
|
+
./venv.sh
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
2. If you don't want to install the extra dependencies for extra devices, you can run:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git clone https://github.com/hexfellow/hex_zmq_servers.git
|
|
70
|
+
cd hex_zmq_servers
|
|
71
|
+
./venv.sh --min
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
(**Important**) Some examples would not work without the extra dependencies.
|
|
75
|
+
|
|
76
|
+
3. If you don't want to install the examples, you can run:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
git clone https://github.com/hexfellow/hex_zmq_servers.git
|
|
80
|
+
cd hex_zmq_servers
|
|
81
|
+
./venv.sh --pkg-only
|
|
82
|
+
```
|
|
59
83
|
|
|
60
84
|
## Examples
|
|
61
85
|
|
|
@@ -13,13 +13,6 @@ from .zmq_base import HexRate, hex_zmq_ts_now, hex_zmq_ts_delta_ms
|
|
|
13
13
|
from .zmq_base import HexSafeValue, HexZMQClientBase, HexZMQServerBase, hex_server_helper
|
|
14
14
|
from .zmq_base import HexZMQDummyClient, HexZMQDummyServer
|
|
15
15
|
|
|
16
|
-
from .cam import HexCamBase, HexCamClientBase, HexCamServerBase
|
|
17
|
-
from .cam import HexCamDummy, HexCamDummyClient, HexCamDummyServer
|
|
18
|
-
|
|
19
|
-
from .mujoco import HexMujocoBase, HexMujocoClientBase, HexMujocoServerBase
|
|
20
|
-
from .mujoco import HexMujocoArcherD6y, HexMujocoArcherD6yClient, HexMujocoArcherD6yServer
|
|
21
|
-
from .mujoco import HexMujocoE3Desktop, HexMujocoE3DesktopClient, HexMujocoE3DesktopServer
|
|
22
|
-
|
|
23
16
|
from .robot import HexRobotBase, HexRobotClientBase, HexRobotServerBase
|
|
24
17
|
from .robot import HexRobotDummy, HexRobotDummyClient, HexRobotDummyServer
|
|
25
18
|
from .robot import HexRobotGello, HexRobotGelloClient, HexRobotGelloServer
|
|
@@ -30,20 +23,12 @@ import os
|
|
|
30
23
|
file_dir = os.path.dirname(os.path.abspath(__file__))
|
|
31
24
|
HEX_ZMQ_SERVERS_PATH_DICT = {
|
|
32
25
|
"zmq_dummy": f"{file_dir}/zmq_base.py",
|
|
33
|
-
"cam_dummy": f"{file_dir}/cam/dummy/cam_dummy_srv.py",
|
|
34
|
-
"mujoco_archer_d6y":
|
|
35
|
-
f"{file_dir}/mujoco/archer_d6y/mujoco_archer_d6y_srv.py",
|
|
36
|
-
"mujoco_e3_desktop":
|
|
37
|
-
f"{file_dir}/mujoco/e3_desktop/mujoco_e3_desktop_srv.py",
|
|
38
26
|
"robot_dummy": f"{file_dir}/robot/dummy/robot_dummy_srv.py",
|
|
39
27
|
"robot_gello": f"{file_dir}/robot/gello/robot_gello_srv.py",
|
|
40
28
|
"robot_hexarm": f"{file_dir}/robot/hexarm/robot_hexarm_srv.py",
|
|
41
29
|
}
|
|
42
30
|
HEX_ZMQ_CONFIGS_PATH_DICT = {
|
|
43
31
|
"zmq_dummy": f"{file_dir}/config/zmq_dummy.json",
|
|
44
|
-
"cam_dummy": f"{file_dir}/config/cam_dummy.json",
|
|
45
|
-
"mujoco_archer_d6y": f"{file_dir}/config/mujoco_archer_d6y.json",
|
|
46
|
-
"mujoco_e3_desktop": f"{file_dir}/config/mujoco_e3_desktop.json",
|
|
47
32
|
"robot_dummy": f"{file_dir}/config/robot_dummy.json",
|
|
48
33
|
"robot_gello": f"{file_dir}/config/robot_gello.json",
|
|
49
34
|
"robot_hexarm": f"{file_dir}/config/robot_hexarm.json",
|
|
@@ -76,25 +61,6 @@ __all__ = [
|
|
|
76
61
|
"HexZMQDummyClient",
|
|
77
62
|
"HexZMQDummyServer",
|
|
78
63
|
|
|
79
|
-
# camera
|
|
80
|
-
"HexCamBase",
|
|
81
|
-
"HexCamClientBase",
|
|
82
|
-
"HexCamServerBase",
|
|
83
|
-
"HexCamDummy",
|
|
84
|
-
"HexCamDummyClient",
|
|
85
|
-
"HexCamDummyServer",
|
|
86
|
-
|
|
87
|
-
# mujoco
|
|
88
|
-
"HexMujocoBase",
|
|
89
|
-
"HexMujocoClientBase",
|
|
90
|
-
"HexMujocoServerBase",
|
|
91
|
-
"HexMujocoArcherD6y",
|
|
92
|
-
"HexMujocoArcherD6yClient",
|
|
93
|
-
"HexMujocoArcherD6yServer",
|
|
94
|
-
"HexMujocoE3Desktop",
|
|
95
|
-
"HexMujocoE3DesktopClient",
|
|
96
|
-
"HexMujocoE3DesktopServer",
|
|
97
|
-
|
|
98
64
|
# robot
|
|
99
65
|
"HexRobotBase",
|
|
100
66
|
"HexRobotClientBase",
|
|
@@ -110,21 +76,72 @@ __all__ = [
|
|
|
110
76
|
"HexRobotHexarmServer",
|
|
111
77
|
]
|
|
112
78
|
|
|
113
|
-
# Optional:
|
|
79
|
+
# Optional: camera
|
|
114
80
|
try:
|
|
81
|
+
from .cam import HexCamBase, HexCamClientBase, HexCamServerBase
|
|
82
|
+
from .cam import HexCamDummy, HexCamDummyClient, HexCamDummyServer
|
|
115
83
|
from .cam import HexCamBerxel, HexCamBerxelClient, HexCamBerxelServer
|
|
116
|
-
HEX_ZMQ_SERVERS_PATH_DICT
|
|
117
|
-
"
|
|
118
|
-
|
|
119
|
-
"cam_berxel"
|
|
84
|
+
HEX_ZMQ_SERVERS_PATH_DICT.update({
|
|
85
|
+
"cam_dummy":
|
|
86
|
+
f"{file_dir}/cam/dummy/cam_dummy_srv.py",
|
|
87
|
+
"cam_berxel":
|
|
88
|
+
f"{file_dir}/cam/berxel/cam_berxel_srv.py",
|
|
89
|
+
})
|
|
90
|
+
HEX_ZMQ_CONFIGS_PATH_DICT.update({
|
|
91
|
+
"cam_dummy":
|
|
92
|
+
f"{file_dir}/config/cam_dummy.json",
|
|
93
|
+
"cam_berxel":
|
|
94
|
+
f"{file_dir}/config/cam_berxel.json",
|
|
95
|
+
})
|
|
120
96
|
__all__.extend([
|
|
97
|
+
# camera
|
|
98
|
+
"HexCamBase",
|
|
99
|
+
"HexCamClientBase",
|
|
100
|
+
"HexCamServerBase",
|
|
101
|
+
"HexCamDummy",
|
|
102
|
+
"HexCamDummyClient",
|
|
103
|
+
"HexCamDummyServer",
|
|
121
104
|
"HexCamBerxel",
|
|
122
105
|
"HexCamBerxelClient",
|
|
123
106
|
"HexCamBerxelServer",
|
|
124
107
|
])
|
|
125
108
|
except ImportError:
|
|
126
109
|
# berxel_py_wrapper not installed
|
|
127
|
-
# Install with: pip install hex_zmq_servers[berxel]
|
|
110
|
+
# Install with: pip install hex_zmq_servers[berxel] or pip install hex_zmq_servers[all]
|
|
111
|
+
pass
|
|
112
|
+
|
|
113
|
+
# Optional: mujoco
|
|
114
|
+
try:
|
|
115
|
+
from .mujoco import HexMujocoBase, HexMujocoClientBase, HexMujocoServerBase
|
|
116
|
+
from .mujoco import HexMujocoArcherD6y, HexMujocoArcherD6yClient, HexMujocoArcherD6yServer
|
|
117
|
+
from .mujoco import HexMujocoE3Desktop, HexMujocoE3DesktopClient, HexMujocoE3DesktopServer
|
|
118
|
+
HEX_ZMQ_SERVERS_PATH_DICT.update({
|
|
119
|
+
"mujoco_archer_d6y":
|
|
120
|
+
f"{file_dir}/mujoco/archer_d6y/mujoco_archer_d6y_srv.py",
|
|
121
|
+
"mujoco_e3_desktop":
|
|
122
|
+
f"{file_dir}/mujoco/e3_desktop/mujoco_e3_desktop_srv.py",
|
|
123
|
+
})
|
|
124
|
+
HEX_ZMQ_CONFIGS_PATH_DICT.update({
|
|
125
|
+
"mujoco_archer_d6y":
|
|
126
|
+
f"{file_dir}/config/mujoco_archer_d6y.json",
|
|
127
|
+
"mujoco_e3_desktop":
|
|
128
|
+
f"{file_dir}/config/mujoco_e3_desktop.json",
|
|
129
|
+
})
|
|
130
|
+
__all__.extend([
|
|
131
|
+
# mujoco
|
|
132
|
+
"HexMujocoBase",
|
|
133
|
+
"HexMujocoClientBase",
|
|
134
|
+
"HexMujocoServerBase",
|
|
135
|
+
"HexMujocoArcherD6y",
|
|
136
|
+
"HexMujocoArcherD6yClient",
|
|
137
|
+
"HexMujocoArcherD6yServer",
|
|
138
|
+
"HexMujocoE3Desktop",
|
|
139
|
+
"HexMujocoE3DesktopClient",
|
|
140
|
+
"HexMujocoE3DesktopServer",
|
|
141
|
+
])
|
|
142
|
+
except ImportError:
|
|
143
|
+
# mujoco not installed
|
|
144
|
+
# Install with: pip install hex_zmq_servers[mujoco] or pip install hex_zmq_servers[all]
|
|
128
145
|
pass
|
|
129
146
|
|
|
130
147
|
# print("#### Thanks for using hex_zmq_servers :D ####")
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
from .cam_base import HexCamBase, HexCamClientBase, HexCamServerBase
|
|
10
10
|
from .dummy import HexCamDummy, HexCamDummyClient, HexCamDummyServer
|
|
11
|
+
from .berxel import HexCamBerxel, HexCamBerxelClient, HexCamBerxelServer
|
|
11
12
|
|
|
12
13
|
__all__ = [
|
|
13
14
|
# base
|
|
@@ -19,17 +20,9 @@ __all__ = [
|
|
|
19
20
|
"HexCamDummy",
|
|
20
21
|
"HexCamDummyClient",
|
|
21
22
|
"HexCamDummyServer",
|
|
22
|
-
]
|
|
23
23
|
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"HexCamBerxelClient",
|
|
30
|
-
"HexCamBerxelServer",
|
|
31
|
-
])
|
|
32
|
-
except ImportError:
|
|
33
|
-
# berxel_py_wrapper not installed
|
|
34
|
-
# Install with: pip install hex_zmq_servers[berxel]
|
|
35
|
-
pass
|
|
24
|
+
# berxel
|
|
25
|
+
"HexCamBerxel",
|
|
26
|
+
"HexCamBerxelClient",
|
|
27
|
+
"HexCamBerxelServer",
|
|
28
|
+
]
|
|
@@ -7,10 +7,15 @@
|
|
|
7
7
|
################################################################
|
|
8
8
|
|
|
9
9
|
import cv2
|
|
10
|
+
import threading
|
|
10
11
|
import numpy as np
|
|
11
12
|
|
|
12
13
|
from ..cam_base import HexCamBase
|
|
13
|
-
from ...zmq_base import
|
|
14
|
+
from ...zmq_base import (
|
|
15
|
+
hex_zmq_ts_now,
|
|
16
|
+
HexSafeValue,
|
|
17
|
+
)
|
|
18
|
+
from ...hex_launch import hex_log, HEX_LOG_LEVEL
|
|
14
19
|
from berxel_py_wrapper import *
|
|
15
20
|
|
|
16
21
|
CAMERA_CONFIG = {
|
|
@@ -69,13 +74,14 @@ class HexCamBerxel(HexCamBase):
|
|
|
69
74
|
self._wait_for_working()
|
|
70
75
|
return self.__serial_number
|
|
71
76
|
|
|
72
|
-
def work_loop(self, hex_values: list[HexSafeValue]):
|
|
77
|
+
def work_loop(self, hex_values: list[HexSafeValue | threading.Event]):
|
|
73
78
|
rgb_value = hex_values[0]
|
|
74
79
|
depth_value = hex_values[1]
|
|
80
|
+
stop_event = hex_values[2]
|
|
75
81
|
|
|
76
82
|
rgb_count = 0
|
|
77
83
|
depth_count = 0
|
|
78
|
-
while self._working.is_set():
|
|
84
|
+
while self._working.is_set() and not stop_event.is_set():
|
|
79
85
|
# read frame
|
|
80
86
|
hawk_rgb_frame = self.__device.readColorFrame(40)
|
|
81
87
|
hawk_depth_frame = self.__device.readDepthFrame(40)
|
|
@@ -95,6 +101,9 @@ class HexCamBerxel(HexCamBase):
|
|
|
95
101
|
self.__device.releaseFrame(hawk_rgb_frame)
|
|
96
102
|
self.__device.releaseFrame(hawk_depth_frame)
|
|
97
103
|
|
|
104
|
+
# close
|
|
105
|
+
self.close()
|
|
106
|
+
|
|
98
107
|
def __unpack_frame(self, hawk_frame: BerxelHawkFrame, depth: bool = False):
|
|
99
108
|
# common variables
|
|
100
109
|
berxel_ts = hawk_frame.getTimeStamp()
|
|
@@ -132,7 +141,7 @@ class HexCamBerxel(HexCamBase):
|
|
|
132
141
|
)
|
|
133
142
|
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
|
|
134
143
|
|
|
135
|
-
return ts, frame
|
|
144
|
+
return ts if self.__sens_ts else hex_zmq_ts_now(), frame
|
|
136
145
|
|
|
137
146
|
def __open_device(self, serial_number: str | None = None) -> bool:
|
|
138
147
|
# init context
|
|
@@ -220,9 +229,12 @@ class HexCamBerxel(HexCamBase):
|
|
|
220
229
|
return False
|
|
221
230
|
|
|
222
231
|
def close(self):
|
|
232
|
+
if not self._working.is_set():
|
|
233
|
+
return
|
|
223
234
|
self._working.clear()
|
|
224
235
|
self.__stop_stream()
|
|
225
236
|
self.__close_device()
|
|
237
|
+
hex_log(HEX_LOG_LEVEL["info"], "HexCamBerxel closed")
|
|
226
238
|
|
|
227
239
|
def __stop_stream(self):
|
|
228
240
|
if self.__device is None:
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# Date : 2025-09-16
|
|
7
7
|
################################################################
|
|
8
8
|
|
|
9
|
+
import threading
|
|
9
10
|
import numpy as np
|
|
10
11
|
from abc import abstractmethod
|
|
11
12
|
|
|
@@ -30,7 +31,7 @@ class HexCamBase(HexDeviceBase):
|
|
|
30
31
|
HexDeviceBase.__del__(self)
|
|
31
32
|
|
|
32
33
|
@abstractmethod
|
|
33
|
-
def work_loop(self, hex_values: list[HexSafeValue]):
|
|
34
|
+
def work_loop(self, hex_values: list[HexSafeValue | threading.Event]):
|
|
34
35
|
raise NotImplementedError(
|
|
35
36
|
"`work_loop` should be implemented by the child class")
|
|
36
37
|
|
|
@@ -97,7 +98,11 @@ class HexCamServerBase(HexZMQServerBase):
|
|
|
97
98
|
|
|
98
99
|
def work_loop(self):
|
|
99
100
|
try:
|
|
100
|
-
self._device.work_loop([
|
|
101
|
+
self._device.work_loop([
|
|
102
|
+
self._rgb_value,
|
|
103
|
+
self._depth_value,
|
|
104
|
+
self._stop_event,
|
|
105
|
+
])
|
|
101
106
|
finally:
|
|
102
107
|
self._device.close()
|
|
103
108
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
# Date : 2025-09-12
|
|
7
7
|
################################################################
|
|
8
8
|
|
|
9
|
+
import threading
|
|
9
10
|
import numpy as np
|
|
10
11
|
|
|
11
12
|
from ..cam_base import HexCamBase
|
|
@@ -14,6 +15,7 @@ from ...zmq_base import (
|
|
|
14
15
|
HexRate,
|
|
15
16
|
HexSafeValue,
|
|
16
17
|
)
|
|
18
|
+
from ...hex_launch import hex_log, HEX_LOG_LEVEL
|
|
17
19
|
|
|
18
20
|
|
|
19
21
|
class HexCamDummy(HexCamBase):
|
|
@@ -25,14 +27,15 @@ class HexCamDummy(HexCamBase):
|
|
|
25
27
|
def __del__(self):
|
|
26
28
|
HexCamBase.__del__(self)
|
|
27
29
|
|
|
28
|
-
def work_loop(self, hex_values: list[HexSafeValue]):
|
|
30
|
+
def work_loop(self, hex_values: list[HexSafeValue | threading.Event]):
|
|
29
31
|
rgb_value = hex_values[0]
|
|
30
32
|
depth_value = hex_values[1]
|
|
33
|
+
stop_event = hex_values[2]
|
|
31
34
|
|
|
32
35
|
rgb_count = 0
|
|
33
36
|
depth_count = 0
|
|
34
37
|
rate = HexRate(60)
|
|
35
|
-
while self._working.is_set():
|
|
38
|
+
while self._working.is_set() and not stop_event.is_set():
|
|
36
39
|
# rgb
|
|
37
40
|
rgb_img = np.random.randint(
|
|
38
41
|
0,
|
|
@@ -56,5 +59,11 @@ class HexCamDummy(HexCamBase):
|
|
|
56
59
|
# sleep
|
|
57
60
|
rate.sleep()
|
|
58
61
|
|
|
62
|
+
# close
|
|
63
|
+
self.close()
|
|
64
|
+
|
|
59
65
|
def close(self):
|
|
66
|
+
if not self._working.is_set():
|
|
67
|
+
return
|
|
60
68
|
self._working.clear()
|
|
69
|
+
hex_log(HEX_LOG_LEVEL["info"], "HexCamDummy closed")
|
|
@@ -32,7 +32,7 @@ class HexDeviceBase(ABC):
|
|
|
32
32
|
self._working.wait(0.1)
|
|
33
33
|
|
|
34
34
|
@abstractmethod
|
|
35
|
-
def work_loop(self, hex_values: list[HexSafeValue]):
|
|
35
|
+
def work_loop(self, hex_values: list[HexSafeValue | threading.Event]):
|
|
36
36
|
raise NotImplementedError(
|
|
37
37
|
"`work_loop` should be implemented by the child class")
|
|
38
38
|
|
{hex_zmq_servers-0.2.3 → hex_zmq_servers-0.2.5}/hex_zmq_servers/mujoco/archer_d6y/model/robot.xml
RENAMED
|
@@ -41,6 +41,13 @@
|
|
|
41
41
|
<geom pos="0.04 0 0.12" quat="0.6830127 0.6830127 0.1830127 -0.1830127" type="mesh" rgba="0.1 0.1 0.1 1" mesh="camera_link" />
|
|
42
42
|
<camera name="end_camera" pos="0.066 0 0.105" quat="0.8660254 0.0 -0.5 0.0" fovy="50"/>
|
|
43
43
|
|
|
44
|
+
# ee frame
|
|
45
|
+
<body name="ee_frame" pos="0.1870 0.0 0.0" quat="1 0 0 0">
|
|
46
|
+
<geom type="cylinder" size="0.002 0.01" pos="0.01 0.00 0.00" quat="0.7071068 0.0000000 0.7071068 0.0000000" rgba="1 0 0 1" contype="0" conaffinity="0" group="4"/>
|
|
47
|
+
<geom type="cylinder" size="0.002 0.01" pos="0.00 0.01 0.00" quat="0.7071068 0.7071068 0.0000000 0.0000000" rgba="0 1 0 1" contype="0" conaffinity="0" group="4"/>
|
|
48
|
+
<geom type="cylinder" size="0.002 0.01" pos="0.00 0.00 0.01" quat="1.0000000 0.0000000 0.0000000 0.0000000" rgba="0 0 1 1" contype="0" conaffinity="0" group="4"/>
|
|
49
|
+
</body>
|
|
50
|
+
|
|
44
51
|
# gripper helper
|
|
45
52
|
<body name="gripper_left_helper_link" pos="0.057667 0.030604 2.5e-05">
|
|
46
53
|
<inertial pos="0.00299357 0.0232625 -5e-05" quat="0.996724 0 0 0.0808839" mass="0.00594562" diaginertia="2.74798e-06 1.47567e-06 1.34732e-06"/>
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import os
|
|
10
10
|
import copy
|
|
11
|
+
import threading
|
|
11
12
|
import cv2
|
|
12
13
|
import numpy as np
|
|
13
14
|
|
|
@@ -21,10 +22,11 @@ from ...zmq_base import (
|
|
|
21
22
|
HexRate,
|
|
22
23
|
HexSafeValue,
|
|
23
24
|
)
|
|
25
|
+
from ...hex_launch import hex_log, HEX_LOG_LEVEL
|
|
24
26
|
from hex_robo_utils import HexCtrlUtilMitJoint as CtrlUtil
|
|
25
27
|
|
|
26
28
|
MUJOCO_CONFIG = {
|
|
27
|
-
"states_rate":
|
|
29
|
+
"states_rate": 500,
|
|
28
30
|
"img_rate": 30,
|
|
29
31
|
"tau_ctrl": False,
|
|
30
32
|
"mit_kp": [200.0, 200.0, 200.0, 75.0, 15.0, 15.0, 20.0],
|
|
@@ -122,12 +124,13 @@ class HexMujocoArcherD6y(HexMujocoBase):
|
|
|
122
124
|
self.__viewer.sync()
|
|
123
125
|
return True
|
|
124
126
|
|
|
125
|
-
def work_loop(self, hex_values: list[HexSafeValue]):
|
|
127
|
+
def work_loop(self, hex_values: list[HexSafeValue | threading.Event]):
|
|
126
128
|
states_robot_value = hex_values[0]
|
|
127
129
|
states_obj_value = hex_values[1]
|
|
128
130
|
cmds_robot_value = hex_values[2]
|
|
129
131
|
rgb_value = hex_values[3]
|
|
130
132
|
depth_value = hex_values[4]
|
|
133
|
+
stop_event = hex_values[5]
|
|
131
134
|
|
|
132
135
|
last_states_ts = {"s": 0, "ns": 0}
|
|
133
136
|
states_robot_count = 0
|
|
@@ -140,7 +143,7 @@ class HexMujocoArcherD6y(HexMujocoBase):
|
|
|
140
143
|
states_trig_count = 0
|
|
141
144
|
img_trig_count = 0
|
|
142
145
|
|
|
143
|
-
while self._working.is_set():
|
|
146
|
+
while self._working.is_set() and not stop_event.is_set():
|
|
144
147
|
states_trig_count += 1
|
|
145
148
|
if states_trig_count >= self.__states_trig_thresh:
|
|
146
149
|
states_trig_count = 0
|
|
@@ -167,8 +170,7 @@ class HexMujocoArcherD6y(HexMujocoBase):
|
|
|
167
170
|
cmds_robot_pack = cmds_robot_value.get(timeout_s=-1.0)
|
|
168
171
|
if cmds_robot_pack is not None:
|
|
169
172
|
ts, seq, cmds = cmds_robot_pack
|
|
170
|
-
|
|
171
|
-
if delta_seq > 0 and delta_seq < 1e6:
|
|
173
|
+
if seq != last_cmds_robot_seq:
|
|
172
174
|
last_cmds_robot_seq = seq
|
|
173
175
|
if hex_zmq_ts_delta_ms(hex_zmq_ts_now(), ts) < 200.0:
|
|
174
176
|
self.__set_cmds(cmds)
|
|
@@ -197,6 +199,9 @@ class HexMujocoArcherD6y(HexMujocoBase):
|
|
|
197
199
|
# sleep
|
|
198
200
|
rate.sleep()
|
|
199
201
|
|
|
202
|
+
# close
|
|
203
|
+
self.close()
|
|
204
|
+
|
|
200
205
|
def __get_states(self):
|
|
201
206
|
pos = copy.deepcopy(self.__data.qpos)
|
|
202
207
|
vel = copy.deepcopy(self.__data.qvel)
|
|
@@ -213,23 +218,38 @@ class HexMujocoArcherD6y(HexMujocoBase):
|
|
|
213
218
|
def __set_cmds(self, cmds: np.ndarray):
|
|
214
219
|
tau_cmds = None
|
|
215
220
|
if not self.__tau_ctrl:
|
|
221
|
+
cmd_pos = None
|
|
222
|
+
tar_vel = np.zeros_like(cmds)
|
|
223
|
+
cmd_tor = np.zeros_like(cmds)
|
|
224
|
+
cmd_kp = self.__mit_kp.copy()
|
|
225
|
+
cmd_kd = self.__mit_kd.copy()
|
|
216
226
|
if len(cmds.shape) == 1:
|
|
217
|
-
cmd_pos = cmds
|
|
218
|
-
|
|
227
|
+
cmd_pos = cmds
|
|
228
|
+
elif len(cmds.shape) == 2:
|
|
229
|
+
if cmds.shape[1] == 2:
|
|
230
|
+
cmd_pos = cmds[:, 0].copy()
|
|
231
|
+
cmd_tor = cmds[:, 1].copy()
|
|
232
|
+
elif cmds.shape[1] == 5:
|
|
233
|
+
cmd_pos = cmds[:, 0].copy()
|
|
234
|
+
tar_vel = cmds[:, 1].copy()
|
|
235
|
+
cmd_tor = cmds[:, 2].copy()
|
|
236
|
+
cmd_kp = cmds[:, 3].copy()
|
|
237
|
+
cmd_kd = cmds[:, 4].copy()
|
|
238
|
+
else:
|
|
239
|
+
raise ValueError(f"The shape of cmds is invalid: {cmds.shape}")
|
|
219
240
|
else:
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
cmd_pos = self._apply_pos_limits(
|
|
241
|
+
raise ValueError(f"The shape of cmds is invalid: {cmds.shape}")
|
|
242
|
+
tar_pos = self._apply_pos_limits(
|
|
223
243
|
cmd_pos,
|
|
224
244
|
self._limits[0, :, 0],
|
|
225
245
|
self._limits[0, :, 1],
|
|
226
246
|
)
|
|
227
|
-
|
|
247
|
+
tar_pos[-1] /= self.__gripper_ratio
|
|
228
248
|
tau_cmds = self.__mit_ctrl(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
249
|
+
cmd_kp,
|
|
250
|
+
cmd_kd,
|
|
251
|
+
tar_pos,
|
|
252
|
+
tar_vel,
|
|
233
253
|
self.__data.qpos[self.__state_robot_idx],
|
|
234
254
|
self.__data.qvel[self.__state_robot_idx],
|
|
235
255
|
cmd_tor,
|
|
@@ -259,8 +279,11 @@ class HexMujocoArcherD6y(HexMujocoBase):
|
|
|
259
279
|
}
|
|
260
280
|
|
|
261
281
|
def close(self):
|
|
282
|
+
if not self._working.is_set():
|
|
283
|
+
return
|
|
262
284
|
self._working.clear()
|
|
263
285
|
self.__rgb_cam.close()
|
|
264
286
|
self.__depth_cam.close()
|
|
265
287
|
if not self.__headless:
|
|
266
288
|
self.__viewer.close()
|
|
289
|
+
hex_log(HEX_LOG_LEVEL["info"], "HexMujocoArcherD6y closed")
|
|
@@ -31,7 +31,7 @@ NET_CONFIG = {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
MUJOCO_CONFIG = {
|
|
34
|
-
"states_rate":
|
|
34
|
+
"states_rate": 500,
|
|
35
35
|
"img_rate": 30,
|
|
36
36
|
"headless": False,
|
|
37
37
|
"sens_ts": True,
|
|
@@ -64,6 +64,7 @@ class HexMujocoArcherD6yServer(HexMujocoServerBase):
|
|
|
64
64
|
self._cmds_value,
|
|
65
65
|
self._rgb_value,
|
|
66
66
|
self._depth_value,
|
|
67
|
+
self._stop_event,
|
|
67
68
|
])
|
|
68
69
|
finally:
|
|
69
70
|
self._device.close()
|
|
@@ -104,6 +105,8 @@ class HexMujocoArcherD6yServer(HexMujocoServerBase):
|
|
|
104
105
|
def _process_request(self, recv_hdr: dict, recv_buf: np.ndarray):
|
|
105
106
|
if recv_hdr["cmd"] == "is_working":
|
|
106
107
|
return self.no_ts_hdr(recv_hdr, self._device.is_working()), None
|
|
108
|
+
elif recv_hdr["cmd"] == "seq_clear":
|
|
109
|
+
return self.no_ts_hdr(recv_hdr, self._seq_clear()), None
|
|
107
110
|
elif recv_hdr["cmd"] == "reset":
|
|
108
111
|
return self.no_ts_hdr(recv_hdr, self._device.reset()), None
|
|
109
112
|
elif recv_hdr["cmd"] == "get_dofs":
|