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.
Files changed (32) hide show
  1. wandelbots_api_client/__init__.py +1 -1
  2. wandelbots_api_client/api_client.py +1 -1
  3. wandelbots_api_client/configuration.py +1 -1
  4. wandelbots_api_client/models/__init__.py +3 -1
  5. wandelbots_api_client/models/virtual_controller_types.py +4 -4
  6. wandelbots_api_client/v2/__init__.py +1 -1
  7. wandelbots_api_client/v2/api/__init__.py +2 -0
  8. wandelbots_api_client/v2/api/jogging_api.py +1 -1
  9. wandelbots_api_client/v2/api/motion_group_models_api.py +265 -0
  10. wandelbots_api_client/v2/api/robot_configurations_api.py +291 -0
  11. wandelbots_api_client/v2/api_client.py +1 -1
  12. wandelbots_api_client/v2/configuration.py +1 -1
  13. wandelbots_api_client/v2/models/__init__.py +5 -3
  14. wandelbots_api_client/v2/models/initialize_jogging_request.py +2 -4
  15. wandelbots_api_client/v2/models/inverse_kinematics_request.py +6 -4
  16. wandelbots_api_client/v2/models/kinematic_model.py +110 -0
  17. wandelbots_api_client/v2/models/virtual_controller.py +1 -2
  18. wandelbots_api_client/v2/models/virtual_controller_types.py +1 -1
  19. wandelbots_api_client/v2_pydantic/__init__.py +1 -1
  20. wandelbots_api_client/v2_pydantic/api/__init__.py +2 -0
  21. wandelbots_api_client/v2_pydantic/api/jogging_api.py +1 -1
  22. wandelbots_api_client/v2_pydantic/api/motion_group_models_api.py +268 -0
  23. wandelbots_api_client/v2_pydantic/api/robot_configurations_api.py +294 -0
  24. wandelbots_api_client/v2_pydantic/api_client.py +1 -1
  25. wandelbots_api_client/v2_pydantic/configuration.py +1 -1
  26. wandelbots_api_client/v2_pydantic/models.py +78 -161
  27. wandelbots_api_client/v2_pydantic/virtual_controller_types.py +126 -0
  28. {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/METADATA +2 -2
  29. {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/RECORD +32 -28
  30. {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/WHEEL +0 -0
  31. {wandelbots_api_client-26.1.0.dev50.dist-info → wandelbots_api_client-26.1.0.dev62.dist-info}/licenses/LICENSE +0 -0
  32. {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.dev50'
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.dev50".\
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
- response_coordinate_system: Optional[StrictStr] = Field(default=None, description="Unique identifier addressing a coordinate system to which the responses are transformed. If not set, world coordinate system is used. ")
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
- __properties: ClassVar[List[str]] = ["motion_group_model", "tcp_poses", "tcp_offset", "mounting", "joint_position_limits", "collision_setups"]
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[VirtualControllerTypes] = None
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"]
@@ -3,7 +3,7 @@
3
3
  """
4
4
  Wandelbots NOVA API
5
5
 
6
- Interact with robots in an easy and intuitive way.
6
+ Interact with robots in an easy and intuitive way.
7
7
 
8
8
  The version of the OpenAPI document: 2.1.0 dev
9
9
  Generated by OpenAPI Generator (https://openapi-generator.tech)
@@ -13,7 +13,7 @@
13
13
  Do not edit the class manually.
14
14
  """ # noqa: E501
15
15
 
16
- __version__ = "26.1.0.dev50"
16
+ __version__ = "26.1.0.dev62"
17
17
 
18
18
  from . import api
19
19
  from . import api_client
@@ -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. - Sets rate and coordinate system for the jogging response. #### 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. ### Responses - `InitializeJoggingResponse` is sent to signal the success or failure of the `InitializeJoggingRequest`. - Jogging responses are streamed continuously after an `InitializeJoggingRequest` is processed. Jogging responses contain the robot controller state and the state of the jogging control. - `JoggingErrorResponse` with error details is sent in case of an unexpected error, e.g., controller disconnects during jogging. ### Tips and Tricks - In the `JoggingResponse`, verify that the robot control is in the desired state, e.g., standstill, with JoggingState. - Ensure that the websocket connection remains open until the jogging motion is stopped to avoid unexpected stops. # noqa: E501
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]