wandelbots-api-client 26.1.0.dev50__py3-none-any.whl → 26.1.0.dev62__py3-none-any.whl
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.
- wandelbots_api_client/__init__.py +1 -1
- wandelbots_api_client/api_client.py +1 -1
- wandelbots_api_client/configuration.py +1 -1
- wandelbots_api_client/models/__init__.py +3 -1
- wandelbots_api_client/models/virtual_controller_types.py +4 -4
- wandelbots_api_client/v2/__init__.py +1 -1
- wandelbots_api_client/v2/api/__init__.py +2 -0
- wandelbots_api_client/v2/api/jogging_api.py +1 -1
- wandelbots_api_client/v2/api/motion_group_models_api.py +265 -0
- wandelbots_api_client/v2/api/robot_configurations_api.py +291 -0
- wandelbots_api_client/v2/api_client.py +1 -1
- wandelbots_api_client/v2/configuration.py +1 -1
- wandelbots_api_client/v2/models/__init__.py +5 -3
- wandelbots_api_client/v2/models/initialize_jogging_request.py +2 -4
- wandelbots_api_client/v2/models/inverse_kinematics_request.py +6 -4
- wandelbots_api_client/v2/models/kinematic_model.py +110 -0
- wandelbots_api_client/v2/models/virtual_controller.py +1 -2
- wandelbots_api_client/v2/models/virtual_controller_types.py +1 -1
- wandelbots_api_client/v2_pydantic/__init__.py +1 -1
- wandelbots_api_client/v2_pydantic/api/__init__.py +2 -0
- wandelbots_api_client/v2_pydantic/api/jogging_api.py +1 -1
- wandelbots_api_client/v2_pydantic/api/motion_group_models_api.py +268 -0
- wandelbots_api_client/v2_pydantic/api/robot_configurations_api.py +294 -0
- wandelbots_api_client/v2_pydantic/api_client.py +1 -1
- wandelbots_api_client/v2_pydantic/configuration.py +1 -1
- wandelbots_api_client/v2_pydantic/models.py +78 -161
- wandelbots_api_client/v2_pydantic/virtual_controller_types.py +126 -0
- {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/METADATA +2 -2
- {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/RECORD +32 -28
- {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/WHEEL +0 -0
- {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/licenses/LICENSE +0 -0
- {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Wandelbots NOVA API
|
|
5
|
+
|
|
6
|
+
Interact with robots in an easy and intuitive way.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 2.1.0 dev
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
from furl import furl
|
|
15
|
+
import json
|
|
16
|
+
import humps
|
|
17
|
+
import re
|
|
18
|
+
import warnings
|
|
19
|
+
import websockets
|
|
20
|
+
from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
|
|
21
|
+
from typing import Any, AsyncGenerator, Callable, Dict, List, Optional, Tuple, Union
|
|
22
|
+
from typing_extensions import Annotated
|
|
23
|
+
from urllib.parse import quote
|
|
24
|
+
|
|
25
|
+
from pydantic import StrictStr
|
|
26
|
+
from typing import List
|
|
27
|
+
|
|
28
|
+
from wandelbots_api_client.v2.api_client import ApiClient, RequestSerialized
|
|
29
|
+
from wandelbots_api_client.v2.api_response import ApiResponse
|
|
30
|
+
from wandelbots_api_client.v2.rest import RESTResponseType
|
|
31
|
+
|
|
32
|
+
class RobotConfigurationsApi:
|
|
33
|
+
"""NOTE: This class is auto generated by OpenAPI Generator
|
|
34
|
+
Ref: https://openapi-generator.tech
|
|
35
|
+
|
|
36
|
+
Do not edit the class manually.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, api_client=None) -> None:
|
|
40
|
+
if api_client is None:
|
|
41
|
+
api_client = ApiClient.get_default()
|
|
42
|
+
self.api_client = api_client
|
|
43
|
+
|
|
44
|
+
@validate_call
|
|
45
|
+
async def get_robot_configurations(
|
|
46
|
+
self,
|
|
47
|
+
_request_timeout: Union[
|
|
48
|
+
None,
|
|
49
|
+
Annotated[StrictFloat, Field(gt=0)],
|
|
50
|
+
Tuple[
|
|
51
|
+
Annotated[StrictFloat, Field(gt=0)],
|
|
52
|
+
Annotated[StrictFloat, Field(gt=0)]
|
|
53
|
+
]
|
|
54
|
+
] = None,
|
|
55
|
+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
|
56
|
+
_content_type: Optional[StrictStr] = None,
|
|
57
|
+
_headers: Optional[Dict[StrictStr, Any]] = None,
|
|
58
|
+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
|
59
|
+
) -> List[str]:
|
|
60
|
+
"""List Robot Configurations
|
|
61
|
+
|
|
62
|
+
Returns the identifiers of available robot configurations. A robot configuration represents a robot controller with one or more attached motion groups.
|
|
63
|
+
|
|
64
|
+
:param _request_timeout: timeout setting for this request. If one
|
|
65
|
+
number provided, it will be total request
|
|
66
|
+
timeout. It can also be a pair (tuple) of
|
|
67
|
+
(connection, read) timeouts.
|
|
68
|
+
:type _request_timeout: int, tuple(int, int), optional
|
|
69
|
+
:param _request_auth: set to override the auth_settings for an a single
|
|
70
|
+
request; this effectively ignores the
|
|
71
|
+
authentication in the spec for a single request.
|
|
72
|
+
:type _request_auth: dict, optional
|
|
73
|
+
:param _content_type: force content-type for the request.
|
|
74
|
+
:type _content_type: str, Optional
|
|
75
|
+
:param _headers: set to override the headers for a single
|
|
76
|
+
request; this effectively ignores the headers
|
|
77
|
+
in the spec for a single request.
|
|
78
|
+
:type _headers: dict, optional
|
|
79
|
+
:param _host_index: set to override the host_index for a single
|
|
80
|
+
request; this effectively ignores the host_index
|
|
81
|
+
in the spec for a single request.
|
|
82
|
+
:type _host_index: int, optional
|
|
83
|
+
:return: Returns the result object.
|
|
84
|
+
""" # noqa: E501
|
|
85
|
+
|
|
86
|
+
_param = self._get_robot_configurations_serialize(
|
|
87
|
+
_request_auth=_request_auth,
|
|
88
|
+
_content_type=_content_type,
|
|
89
|
+
_headers=_headers,
|
|
90
|
+
_host_index=_host_index
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
_response_types_map: Dict[str, Optional[str]] = {
|
|
94
|
+
'200': "List[str]",
|
|
95
|
+
'404': None,
|
|
96
|
+
'500': None,
|
|
97
|
+
}
|
|
98
|
+
response_data = await self.api_client.call_api(
|
|
99
|
+
*_param,
|
|
100
|
+
_request_timeout=_request_timeout
|
|
101
|
+
)
|
|
102
|
+
await response_data.read()
|
|
103
|
+
return self.api_client.response_deserialize(
|
|
104
|
+
response_data=response_data,
|
|
105
|
+
response_types_map=_response_types_map,
|
|
106
|
+
).data
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@validate_call
|
|
110
|
+
async def get_robot_configurations_with_http_info(
|
|
111
|
+
self,
|
|
112
|
+
_request_timeout: Union[
|
|
113
|
+
None,
|
|
114
|
+
Annotated[StrictFloat, Field(gt=0)],
|
|
115
|
+
Tuple[
|
|
116
|
+
Annotated[StrictFloat, Field(gt=0)],
|
|
117
|
+
Annotated[StrictFloat, Field(gt=0)]
|
|
118
|
+
]
|
|
119
|
+
] = None,
|
|
120
|
+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
|
121
|
+
_content_type: Optional[StrictStr] = None,
|
|
122
|
+
_headers: Optional[Dict[StrictStr, Any]] = None,
|
|
123
|
+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
|
124
|
+
) -> ApiResponse[List[str]]:
|
|
125
|
+
"""List Robot Configurations
|
|
126
|
+
|
|
127
|
+
Returns the identifiers of available robot configurations. A robot configuration represents a robot controller with one or more attached motion groups.
|
|
128
|
+
|
|
129
|
+
:param _request_timeout: timeout setting for this request. If one
|
|
130
|
+
number provided, it will be total request
|
|
131
|
+
timeout. It can also be a pair (tuple) of
|
|
132
|
+
(connection, read) timeouts.
|
|
133
|
+
:type _request_timeout: int, tuple(int, int), optional
|
|
134
|
+
:param _request_auth: set to override the auth_settings for an a single
|
|
135
|
+
request; this effectively ignores the
|
|
136
|
+
authentication in the spec for a single request.
|
|
137
|
+
:type _request_auth: dict, optional
|
|
138
|
+
:param _content_type: force content-type for the request.
|
|
139
|
+
:type _content_type: str, Optional
|
|
140
|
+
:param _headers: set to override the headers for a single
|
|
141
|
+
request; this effectively ignores the headers
|
|
142
|
+
in the spec for a single request.
|
|
143
|
+
:type _headers: dict, optional
|
|
144
|
+
:param _host_index: set to override the host_index for a single
|
|
145
|
+
request; this effectively ignores the host_index
|
|
146
|
+
in the spec for a single request.
|
|
147
|
+
:type _host_index: int, optional
|
|
148
|
+
:return: Returns the result object.
|
|
149
|
+
""" # noqa: E501
|
|
150
|
+
|
|
151
|
+
_param = self._get_robot_configurations_serialize(
|
|
152
|
+
_request_auth=_request_auth,
|
|
153
|
+
_content_type=_content_type,
|
|
154
|
+
_headers=_headers,
|
|
155
|
+
_host_index=_host_index
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
_response_types_map: Dict[str, Optional[str]] = {
|
|
159
|
+
'200': "List[str]",
|
|
160
|
+
'404': None,
|
|
161
|
+
'500': None,
|
|
162
|
+
}
|
|
163
|
+
response_data = await self.api_client.call_api(
|
|
164
|
+
*_param,
|
|
165
|
+
_request_timeout=_request_timeout
|
|
166
|
+
)
|
|
167
|
+
await response_data.read()
|
|
168
|
+
return self.api_client.response_deserialize(
|
|
169
|
+
response_data=response_data,
|
|
170
|
+
response_types_map=_response_types_map,
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
@validate_call
|
|
175
|
+
async def get_robot_configurations_without_preload_content(
|
|
176
|
+
self,
|
|
177
|
+
_request_timeout: Union[
|
|
178
|
+
None,
|
|
179
|
+
Annotated[StrictFloat, Field(gt=0)],
|
|
180
|
+
Tuple[
|
|
181
|
+
Annotated[StrictFloat, Field(gt=0)],
|
|
182
|
+
Annotated[StrictFloat, Field(gt=0)]
|
|
183
|
+
]
|
|
184
|
+
] = None,
|
|
185
|
+
_request_auth: Optional[Dict[StrictStr, Any]] = None,
|
|
186
|
+
_content_type: Optional[StrictStr] = None,
|
|
187
|
+
_headers: Optional[Dict[StrictStr, Any]] = None,
|
|
188
|
+
_host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
|
|
189
|
+
) -> RESTResponseType:
|
|
190
|
+
"""List Robot Configurations
|
|
191
|
+
|
|
192
|
+
Returns the identifiers of available robot configurations. A robot configuration represents a robot controller with one or more attached motion groups.
|
|
193
|
+
|
|
194
|
+
:param _request_timeout: timeout setting for this request. If one
|
|
195
|
+
number provided, it will be total request
|
|
196
|
+
timeout. It can also be a pair (tuple) of
|
|
197
|
+
(connection, read) timeouts.
|
|
198
|
+
:type _request_timeout: int, tuple(int, int), optional
|
|
199
|
+
:param _request_auth: set to override the auth_settings for an a single
|
|
200
|
+
request; this effectively ignores the
|
|
201
|
+
authentication in the spec for a single request.
|
|
202
|
+
:type _request_auth: dict, optional
|
|
203
|
+
:param _content_type: force content-type for the request.
|
|
204
|
+
:type _content_type: str, Optional
|
|
205
|
+
:param _headers: set to override the headers for a single
|
|
206
|
+
request; this effectively ignores the headers
|
|
207
|
+
in the spec for a single request.
|
|
208
|
+
:type _headers: dict, optional
|
|
209
|
+
:param _host_index: set to override the host_index for a single
|
|
210
|
+
request; this effectively ignores the host_index
|
|
211
|
+
in the spec for a single request.
|
|
212
|
+
:type _host_index: int, optional
|
|
213
|
+
:return: Returns the result object.
|
|
214
|
+
""" # noqa: E501
|
|
215
|
+
|
|
216
|
+
_param = self._get_robot_configurations_serialize(
|
|
217
|
+
_request_auth=_request_auth,
|
|
218
|
+
_content_type=_content_type,
|
|
219
|
+
_headers=_headers,
|
|
220
|
+
_host_index=_host_index
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
_response_types_map: Dict[str, Optional[str]] = {
|
|
224
|
+
'200': "List[str]",
|
|
225
|
+
'404': None,
|
|
226
|
+
'500': None,
|
|
227
|
+
}
|
|
228
|
+
response_data = await self.api_client.call_api(
|
|
229
|
+
*_param,
|
|
230
|
+
_request_timeout=_request_timeout
|
|
231
|
+
)
|
|
232
|
+
return response_data.response
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def _get_robot_configurations_serialize(
|
|
236
|
+
self,
|
|
237
|
+
_request_auth,
|
|
238
|
+
_content_type,
|
|
239
|
+
_headers,
|
|
240
|
+
_host_index,
|
|
241
|
+
) -> RequestSerialized:
|
|
242
|
+
|
|
243
|
+
_host = None
|
|
244
|
+
|
|
245
|
+
_collection_formats: Dict[str, str] = {
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
_path_params: Dict[str, str] = {}
|
|
249
|
+
_query_params: List[Tuple[str, str]] = []
|
|
250
|
+
_header_params: Dict[str, Optional[str]] = _headers or {}
|
|
251
|
+
_form_params: List[Tuple[str, str]] = []
|
|
252
|
+
_files: Dict[str, Union[str, bytes]] = {}
|
|
253
|
+
_body_params: Optional[bytes] = None
|
|
254
|
+
|
|
255
|
+
# process the path parameters
|
|
256
|
+
# process the query parameters
|
|
257
|
+
# process the header parameters
|
|
258
|
+
# process the form parameters
|
|
259
|
+
# process the body parameter
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
# set the HTTP header `Accept`
|
|
263
|
+
_header_params['Accept'] = self.api_client.select_header_accept(
|
|
264
|
+
[
|
|
265
|
+
'application/json'
|
|
266
|
+
]
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
# authentication setting
|
|
271
|
+
_auth_settings: List[str] = [
|
|
272
|
+
'BasicAuth',
|
|
273
|
+
'BearerAuth'
|
|
274
|
+
]
|
|
275
|
+
|
|
276
|
+
return self.api_client.param_serialize(
|
|
277
|
+
method='GET',
|
|
278
|
+
resource_path='/robot-configurations',
|
|
279
|
+
path_params=_path_params,
|
|
280
|
+
query_params=_query_params,
|
|
281
|
+
header_params=_header_params,
|
|
282
|
+
body=_body_params,
|
|
283
|
+
post_params=_form_params,
|
|
284
|
+
files=_files,
|
|
285
|
+
auth_settings=_auth_settings,
|
|
286
|
+
collection_formats=_collection_formats,
|
|
287
|
+
_host=_host,
|
|
288
|
+
_request_auth=_request_auth
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
|
|
@@ -91,7 +91,7 @@ class ApiClient:
|
|
|
91
91
|
self.default_headers[header_name] = header_value
|
|
92
92
|
self.cookie = cookie
|
|
93
93
|
# Set default User-Agent.
|
|
94
|
-
self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.1.0.
|
|
94
|
+
self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.1.0.dev62'
|
|
95
95
|
self.client_side_validation = configuration.client_side_validation
|
|
96
96
|
|
|
97
97
|
async def __aenter__(self):
|
|
@@ -535,7 +535,7 @@ conf = wandelbots_api_client.v2.Configuration(
|
|
|
535
535
|
"OS: {env}\n"\
|
|
536
536
|
"Python Version: {pyversion}\n"\
|
|
537
537
|
"Version of the API: 2.1.0 dev\n"\
|
|
538
|
-
"SDK Package Version: 26.1.0.
|
|
538
|
+
"SDK Package Version: 26.1.0.dev62".\
|
|
539
539
|
format(env=sys.platform, pyversion=sys.version)
|
|
540
540
|
|
|
541
541
|
def get_host_settings(self) -> List[HostSetting]:
|
|
@@ -135,6 +135,7 @@ from .joint_limits import JointLimits
|
|
|
135
135
|
from .joint_trajectory import JointTrajectory
|
|
136
136
|
from .joint_velocity_request import JointVelocityRequest
|
|
137
137
|
from .joint_velocity_response import JointVelocityResponse
|
|
138
|
+
from .kinematic_model import KinematicModel
|
|
138
139
|
from .kuka_controller import KukaController
|
|
139
140
|
from .kuka_controller_rsi_server import KukaControllerRsiServer
|
|
140
141
|
from .license import License
|
|
@@ -254,10 +255,10 @@ from .validation_error import ValidationError
|
|
|
254
255
|
from .validation_error2 import ValidationError2
|
|
255
256
|
from .validation_error_loc_inner import ValidationErrorLocInner
|
|
256
257
|
from .virtual_controller import VirtualController
|
|
257
|
-
from .virtual_controller_types import VirtualControllerTypes
|
|
258
258
|
from .virtual_robot_configuration import VirtualRobotConfiguration
|
|
259
259
|
from .wait_for_io_event_request import WaitForIOEventRequest
|
|
260
260
|
from .yaskawa_controller import YaskawaController
|
|
261
|
+
from .virtual_controller_types import VirtualControllerTypes
|
|
261
262
|
|
|
262
263
|
__all__ = [
|
|
263
264
|
"AbbController",
|
|
@@ -382,6 +383,7 @@ __all__ = [
|
|
|
382
383
|
"JointTrajectory",
|
|
383
384
|
"JointVelocityRequest",
|
|
384
385
|
"JointVelocityResponse",
|
|
386
|
+
"KinematicModel",
|
|
385
387
|
"KukaController",
|
|
386
388
|
"KukaControllerRsiServer",
|
|
387
389
|
"License",
|
|
@@ -501,8 +503,8 @@ __all__ = [
|
|
|
501
503
|
"ValidationError2",
|
|
502
504
|
"ValidationErrorLocInner",
|
|
503
505
|
"VirtualController",
|
|
504
|
-
"VirtualControllerTypes",
|
|
505
506
|
"VirtualRobotConfiguration",
|
|
506
507
|
"WaitForIOEventRequest",
|
|
508
|
+
"VirtualControllerTypes",
|
|
507
509
|
"YaskawaController"
|
|
508
|
-
]
|
|
510
|
+
]
|
|
@@ -29,8 +29,7 @@ class InitializeJoggingRequest(BaseModel):
|
|
|
29
29
|
message_type: str = "InitializeJoggingRequest"
|
|
30
30
|
motion_group: StrictStr = Field(description="Identifier of the motion group.")
|
|
31
31
|
tcp: Optional[StrictStr] = Field(default=None, description="Identifier of the tool. Required for robots (all limits, including TCP limits, are respected at all times regardless of the motion). Not required for external axes. ")
|
|
32
|
-
|
|
33
|
-
__properties: ClassVar[List[str]] = ["message_type", "motion_group", "tcp", "response_coordinate_system"]
|
|
32
|
+
__properties: ClassVar[List[str]] = ["message_type", "motion_group", "tcp"]
|
|
34
33
|
|
|
35
34
|
@field_validator('message_type')
|
|
36
35
|
def message_type_validate_enum(cls, value):
|
|
@@ -96,8 +95,7 @@ class InitializeJoggingRequest(BaseModel):
|
|
|
96
95
|
_obj = cls.model_validate({
|
|
97
96
|
"message_type": obj.get("message_type"),
|
|
98
97
|
"motion_group": obj.get("motion_group"),
|
|
99
|
-
"tcp": obj.get("tcp")
|
|
100
|
-
"response_coordinate_system": obj.get("response_coordinate_system")
|
|
98
|
+
"tcp": obj.get("tcp")
|
|
101
99
|
})
|
|
102
100
|
return _obj
|
|
103
101
|
|
|
@@ -17,8 +17,8 @@ import pprint
|
|
|
17
17
|
import re # noqa: F401
|
|
18
18
|
import json
|
|
19
19
|
|
|
20
|
-
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
|
21
|
-
from typing import Any, ClassVar, Dict, List, Optional
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional, Union
|
|
22
22
|
from wandelbots_api_client.v2.models.collision_setup import CollisionSetup
|
|
23
23
|
from wandelbots_api_client.v2.models.limit_range import LimitRange
|
|
24
24
|
from wandelbots_api_client.v2.models.pose import Pose
|
|
@@ -35,7 +35,8 @@ class InverseKinematicsRequest(BaseModel):
|
|
|
35
35
|
mounting: Optional[Pose] = Field(default=None, description="Offset from the world frame to the motion group base.")
|
|
36
36
|
joint_position_limits: Optional[List[LimitRange]] = Field(default=None, description="Joint position limits in [rad], indexed starting from base. ")
|
|
37
37
|
collision_setups: Optional[Dict[str, CollisionSetup]] = Field(default=None, description="Collision layers to be respected by the motion planner when planning for a single motion group. Each setup represents one layer, e.g., the safety zones and shapes or a fine grained tool and workpiece model. Layers are checked individually along the trajectory and independently of other layers. To respect the safety zones of the controller and check for collision: 1. Fetch the safety zones, link and tool shapes from the controller. 2. Add the fetched zones, links and tools to a layer. 3. Create other layers from your own 3D data as needed. 4. Plan trajectory. 5. The response highlights the layer in which a collision was detected by key. ")
|
|
38
|
-
|
|
38
|
+
reference_joint_position: Optional[List[Union[StrictFloat, StrictInt]]] = None
|
|
39
|
+
__properties: ClassVar[List[str]] = ["motion_group_model", "tcp_poses", "tcp_offset", "mounting", "joint_position_limits", "collision_setups", "reference_joint_position"]
|
|
39
40
|
|
|
40
41
|
model_config = ConfigDict(
|
|
41
42
|
populate_by_name=True,
|
|
@@ -148,7 +149,8 @@ class InverseKinematicsRequest(BaseModel):
|
|
|
148
149
|
for _k, _v in obj["collision_setups"].items()
|
|
149
150
|
)
|
|
150
151
|
if obj.get("collision_setups") is not None
|
|
151
|
-
else None
|
|
152
|
+
else None,
|
|
153
|
+
"reference_joint_position": obj.get("reference_joint_position")
|
|
152
154
|
})
|
|
153
155
|
return _obj
|
|
154
156
|
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Wandelbots NOVA API
|
|
5
|
+
|
|
6
|
+
Interact with robots in an easy and intuitive way.
|
|
7
|
+
|
|
8
|
+
The version of the OpenAPI document: 2.1.0 dev
|
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
|
10
|
+
|
|
11
|
+
Do not edit the class manually.
|
|
12
|
+
""" # noqa: E501
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
import pprint
|
|
17
|
+
import re # noqa: F401
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
|
+
from wandelbots_api_client.v2.models.dh_parameter import DHParameter
|
|
23
|
+
from typing import Optional, Set
|
|
24
|
+
from typing_extensions import Self
|
|
25
|
+
|
|
26
|
+
class KinematicModel(BaseModel):
|
|
27
|
+
"""
|
|
28
|
+
Kinematics model described by Denavit-Hartenberg parameters.
|
|
29
|
+
""" # noqa: E501
|
|
30
|
+
dh_parameters: Optional[List[DHParameter]] = None
|
|
31
|
+
inverse_solver: Optional[StrictStr] = Field(default=None, description="Optional name of the inverse kinematics solver.")
|
|
32
|
+
__properties: ClassVar[List[str]] = ["dh_parameters", "inverse_solver"]
|
|
33
|
+
|
|
34
|
+
model_config = ConfigDict(
|
|
35
|
+
populate_by_name=True,
|
|
36
|
+
validate_assignment=True,
|
|
37
|
+
protected_namespaces=(),
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def to_str(self) -> str:
|
|
42
|
+
"""Returns the string representation of the model using alias"""
|
|
43
|
+
return pprint.pformat(self.model_dump(by_alias=True, exclude_none=True))
|
|
44
|
+
|
|
45
|
+
def to_json(self) -> str:
|
|
46
|
+
"""
|
|
47
|
+
Returns the JSON representation of the model using alias
|
|
48
|
+
|
|
49
|
+
Do not use pydantic v2 .model_dump_json(by_alias=True, exclude_unset=True) here!
|
|
50
|
+
It is unable to resolve nested types generated by openapi-generator.
|
|
51
|
+
"""
|
|
52
|
+
return json.dumps(self.to_dict())
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
|
56
|
+
"""Create an instance of KinematicModel from a JSON string"""
|
|
57
|
+
return cls.from_dict(json.loads(json_str))
|
|
58
|
+
|
|
59
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
60
|
+
"""Return the dictionary representation of the model using alias.
|
|
61
|
+
|
|
62
|
+
This has the following differences from calling pydantic's
|
|
63
|
+
`self.model_dump(by_alias=True)`:
|
|
64
|
+
|
|
65
|
+
* `None` is only added to the output dict for nullable fields that
|
|
66
|
+
were set at model initialization. Other fields with value `None`
|
|
67
|
+
are ignored.
|
|
68
|
+
"""
|
|
69
|
+
excluded_fields: Set[str] = set([
|
|
70
|
+
])
|
|
71
|
+
|
|
72
|
+
_dict = self.model_dump(
|
|
73
|
+
by_alias=True,
|
|
74
|
+
exclude=excluded_fields,
|
|
75
|
+
exclude_none=True,
|
|
76
|
+
)
|
|
77
|
+
# override the default output from pydantic by calling `to_dict()` of each item in dh_parameters (list)
|
|
78
|
+
_items = []
|
|
79
|
+
if self.dh_parameters:
|
|
80
|
+
for _item in self.dh_parameters:
|
|
81
|
+
# >>> Modified from https://github.com/OpenAPITools/openapi-generator/blob/v7.6.0/modules/openapi-generator/src/main/resources/python/model_generic.mustache
|
|
82
|
+
# to not drop empty elements in lists
|
|
83
|
+
if _item is not None:
|
|
84
|
+
_items.append(_item.to_dict())
|
|
85
|
+
# <<< End modification
|
|
86
|
+
_dict['dh_parameters'] = _items
|
|
87
|
+
return _dict
|
|
88
|
+
|
|
89
|
+
@classmethod
|
|
90
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
|
91
|
+
"""Create an instance of KinematicModel from a dict"""
|
|
92
|
+
if obj is None:
|
|
93
|
+
return None
|
|
94
|
+
|
|
95
|
+
if not isinstance(obj, dict):
|
|
96
|
+
return cls.model_validate(obj)
|
|
97
|
+
|
|
98
|
+
_obj = cls.model_validate({
|
|
99
|
+
"dh_parameters": [
|
|
100
|
+
# >>> Modified from https://github.com/OpenAPITools/openapi-generator/blob/v7.6.0/modules/openapi-generator/src/main/resources/python/model_generic.mustache
|
|
101
|
+
# to allow dicts in lists
|
|
102
|
+
DHParameter.from_dict(_item) if hasattr(DHParameter, 'from_dict') else _item
|
|
103
|
+
# <<< End modification
|
|
104
|
+
for _item in obj["dh_parameters"]
|
|
105
|
+
] if obj.get("dh_parameters") is not None else None,
|
|
106
|
+
"inverse_solver": obj.get("inverse_solver")
|
|
107
|
+
})
|
|
108
|
+
return _obj
|
|
109
|
+
|
|
110
|
+
|
|
@@ -20,7 +20,6 @@ import json
|
|
|
20
20
|
from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator
|
|
21
21
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
22
22
|
from wandelbots_api_client.v2.models.manufacturer import Manufacturer
|
|
23
|
-
from wandelbots_api_client.v2.models.virtual_controller_types import VirtualControllerTypes
|
|
24
23
|
from typing import Optional, Set
|
|
25
24
|
from typing_extensions import Self
|
|
26
25
|
|
|
@@ -30,7 +29,7 @@ class VirtualController(BaseModel):
|
|
|
30
29
|
""" # noqa: E501
|
|
31
30
|
kind: str = "VirtualController"
|
|
32
31
|
manufacturer: Manufacturer
|
|
33
|
-
type: Optional[
|
|
32
|
+
type: Optional[StrictStr] = Field(default=None, description="Preset type of the virtual robot controller. See [getRobotConfigurations](getRobotConfigurations) for supported types. ")
|
|
34
33
|
var_json: Optional[StrictStr] = Field(default=None, description="Complete JSON configuration of the virtual robot controller. Can be obtained from the physical controller's configuration via [getVirtualControllerConfiguration](getVirtualControllerConfiguration). If provided, the `type` field should not be used. ", alias="json")
|
|
35
34
|
initial_joint_position: Optional[StrictStr] = Field(default=None, description="Initial joint position of the first motion group from the virtual robot controller. Provide the joint position as a JSON array containing 7 float values, each representing a joint position in radians, e.g., \"[0, 0, 0, 0, 0, 0, 0]\". If the robot has fewer than 7 joints, use \"0\" for each remaining position to ensure the array has exactly 7 values. ")
|
|
36
35
|
__properties: ClassVar[List[str]] = ["kind", "manufacturer", "type", "json", "initial_joint_position"]
|
|
@@ -12,6 +12,7 @@ from .license_api import LicenseApi
|
|
|
12
12
|
from .motion_group_api import MotionGroupApi
|
|
13
13
|
from .motion_group_models_api import MotionGroupModelsApi
|
|
14
14
|
from .program_api import ProgramApi
|
|
15
|
+
from .robot_configurations_api import RobotConfigurationsApi
|
|
15
16
|
from .store_collision_components_api import StoreCollisionComponentsApi
|
|
16
17
|
from .store_collision_setups_api import StoreCollisionSetupsApi
|
|
17
18
|
from .store_object_api import StoreObjectApi
|
|
@@ -37,6 +38,7 @@ __all__ = [
|
|
|
37
38
|
"MotionGroupApi",
|
|
38
39
|
"MotionGroupModelsApi",
|
|
39
40
|
"ProgramApi",
|
|
41
|
+
"RobotConfigurationsApi",
|
|
40
42
|
"StoreCollisionComponentsApi",
|
|
41
43
|
"StoreCollisionSetupsApi",
|
|
42
44
|
"StoreObjectApi",
|
|
@@ -47,7 +47,7 @@ class JoggingApi:
|
|
|
47
47
|
async def execute_jogging(self, cell: Annotated[StrictStr, Field(description="Unique identifier addressing a cell in all API calls. ")], controller: Annotated[StrictStr, Field(description="Unique identifier to address a controller in the cell.")], client_request_generator: Callable[[AsyncGenerator[ExecuteJoggingResponse, None]], AsyncGenerator[ExecuteJoggingRequest, None]]) -> None: # noqa: E501
|
|
48
48
|
"""Execute Jogging # noqa: E501
|
|
49
49
|
|
|
50
|
-
<!-- theme: success --> > Websocket endpoint Provides execution control over a dynamically adaptable jogging motion for a motion group. Jogging describes controlling a motion group by sending real-time commands to move either its joints or the TCP. The commands contain target velocities that may change at any time during execution, so the resulting motion cannot be computed upfront. ### Preconditions The motion group is not moved by any other endpoint. ### Requests #### 1. Send `InitializeJoggingRequest` to configure the jogging. - Sets the robot controller mode to control mode. -
|
|
50
|
+
<!-- theme: success --> > Websocket endpoint Provides execution control over a dynamically adaptable jogging motion for a motion group. Jogging describes controlling a motion group by sending real-time commands to move either its joints or the TCP. The commands contain target velocities that may change at any time during execution, so the resulting motion cannot be computed upfront. ### Preconditions The motion group is not moved by any other endpoint. ### Requests #### 1. Send `InitializeJoggingRequest` to configure the jogging. - Sets the robot controller mode to control mode. - Claims the motion group for jogging. For robotic arms, TCP is required to ensure that limits, including TCP limits, are respected. #### 2. Send `JointVelocityRequest` or `TcpVelocityRequest` to start the jogging motion. - Commands can only be processed in the cycle rate of the controller - Sending commands faster will not increase the responsiveness of the jogging motion, it will lead to dropped commands - It is recommended to couple sending commands with the [state stream](streamMotionGroupState), which can be subscribed to via nats as well. #### 3. Change or stop the jogging motion - Change the jogging direction and/or velocity during the jogging motion with `JointVelocityRequest` or `TcpVelocityRequest`. - To stop the jogging motion, send zero velocities via either request or `PauseJoggingRequest`. ### Responses - Each request is acknowledged with a corresponding response: - `InitializeJoggingResponse` after `InitializeJoggingRequest` - `JointVelocityResponse` after `JointVelocityRequest` - `TcpVelocityResponse` after `TcpVelocityRequest` - `PauseJoggingResponse` after `PauseJoggingRequest` The responses confirm that the requests were received. They do not signal that the operation was successful; check the [motion group state](streamMotionGroupState) for that. - `MovementErrorResponse` with error details is sent in case of an unexpected error, e.g., controller disconnects during jogging. ### Tips and Tricks - Ensure that the websocket connection remains open until the jogging motion is stopped to avoid unexpected stops. # noqa: E501
|
|
51
51
|
:param client_request_generator: An AsyncGenerator that yields request of type ExecuteJoggingRequest and takes an AsyncGenerator of ExecuteJoggingResponse as an input argument (required)
|
|
52
52
|
:info All responses from the server will be yielded to client_request_generator through the (AsyncGenerator[ExecuteJoggingResponse, None])
|
|
53
53
|
:type AsyncGenerator[ExecuteJoggingRequest, None]
|