symetrie-hexapod 2023.1.0__tar.gz → 2024.1.4__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.
- symetrie_hexapod-2024.1.4/.gitignore +35 -0
- symetrie_hexapod-2024.1.4/PKG-INFO +23 -0
- symetrie_hexapod-2024.1.4/README.md +1 -0
- symetrie_hexapod-2024.1.4/pyproject.toml +64 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/__init__.py +23 -7
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/alpha.py +35 -50
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/dynalpha.py +2 -3
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/hexapod_ui.py +17 -15
- symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran.py +266 -0
- symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran.yaml +62 -0
- symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran_cs.py +184 -0
- symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran_protocol.py +128 -0
- symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran_ui.py +449 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna.yaml +5 -5
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna_ui.py +5 -5
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/punaplus.py +1 -1
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda.py +3 -3
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda.yaml +21 -21
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda_cs.py +1 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda_ui.py +5 -5
- symetrie_hexapod-2023.1.0/PKG-INFO +0 -10
- symetrie_hexapod-2023.1.0/pyproject.toml +0 -36
- symetrie_hexapod-2023.1.0/setup.cfg +0 -4
- symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/PKG-INFO +0 -10
- symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/SOURCES.txt +0 -27
- symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/dependency_links.txt +0 -1
- symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/entry_points.txt +0 -11
- symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/requires.txt +0 -5
- symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/top_level.txt +0 -1
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/__init__.py +0 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/pmac.py +0 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna.py +0 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna_cs.py +0 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
- {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/scripts/cgse_service_plugins.py +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Python versions and environment
|
|
2
|
+
|
|
3
|
+
__pycache__
|
|
4
|
+
.python-version
|
|
5
|
+
.envrc
|
|
6
|
+
|
|
7
|
+
# Build systems
|
|
8
|
+
|
|
9
|
+
build
|
|
10
|
+
dist
|
|
11
|
+
**/*.egg-info
|
|
12
|
+
|
|
13
|
+
# Apple specific
|
|
14
|
+
|
|
15
|
+
.DS_Store
|
|
16
|
+
|
|
17
|
+
# Unit testing
|
|
18
|
+
|
|
19
|
+
.pytest_cache
|
|
20
|
+
.coverage
|
|
21
|
+
htmlcov
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
|
|
25
|
+
.env
|
|
26
|
+
.venv
|
|
27
|
+
venv
|
|
28
|
+
|
|
29
|
+
# PyCharm IDE
|
|
30
|
+
|
|
31
|
+
.idea
|
|
32
|
+
|
|
33
|
+
# Packaging
|
|
34
|
+
|
|
35
|
+
uv.lock
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: symetrie-hexapod
|
|
3
|
+
Version: 2024.1.4
|
|
4
|
+
Summary: Symetrie Hexapod implementation for CGSE
|
|
5
|
+
Author: IVS KU Leuven
|
|
6
|
+
Maintainer-email: Rik Huygen <rik.huygen@kuleuven.be>, Sara Regibo <sara.regibo@kuleuven.be>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Keywords: CGSE,Common-EGSE,hardware testing,software framework
|
|
9
|
+
Requires-Python: >=3.9
|
|
10
|
+
Requires-Dist: cgse-common
|
|
11
|
+
Requires-Dist: cgse-coordinates
|
|
12
|
+
Requires-Dist: cgse-core
|
|
13
|
+
Requires-Dist: cgse-gui
|
|
14
|
+
Requires-Dist: invoke
|
|
15
|
+
Requires-Dist: paramiko
|
|
16
|
+
Requires-Dist: pyqt5>=5.15.11
|
|
17
|
+
Provides-Extra: test
|
|
18
|
+
Requires-Dist: pytest; extra == 'test'
|
|
19
|
+
Requires-Dist: pytest-cov; extra == 'test'
|
|
20
|
+
Requires-Dist: pytest-mock; extra == 'test'
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# Drivers for the Symétrie Hexapods
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Drivers for the Symétrie Hexapods
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "symetrie-hexapod"
|
|
3
|
+
version = "2024.1.4"
|
|
4
|
+
description = "Symetrie Hexapod implementation for CGSE"
|
|
5
|
+
authors = [
|
|
6
|
+
{name = "IVS KU Leuven"}
|
|
7
|
+
]
|
|
8
|
+
maintainers = [
|
|
9
|
+
{name = "Rik Huygen", email = "rik.huygen@kuleuven.be"},
|
|
10
|
+
{name = "Sara Regibo", email = "sara.regibo@kuleuven.be"}
|
|
11
|
+
]
|
|
12
|
+
readme = {"file" = "README.md", "content-type" = "text/markdown"}
|
|
13
|
+
requires-python = ">=3.9"
|
|
14
|
+
license = "MIT"
|
|
15
|
+
keywords = [
|
|
16
|
+
"CGSE",
|
|
17
|
+
"Common-EGSE",
|
|
18
|
+
"hardware testing",
|
|
19
|
+
"software framework"
|
|
20
|
+
]
|
|
21
|
+
dependencies = [
|
|
22
|
+
"cgse-common",
|
|
23
|
+
"cgse-core",
|
|
24
|
+
"cgse-gui",
|
|
25
|
+
"cgse-coordinates",
|
|
26
|
+
"PyQt5>=5.15.11",
|
|
27
|
+
"paramiko",
|
|
28
|
+
"invoke"
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
[project.optional-dependencies]
|
|
32
|
+
test = ["pytest", "pytest-mock", "pytest-cov"]
|
|
33
|
+
|
|
34
|
+
[project.scripts]
|
|
35
|
+
puna_cs = 'egse.hexapod.symetrie.puna_cs:cli'
|
|
36
|
+
|
|
37
|
+
[project.gui-scripts]
|
|
38
|
+
puna_ui = "egse.hexapod.symetrie.puna_ui:main"
|
|
39
|
+
|
|
40
|
+
[project.entry-points."cgse.version"]
|
|
41
|
+
symetrie-hexapod = 'egse.plugins'
|
|
42
|
+
|
|
43
|
+
[project.entry-points."cgse.service.plugins"]
|
|
44
|
+
puna_cs = 'scripts.cgse_service_plugins:puna_cs'
|
|
45
|
+
|
|
46
|
+
[tool.hatch.build.targets.sdist]
|
|
47
|
+
exclude = [
|
|
48
|
+
"/tests",
|
|
49
|
+
"/pytest.ini",
|
|
50
|
+
"/.gitignore",
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
[tool.hatch.build.targets.wheel]
|
|
54
|
+
packages = ["src/egse", "src/scripts"]
|
|
55
|
+
|
|
56
|
+
[tool.ruff]
|
|
57
|
+
line-length = 120
|
|
58
|
+
|
|
59
|
+
[tool.ruff.lint]
|
|
60
|
+
extend-select = ["E501"]
|
|
61
|
+
|
|
62
|
+
[build-system]
|
|
63
|
+
requires = ["hatchling"]
|
|
64
|
+
build-backend = "hatchling.build"
|
{symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/__init__.py
RENAMED
|
@@ -1,33 +1,41 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Device control for the Symétrie Hexapod PUNA and
|
|
2
|
+
Device control for the Symétrie Hexapod PUNA, ZONDA, and JORAN.
|
|
3
3
|
|
|
4
|
-
This package contains the modules and classes to work with the Hexapod PUNA and the Hexapod
|
|
4
|
+
This package contains the modules and classes to work with the Hexapod PUNA, the Hexapod ZONDA, and the Hexapod JORAN
|
|
5
5
|
from [Symétrie](www.symetrie.fr).
|
|
6
6
|
|
|
7
7
|
The main entry point for the user of this package is through the terminal commands to start the
|
|
8
|
-
control servers for the PUNA and
|
|
9
|
-
the hexapods. The following commands start the control servers for
|
|
8
|
+
control servers for the PUNA, ZONDA, and JORAN Hexapod, and the GUIs that are provided to interact with
|
|
9
|
+
the hexapods. The following commands start the control servers for the PUNA, ZONDA, and JORAN
|
|
10
10
|
in the background.
|
|
11
11
|
|
|
12
12
|
$ puna_cs start-bg
|
|
13
13
|
$ zonda_cs start-bg
|
|
14
|
+
$ joran_cs start-bg
|
|
14
15
|
|
|
15
16
|
The GUIs can be started with the following commands:
|
|
16
17
|
|
|
17
18
|
$ puna_ui
|
|
18
19
|
$ zonda_ui
|
|
20
|
+
$ joran_ui
|
|
19
21
|
|
|
20
|
-
For developers, the `PunaProxy` and `
|
|
22
|
+
For developers, the `PunaProxy`, `ZondaProxy`, and `JoranProxy` classes are the main interface to command the
|
|
21
23
|
hardware.
|
|
22
24
|
|
|
25
|
+
For the PUNA:
|
|
23
26
|
>>> from egse.hexapod.symetrie.puna import PunaProxy
|
|
24
27
|
>>> puna = PunaProxy()
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
For the ZONDA:
|
|
27
30
|
|
|
28
31
|
>>> from egse.hexapod.symetrie.zonda import ZondaProxy
|
|
29
32
|
>>> zonda = ZondaProxy()
|
|
30
33
|
|
|
34
|
+
For the JORAN:
|
|
35
|
+
|
|
36
|
+
>>> from egse.hexapod.symetrie.joran import JoranProxy
|
|
37
|
+
>>> joran = JoranProxy()
|
|
38
|
+
|
|
31
39
|
These classes will connect to their control servers and provide all commands to
|
|
32
40
|
control the hexapod and monitor its positions and status.
|
|
33
41
|
|
|
@@ -113,6 +121,10 @@ class ProxyFactory(DeviceFactoryInterface):
|
|
|
113
121
|
from egse.hexapod.symetrie.zonda import ZondaProxy
|
|
114
122
|
return ZondaProxy()
|
|
115
123
|
|
|
124
|
+
elif "joran" in device_name.lower():
|
|
125
|
+
from egse.hexapod.symetrie.joran import JoranProxy
|
|
126
|
+
return JoranProxy()
|
|
127
|
+
|
|
116
128
|
else:
|
|
117
129
|
raise ValueError(f"Unknown device name: {device_name}")
|
|
118
130
|
|
|
@@ -121,7 +133,7 @@ class ControllerFactory(DeviceFactoryInterface):
|
|
|
121
133
|
"""
|
|
122
134
|
A factory class that will create the Controller that matches the given device name and identifier.
|
|
123
135
|
|
|
124
|
-
The device name is matched against the string 'puna' or '
|
|
136
|
+
The device name is matched against the string 'puna', 'zonda', or 'joran'. If the device name doesn't contain
|
|
125
137
|
one of these names, a ValueError will be raised.
|
|
126
138
|
"""
|
|
127
139
|
def create(self, device_name: str, *, device_id: str = None, **_ignored):
|
|
@@ -147,5 +159,9 @@ class ControllerFactory(DeviceFactoryInterface):
|
|
|
147
159
|
from egse.hexapod.symetrie.zonda import ZondaController
|
|
148
160
|
return ZondaController()
|
|
149
161
|
|
|
162
|
+
elif "joran" in device_name.lower():
|
|
163
|
+
from egse.hexapod.symetrie.joran import JoranController
|
|
164
|
+
return JoranController()
|
|
165
|
+
|
|
150
166
|
else:
|
|
151
167
|
raise ValueError(f"Unknown device name: {device_name}")
|
|
@@ -22,7 +22,7 @@ class AlphaControllerInterface:
|
|
|
22
22
|
for 30 seconds which should complete the cycle, i.e. this command will
|
|
23
23
|
only return after 30 seconds.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Note:
|
|
26
26
|
This command is equivalent to power cycling the controller manually.
|
|
27
27
|
|
|
28
28
|
"""
|
|
@@ -47,7 +47,7 @@ class AlphaControllerInterface:
|
|
|
47
47
|
Returns:
|
|
48
48
|
0 on success.
|
|
49
49
|
Raises:
|
|
50
|
-
HexapodError: when there is a
|
|
50
|
+
HexapodError: when there is a timeout or when there is a communication error with
|
|
51
51
|
the hexapod.
|
|
52
52
|
"""
|
|
53
53
|
raise NotImplementedError
|
|
@@ -76,7 +76,7 @@ class AlphaControllerInterface:
|
|
|
76
76
|
return_code: 0 on success, -1 when ignored
|
|
77
77
|
|
|
78
78
|
Raises:
|
|
79
|
-
HexapodError: when the arguments do not match up, or when there is a
|
|
79
|
+
HexapodError: when the arguments do not match up, or when there is a timeout or when
|
|
80
80
|
there is a
|
|
81
81
|
socket communication error.
|
|
82
82
|
|
|
@@ -85,12 +85,12 @@ class AlphaControllerInterface:
|
|
|
85
85
|
|
|
86
86
|
@dynamic_interface
|
|
87
87
|
def stop(self):
|
|
88
|
-
"""Stop the current motion. This command can be
|
|
88
|
+
"""Stop the current motion. This command can be sent during a motion of the Hexapod.
|
|
89
89
|
|
|
90
90
|
Returns:
|
|
91
91
|
0 on success.
|
|
92
92
|
Raises:
|
|
93
|
-
HexapodError: when there is a
|
|
93
|
+
HexapodError: when there is a timeout or when there is a communication error with
|
|
94
94
|
the hexapod.
|
|
95
95
|
"""
|
|
96
96
|
raise NotImplementedError
|
|
@@ -114,7 +114,7 @@ class AlphaControllerInterface:
|
|
|
114
114
|
Returns:
|
|
115
115
|
0 on success, -1 when ignored, -2 on error.
|
|
116
116
|
Raises:
|
|
117
|
-
HexapodError: when there is a
|
|
117
|
+
HexapodError: when there is a timeout or when there is a communication error with
|
|
118
118
|
the hexapod
|
|
119
119
|
hardware controller.
|
|
120
120
|
"""
|
|
@@ -127,7 +127,7 @@ class AlphaControllerInterface:
|
|
|
127
127
|
Returns:
|
|
128
128
|
0 on success.
|
|
129
129
|
Raises:
|
|
130
|
-
HexapodError: when there is a
|
|
130
|
+
HexapodError: when there is a timeout or when there is a communication error with
|
|
131
131
|
the hexapod.
|
|
132
132
|
"""
|
|
133
133
|
raise NotImplementedError
|
|
@@ -136,7 +136,7 @@ class AlphaControllerInterface:
|
|
|
136
136
|
def jog(self, axis: int, inc: float) -> int:
|
|
137
137
|
"""Perform a JOG-type movement on the specified actuator.
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
Note:
|
|
140
140
|
This is a maintenance feature.
|
|
141
141
|
|
|
142
142
|
Args:
|
|
@@ -145,7 +145,7 @@ class AlphaControllerInterface:
|
|
|
145
145
|
Returns:
|
|
146
146
|
0 on success, -1 if command was ignored due to non-compliance.
|
|
147
147
|
Raises:
|
|
148
|
-
HexapodError: when there is a
|
|
148
|
+
HexapodError: when there is a timeout or when there is a communication error with
|
|
149
149
|
the hexapod.
|
|
150
150
|
"""
|
|
151
151
|
raise NotImplementedError
|
|
@@ -262,44 +262,29 @@ class AlphaControllerInterface:
|
|
|
262
262
|
|
|
263
263
|
Args:
|
|
264
264
|
tx_u (float): translation parameter that define the user coordinate system relative
|
|
265
|
-
to the
|
|
266
|
-
machine coordinate system [in mm]
|
|
265
|
+
to the machine coordinate system [in mm]
|
|
267
266
|
ty_u (float): translation parameter that define the user coordinate system relative
|
|
268
|
-
to the
|
|
269
|
-
machine coordinate system [in mm]
|
|
267
|
+
to the machine coordinate system [in mm]
|
|
270
268
|
tz_u (float): translation parameter that define the user coordinate system relative
|
|
271
|
-
to the
|
|
272
|
-
machine coordinate system [in mm]
|
|
273
|
-
|
|
269
|
+
to the machine coordinate system [in mm]
|
|
274
270
|
rx_u (float): rotation parameter that define the user coordinate system relative to
|
|
275
|
-
the machine
|
|
276
|
-
coordinate system [in deg]
|
|
271
|
+
the machine coordinate system [in deg]
|
|
277
272
|
ry_u (float): rotation parameter that define the user coordinate system relative to
|
|
278
|
-
the machine
|
|
279
|
-
coordinate system [in deg]
|
|
273
|
+
the machine coordinate system [in deg]
|
|
280
274
|
rz_u (float): rotation parameter that define the user coordinate system relative to
|
|
281
|
-
the machine
|
|
282
|
-
coordinate system [in deg]
|
|
283
|
-
|
|
275
|
+
the machine coordinate system [in deg]
|
|
284
276
|
tx_o (float): translation parameter that define the object coordinate system relative
|
|
285
|
-
to the
|
|
286
|
-
platform coordinate system [in mm]
|
|
277
|
+
to the platform coordinate system [in mm]
|
|
287
278
|
ty_o (float): translation parameter that define the object coordinate system relative
|
|
288
|
-
to the
|
|
289
|
-
platform coordinate system [in mm]
|
|
279
|
+
to the platform coordinate system [in mm]
|
|
290
280
|
tz_o (float): translation parameter that define the object coordinate system relative
|
|
291
|
-
to the
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
the
|
|
299
|
-
platform coordinate system [in deg]
|
|
300
|
-
rz_o (float): rotation parameter that define the object coordinate system relative to
|
|
301
|
-
the
|
|
302
|
-
platform coordinate system [in deg]
|
|
281
|
+
to the platform coordinate system [in mm]
|
|
282
|
+
rx_o (float): rotation parameter that define the object coordinate system relative to the platform
|
|
283
|
+
coordinate system [in deg]
|
|
284
|
+
ry_o (float): rotation parameter that define the object coordinate system relative to the platform
|
|
285
|
+
coordinate system [in deg]
|
|
286
|
+
rz_o (float): rotation parameter that define the object coordinate system relative to the platform
|
|
287
|
+
coordinate system [in deg]
|
|
303
288
|
|
|
304
289
|
Returns:
|
|
305
290
|
0 on success and -1 when the configuration is ignored, e.g. when password protection
|
|
@@ -506,7 +491,7 @@ class AlphaControllerInterface:
|
|
|
506
491
|
|
|
507
492
|
@dynamic_interface
|
|
508
493
|
def get_user_positions(self):
|
|
509
|
-
"""
|
|
494
|
+
"""Retrieve the current position of the hexapod.
|
|
510
495
|
|
|
511
496
|
The returned position corresponds to the position of the Object Coordinate System
|
|
512
497
|
in the User Coordinate System.
|
|
@@ -515,13 +500,13 @@ class AlphaControllerInterface:
|
|
|
515
500
|
array: an array of six float values for Tx, Ty, Tz, Rx, Ry, Rz.
|
|
516
501
|
None: when an Exception was raised and logs the error message.
|
|
517
502
|
|
|
518
|
-
|
|
503
|
+
Note: This is equivalent to the POSUSER? command.
|
|
519
504
|
"""
|
|
520
505
|
raise NotImplementedError
|
|
521
506
|
|
|
522
507
|
@dynamic_interface
|
|
523
508
|
def get_machine_positions(self):
|
|
524
|
-
"""
|
|
509
|
+
"""Retrieve the current position of the hexapod.
|
|
525
510
|
|
|
526
511
|
The returned position corresponds to the position of the Platform Coordinate System
|
|
527
512
|
in the Machine Coordinate System.
|
|
@@ -530,7 +515,7 @@ class AlphaControllerInterface:
|
|
|
530
515
|
array: an array of six float values for Tx, Ty, Tz, Rx, Ry, Rz.
|
|
531
516
|
None: when a PMACError was raised and logs the error message.
|
|
532
517
|
|
|
533
|
-
|
|
518
|
+
Note: This is equivalent to the POSMACH? command.
|
|
534
519
|
"""
|
|
535
520
|
raise NotImplementedError
|
|
536
521
|
|
|
@@ -580,13 +565,13 @@ class AlphaControllerInterface:
|
|
|
580
565
|
|
|
581
566
|
None: when an Exception was raised and logs the error message.
|
|
582
567
|
|
|
583
|
-
|
|
568
|
+
Note: This is equivalent to the STATE#HEXA? Command.
|
|
584
569
|
"""
|
|
585
570
|
raise NotImplementedError
|
|
586
571
|
|
|
587
572
|
@dynamic_interface
|
|
588
573
|
def get_actuator_state(self):
|
|
589
|
-
"""
|
|
574
|
+
"""Retrieve general state information of the actuators.
|
|
590
575
|
|
|
591
576
|
For each of the six actuators, an integer value is returned that should be interpreted as a
|
|
592
577
|
bit field containing status bits for that actuator.
|
|
@@ -616,7 +601,7 @@ class AlphaControllerInterface:
|
|
|
616
601
|
Hexapod Controller API, section 4.5.5.
|
|
617
602
|
None: when an Exception was raised and logs the error message.
|
|
618
603
|
|
|
619
|
-
|
|
604
|
+
Note: This is equivalent to the STATE#ACTUATOR? Command.
|
|
620
605
|
"""
|
|
621
606
|
raise NotImplementedError
|
|
622
607
|
|
|
@@ -691,7 +676,7 @@ class AlphaControllerInterface:
|
|
|
691
676
|
|
|
692
677
|
@dynamic_interface
|
|
693
678
|
def perform_maintenance(self, axis):
|
|
694
|
-
"""Perform a maintenance cycle which consists
|
|
679
|
+
"""Perform a maintenance cycle which consists of travelling the full range
|
|
695
680
|
on one axis corresponding to the Hexapod machine limits. The movement is
|
|
696
681
|
also in machine coordinate system.
|
|
697
682
|
|
|
@@ -839,9 +824,9 @@ class AlphaPlusControllerInterface(AlphaControllerInterface):
|
|
|
839
824
|
"""Sets the user workspace limits of the hexapod. Will raise error if not all the parameters are set (see
|
|
840
825
|
Args definition)
|
|
841
826
|
|
|
842
|
-
Remark: operational workspace limits must be understood as limits in terms of amplitude of movement. Those
|
|
843
|
-
are defined for each operational axis with a negative and positive value and are used in the
|
|
844
|
-
Position on each operational axis must be within those two values.
|
|
827
|
+
Remark: operational workspace limits must be understood as limits in terms of amplitude of movement. Those
|
|
828
|
+
limits are defined for each operational axis with a negative and positive value and are used in the
|
|
829
|
+
validation process. Position on each operational axis must be within those two values.
|
|
845
830
|
|
|
846
831
|
Args:
|
|
847
832
|
ntx(double): negative position limit in X in mm
|
{symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/dynalpha.py
RENAMED
|
@@ -602,9 +602,8 @@ class AlphaPlusTelnetInterface(DeviceTransport, DeviceConnectionInterface):
|
|
|
602
602
|
def connect(self) -> None:
|
|
603
603
|
"""
|
|
604
604
|
Connects to the Alpha+ Controller using the Telnet protocol. After connection
|
|
605
|
-
the telnet session logs in with the username provided in the Settings
|
|
606
|
-
the
|
|
607
|
-
in the Settings under the same group. Make sure their values are only given in
|
|
605
|
+
the telnet session logs in with the username provided in the Settings file. The password for this login is also
|
|
606
|
+
provided in the Settings under the same group. Make sure their values are only given in
|
|
608
607
|
the local settings file, not the global settings.
|
|
609
608
|
|
|
610
609
|
After login, the `gpascii` command is started with the option `-2` as instructed
|
{symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/hexapod_ui.py
RENAMED
|
@@ -1009,8 +1009,10 @@ class HexapodUIController(Observer):
|
|
|
1009
1009
|
self.view.set_connection_state("disconnected")
|
|
1010
1010
|
self.stop_timer()
|
|
1011
1011
|
|
|
1012
|
-
if not self.model.is_device_connected():
|
|
1013
|
-
|
|
1012
|
+
if not self.model.is_device_connected():
|
|
1013
|
+
self.view.disable_device_action()
|
|
1014
|
+
if not self.model.is_cs_connected():
|
|
1015
|
+
self.view.uncheck_cs_action()
|
|
1014
1016
|
|
|
1015
1017
|
return
|
|
1016
1018
|
|
|
@@ -1170,7 +1172,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1170
1172
|
|
|
1171
1173
|
self.temperature_log = None
|
|
1172
1174
|
|
|
1173
|
-
def
|
|
1175
|
+
def on_click(self, icon: Union[QIcon, bool]):
|
|
1174
1176
|
|
|
1175
1177
|
sender = self.sender()
|
|
1176
1178
|
|
|
@@ -1184,14 +1186,14 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1184
1186
|
|
|
1185
1187
|
self.notifyObservers(sender)
|
|
1186
1188
|
|
|
1187
|
-
def
|
|
1189
|
+
def create_status_bar(self):
|
|
1188
1190
|
|
|
1189
1191
|
self.statusBar().setStyleSheet("border: 0; background-color: #FFF8DC;")
|
|
1190
1192
|
self.statusBar().setStyleSheet("QStatusBar::item {border: none;}")
|
|
1191
1193
|
self.statusBar().addPermanentWidget(VLine())
|
|
1192
1194
|
self.statusBar().addPermanentWidget(self.mode_label)
|
|
1193
1195
|
|
|
1194
|
-
def
|
|
1196
|
+
def create_toolbar(self):
|
|
1195
1197
|
|
|
1196
1198
|
# The Switch On/OFF is in this case used for the Control ON/OFF action.
|
|
1197
1199
|
|
|
@@ -1202,7 +1204,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1202
1204
|
not_selected=get_resource(":/icons/switch-off.svg"),
|
|
1203
1205
|
disabled=get_resource(":/icons/switch-disabled.svg")
|
|
1204
1206
|
)
|
|
1205
|
-
self.control.clicked.connect(self.
|
|
1207
|
+
self.control.clicked.connect(self.on_click)
|
|
1206
1208
|
|
|
1207
1209
|
# The Home action is used to command the Homing to the Hexapod.
|
|
1208
1210
|
|
|
@@ -1212,7 +1214,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1212
1214
|
selected=get_resource(":/icons/home.svg"),
|
|
1213
1215
|
disabled=get_resource(":/icons/home-disabled.svg"),
|
|
1214
1216
|
)
|
|
1215
|
-
self.homing.clicked.connect(self.
|
|
1217
|
+
self.homing.clicked.connect(self.on_click)
|
|
1216
1218
|
|
|
1217
1219
|
# The Clear action is used to command the ClearErrors to the Hexapod.
|
|
1218
1220
|
|
|
@@ -1222,7 +1224,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1222
1224
|
selected=get_resource(":/icons/erase.svg"),
|
|
1223
1225
|
disabled=get_resource(":/icons/erase-disabled.svg"),
|
|
1224
1226
|
)
|
|
1225
|
-
self.clear_errors.clicked.connect(self.
|
|
1227
|
+
self.clear_errors.clicked.connect(self.on_click)
|
|
1226
1228
|
|
|
1227
1229
|
# The Reconnect action is used to reconnect to the control server
|
|
1228
1230
|
|
|
@@ -1233,7 +1235,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1233
1235
|
not_selected=get_resource(":/icons/cs-not-connected.svg"),
|
|
1234
1236
|
disabled=get_resource(":/icons/cs-connected-disabled.svg")
|
|
1235
1237
|
)
|
|
1236
|
-
self.cs_connection.clicked.connect(self.
|
|
1238
|
+
self.cs_connection.clicked.connect(self.on_click)
|
|
1237
1239
|
|
|
1238
1240
|
# The Reconnect action is used to reconnect the device
|
|
1239
1241
|
|
|
@@ -1244,7 +1246,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1244
1246
|
not_selected=get_resource(":/icons/unplugged.svg"),
|
|
1245
1247
|
disabled=get_resource(":/icons/plugged-disabled.svg")
|
|
1246
1248
|
)
|
|
1247
|
-
self.device_connection.clicked.connect(self.
|
|
1249
|
+
self.device_connection.clicked.connect(self.on_click)
|
|
1248
1250
|
|
|
1249
1251
|
|
|
1250
1252
|
# The STOP button is used to immediately stop the current motion
|
|
@@ -1253,7 +1255,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1253
1255
|
|
|
1254
1256
|
self.stop_action = QAction(stop_button, "STOP", self)
|
|
1255
1257
|
self.stop_action.setToolTip("STOP Movement")
|
|
1256
|
-
self.stop_action.triggered.connect(self.
|
|
1258
|
+
self.stop_action.triggered.connect(self.on_click)
|
|
1257
1259
|
|
|
1258
1260
|
# The HELP button is used to show the on-line help in a browser window
|
|
1259
1261
|
|
|
@@ -1261,7 +1263,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1261
1263
|
|
|
1262
1264
|
self.help_action = QAction(help_button, "INFO", self)
|
|
1263
1265
|
self.help_action.setToolTip("Browse the on-line documentation")
|
|
1264
|
-
self.help_action.triggered.connect(self.
|
|
1266
|
+
self.help_action.triggered.connect(self.on_click)
|
|
1265
1267
|
|
|
1266
1268
|
# spacer widget to help with aligning STOP button to the right
|
|
1267
1269
|
|
|
@@ -1280,7 +1282,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1280
1282
|
|
|
1281
1283
|
return self.toolbar
|
|
1282
1284
|
|
|
1283
|
-
def
|
|
1285
|
+
def create_user_position_widget(self):
|
|
1284
1286
|
|
|
1285
1287
|
vbox_labels = QVBoxLayout()
|
|
1286
1288
|
vbox_values = QVBoxLayout()
|
|
@@ -1324,7 +1326,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1324
1326
|
|
|
1325
1327
|
return gbox_positions
|
|
1326
1328
|
|
|
1327
|
-
def
|
|
1329
|
+
def create_machine_position_widget(self):
|
|
1328
1330
|
|
|
1329
1331
|
vbox_labels = QVBoxLayout()
|
|
1330
1332
|
vbox_values = QVBoxLayout()
|
|
@@ -1368,7 +1370,7 @@ class HexapodUIView(QMainWindow, Observable):
|
|
|
1368
1370
|
|
|
1369
1371
|
return gbox_positions
|
|
1370
1372
|
|
|
1371
|
-
def
|
|
1373
|
+
def create_actuator_length_widget(self):
|
|
1372
1374
|
|
|
1373
1375
|
vbox_labels = QVBoxLayout()
|
|
1374
1376
|
vbox_values = QVBoxLayout()
|