wandelbots-api-client 25.11.0.dev12__py3-none-any.whl → 26.1.0.dev50__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/motion_api.py +3 -3
- wandelbots_api_client/api_client.py +1 -1
- wandelbots_api_client/configuration.py +1 -1
- wandelbots_api_client/v2/__init__.py +1 -1
- wandelbots_api_client/v2/api/bus_inputs_outputs_api.py +579 -0
- wandelbots_api_client/v2/api/jogging_api.py +1 -1
- wandelbots_api_client/v2/api/motion_group_models_api.py +530 -2
- wandelbots_api_client/v2/api/program_api.py +12 -12
- wandelbots_api_client/v2/api/trajectory_execution_api.py +1 -1
- wandelbots_api_client/v2/api_client.py +1 -1
- wandelbots_api_client/v2/configuration.py +1 -1
- wandelbots_api_client/v2/models/__init__.py +2 -0
- wandelbots_api_client/v2/models/blending_auto.py +1 -1
- wandelbots_api_client/v2/models/blending_position.py +15 -1
- wandelbots_api_client/v2/models/blending_space.py +37 -0
- wandelbots_api_client/v2/models/motion_group_description.py +4 -2
- wandelbots_api_client/v2_pydantic/__init__.py +1 -1
- wandelbots_api_client/v2_pydantic/api/bus_inputs_outputs_api.py +585 -0
- wandelbots_api_client/v2_pydantic/api/jogging_api.py +1 -1
- wandelbots_api_client/v2_pydantic/api/motion_group_models_api.py +536 -2
- wandelbots_api_client/v2_pydantic/api/program_api.py +12 -12
- wandelbots_api_client/v2_pydantic/api/trajectory_execution_api.py +1 -1
- 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 +401 -374
- {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/METADATA +2 -2
- {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/RECORD +31 -30
- {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/WHEEL +0 -0
- {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/licenses/LICENSE +0 -0
- {wandelbots_api_client-25.11.0.dev12.dist-info → wandelbots_api_client-26.1.0.dev50.dist-info}/top_level.txt +0 -0
|
@@ -47,7 +47,7 @@ class TrajectoryExecutionApi:
|
|
|
47
47
|
async def execute_trajectory(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[ExecuteTrajectoryResponse, None]], AsyncGenerator[ExecuteTrajectoryRequest, None]]) -> None: # noqa: E501
|
|
48
48
|
"""Execute Trajectory # noqa: E501
|
|
49
49
|
|
|
50
|
-
<!-- theme: success --> > Websocket endpoint Provides execution control over a previously [planned trajectory](planTrajectory). Enables the caller to attach input/output actions to the trajectory. ### Movement behavior | Virtual controller | Physical controller | |------------------|-------------------| | Desired joint configurations are commanded to each motion group and **applied immediately** | Move to desired **actual joint configuration**, **if possible** | ### Concept of location - The location or path parameter specifies the exact position along a trajectory. - The location is a scalar value that ranges from 0 to `n`, where `n` denotes the number of motion commands, or trajectory segments, e.g., line, p2p, etc. See [planTrajectory](planTrajectory). - Each integer value of the location corresponds to one motion command, e.g., 3.0 to 3.999 could be a line. ### Preconditions - The motion group's control mode is not claimed by any other endpoint. - The motion group's joint position are at start location specified with `InitializeMovementRequest`. - Use [executeToTrajectory](executeToTrajectory) to move the robot to the start location. ### Requests #### 1. Send `InitializeMovementRequest` to lock the trajectory to this connection The following actions are executed: - Sets robot controller mode to control mode, - Sets start location of the execution Keep in mind that only a single trajectory can be locked to a websocket connection at a time
|
|
50
|
+
<!-- theme: success --> > Websocket endpoint Provides execution control over a previously [planned trajectory](planTrajectory). Enables the caller to attach input/output actions to the trajectory. ### Movement behavior | Virtual controller | Physical controller | |------------------|-------------------| | Desired joint configurations are commanded to each motion group and **applied immediately** | Move to desired **actual joint configuration**, **if possible** | ### Concept of location - The location or path parameter specifies the exact position along a trajectory. - The location is a scalar value that ranges from 0 to `n`, where `n` denotes the number of motion commands, or trajectory segments, e.g., line, p2p, etc. See [planTrajectory](planTrajectory). - Each integer value of the location corresponds to one motion command, e.g., 3.0 to 3.999 could be a line. ### Preconditions - The motion group's control mode is not claimed by any other endpoint. - The motion group's joint position are at start location specified with `InitializeMovementRequest`. - Use [executeToTrajectory](executeToTrajectory) to move the robot to the start location. ### Requests #### 1. Send `InitializeMovementRequest` to lock the trajectory to this connection The following actions are executed: - Sets robot controller mode to control mode, - Sets start location of the execution Keep in mind that only a single trajectory can be locked to a websocket connection at a time. Pausing the current movement enables you to send another `InitializeMovementRequest` to execute another trajectory on the same connection. #### 2. Send `StartMovementRequest` to start the movement Sets direction of movement, default is forward. #### **Optional** - To pause, send `PauseMovementRequest` before the movement has reached its end location. - Change the movement's velocity with `PlaybackSpeedRequest` after initializing the movement with `InitializeMovementRequest`. ### Responses To monitor the state of the movement, listen to the [state stream](streamMotionGroupState). The state is published via nats as well. Field `execute` in the `MotionGroupState` indicates whether a movement is ongoing and carries execution details. Each request has a corresponding acknowledgment response. They signal success or failure of the request. Especially for `PauseMovementResponse`, it does not signal the end of the movement. Additionally, `MovementError` messages can be sent in case of unexpected errors during the execution, e.g., controller disconnects during movement. ### Tips and Tricks - A movement can be paused and resumed by sending `PauseMovementRequest` and `StartMovementRequest`. - Send `PlaybackSpeedRequest` before `StartMovementRequest` to reduce the velocity of the movement before it starts. - Send `PlaybackSpeedRequest` repeatedly to implement a slider. The velocity of the motion group can be adjusted with each controller step. Therefore, if your app needs a slider-like UI to alter the velocity of a currently running movement, you can send `PlaybackSpeedRequest` with different speed values repeatedly during the movement. - A closed trajectory (end and start joint position are equal) can be repeated by sending `StartMovementRequest` after the movement has finished. # noqa: E501
|
|
51
51
|
:param client_request_generator: An AsyncGenerator that yields request of type ExecuteTrajectoryRequest and takes an AsyncGenerator of ExecuteTrajectoryResponse as an input argument (required)
|
|
52
52
|
:info All responses from the server will be yielded to client_request_generator through the (AsyncGenerator[ExecuteTrajectoryResponse, None])
|
|
53
53
|
:type AsyncGenerator[ExecuteTrajectoryRequest, None]
|
|
@@ -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/
|
|
94
|
+
self.user_agent = 'Wandelbots-Nova-API-Python-Client/26.1.0.dev50'
|
|
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:
|
|
538
|
+
"SDK Package Version: 26.1.0.dev50".\
|
|
539
539
|
format(env=sys.platform, pyversion=sys.version)
|
|
540
540
|
|
|
541
541
|
def get_host_settings(self) -> List[HostSetting]:
|
|
@@ -25,6 +25,7 @@ from .app import App
|
|
|
25
25
|
from .behavior import Behavior
|
|
26
26
|
from .blending_auto import BlendingAuto
|
|
27
27
|
from .blending_position import BlendingPosition
|
|
28
|
+
from .blending_space import BlendingSpace
|
|
28
29
|
from .boolean_value import BooleanValue
|
|
29
30
|
from .box import Box
|
|
30
31
|
from .bus_io_description import BusIODescription
|
|
@@ -271,6 +272,7 @@ __all__ = [
|
|
|
271
272
|
"Behavior",
|
|
272
273
|
"BlendingAuto",
|
|
273
274
|
"BlendingPosition",
|
|
275
|
+
"BlendingSpace",
|
|
274
276
|
"BooleanValue",
|
|
275
277
|
"Box",
|
|
276
278
|
"BusIODescription",
|
|
@@ -27,7 +27,7 @@ class BlendingAuto(BaseModel):
|
|
|
27
27
|
"""
|
|
28
28
|
BlendingAuto
|
|
29
29
|
""" # noqa: E501
|
|
30
|
-
min_velocity_in_percent: Optional[Annotated[int, Field(le=100, strict=True, ge=0)]] = Field(default=None, description="Auto-blending is used to keep a constant velocity when blending between two motion commands. It changes the TCP path around the target point of the motion command. The value represents the percentage of the original velocity. ")
|
|
30
|
+
min_velocity_in_percent: Optional[Annotated[int, Field(le=100, strict=True, ge=0)]] = Field(default=None, description="Auto-blending is used to keep a constant velocity when blending between two motion commands. To use auto-blending, the TCP velocity limit must be set. It changes the TCP path around the target point of the motion command. The value represents the percentage of the original velocity. Auto-blending is always performed in cartesian space. ")
|
|
31
31
|
blending_name: str = "BlendingAuto"
|
|
32
32
|
__properties: ClassVar[List[str]] = ["min_velocity_in_percent", "blending_name"]
|
|
33
33
|
|
|
@@ -19,6 +19,8 @@ import json
|
|
|
19
19
|
|
|
20
20
|
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr, field_validator
|
|
21
21
|
from typing import Any, ClassVar, Dict, List, Optional, Union
|
|
22
|
+
from typing_extensions import Annotated
|
|
23
|
+
from wandelbots_api_client.v2.models.blending_space import BlendingSpace
|
|
22
24
|
from typing import Optional, Set
|
|
23
25
|
from typing_extensions import Self
|
|
24
26
|
|
|
@@ -27,8 +29,14 @@ class BlendingPosition(BaseModel):
|
|
|
27
29
|
BlendingPosition
|
|
28
30
|
""" # noqa: E501
|
|
29
31
|
position_zone_radius: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Specifies the maximum radius in [mm] around the motion command's target point where the TCP path can be altered to blend the motion command into the following one. If auto-blending blends too much of the resulting trajectory, use position-blending to restrict the blending zone radius. ")
|
|
32
|
+
position_zone_percentage: Optional[Union[Annotated[float, Field(le=100, strict=True, ge=0)], Annotated[int, Field(le=100, strict=True, ge=0)]]] = Field(default=None, description="Specifies the maximum blending percentage based on the trajectory length in position space around the motion command's target point. Percentage indicated in 0.0 - 100.0. ")
|
|
33
|
+
orientation_zone_radius: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Specifies the maximum radius in [rad] for orientation blending around the motion command's target orientation. At the target's orientation, the TCP orientation can be altered to blend into the following motion. ")
|
|
34
|
+
orientation_zone_percentage: Optional[Union[Annotated[float, Field(le=100, strict=True, ge=0)], Annotated[int, Field(le=100, strict=True, ge=0)]]] = Field(default=None, description="Specifies the maximum blending percentage for orientation blending based on the trajectory length in orientation space. Percentage indicated in 0.0 - 100.0. ")
|
|
35
|
+
joints_zone_radius: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="Specifies the maximum radius in [rad] for joint space blending around the motion command's target joint configuration. At the target joint configuration, the joint path can be altered to blend into the following motion. ")
|
|
36
|
+
joints_zone_percentage: Optional[Union[Annotated[float, Field(le=100, strict=True, ge=0)], Annotated[int, Field(le=100, strict=True, ge=0)]]] = Field(default=None, description="Specifies the maximum blending percentage for joint space blending based on the trajectory length in joint space. Percentage indicated in 0.0 to 100.0. ")
|
|
37
|
+
space: Optional[BlendingSpace] = Field(default=None, description="Defines the space in which blending is performed. ")
|
|
30
38
|
blending_name: str = "BlendingPosition"
|
|
31
|
-
__properties: ClassVar[List[str]] = ["position_zone_radius", "blending_name"]
|
|
39
|
+
__properties: ClassVar[List[str]] = ["position_zone_radius", "position_zone_percentage", "orientation_zone_radius", "orientation_zone_percentage", "joints_zone_radius", "joints_zone_percentage", "space", "blending_name"]
|
|
32
40
|
|
|
33
41
|
@field_validator('blending_name')
|
|
34
42
|
def blending_name_validate_enum(cls, value):
|
|
@@ -93,6 +101,12 @@ class BlendingPosition(BaseModel):
|
|
|
93
101
|
|
|
94
102
|
_obj = cls.model_validate({
|
|
95
103
|
"position_zone_radius": obj.get("position_zone_radius"),
|
|
104
|
+
"position_zone_percentage": obj.get("position_zone_percentage"),
|
|
105
|
+
"orientation_zone_radius": obj.get("orientation_zone_radius"),
|
|
106
|
+
"orientation_zone_percentage": obj.get("orientation_zone_percentage"),
|
|
107
|
+
"joints_zone_radius": obj.get("joints_zone_radius"),
|
|
108
|
+
"joints_zone_percentage": obj.get("joints_zone_percentage"),
|
|
109
|
+
"space": obj.get("space"),
|
|
96
110
|
"blending_name": obj.get("blending_name")
|
|
97
111
|
})
|
|
98
112
|
return _obj
|
|
@@ -0,0 +1,37 @@
|
|
|
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 json
|
|
17
|
+
from enum import Enum
|
|
18
|
+
from typing_extensions import Self
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class BlendingSpace(str, Enum):
|
|
22
|
+
"""
|
|
23
|
+
Defines the space in which blending is performed. - `JOINT`: Zone blending is performed in joint space - `CARTESIAN`: Auto-blending is performed in cartesian space
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
"""
|
|
27
|
+
allowed enum values
|
|
28
|
+
"""
|
|
29
|
+
JOINT = 'JOINT'
|
|
30
|
+
CARTESIAN = 'CARTESIAN'
|
|
31
|
+
|
|
32
|
+
@classmethod
|
|
33
|
+
def from_json(cls, json_str: str) -> Self:
|
|
34
|
+
"""Create an instance of BlendingSpace from a JSON string"""
|
|
35
|
+
return cls(json.loads(json_str))
|
|
36
|
+
|
|
37
|
+
|
|
@@ -43,7 +43,8 @@ class MotionGroupDescription(BaseModel):
|
|
|
43
43
|
payloads: Optional[Dict[str, Payload]] = Field(default=None, description="Maps a payload name to its configuration. Key must be a payload identifier. Values are payload objects. ")
|
|
44
44
|
cycle_time: Optional[Annotated[int, Field(le=2147483647, strict=True, ge=0)]] = Field(default=None, description="[ms] cycle time of the motion group controller. A trajectory for this motion group should be computed to this resolution.")
|
|
45
45
|
dh_parameters: Optional[List[DHParameter]] = Field(default=None, description="The DH parameters describing the motion group geometry, starting from base.")
|
|
46
|
-
|
|
46
|
+
serial_number: Optional[StrictStr] = Field(default=None, description="The serial number of the motion group, if available. If not available, the serial number of the robot controller. If not available, empty. ")
|
|
47
|
+
__properties: ClassVar[List[str]] = ["motion_group_model", "mounting", "tcps", "safety_zones", "safety_link_colliders", "safety_tool_colliders", "operation_limits", "payloads", "cycle_time", "dh_parameters", "serial_number"]
|
|
47
48
|
|
|
48
49
|
model_config = ConfigDict(
|
|
49
50
|
populate_by_name=True,
|
|
@@ -204,7 +205,8 @@ class MotionGroupDescription(BaseModel):
|
|
|
204
205
|
DHParameter.from_dict(_item) if hasattr(DHParameter, 'from_dict') else _item
|
|
205
206
|
# <<< End modification
|
|
206
207
|
for _item in obj["dh_parameters"]
|
|
207
|
-
] if obj.get("dh_parameters") is not None else None
|
|
208
|
+
] if obj.get("dh_parameters") is not None else None,
|
|
209
|
+
"serial_number": obj.get("serial_number")
|
|
208
210
|
})
|
|
209
211
|
return _obj
|
|
210
212
|
|