standardbots 2.0.0.dev1760378411__py3-none-any.whl → 2.0.0.dev1768505129__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.
- standardbots/auto_generated/apis.py +291 -1
- standardbots/auto_generated/models.py +1253 -157
- {standardbots-2.0.0.dev1760378411.dist-info → standardbots-2.0.0.dev1768505129.dist-info}/METADATA +1 -1
- {standardbots-2.0.0.dev1760378411.dist-info → standardbots-2.0.0.dev1768505129.dist-info}/RECORD +6 -6
- {standardbots-2.0.0.dev1760378411.dist-info → standardbots-2.0.0.dev1768505129.dist-info}/WHEEL +0 -0
- {standardbots-2.0.0.dev1760378411.dist-info → standardbots-2.0.0.dev1768505129.dist-info}/top_level.txt +0 -0
|
@@ -240,6 +240,66 @@ def parse_arm_position_update_request_response_kind_enum(data: object) -> ArmPos
|
|
|
240
240
|
def serialize_arm_position_update_request_response_kind_enum(data: Union[ArmPositionUpdateRequestResponseKindEnum, str]) -> object:
|
|
241
241
|
return ArmPositionUpdateRequestResponseKindEnum(data).value
|
|
242
242
|
|
|
243
|
+
@dataclass
|
|
244
|
+
class BoltHeadPosition:
|
|
245
|
+
"""Bolt head position in pitch, yaw, roll"""
|
|
246
|
+
pitch: Union[float, None] = None
|
|
247
|
+
yaw: Union[float, None] = None
|
|
248
|
+
roll: Union[float, None] = None
|
|
249
|
+
|
|
250
|
+
def validate_pitch(self, value: float) -> Tuple[bool, str]:
|
|
251
|
+
if value is None:
|
|
252
|
+
return [False, "pitch is required for BoltHeadPosition"]
|
|
253
|
+
|
|
254
|
+
if not isinstance(value, float):
|
|
255
|
+
return [False, "pitch must be of type float for BoltHeadPosition, got " + type(value).__name__]
|
|
256
|
+
|
|
257
|
+
return [True, ""]
|
|
258
|
+
|
|
259
|
+
def validate_yaw(self, value: float) -> Tuple[bool, str]:
|
|
260
|
+
if value is None:
|
|
261
|
+
return [False, "yaw is required for BoltHeadPosition"]
|
|
262
|
+
|
|
263
|
+
if not isinstance(value, float):
|
|
264
|
+
return [False, "yaw must be of type float for BoltHeadPosition, got " + type(value).__name__]
|
|
265
|
+
|
|
266
|
+
return [True, ""]
|
|
267
|
+
|
|
268
|
+
def validate_roll(self, value: float) -> Tuple[bool, str]:
|
|
269
|
+
if value is None:
|
|
270
|
+
return [False, "roll is required for BoltHeadPosition"]
|
|
271
|
+
|
|
272
|
+
if not isinstance(value, float):
|
|
273
|
+
return [False, "roll must be of type float for BoltHeadPosition, got " + type(value).__name__]
|
|
274
|
+
|
|
275
|
+
return [True, ""]
|
|
276
|
+
|
|
277
|
+
def __post_init__(self):
|
|
278
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
279
|
+
is_valid, error_str = self.validate_pitch(self.pitch)
|
|
280
|
+
if not is_valid:
|
|
281
|
+
raise TypeError(error_str)
|
|
282
|
+
is_valid, error_str = self.validate_yaw(self.yaw)
|
|
283
|
+
if not is_valid:
|
|
284
|
+
raise TypeError(error_str)
|
|
285
|
+
is_valid, error_str = self.validate_roll(self.roll)
|
|
286
|
+
if not is_valid:
|
|
287
|
+
raise TypeError(error_str)
|
|
288
|
+
|
|
289
|
+
def parse_bolt_head_position(data: object):
|
|
290
|
+
return BoltHeadPosition(
|
|
291
|
+
pitch=parse_f_64(data["pitch"]) if "pitch" in data and data.get("pitch") is not None else None,
|
|
292
|
+
yaw=parse_f_64(data["yaw"]) if "yaw" in data and data.get("yaw") is not None else None,
|
|
293
|
+
roll=parse_f_64(data["roll"]) if "roll" in data and data.get("roll") is not None else None,
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
def serialize_bolt_head_position(data: BoltHeadPosition) -> object:
|
|
297
|
+
return {
|
|
298
|
+
"pitch": serialize_f_64(data.pitch),
|
|
299
|
+
"yaw": serialize_f_64(data.yaw),
|
|
300
|
+
"roll": serialize_f_64(data.roll),
|
|
301
|
+
}
|
|
302
|
+
|
|
243
303
|
@dataclass
|
|
244
304
|
class BotIdentityData:
|
|
245
305
|
"""Data about the robot's identity"""
|
|
@@ -387,6 +447,81 @@ def serialize_camera_configuration(data: CameraConfiguration) -> object:
|
|
|
387
447
|
"height": None if data.height is None else serialize_u_32(data.height),
|
|
388
448
|
}
|
|
389
449
|
|
|
450
|
+
@dataclass
|
|
451
|
+
class CameraFrameResponse:
|
|
452
|
+
"""Response containing a camera frame and associated metadata."""
|
|
453
|
+
imageData: Union[str, None] = None
|
|
454
|
+
timestamp: Union[str, None] = None
|
|
455
|
+
camera_id: Union[str, None] = None
|
|
456
|
+
stream_name: Union[str, None] = None
|
|
457
|
+
|
|
458
|
+
def validate_imageData(self, value: str) -> Tuple[bool, str]:
|
|
459
|
+
if value is None:
|
|
460
|
+
return [True, ""]
|
|
461
|
+
|
|
462
|
+
if not isinstance(value, str):
|
|
463
|
+
return [False, "imageData must be of type str for CameraFrameResponse, got " + type(value).__name__]
|
|
464
|
+
|
|
465
|
+
return [True, ""]
|
|
466
|
+
|
|
467
|
+
def validate_timestamp(self, value: str) -> Tuple[bool, str]:
|
|
468
|
+
if value is None:
|
|
469
|
+
return [True, ""]
|
|
470
|
+
|
|
471
|
+
if not isinstance(value, str):
|
|
472
|
+
return [False, "timestamp must be of type str for CameraFrameResponse, got " + type(value).__name__]
|
|
473
|
+
|
|
474
|
+
return [True, ""]
|
|
475
|
+
|
|
476
|
+
def validate_camera_id(self, value: str) -> Tuple[bool, str]:
|
|
477
|
+
if value is None:
|
|
478
|
+
return [True, ""]
|
|
479
|
+
|
|
480
|
+
if not isinstance(value, str):
|
|
481
|
+
return [False, "camera_id must be of type str for CameraFrameResponse, got " + type(value).__name__]
|
|
482
|
+
|
|
483
|
+
return [True, ""]
|
|
484
|
+
|
|
485
|
+
def validate_stream_name(self, value: str) -> Tuple[bool, str]:
|
|
486
|
+
if value is None:
|
|
487
|
+
return [True, ""]
|
|
488
|
+
|
|
489
|
+
if not isinstance(value, str):
|
|
490
|
+
return [False, "stream_name must be of type str for CameraFrameResponse, got " + type(value).__name__]
|
|
491
|
+
|
|
492
|
+
return [True, ""]
|
|
493
|
+
|
|
494
|
+
def __post_init__(self):
|
|
495
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
496
|
+
is_valid, error_str = self.validate_imageData(self.imageData)
|
|
497
|
+
if not is_valid:
|
|
498
|
+
raise TypeError(error_str)
|
|
499
|
+
is_valid, error_str = self.validate_timestamp(self.timestamp)
|
|
500
|
+
if not is_valid:
|
|
501
|
+
raise TypeError(error_str)
|
|
502
|
+
is_valid, error_str = self.validate_camera_id(self.camera_id)
|
|
503
|
+
if not is_valid:
|
|
504
|
+
raise TypeError(error_str)
|
|
505
|
+
is_valid, error_str = self.validate_stream_name(self.stream_name)
|
|
506
|
+
if not is_valid:
|
|
507
|
+
raise TypeError(error_str)
|
|
508
|
+
|
|
509
|
+
def parse_camera_frame_response(data: object):
|
|
510
|
+
return CameraFrameResponse(
|
|
511
|
+
imageData=parse_str(data["imageData"]) if "imageData" in data and data.get("imageData") is not None else None,
|
|
512
|
+
timestamp=parse_str(data["timestamp"]) if "timestamp" in data and data.get("timestamp") is not None else None,
|
|
513
|
+
camera_id=parse_str(data["camera_id"]) if "camera_id" in data and data.get("camera_id") is not None else None,
|
|
514
|
+
stream_name=parse_str(data["stream_name"]) if "stream_name" in data and data.get("stream_name") is not None else None,
|
|
515
|
+
)
|
|
516
|
+
|
|
517
|
+
def serialize_camera_frame_response(data: CameraFrameResponse) -> object:
|
|
518
|
+
return {
|
|
519
|
+
"imageData": None if data.imageData is None else serialize_str(data.imageData),
|
|
520
|
+
"timestamp": None if data.timestamp is None else serialize_str(data.timestamp),
|
|
521
|
+
"camera_id": None if data.camera_id is None else serialize_str(data.camera_id),
|
|
522
|
+
"stream_name": None if data.stream_name is None else serialize_str(data.stream_name),
|
|
523
|
+
}
|
|
524
|
+
|
|
390
525
|
@dataclass
|
|
391
526
|
class CameraIntrinsics:
|
|
392
527
|
"""Intrinsic parameters of the camera."""
|
|
@@ -1094,6 +1229,22 @@ def serialize_dhpgc_gripper_configuration(data: DHPGCGripperConfiguration) -> ob
|
|
|
1094
1229
|
"diameter": serialize_f_64(data.diameter),
|
|
1095
1230
|
}
|
|
1096
1231
|
|
|
1232
|
+
@dataclass
|
|
1233
|
+
class ElastokinConfig:
|
|
1234
|
+
"""Elastokinematic configuration parameters (arbitrary JSON object from Cognibotics)"""
|
|
1235
|
+
|
|
1236
|
+
def __post_init__(self):
|
|
1237
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
1238
|
+
pass
|
|
1239
|
+
|
|
1240
|
+
def parse_elastokin_config(data: object):
|
|
1241
|
+
return ElastokinConfig(
|
|
1242
|
+
)
|
|
1243
|
+
|
|
1244
|
+
def serialize_elastokin_config(data: ElastokinConfig) -> object:
|
|
1245
|
+
return {
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1097
1248
|
@dataclass
|
|
1098
1249
|
class EngageEmergencyStopRequest:
|
|
1099
1250
|
"""Engage Emergency Stop. This will immediately stop the robot and prevent it from moving until the robot is unbraked.
|
|
@@ -1337,6 +1488,8 @@ class ErrorEnum(Enum):
|
|
|
1337
1488
|
"""Cannot change ROS state"""
|
|
1338
1489
|
IoSafeguardError = "io_safeguard_error"
|
|
1339
1490
|
"""Cannot change IO state because of safeguard"""
|
|
1491
|
+
RobotOutOfComplianceBounds = "robot_out_of_compliance_bounds"
|
|
1492
|
+
"""Cannot initiate compliance control: Robot is outside compliance bounds"""
|
|
1340
1493
|
|
|
1341
1494
|
def parse_error_enum(data: object) -> ErrorEnum:
|
|
1342
1495
|
return ErrorEnum(data)
|
|
@@ -1470,6 +1623,51 @@ def parse_force_unit_kind(data: object) -> ForceUnitKind:
|
|
|
1470
1623
|
def serialize_force_unit_kind(data: Union[ForceUnitKind, str]) -> object:
|
|
1471
1624
|
return ForceUnitKind(data).value
|
|
1472
1625
|
|
|
1626
|
+
@dataclass
|
|
1627
|
+
class GripperBounds:
|
|
1628
|
+
"""Gripper bounds configuration"""
|
|
1629
|
+
min: Union[float, None] = None
|
|
1630
|
+
max: Union[float, None] = None
|
|
1631
|
+
|
|
1632
|
+
def validate_min(self, value: float) -> Tuple[bool, str]:
|
|
1633
|
+
if value is None:
|
|
1634
|
+
return [False, "min is required for GripperBounds"]
|
|
1635
|
+
|
|
1636
|
+
if not isinstance(value, float):
|
|
1637
|
+
return [False, "min must be of type float for GripperBounds, got " + type(value).__name__]
|
|
1638
|
+
|
|
1639
|
+
return [True, ""]
|
|
1640
|
+
|
|
1641
|
+
def validate_max(self, value: float) -> Tuple[bool, str]:
|
|
1642
|
+
if value is None:
|
|
1643
|
+
return [False, "max is required for GripperBounds"]
|
|
1644
|
+
|
|
1645
|
+
if not isinstance(value, float):
|
|
1646
|
+
return [False, "max must be of type float for GripperBounds, got " + type(value).__name__]
|
|
1647
|
+
|
|
1648
|
+
return [True, ""]
|
|
1649
|
+
|
|
1650
|
+
def __post_init__(self):
|
|
1651
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
1652
|
+
is_valid, error_str = self.validate_min(self.min)
|
|
1653
|
+
if not is_valid:
|
|
1654
|
+
raise TypeError(error_str)
|
|
1655
|
+
is_valid, error_str = self.validate_max(self.max)
|
|
1656
|
+
if not is_valid:
|
|
1657
|
+
raise TypeError(error_str)
|
|
1658
|
+
|
|
1659
|
+
def parse_gripper_bounds(data: object):
|
|
1660
|
+
return GripperBounds(
|
|
1661
|
+
min=parse_f_64(data["min"]) if "min" in data and data.get("min") is not None else None,
|
|
1662
|
+
max=parse_f_64(data["max"]) if "max" in data and data.get("max") is not None else None,
|
|
1663
|
+
)
|
|
1664
|
+
|
|
1665
|
+
def serialize_gripper_bounds(data: GripperBounds) -> object:
|
|
1666
|
+
return {
|
|
1667
|
+
"min": serialize_f_64(data.min),
|
|
1668
|
+
"max": serialize_f_64(data.max),
|
|
1669
|
+
}
|
|
1670
|
+
|
|
1473
1671
|
class GripperKindEnum(Enum):
|
|
1474
1672
|
Onrobot2Fg7 = "onrobot_2fg7"
|
|
1475
1673
|
"""An OnRobot 2FG7 Gripper is connected"""
|
|
@@ -1487,6 +1685,10 @@ class GripperKindEnum(Enum):
|
|
|
1487
1685
|
"""A DH CGI Gripper is connected"""
|
|
1488
1686
|
SchunkEgx = "schunk_egx"
|
|
1489
1687
|
"""A Schunk EGU / EGK Gripper is connected"""
|
|
1688
|
+
Robotiq2F = "robotiq_2f"
|
|
1689
|
+
"""A Robotiq 2F parallel jaw gripper is connected"""
|
|
1690
|
+
RobotiqEpick = "robotiq_epick"
|
|
1691
|
+
"""A Robotiq EPick vacuum gripper is connected"""
|
|
1490
1692
|
NoneConnected = "none_connected"
|
|
1491
1693
|
"""No gripper is connected"""
|
|
1492
1694
|
|
|
@@ -1736,6 +1938,14 @@ def parse_max_joint_speeds(data: object) -> MaxJointSpeeds:
|
|
|
1736
1938
|
def serialize_max_joint_speeds(data: MaxJointSpeeds) -> object:
|
|
1737
1939
|
return [serialize_f_64(data[0]),serialize_f_64(data[1]),serialize_f_64(data[2]),serialize_f_64(data[3]),serialize_f_64(data[4]),serialize_f_64(data[5]),]
|
|
1738
1940
|
|
|
1941
|
+
MaxJointTorques = Tuple[float,float,float,float,float,float,]
|
|
1942
|
+
|
|
1943
|
+
def parse_max_joint_torques(data: object) -> MaxJointTorques:
|
|
1944
|
+
return (parse_f_64(data[0]),parse_f_64(data[1]),parse_f_64(data[2]),parse_f_64(data[3]),parse_f_64(data[4]),parse_f_64(data[5]),)
|
|
1945
|
+
|
|
1946
|
+
def serialize_max_joint_torques(data: MaxJointTorques) -> object:
|
|
1947
|
+
return [serialize_f_64(data[0]),serialize_f_64(data[1]),serialize_f_64(data[2]),serialize_f_64(data[3]),serialize_f_64(data[4]),serialize_f_64(data[5]),]
|
|
1948
|
+
|
|
1739
1949
|
class MovementKindEnum(Enum):
|
|
1740
1950
|
Joint = "joint"
|
|
1741
1951
|
"""Enum Joint = `joint`"""
|
|
@@ -2652,6 +2862,70 @@ def parse_robot_control_mode_enum(data: object) -> RobotControlModeEnum:
|
|
|
2652
2862
|
def serialize_robot_control_mode_enum(data: Union[RobotControlModeEnum, str]) -> object:
|
|
2653
2863
|
return RobotControlModeEnum(data).value
|
|
2654
2864
|
|
|
2865
|
+
class RobotFrame(Enum):
|
|
2866
|
+
World = "world"
|
|
2867
|
+
"""Enum World = `world`"""
|
|
2868
|
+
Tooltip = "tooltip"
|
|
2869
|
+
"""Enum Tooltip = `tooltip`"""
|
|
2870
|
+
|
|
2871
|
+
def parse_robot_frame(data: object) -> RobotFrame:
|
|
2872
|
+
return RobotFrame(data)
|
|
2873
|
+
|
|
2874
|
+
def serialize_robot_frame(data: Union[RobotFrame, str]) -> object:
|
|
2875
|
+
return RobotFrame(data).value
|
|
2876
|
+
|
|
2877
|
+
class Robotiq2FControlKindEnum(Enum):
|
|
2878
|
+
Move = "move"
|
|
2879
|
+
"""Move jaws to the requested position"""
|
|
2880
|
+
|
|
2881
|
+
def parse_robotiq_2_f_control_kind_enum(data: object) -> Robotiq2FControlKindEnum:
|
|
2882
|
+
return Robotiq2FControlKindEnum(data)
|
|
2883
|
+
|
|
2884
|
+
def serialize_robotiq_2_f_control_kind_enum(data: Union[Robotiq2FControlKindEnum, str]) -> object:
|
|
2885
|
+
return Robotiq2FControlKindEnum(data).value
|
|
2886
|
+
|
|
2887
|
+
class RobotiqEPickControlKindEnum(Enum):
|
|
2888
|
+
Grip = "grip"
|
|
2889
|
+
"""Grip with vacuum"""
|
|
2890
|
+
Release = "release"
|
|
2891
|
+
"""Release vacuum"""
|
|
2892
|
+
|
|
2893
|
+
def parse_robotiq_e_pick_control_kind_enum(data: object) -> RobotiqEPickControlKindEnum:
|
|
2894
|
+
return RobotiqEPickControlKindEnum(data)
|
|
2895
|
+
|
|
2896
|
+
def serialize_robotiq_e_pick_control_kind_enum(data: Union[RobotiqEPickControlKindEnum, str]) -> object:
|
|
2897
|
+
return RobotiqEPickControlKindEnum(data).value
|
|
2898
|
+
|
|
2899
|
+
@dataclass
|
|
2900
|
+
class RobotiqEPickGripperConfiguration:
|
|
2901
|
+
"""Configuration for Robotiq EPick vacuum gripper"""
|
|
2902
|
+
mass_kg: Union[float, None] = None
|
|
2903
|
+
|
|
2904
|
+
def validate_mass_kg(self, value: float) -> Tuple[bool, str]:
|
|
2905
|
+
if value is None:
|
|
2906
|
+
return [True, ""]
|
|
2907
|
+
|
|
2908
|
+
if not isinstance(value, float):
|
|
2909
|
+
return [False, "mass_kg must be of type float for RobotiqEPickGripperConfiguration, got " + type(value).__name__]
|
|
2910
|
+
|
|
2911
|
+
return [True, ""]
|
|
2912
|
+
|
|
2913
|
+
def __post_init__(self):
|
|
2914
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
2915
|
+
is_valid, error_str = self.validate_mass_kg(self.mass_kg)
|
|
2916
|
+
if not is_valid:
|
|
2917
|
+
raise TypeError(error_str)
|
|
2918
|
+
|
|
2919
|
+
def parse_robotiq_e_pick_gripper_configuration(data: object):
|
|
2920
|
+
return RobotiqEPickGripperConfiguration(
|
|
2921
|
+
mass_kg=parse_f_64(data["mass_kg"]) if "mass_kg" in data and data.get("mass_kg") is not None else None,
|
|
2922
|
+
)
|
|
2923
|
+
|
|
2924
|
+
def serialize_robotiq_e_pick_gripper_configuration(data: RobotiqEPickGripperConfiguration) -> object:
|
|
2925
|
+
return {
|
|
2926
|
+
"mass_kg": None if data.mass_kg is None else serialize_f_64(data.mass_kg),
|
|
2927
|
+
}
|
|
2928
|
+
|
|
2655
2929
|
class RobotStatusEnum(Enum):
|
|
2656
2930
|
Idle = "Idle"
|
|
2657
2931
|
"""Enum Idle = `Idle`"""
|
|
@@ -3152,11 +3426,42 @@ def serialize_sensor_config(data: SensorConfig) -> object:
|
|
|
3152
3426
|
"metadata": None if data.metadata is None else serialize_str(data.metadata),
|
|
3153
3427
|
}
|
|
3154
3428
|
|
|
3429
|
+
@dataclass
|
|
3430
|
+
class SetFilterTypeRequest:
|
|
3431
|
+
"""Request to set filter type"""
|
|
3432
|
+
filterType: Union[str, None] = None
|
|
3433
|
+
|
|
3434
|
+
def validate_filterType(self, value: str) -> Tuple[bool, str]:
|
|
3435
|
+
if value is None:
|
|
3436
|
+
return [False, "filterType is required for SetFilterTypeRequest"]
|
|
3437
|
+
|
|
3438
|
+
if not isinstance(value, str):
|
|
3439
|
+
return [False, "filterType must be of type str for SetFilterTypeRequest, got " + type(value).__name__]
|
|
3440
|
+
|
|
3441
|
+
return [True, ""]
|
|
3442
|
+
|
|
3443
|
+
def __post_init__(self):
|
|
3444
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
3445
|
+
is_valid, error_str = self.validate_filterType(self.filterType)
|
|
3446
|
+
if not is_valid:
|
|
3447
|
+
raise TypeError(error_str)
|
|
3448
|
+
|
|
3449
|
+
def parse_set_filter_type_request(data: object):
|
|
3450
|
+
return SetFilterTypeRequest(
|
|
3451
|
+
filterType=parse_str(data["filterType"]) if "filterType" in data and data.get("filterType") is not None else None,
|
|
3452
|
+
)
|
|
3453
|
+
|
|
3454
|
+
def serialize_set_filter_type_request(data: SetFilterTypeRequest) -> object:
|
|
3455
|
+
return {
|
|
3456
|
+
"filterType": serialize_str(data.filterType),
|
|
3457
|
+
}
|
|
3458
|
+
|
|
3155
3459
|
@dataclass
|
|
3156
3460
|
class SetRatioControlRequest:
|
|
3157
3461
|
"""Request to set ratio control parameters"""
|
|
3158
3462
|
enabled: Union[bool, None] = None
|
|
3159
|
-
|
|
3463
|
+
movementValue: Union[float, None] = None
|
|
3464
|
+
rotationValue: Union[float, None] = None
|
|
3160
3465
|
|
|
3161
3466
|
def validate_enabled(self, value: bool) -> Tuple[bool, str]:
|
|
3162
3467
|
if value is None:
|
|
@@ -3167,12 +3472,21 @@ class SetRatioControlRequest:
|
|
|
3167
3472
|
|
|
3168
3473
|
return [True, ""]
|
|
3169
3474
|
|
|
3170
|
-
def
|
|
3475
|
+
def validate_movementValue(self, value: float) -> Tuple[bool, str]:
|
|
3476
|
+
if value is None:
|
|
3477
|
+
return [True, ""]
|
|
3478
|
+
|
|
3479
|
+
if not isinstance(value, float):
|
|
3480
|
+
return [False, "movementValue must be of type float for SetRatioControlRequest, got " + type(value).__name__]
|
|
3481
|
+
|
|
3482
|
+
return [True, ""]
|
|
3483
|
+
|
|
3484
|
+
def validate_rotationValue(self, value: float) -> Tuple[bool, str]:
|
|
3171
3485
|
if value is None:
|
|
3172
3486
|
return [True, ""]
|
|
3173
3487
|
|
|
3174
3488
|
if not isinstance(value, float):
|
|
3175
|
-
return [False, "
|
|
3489
|
+
return [False, "rotationValue must be of type float for SetRatioControlRequest, got " + type(value).__name__]
|
|
3176
3490
|
|
|
3177
3491
|
return [True, ""]
|
|
3178
3492
|
|
|
@@ -3181,20 +3495,25 @@ class SetRatioControlRequest:
|
|
|
3181
3495
|
is_valid, error_str = self.validate_enabled(self.enabled)
|
|
3182
3496
|
if not is_valid:
|
|
3183
3497
|
raise TypeError(error_str)
|
|
3184
|
-
is_valid, error_str = self.
|
|
3498
|
+
is_valid, error_str = self.validate_movementValue(self.movementValue)
|
|
3499
|
+
if not is_valid:
|
|
3500
|
+
raise TypeError(error_str)
|
|
3501
|
+
is_valid, error_str = self.validate_rotationValue(self.rotationValue)
|
|
3185
3502
|
if not is_valid:
|
|
3186
3503
|
raise TypeError(error_str)
|
|
3187
3504
|
|
|
3188
3505
|
def parse_set_ratio_control_request(data: object):
|
|
3189
3506
|
return SetRatioControlRequest(
|
|
3190
3507
|
enabled=parse_bool(data["enabled"]) if "enabled" in data and data.get("enabled") is not None else None,
|
|
3191
|
-
|
|
3508
|
+
movementValue=parse_f_64(data["movementValue"]) if "movementValue" in data and data.get("movementValue") is not None else None,
|
|
3509
|
+
rotationValue=parse_f_64(data["rotationValue"]) if "rotationValue" in data and data.get("rotationValue") is not None else None,
|
|
3192
3510
|
)
|
|
3193
3511
|
|
|
3194
3512
|
def serialize_set_ratio_control_request(data: SetRatioControlRequest) -> object:
|
|
3195
3513
|
return {
|
|
3196
3514
|
"enabled": None if data.enabled is None else serialize_bool(data.enabled),
|
|
3197
|
-
"
|
|
3515
|
+
"movementValue": None if data.movementValue is None else serialize_f_64(data.movementValue),
|
|
3516
|
+
"rotationValue": None if data.rotationValue is None else serialize_f_64(data.rotationValue),
|
|
3198
3517
|
}
|
|
3199
3518
|
|
|
3200
3519
|
class SignalMessageType(Enum):
|
|
@@ -3318,42 +3637,80 @@ def serialize_status_version_data(data: StatusVersionData) -> object:
|
|
|
3318
3637
|
"name": None if data.name is None else serialize_str(data.name),
|
|
3319
3638
|
}
|
|
3320
3639
|
|
|
3640
|
+
StringArray = List[str]
|
|
3641
|
+
|
|
3642
|
+
def parse_string_array(data: object) -> StringArray:
|
|
3643
|
+
return [parse_str(item) for item in data]
|
|
3644
|
+
|
|
3645
|
+
def serialize_string_array(data: StringArray) -> List[object]:
|
|
3646
|
+
return [serialize_str(item) for item in data]
|
|
3647
|
+
|
|
3321
3648
|
@dataclass
|
|
3322
|
-
class
|
|
3323
|
-
"""
|
|
3324
|
-
|
|
3649
|
+
class TeleopClient:
|
|
3650
|
+
"""Connected teleop client"""
|
|
3651
|
+
clientId: Union[str, None] = None
|
|
3652
|
+
clientType: Union[str, None] = None
|
|
3653
|
+
connectedAt: Union[str, None] = None
|
|
3325
3654
|
|
|
3326
|
-
def
|
|
3655
|
+
def validate_clientId(self, value: str) -> Tuple[bool, str]:
|
|
3327
3656
|
if value is None:
|
|
3328
3657
|
return [True, ""]
|
|
3329
3658
|
|
|
3330
|
-
if not isinstance(value,
|
|
3331
|
-
return [False, "
|
|
3659
|
+
if not isinstance(value, str):
|
|
3660
|
+
return [False, "clientId must be of type str for TeleopClient, got " + type(value).__name__]
|
|
3661
|
+
|
|
3662
|
+
return [True, ""]
|
|
3663
|
+
|
|
3664
|
+
def validate_clientType(self, value: str) -> Tuple[bool, str]:
|
|
3665
|
+
if value is None:
|
|
3666
|
+
return [True, ""]
|
|
3667
|
+
|
|
3668
|
+
if not isinstance(value, str):
|
|
3669
|
+
return [False, "clientType must be of type str for TeleopClient, got " + type(value).__name__]
|
|
3670
|
+
|
|
3671
|
+
return [True, ""]
|
|
3672
|
+
|
|
3673
|
+
def validate_connectedAt(self, value: str) -> Tuple[bool, str]:
|
|
3674
|
+
if value is None:
|
|
3675
|
+
return [True, ""]
|
|
3676
|
+
|
|
3677
|
+
if not isinstance(value, str):
|
|
3678
|
+
return [False, "connectedAt must be of type str for TeleopClient, got " + type(value).__name__]
|
|
3332
3679
|
|
|
3333
3680
|
return [True, ""]
|
|
3334
3681
|
|
|
3335
3682
|
def __post_init__(self):
|
|
3336
3683
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
3337
|
-
is_valid, error_str = self.
|
|
3684
|
+
is_valid, error_str = self.validate_clientId(self.clientId)
|
|
3685
|
+
if not is_valid:
|
|
3686
|
+
raise TypeError(error_str)
|
|
3687
|
+
is_valid, error_str = self.validate_clientType(self.clientType)
|
|
3688
|
+
if not is_valid:
|
|
3689
|
+
raise TypeError(error_str)
|
|
3690
|
+
is_valid, error_str = self.validate_connectedAt(self.connectedAt)
|
|
3338
3691
|
if not is_valid:
|
|
3339
3692
|
raise TypeError(error_str)
|
|
3340
3693
|
|
|
3341
|
-
def
|
|
3342
|
-
return
|
|
3343
|
-
|
|
3694
|
+
def parse_teleop_client(data: object):
|
|
3695
|
+
return TeleopClient(
|
|
3696
|
+
clientId=parse_str(data["clientId"]) if "clientId" in data and data.get("clientId") is not None else None,
|
|
3697
|
+
clientType=parse_str(data["clientType"]) if "clientType" in data and data.get("clientType") is not None else None,
|
|
3698
|
+
connectedAt=parse_str(data["connectedAt"]) if "connectedAt" in data and data.get("connectedAt") is not None else None,
|
|
3344
3699
|
)
|
|
3345
3700
|
|
|
3346
|
-
def
|
|
3701
|
+
def serialize_teleop_client(data: TeleopClient) -> object:
|
|
3347
3702
|
return {
|
|
3348
|
-
"
|
|
3703
|
+
"clientId": None if data.clientId is None else serialize_str(data.clientId),
|
|
3704
|
+
"clientType": None if data.clientType is None else serialize_str(data.clientType),
|
|
3705
|
+
"connectedAt": None if data.connectedAt is None else serialize_str(data.connectedAt),
|
|
3349
3706
|
}
|
|
3350
3707
|
|
|
3351
|
-
|
|
3708
|
+
TeleopErrorArray = List[str]
|
|
3352
3709
|
|
|
3353
|
-
def
|
|
3710
|
+
def parse_teleop_error_array(data: object) -> TeleopErrorArray:
|
|
3354
3711
|
return [parse_str(item) for item in data]
|
|
3355
3712
|
|
|
3356
|
-
def
|
|
3713
|
+
def serialize_teleop_error_array(data: TeleopErrorArray) -> List[object]:
|
|
3357
3714
|
return [serialize_str(item) for item in data]
|
|
3358
3715
|
|
|
3359
3716
|
class TeleopStatus(Enum):
|
|
@@ -3668,6 +4025,36 @@ def parse_arm_position_update_request_response_event_stream_subscriptions_list(d
|
|
|
3668
4025
|
def serialize_arm_position_update_request_response_event_stream_subscriptions_list(data: ArmPositionUpdateRequestResponseEventStreamSubscriptionsList) -> List[object]:
|
|
3669
4026
|
return [serialize_arm_position_update_request_response_event_stream_subscription_kind_enum(item) for item in data]
|
|
3670
4027
|
|
|
4028
|
+
@dataclass
|
|
4029
|
+
class SetBoltHeadPositionRequest:
|
|
4030
|
+
"""Request to set static bolt head position"""
|
|
4031
|
+
position: Union[BoltHeadPosition, None] = None
|
|
4032
|
+
|
|
4033
|
+
def validate_position(self, value: BoltHeadPosition) -> Tuple[bool, str]:
|
|
4034
|
+
if value is None:
|
|
4035
|
+
return [False, "position is required for SetBoltHeadPositionRequest"]
|
|
4036
|
+
|
|
4037
|
+
if not isinstance(value, BoltHeadPosition):
|
|
4038
|
+
return [False, "position must be of type BoltHeadPosition for SetBoltHeadPositionRequest, got " + type(value).__name__]
|
|
4039
|
+
|
|
4040
|
+
return [True, ""]
|
|
4041
|
+
|
|
4042
|
+
def __post_init__(self):
|
|
4043
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
4044
|
+
is_valid, error_str = self.validate_position(self.position)
|
|
4045
|
+
if not is_valid:
|
|
4046
|
+
raise TypeError(error_str)
|
|
4047
|
+
|
|
4048
|
+
def parse_set_bolt_head_position_request(data: object):
|
|
4049
|
+
return SetBoltHeadPositionRequest(
|
|
4050
|
+
position=parse_bolt_head_position(data["position"]) if "position" in data and data.get("position") is not None else None,
|
|
4051
|
+
)
|
|
4052
|
+
|
|
4053
|
+
def serialize_set_bolt_head_position_request(data: SetBoltHeadPositionRequest) -> object:
|
|
4054
|
+
return {
|
|
4055
|
+
"position": serialize_bolt_head_position(data.position),
|
|
4056
|
+
}
|
|
4057
|
+
|
|
3671
4058
|
@dataclass
|
|
3672
4059
|
class BrakesState:
|
|
3673
4060
|
"""State of the robot joint brakes. Each joint contains a brake which can be engaged when the robot is at a standstill to prevent the robot from moving.
|
|
@@ -4211,7 +4598,7 @@ class ErrorResponse:
|
|
|
4211
4598
|
if value is None:
|
|
4212
4599
|
return [False, "error is required for ErrorResponse"]
|
|
4213
4600
|
|
|
4214
|
-
if not ((isinstance(value, str) and ErrorEnum in ['authorization_required', 'routine_must_be_running', 'api_control_required', 'robot_brakes_disengage_failed', 'robot_brakes_engage_failed', 'request_failed_validation', 'robot_not_idle', 'brakes_must_be_engaged', 'brakes_must_be_disengaged', 'equipment_no_matching', 'service_initializing', 'camera_disconnected', 'settings_validation_error', 'settings_timeout', 'internal_server_error', 'recovery_error', 'not_found', 'invalid_space_specified', 'invalid_parameters', 'routine_does_not_exist', 'cannot_play_routine', 'routine_must_be_playing', 'cannot_change_ros_state', 'io_safeguard_error']) or isinstance(value, ErrorEnum)):
|
|
4601
|
+
if not ((isinstance(value, str) and ErrorEnum in ['authorization_required', 'routine_must_be_running', 'api_control_required', 'robot_brakes_disengage_failed', 'robot_brakes_engage_failed', 'request_failed_validation', 'robot_not_idle', 'brakes_must_be_engaged', 'brakes_must_be_disengaged', 'equipment_no_matching', 'service_initializing', 'camera_disconnected', 'settings_validation_error', 'settings_timeout', 'internal_server_error', 'recovery_error', 'not_found', 'invalid_space_specified', 'invalid_parameters', 'routine_does_not_exist', 'cannot_play_routine', 'routine_must_be_playing', 'cannot_change_ros_state', 'io_safeguard_error', 'robot_out_of_compliance_bounds']) or isinstance(value, ErrorEnum)):
|
|
4215
4602
|
return [False, "error must be of type ErrorEnum for ErrorResponse, got " + type(value).__name__]
|
|
4216
4603
|
|
|
4217
4604
|
return [True, ""]
|
|
@@ -4548,12 +4935,24 @@ def serialize_force_unit(data: ForceUnit) -> object:
|
|
|
4548
4935
|
"value": None if data.value is None else serialize_f_64(data.value),
|
|
4549
4936
|
}
|
|
4550
4937
|
|
|
4551
|
-
|
|
4552
|
-
class IOStateResponse:
|
|
4553
|
-
"""Response to a query for the current state of I/O."""
|
|
4554
|
-
state: Union[IOStateMap, None] = None
|
|
4938
|
+
SecondaryBotGripperBounds = Dict[str, GripperBounds]
|
|
4555
4939
|
|
|
4556
|
-
|
|
4940
|
+
def parse_secondary_bot_gripper_bounds(data: object) -> SecondaryBotGripperBounds:
|
|
4941
|
+
return {
|
|
4942
|
+
parse_str(key): parse_gripper_bounds(value) for key, value in data.items()
|
|
4943
|
+
}
|
|
4944
|
+
|
|
4945
|
+
def serialize_secondary_bot_gripper_bounds(data: SecondaryBotGripperBounds) -> object:
|
|
4946
|
+
return {
|
|
4947
|
+
serialize_str(key): serialize_gripper_bounds(value) for key, value in data.items()
|
|
4948
|
+
}
|
|
4949
|
+
|
|
4950
|
+
@dataclass
|
|
4951
|
+
class IOStateResponse:
|
|
4952
|
+
"""Response to a query for the current state of I/O."""
|
|
4953
|
+
state: Union[IOStateMap, None] = None
|
|
4954
|
+
|
|
4955
|
+
def validate_state(self, value: IOStateMap) -> Tuple[bool, str]:
|
|
4557
4956
|
if value is None:
|
|
4558
4957
|
return [True, ""]
|
|
4559
4958
|
|
|
@@ -4901,6 +5300,7 @@ class SpeedProfile:
|
|
|
4901
5300
|
max_joint_speeds: Union[MaxJointSpeeds, None] = None
|
|
4902
5301
|
max_joint_accelerations: Union[MaxJointAcclerations, None] = None
|
|
4903
5302
|
max_tooltip_speed: Union[float, None] = None
|
|
5303
|
+
max_joint_torques: Union[MaxJointTorques, None] = None
|
|
4904
5304
|
base_acceleration_scaling: Union[float, None] = None
|
|
4905
5305
|
base_velocity_scaling: Union[float, None] = None
|
|
4906
5306
|
scaling_factor: Union[float, None] = None
|
|
@@ -4932,6 +5332,15 @@ class SpeedProfile:
|
|
|
4932
5332
|
|
|
4933
5333
|
return [True, ""]
|
|
4934
5334
|
|
|
5335
|
+
def validate_max_joint_torques(self, value: MaxJointTorques) -> Tuple[bool, str]:
|
|
5336
|
+
if value is None:
|
|
5337
|
+
return [True, ""]
|
|
5338
|
+
|
|
5339
|
+
if not (isinstance(value, tuple) and len(value) == 6):
|
|
5340
|
+
return [False, "max_joint_torques must be of type MaxJointTorques for SpeedProfile, got " + type(value).__name__]
|
|
5341
|
+
|
|
5342
|
+
return [True, ""]
|
|
5343
|
+
|
|
4935
5344
|
def validate_base_acceleration_scaling(self, value: float) -> Tuple[bool, str]:
|
|
4936
5345
|
if value is None:
|
|
4937
5346
|
return [True, ""]
|
|
@@ -4968,6 +5377,9 @@ class SpeedProfile:
|
|
|
4968
5377
|
if not is_valid:
|
|
4969
5378
|
raise TypeError(error_str)
|
|
4970
5379
|
is_valid, error_str = self.validate_max_tooltip_speed(self.max_tooltip_speed)
|
|
5380
|
+
if not is_valid:
|
|
5381
|
+
raise TypeError(error_str)
|
|
5382
|
+
is_valid, error_str = self.validate_max_joint_torques(self.max_joint_torques)
|
|
4971
5383
|
if not is_valid:
|
|
4972
5384
|
raise TypeError(error_str)
|
|
4973
5385
|
is_valid, error_str = self.validate_base_acceleration_scaling(self.base_acceleration_scaling)
|
|
@@ -4985,6 +5397,7 @@ def parse_speed_profile(data: object):
|
|
|
4985
5397
|
max_joint_speeds=parse_max_joint_speeds(data["max_joint_speeds"]) if "max_joint_speeds" in data and data.get("max_joint_speeds") is not None else None,
|
|
4986
5398
|
max_joint_accelerations=parse_max_joint_acclerations(data["max_joint_accelerations"]) if "max_joint_accelerations" in data and data.get("max_joint_accelerations") is not None else None,
|
|
4987
5399
|
max_tooltip_speed=parse_f_64(data["max_tooltip_speed"]) if "max_tooltip_speed" in data and data.get("max_tooltip_speed") is not None else None,
|
|
5400
|
+
max_joint_torques=parse_max_joint_torques(data["max_joint_torques"]) if "max_joint_torques" in data and data.get("max_joint_torques") is not None else None,
|
|
4988
5401
|
base_acceleration_scaling=parse_f_64(data["base_acceleration_scaling"]) if "base_acceleration_scaling" in data and data.get("base_acceleration_scaling") is not None else None,
|
|
4989
5402
|
base_velocity_scaling=parse_f_64(data["base_velocity_scaling"]) if "base_velocity_scaling" in data and data.get("base_velocity_scaling") is not None else None,
|
|
4990
5403
|
scaling_factor=parse_f_64(data["scaling_factor"]) if "scaling_factor" in data and data.get("scaling_factor") is not None else None,
|
|
@@ -4995,6 +5408,7 @@ def serialize_speed_profile(data: SpeedProfile) -> object:
|
|
|
4995
5408
|
"max_joint_speeds": None if data.max_joint_speeds is None else serialize_max_joint_speeds(data.max_joint_speeds),
|
|
4996
5409
|
"max_joint_accelerations": None if data.max_joint_accelerations is None else serialize_max_joint_acclerations(data.max_joint_accelerations),
|
|
4997
5410
|
"max_tooltip_speed": None if data.max_tooltip_speed is None else serialize_f_64(data.max_tooltip_speed),
|
|
5411
|
+
"max_joint_torques": None if data.max_joint_torques is None else serialize_max_joint_torques(data.max_joint_torques),
|
|
4998
5412
|
"base_acceleration_scaling": None if data.base_acceleration_scaling is None else serialize_f_64(data.base_acceleration_scaling),
|
|
4999
5413
|
"base_velocity_scaling": None if data.base_velocity_scaling is None else serialize_f_64(data.base_velocity_scaling),
|
|
5000
5414
|
"scaling_factor": None if data.scaling_factor is None else serialize_f_64(data.scaling_factor),
|
|
@@ -6036,6 +6450,124 @@ def serialize_robot_control_mode(data: RobotControlMode) -> object:
|
|
|
6036
6450
|
"kind": None if data.kind is None else serialize_robot_control_mode_enum(data.kind),
|
|
6037
6451
|
}
|
|
6038
6452
|
|
|
6453
|
+
SecondaryBotRobotFrame = Dict[str, RobotFrame]
|
|
6454
|
+
|
|
6455
|
+
def parse_secondary_bot_robot_frame(data: object) -> SecondaryBotRobotFrame:
|
|
6456
|
+
return {
|
|
6457
|
+
parse_str(key): parse_robot_frame(value) for key, value in data.items()
|
|
6458
|
+
}
|
|
6459
|
+
|
|
6460
|
+
def serialize_secondary_bot_robot_frame(data: SecondaryBotRobotFrame) -> object:
|
|
6461
|
+
return {
|
|
6462
|
+
serialize_str(key): serialize_robot_frame(value) for key, value in data.items()
|
|
6463
|
+
}
|
|
6464
|
+
|
|
6465
|
+
@dataclass
|
|
6466
|
+
class RobotiqEPickGripperCommandRequest:
|
|
6467
|
+
"""Control the Robotiq EPick vacuum gripper
|
|
6468
|
+
"""
|
|
6469
|
+
control_kind: Union[RobotiqEPickControlKindEnum, None] = None
|
|
6470
|
+
mode: Union[str, None] = None
|
|
6471
|
+
target_force_percent: Union[float, None] = None
|
|
6472
|
+
min_force_percent: Union[float, None] = None
|
|
6473
|
+
timeout_ms: Union[float, None] = None
|
|
6474
|
+
blow_off_pressure_percent: Union[float, None] = None
|
|
6475
|
+
|
|
6476
|
+
def validate_control_kind(self, value: RobotiqEPickControlKindEnum) -> Tuple[bool, str]:
|
|
6477
|
+
if value is None:
|
|
6478
|
+
return [False, "control_kind is required for RobotiqEPickGripperCommandRequest"]
|
|
6479
|
+
|
|
6480
|
+
if not ((isinstance(value, str) and RobotiqEPickControlKindEnum in ['grip', 'release']) or isinstance(value, RobotiqEPickControlKindEnum)):
|
|
6481
|
+
return [False, "control_kind must be of type RobotiqEPickControlKindEnum for RobotiqEPickGripperCommandRequest, got " + type(value).__name__]
|
|
6482
|
+
|
|
6483
|
+
return [True, ""]
|
|
6484
|
+
|
|
6485
|
+
def validate_mode(self, value: str) -> Tuple[bool, str]:
|
|
6486
|
+
if value is None:
|
|
6487
|
+
return [True, ""]
|
|
6488
|
+
|
|
6489
|
+
if not isinstance(value, str):
|
|
6490
|
+
return [False, "mode must be of type str for RobotiqEPickGripperCommandRequest, got " + type(value).__name__]
|
|
6491
|
+
|
|
6492
|
+
return [True, ""]
|
|
6493
|
+
|
|
6494
|
+
def validate_target_force_percent(self, value: float) -> Tuple[bool, str]:
|
|
6495
|
+
if value is None:
|
|
6496
|
+
return [True, ""]
|
|
6497
|
+
|
|
6498
|
+
if not isinstance(value, float):
|
|
6499
|
+
return [False, "target_force_percent must be of type float for RobotiqEPickGripperCommandRequest, got " + type(value).__name__]
|
|
6500
|
+
|
|
6501
|
+
return [True, ""]
|
|
6502
|
+
|
|
6503
|
+
def validate_min_force_percent(self, value: float) -> Tuple[bool, str]:
|
|
6504
|
+
if value is None:
|
|
6505
|
+
return [True, ""]
|
|
6506
|
+
|
|
6507
|
+
if not isinstance(value, float):
|
|
6508
|
+
return [False, "min_force_percent must be of type float for RobotiqEPickGripperCommandRequest, got " + type(value).__name__]
|
|
6509
|
+
|
|
6510
|
+
return [True, ""]
|
|
6511
|
+
|
|
6512
|
+
def validate_timeout_ms(self, value: float) -> Tuple[bool, str]:
|
|
6513
|
+
if value is None:
|
|
6514
|
+
return [True, ""]
|
|
6515
|
+
|
|
6516
|
+
if not isinstance(value, float):
|
|
6517
|
+
return [False, "timeout_ms must be of type float for RobotiqEPickGripperCommandRequest, got " + type(value).__name__]
|
|
6518
|
+
|
|
6519
|
+
return [True, ""]
|
|
6520
|
+
|
|
6521
|
+
def validate_blow_off_pressure_percent(self, value: float) -> Tuple[bool, str]:
|
|
6522
|
+
if value is None:
|
|
6523
|
+
return [True, ""]
|
|
6524
|
+
|
|
6525
|
+
if not isinstance(value, float):
|
|
6526
|
+
return [False, "blow_off_pressure_percent must be of type float for RobotiqEPickGripperCommandRequest, got " + type(value).__name__]
|
|
6527
|
+
|
|
6528
|
+
return [True, ""]
|
|
6529
|
+
|
|
6530
|
+
def __post_init__(self):
|
|
6531
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
6532
|
+
is_valid, error_str = self.validate_control_kind(self.control_kind)
|
|
6533
|
+
if not is_valid:
|
|
6534
|
+
raise TypeError(error_str)
|
|
6535
|
+
is_valid, error_str = self.validate_mode(self.mode)
|
|
6536
|
+
if not is_valid:
|
|
6537
|
+
raise TypeError(error_str)
|
|
6538
|
+
is_valid, error_str = self.validate_target_force_percent(self.target_force_percent)
|
|
6539
|
+
if not is_valid:
|
|
6540
|
+
raise TypeError(error_str)
|
|
6541
|
+
is_valid, error_str = self.validate_min_force_percent(self.min_force_percent)
|
|
6542
|
+
if not is_valid:
|
|
6543
|
+
raise TypeError(error_str)
|
|
6544
|
+
is_valid, error_str = self.validate_timeout_ms(self.timeout_ms)
|
|
6545
|
+
if not is_valid:
|
|
6546
|
+
raise TypeError(error_str)
|
|
6547
|
+
is_valid, error_str = self.validate_blow_off_pressure_percent(self.blow_off_pressure_percent)
|
|
6548
|
+
if not is_valid:
|
|
6549
|
+
raise TypeError(error_str)
|
|
6550
|
+
|
|
6551
|
+
def parse_robotiq_e_pick_gripper_command_request(data: object):
|
|
6552
|
+
return RobotiqEPickGripperCommandRequest(
|
|
6553
|
+
control_kind=parse_robotiq_e_pick_control_kind_enum(data["control_kind"]) if "control_kind" in data and data.get("control_kind") is not None else None,
|
|
6554
|
+
mode=parse_str(data["mode"]) if "mode" in data and data.get("mode") is not None else None,
|
|
6555
|
+
target_force_percent=parse_f_64(data["target_force_percent"]) if "target_force_percent" in data and data.get("target_force_percent") is not None else None,
|
|
6556
|
+
min_force_percent=parse_f_64(data["min_force_percent"]) if "min_force_percent" in data and data.get("min_force_percent") is not None else None,
|
|
6557
|
+
timeout_ms=parse_f_64(data["timeout_ms"]) if "timeout_ms" in data and data.get("timeout_ms") is not None else None,
|
|
6558
|
+
blow_off_pressure_percent=parse_f_64(data["blow_off_pressure_percent"]) if "blow_off_pressure_percent" in data and data.get("blow_off_pressure_percent") is not None else None,
|
|
6559
|
+
)
|
|
6560
|
+
|
|
6561
|
+
def serialize_robotiq_e_pick_gripper_command_request(data: RobotiqEPickGripperCommandRequest) -> object:
|
|
6562
|
+
return {
|
|
6563
|
+
"control_kind": serialize_robotiq_e_pick_control_kind_enum(data.control_kind),
|
|
6564
|
+
"mode": None if data.mode is None else serialize_str(data.mode),
|
|
6565
|
+
"target_force_percent": None if data.target_force_percent is None else serialize_f_64(data.target_force_percent),
|
|
6566
|
+
"min_force_percent": None if data.min_force_percent is None else serialize_f_64(data.min_force_percent),
|
|
6567
|
+
"timeout_ms": None if data.timeout_ms is None else serialize_f_64(data.timeout_ms),
|
|
6568
|
+
"blow_off_pressure_percent": None if data.blow_off_pressure_percent is None else serialize_f_64(data.blow_off_pressure_percent),
|
|
6569
|
+
}
|
|
6570
|
+
|
|
6039
6571
|
@dataclass
|
|
6040
6572
|
class PlayRoutineResponse:
|
|
6041
6573
|
"""Status response informs user of of robot state"""
|
|
@@ -6547,6 +7079,59 @@ def serialize_save_recording_response(data: SaveRecordingResponse) -> object:
|
|
|
6547
7079
|
"errors": None if data.errors is None else serialize_string_array(data.errors),
|
|
6548
7080
|
}
|
|
6549
7081
|
|
|
7082
|
+
@dataclass
|
|
7083
|
+
class StopRecordingRequest:
|
|
7084
|
+
"""Request to stop recording movement and camera data"""
|
|
7085
|
+
delete: Union[bool, None] = None
|
|
7086
|
+
tags: Union[StringArray, None] = None
|
|
7087
|
+
|
|
7088
|
+
def validate_delete(self, value: bool) -> Tuple[bool, str]:
|
|
7089
|
+
if value is None:
|
|
7090
|
+
return [True, ""]
|
|
7091
|
+
|
|
7092
|
+
if not isinstance(value, bool):
|
|
7093
|
+
return [False, "delete must be of type bool for StopRecordingRequest, got " + type(value).__name__]
|
|
7094
|
+
|
|
7095
|
+
return [True, ""]
|
|
7096
|
+
|
|
7097
|
+
def validate_tags(self, value: StringArray) -> Tuple[bool, str]:
|
|
7098
|
+
if value is None:
|
|
7099
|
+
return [True, ""]
|
|
7100
|
+
|
|
7101
|
+
if not (isinstance(value, list) and all(isinstance(x, str) for x in value)):
|
|
7102
|
+
return [False, "tags must be of type StringArray for StopRecordingRequest, got " + type(value).__name__]
|
|
7103
|
+
|
|
7104
|
+
return [True, ""]
|
|
7105
|
+
|
|
7106
|
+
def __post_init__(self):
|
|
7107
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7108
|
+
is_valid, error_str = self.validate_delete(self.delete)
|
|
7109
|
+
if not is_valid:
|
|
7110
|
+
raise TypeError(error_str)
|
|
7111
|
+
is_valid, error_str = self.validate_tags(self.tags)
|
|
7112
|
+
if not is_valid:
|
|
7113
|
+
raise TypeError(error_str)
|
|
7114
|
+
|
|
7115
|
+
def parse_stop_recording_request(data: object):
|
|
7116
|
+
return StopRecordingRequest(
|
|
7117
|
+
delete=parse_bool(data["delete"]) if "delete" in data and data.get("delete") is not None else None,
|
|
7118
|
+
tags=parse_string_array(data["tags"]) if "tags" in data and data.get("tags") is not None else None,
|
|
7119
|
+
)
|
|
7120
|
+
|
|
7121
|
+
def serialize_stop_recording_request(data: StopRecordingRequest) -> object:
|
|
7122
|
+
return {
|
|
7123
|
+
"delete": None if data.delete is None else serialize_bool(data.delete),
|
|
7124
|
+
"tags": None if data.tags is None else serialize_string_array(data.tags),
|
|
7125
|
+
}
|
|
7126
|
+
|
|
7127
|
+
TeleopClientList = List[TeleopClient]
|
|
7128
|
+
|
|
7129
|
+
def parse_teleop_client_list(data: object) -> TeleopClientList:
|
|
7130
|
+
return [parse_teleop_client(item) for item in data]
|
|
7131
|
+
|
|
7132
|
+
def serialize_teleop_client_list(data: TeleopClientList) -> List[object]:
|
|
7133
|
+
return [serialize_teleop_client(item) for item in data]
|
|
7134
|
+
|
|
6550
7135
|
@dataclass
|
|
6551
7136
|
class BotTeleopDetails:
|
|
6552
7137
|
"""Details of the bot"""
|
|
@@ -6557,6 +7142,11 @@ class BotTeleopDetails:
|
|
|
6557
7142
|
isSecondary: Union[bool, None] = None
|
|
6558
7143
|
isEnabled: Union[bool, None] = None
|
|
6559
7144
|
status: Union[TeleopStatus, None] = None
|
|
7145
|
+
errors: Union[TeleopErrorArray, None] = None
|
|
7146
|
+
gripperBounds: Union[GripperBounds, None] = None
|
|
7147
|
+
robotFrame: Union[RobotFrame, None] = None
|
|
7148
|
+
filterType: Union[str, None] = None
|
|
7149
|
+
activeClientId: Union[str, None] = None
|
|
6560
7150
|
|
|
6561
7151
|
def validate_botId(self, value: str) -> Tuple[bool, str]:
|
|
6562
7152
|
if value is None:
|
|
@@ -6621,6 +7211,51 @@ class BotTeleopDetails:
|
|
|
6621
7211
|
|
|
6622
7212
|
return [True, ""]
|
|
6623
7213
|
|
|
7214
|
+
def validate_errors(self, value: TeleopErrorArray) -> Tuple[bool, str]:
|
|
7215
|
+
if value is None:
|
|
7216
|
+
return [True, ""]
|
|
7217
|
+
|
|
7218
|
+
if not (isinstance(value, list) and all(isinstance(x, str) for x in value)):
|
|
7219
|
+
return [False, "errors must be of type TeleopErrorArray for BotTeleopDetails, got " + type(value).__name__]
|
|
7220
|
+
|
|
7221
|
+
return [True, ""]
|
|
7222
|
+
|
|
7223
|
+
def validate_gripperBounds(self, value: GripperBounds) -> Tuple[bool, str]:
|
|
7224
|
+
if value is None:
|
|
7225
|
+
return [True, ""]
|
|
7226
|
+
|
|
7227
|
+
if not isinstance(value, GripperBounds):
|
|
7228
|
+
return [False, "gripperBounds must be of type GripperBounds for BotTeleopDetails, got " + type(value).__name__]
|
|
7229
|
+
|
|
7230
|
+
return [True, ""]
|
|
7231
|
+
|
|
7232
|
+
def validate_robotFrame(self, value: RobotFrame) -> Tuple[bool, str]:
|
|
7233
|
+
if value is None:
|
|
7234
|
+
return [True, ""]
|
|
7235
|
+
|
|
7236
|
+
if not ((isinstance(value, str) and RobotFrame in ['world', 'tooltip']) or isinstance(value, RobotFrame)):
|
|
7237
|
+
return [False, "robotFrame must be of type RobotFrame for BotTeleopDetails, got " + type(value).__name__]
|
|
7238
|
+
|
|
7239
|
+
return [True, ""]
|
|
7240
|
+
|
|
7241
|
+
def validate_filterType(self, value: str) -> Tuple[bool, str]:
|
|
7242
|
+
if value is None:
|
|
7243
|
+
return [True, ""]
|
|
7244
|
+
|
|
7245
|
+
if not isinstance(value, str):
|
|
7246
|
+
return [False, "filterType must be of type str for BotTeleopDetails, got " + type(value).__name__]
|
|
7247
|
+
|
|
7248
|
+
return [True, ""]
|
|
7249
|
+
|
|
7250
|
+
def validate_activeClientId(self, value: str) -> Tuple[bool, str]:
|
|
7251
|
+
if value is None:
|
|
7252
|
+
return [True, ""]
|
|
7253
|
+
|
|
7254
|
+
if not isinstance(value, str):
|
|
7255
|
+
return [False, "activeClientId must be of type str for BotTeleopDetails, got " + type(value).__name__]
|
|
7256
|
+
|
|
7257
|
+
return [True, ""]
|
|
7258
|
+
|
|
6624
7259
|
def __post_init__(self):
|
|
6625
7260
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
6626
7261
|
is_valid, error_str = self.validate_botId(self.botId)
|
|
@@ -6644,6 +7279,21 @@ class BotTeleopDetails:
|
|
|
6644
7279
|
is_valid, error_str = self.validate_status(self.status)
|
|
6645
7280
|
if not is_valid:
|
|
6646
7281
|
raise TypeError(error_str)
|
|
7282
|
+
is_valid, error_str = self.validate_errors(self.errors)
|
|
7283
|
+
if not is_valid:
|
|
7284
|
+
raise TypeError(error_str)
|
|
7285
|
+
is_valid, error_str = self.validate_gripperBounds(self.gripperBounds)
|
|
7286
|
+
if not is_valid:
|
|
7287
|
+
raise TypeError(error_str)
|
|
7288
|
+
is_valid, error_str = self.validate_robotFrame(self.robotFrame)
|
|
7289
|
+
if not is_valid:
|
|
7290
|
+
raise TypeError(error_str)
|
|
7291
|
+
is_valid, error_str = self.validate_filterType(self.filterType)
|
|
7292
|
+
if not is_valid:
|
|
7293
|
+
raise TypeError(error_str)
|
|
7294
|
+
is_valid, error_str = self.validate_activeClientId(self.activeClientId)
|
|
7295
|
+
if not is_valid:
|
|
7296
|
+
raise TypeError(error_str)
|
|
6647
7297
|
|
|
6648
7298
|
def parse_bot_teleop_details(data: object):
|
|
6649
7299
|
return BotTeleopDetails(
|
|
@@ -6654,6 +7304,11 @@ def parse_bot_teleop_details(data: object):
|
|
|
6654
7304
|
isSecondary=parse_bool(data["isSecondary"]) if "isSecondary" in data and data.get("isSecondary") is not None else None,
|
|
6655
7305
|
isEnabled=parse_bool(data["isEnabled"]) if "isEnabled" in data and data.get("isEnabled") is not None else None,
|
|
6656
7306
|
status=parse_teleop_status(data["status"]) if "status" in data and data.get("status") is not None else None,
|
|
7307
|
+
errors=parse_teleop_error_array(data["errors"]) if "errors" in data and data.get("errors") is not None else None,
|
|
7308
|
+
gripperBounds=parse_gripper_bounds(data["gripperBounds"]) if "gripperBounds" in data and data.get("gripperBounds") is not None else None,
|
|
7309
|
+
robotFrame=parse_robot_frame(data["robotFrame"]) if "robotFrame" in data and data.get("robotFrame") is not None else None,
|
|
7310
|
+
filterType=parse_str(data["filterType"]) if "filterType" in data and data.get("filterType") is not None else None,
|
|
7311
|
+
activeClientId=parse_str(data["activeClientId"]) if "activeClientId" in data and data.get("activeClientId") is not None else None,
|
|
6657
7312
|
)
|
|
6658
7313
|
|
|
6659
7314
|
def serialize_bot_teleop_details(data: BotTeleopDetails) -> object:
|
|
@@ -6665,6 +7320,11 @@ def serialize_bot_teleop_details(data: BotTeleopDetails) -> object:
|
|
|
6665
7320
|
"isSecondary": None if data.isSecondary is None else serialize_bool(data.isSecondary),
|
|
6666
7321
|
"isEnabled": None if data.isEnabled is None else serialize_bool(data.isEnabled),
|
|
6667
7322
|
"status": None if data.status is None else serialize_teleop_status(data.status),
|
|
7323
|
+
"errors": None if data.errors is None else serialize_teleop_error_array(data.errors),
|
|
7324
|
+
"gripperBounds": None if data.gripperBounds is None else serialize_gripper_bounds(data.gripperBounds),
|
|
7325
|
+
"robotFrame": None if data.robotFrame is None else serialize_robot_frame(data.robotFrame),
|
|
7326
|
+
"filterType": None if data.filterType is None else serialize_str(data.filterType),
|
|
7327
|
+
"activeClientId": None if data.activeClientId is None else serialize_str(data.activeClientId),
|
|
6668
7328
|
}
|
|
6669
7329
|
|
|
6670
7330
|
@dataclass
|
|
@@ -6803,6 +7463,7 @@ class CalibrationData:
|
|
|
6803
7463
|
timestamp: Union[str, None] = None
|
|
6804
7464
|
armSerial: Union[str, None] = None
|
|
6805
7465
|
urdfParameters: Union[URDFParameters, None] = None
|
|
7466
|
+
elastokinConfig: Union[ElastokinConfig, None] = None
|
|
6806
7467
|
|
|
6807
7468
|
def validate_timestamp(self, value: str) -> Tuple[bool, str]:
|
|
6808
7469
|
if value is None:
|
|
@@ -6831,6 +7492,15 @@ class CalibrationData:
|
|
|
6831
7492
|
|
|
6832
7493
|
return [True, ""]
|
|
6833
7494
|
|
|
7495
|
+
def validate_elastokinConfig(self, value: ElastokinConfig) -> Tuple[bool, str]:
|
|
7496
|
+
if value is None:
|
|
7497
|
+
return [True, ""]
|
|
7498
|
+
|
|
7499
|
+
if not isinstance(value, ElastokinConfig):
|
|
7500
|
+
return [False, "elastokinConfig must be of type ElastokinConfig for CalibrationData, got " + type(value).__name__]
|
|
7501
|
+
|
|
7502
|
+
return [True, ""]
|
|
7503
|
+
|
|
6834
7504
|
def __post_init__(self):
|
|
6835
7505
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
6836
7506
|
is_valid, error_str = self.validate_timestamp(self.timestamp)
|
|
@@ -6842,12 +7512,16 @@ class CalibrationData:
|
|
|
6842
7512
|
is_valid, error_str = self.validate_urdfParameters(self.urdfParameters)
|
|
6843
7513
|
if not is_valid:
|
|
6844
7514
|
raise TypeError(error_str)
|
|
7515
|
+
is_valid, error_str = self.validate_elastokinConfig(self.elastokinConfig)
|
|
7516
|
+
if not is_valid:
|
|
7517
|
+
raise TypeError(error_str)
|
|
6845
7518
|
|
|
6846
7519
|
def parse_calibration_data(data: object):
|
|
6847
7520
|
return CalibrationData(
|
|
6848
7521
|
timestamp=parse_str(data["timestamp"]) if "timestamp" in data and data.get("timestamp") is not None else None,
|
|
6849
7522
|
armSerial=parse_str(data["armSerial"]) if "armSerial" in data and data.get("armSerial") is not None else None,
|
|
6850
7523
|
urdfParameters=parse_urdf_parameters(data["urdfParameters"]) if "urdfParameters" in data and data.get("urdfParameters") is not None else None,
|
|
7524
|
+
elastokinConfig=parse_elastokin_config(data["elastokinConfig"]) if "elastokinConfig" in data and data.get("elastokinConfig") is not None else None,
|
|
6851
7525
|
)
|
|
6852
7526
|
|
|
6853
7527
|
def serialize_calibration_data(data: CalibrationData) -> object:
|
|
@@ -6855,6 +7529,52 @@ def serialize_calibration_data(data: CalibrationData) -> object:
|
|
|
6855
7529
|
"timestamp": serialize_str(data.timestamp),
|
|
6856
7530
|
"armSerial": serialize_str(data.armSerial),
|
|
6857
7531
|
"urdfParameters": serialize_urdf_parameters(data.urdfParameters),
|
|
7532
|
+
"elastokinConfig": None if data.elastokinConfig is None else serialize_elastokin_config(data.elastokinConfig),
|
|
7533
|
+
}
|
|
7534
|
+
|
|
7535
|
+
@dataclass
|
|
7536
|
+
class SetGripperBoundsRequest:
|
|
7537
|
+
"""Request to set gripper bounds for primary and secondary bots"""
|
|
7538
|
+
primary: Union[GripperBounds, None] = None
|
|
7539
|
+
secondary: Union[SecondaryBotGripperBounds, None] = None
|
|
7540
|
+
|
|
7541
|
+
def validate_primary(self, value: GripperBounds) -> Tuple[bool, str]:
|
|
7542
|
+
if value is None:
|
|
7543
|
+
return [False, "primary is required for SetGripperBoundsRequest"]
|
|
7544
|
+
|
|
7545
|
+
if not isinstance(value, GripperBounds):
|
|
7546
|
+
return [False, "primary must be of type GripperBounds for SetGripperBoundsRequest, got " + type(value).__name__]
|
|
7547
|
+
|
|
7548
|
+
return [True, ""]
|
|
7549
|
+
|
|
7550
|
+
def validate_secondary(self, value: SecondaryBotGripperBounds) -> Tuple[bool, str]:
|
|
7551
|
+
if value is None:
|
|
7552
|
+
return [True, ""]
|
|
7553
|
+
|
|
7554
|
+
if not (isinstance(value, dict) and all((isinstance(k, str) and isinstance(val, GripperBounds)) for k, val in value.items())):
|
|
7555
|
+
return [False, "secondary must be of type SecondaryBotGripperBounds for SetGripperBoundsRequest, got " + type(value).__name__]
|
|
7556
|
+
|
|
7557
|
+
return [True, ""]
|
|
7558
|
+
|
|
7559
|
+
def __post_init__(self):
|
|
7560
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7561
|
+
is_valid, error_str = self.validate_primary(self.primary)
|
|
7562
|
+
if not is_valid:
|
|
7563
|
+
raise TypeError(error_str)
|
|
7564
|
+
is_valid, error_str = self.validate_secondary(self.secondary)
|
|
7565
|
+
if not is_valid:
|
|
7566
|
+
raise TypeError(error_str)
|
|
7567
|
+
|
|
7568
|
+
def parse_set_gripper_bounds_request(data: object):
|
|
7569
|
+
return SetGripperBoundsRequest(
|
|
7570
|
+
primary=parse_gripper_bounds(data["primary"]) if "primary" in data and data.get("primary") is not None else None,
|
|
7571
|
+
secondary=parse_secondary_bot_gripper_bounds(data["secondary"]) if "secondary" in data and data.get("secondary") is not None else None,
|
|
7572
|
+
)
|
|
7573
|
+
|
|
7574
|
+
def serialize_set_gripper_bounds_request(data: SetGripperBoundsRequest) -> object:
|
|
7575
|
+
return {
|
|
7576
|
+
"primary": serialize_gripper_bounds(data.primary),
|
|
7577
|
+
"secondary": None if data.secondary is None else serialize_secondary_bot_gripper_bounds(data.secondary),
|
|
6858
7578
|
}
|
|
6859
7579
|
|
|
6860
7580
|
ArmJointRotationsList = List[ArmJointRotations]
|
|
@@ -7199,229 +7919,230 @@ def serialize_on_robot_3_fg_15_gripper_command_request(data: OnRobot3FG15Gripper
|
|
|
7199
7919
|
}
|
|
7200
7920
|
|
|
7201
7921
|
@dataclass
|
|
7202
|
-
class
|
|
7203
|
-
"""Control the
|
|
7922
|
+
class Robotiq2FGripperCommandRequest:
|
|
7923
|
+
"""Control the Robotiq 2F parallel jaw gripper (2F-85 / 2F-140)
|
|
7204
7924
|
"""
|
|
7925
|
+
control_kind: Union[Robotiq2FControlKindEnum, None] = None
|
|
7205
7926
|
target_grip_width: Union[LinearUnit, None] = None
|
|
7206
|
-
|
|
7927
|
+
target_speed: Union[float, None] = None
|
|
7928
|
+
target_force: Union[ForceUnit, None] = None
|
|
7929
|
+
|
|
7930
|
+
def validate_control_kind(self, value: Robotiq2FControlKindEnum) -> Tuple[bool, str]:
|
|
7931
|
+
if value is None:
|
|
7932
|
+
return [False, "control_kind is required for Robotiq2FGripperCommandRequest"]
|
|
7933
|
+
|
|
7934
|
+
if not ((isinstance(value, str) and Robotiq2FControlKindEnum in ['move']) or isinstance(value, Robotiq2FControlKindEnum)):
|
|
7935
|
+
return [False, "control_kind must be of type Robotiq2FControlKindEnum for Robotiq2FGripperCommandRequest, got " + type(value).__name__]
|
|
7936
|
+
|
|
7937
|
+
return [True, ""]
|
|
7207
7938
|
|
|
7208
7939
|
def validate_target_grip_width(self, value: LinearUnit) -> Tuple[bool, str]:
|
|
7209
7940
|
if value is None:
|
|
7210
|
-
return [
|
|
7941
|
+
return [False, "target_grip_width is required for Robotiq2FGripperCommandRequest"]
|
|
7211
7942
|
|
|
7212
7943
|
if not isinstance(value, LinearUnit):
|
|
7213
|
-
return [False, "target_grip_width must be of type LinearUnit for
|
|
7944
|
+
return [False, "target_grip_width must be of type LinearUnit for Robotiq2FGripperCommandRequest, got " + type(value).__name__]
|
|
7214
7945
|
|
|
7215
7946
|
return [True, ""]
|
|
7216
7947
|
|
|
7217
|
-
def
|
|
7948
|
+
def validate_target_speed(self, value: float) -> Tuple[bool, str]:
|
|
7218
7949
|
if value is None:
|
|
7219
|
-
return [False, "
|
|
7950
|
+
return [False, "target_speed is required for Robotiq2FGripperCommandRequest"]
|
|
7220
7951
|
|
|
7221
|
-
if not
|
|
7222
|
-
return [False, "
|
|
7952
|
+
if not isinstance(value, float):
|
|
7953
|
+
return [False, "target_speed must be of type float for Robotiq2FGripperCommandRequest, got " + type(value).__name__]
|
|
7954
|
+
|
|
7955
|
+
return [True, ""]
|
|
7956
|
+
|
|
7957
|
+
def validate_target_force(self, value: ForceUnit) -> Tuple[bool, str]:
|
|
7958
|
+
if value is None:
|
|
7959
|
+
return [False, "target_force is required for Robotiq2FGripperCommandRequest"]
|
|
7960
|
+
|
|
7961
|
+
if not isinstance(value, ForceUnit):
|
|
7962
|
+
return [False, "target_force must be of type ForceUnit for Robotiq2FGripperCommandRequest, got " + type(value).__name__]
|
|
7223
7963
|
|
|
7224
7964
|
return [True, ""]
|
|
7225
7965
|
|
|
7226
7966
|
def __post_init__(self):
|
|
7227
7967
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7968
|
+
is_valid, error_str = self.validate_control_kind(self.control_kind)
|
|
7969
|
+
if not is_valid:
|
|
7970
|
+
raise TypeError(error_str)
|
|
7228
7971
|
is_valid, error_str = self.validate_target_grip_width(self.target_grip_width)
|
|
7229
7972
|
if not is_valid:
|
|
7230
7973
|
raise TypeError(error_str)
|
|
7231
|
-
is_valid, error_str = self.
|
|
7974
|
+
is_valid, error_str = self.validate_target_speed(self.target_speed)
|
|
7975
|
+
if not is_valid:
|
|
7976
|
+
raise TypeError(error_str)
|
|
7977
|
+
is_valid, error_str = self.validate_target_force(self.target_force)
|
|
7232
7978
|
if not is_valid:
|
|
7233
7979
|
raise TypeError(error_str)
|
|
7234
7980
|
|
|
7235
|
-
def
|
|
7236
|
-
return
|
|
7981
|
+
def parse_robotiq_2_f_gripper_command_request(data: object):
|
|
7982
|
+
return Robotiq2FGripperCommandRequest(
|
|
7983
|
+
control_kind=parse_robotiq_2_f_control_kind_enum(data["control_kind"]) if "control_kind" in data and data.get("control_kind") is not None else None,
|
|
7237
7984
|
target_grip_width=parse_linear_unit(data["target_grip_width"]) if "target_grip_width" in data and data.get("target_grip_width") is not None else None,
|
|
7238
|
-
|
|
7985
|
+
target_speed=parse_f_64(data["target_speed"]) if "target_speed" in data and data.get("target_speed") is not None else None,
|
|
7986
|
+
target_force=parse_force_unit(data["target_force"]) if "target_force" in data and data.get("target_force") is not None else None,
|
|
7239
7987
|
)
|
|
7240
7988
|
|
|
7241
|
-
def
|
|
7989
|
+
def serialize_robotiq_2_f_gripper_command_request(data: Robotiq2FGripperCommandRequest) -> object:
|
|
7242
7990
|
return {
|
|
7243
|
-
"
|
|
7244
|
-
"
|
|
7991
|
+
"control_kind": serialize_robotiq_2_f_control_kind_enum(data.control_kind),
|
|
7992
|
+
"target_grip_width": serialize_linear_unit(data.target_grip_width),
|
|
7993
|
+
"target_speed": serialize_f_64(data.target_speed),
|
|
7994
|
+
"target_force": serialize_force_unit(data.target_force),
|
|
7245
7995
|
}
|
|
7246
7996
|
|
|
7247
7997
|
@dataclass
|
|
7248
|
-
class
|
|
7249
|
-
"""
|
|
7250
|
-
|
|
7251
|
-
|
|
7998
|
+
class Robotiq2FGripperConfiguration:
|
|
7999
|
+
"""Configuration for Robotiq 2F grippers (2F-85 / 2F-140)"""
|
|
8000
|
+
model_variant: Union[str, None] = None
|
|
8001
|
+
min_grip_width: Union[LinearUnit, None] = None
|
|
8002
|
+
max_grip_width: Union[LinearUnit, None] = None
|
|
7252
8003
|
|
|
7253
|
-
def
|
|
8004
|
+
def validate_model_variant(self, value: str) -> Tuple[bool, str]:
|
|
7254
8005
|
if value is None:
|
|
7255
8006
|
return [True, ""]
|
|
7256
8007
|
|
|
7257
|
-
if not isinstance(value,
|
|
7258
|
-
return [False, "
|
|
8008
|
+
if not isinstance(value, str):
|
|
8009
|
+
return [False, "model_variant must be of type str for Robotiq2FGripperConfiguration, got " + type(value).__name__]
|
|
7259
8010
|
|
|
7260
8011
|
return [True, ""]
|
|
7261
8012
|
|
|
7262
|
-
def
|
|
8013
|
+
def validate_min_grip_width(self, value: LinearUnit) -> Tuple[bool, str]:
|
|
7263
8014
|
if value is None:
|
|
7264
8015
|
return [True, ""]
|
|
7265
8016
|
|
|
7266
|
-
if not isinstance(value,
|
|
7267
|
-
return [False, "
|
|
8017
|
+
if not isinstance(value, LinearUnit):
|
|
8018
|
+
return [False, "min_grip_width must be of type LinearUnit for Robotiq2FGripperConfiguration, got " + type(value).__name__]
|
|
8019
|
+
|
|
8020
|
+
return [True, ""]
|
|
8021
|
+
|
|
8022
|
+
def validate_max_grip_width(self, value: LinearUnit) -> Tuple[bool, str]:
|
|
8023
|
+
if value is None:
|
|
8024
|
+
return [True, ""]
|
|
8025
|
+
|
|
8026
|
+
if not isinstance(value, LinearUnit):
|
|
8027
|
+
return [False, "max_grip_width must be of type LinearUnit for Robotiq2FGripperConfiguration, got " + type(value).__name__]
|
|
7268
8028
|
|
|
7269
8029
|
return [True, ""]
|
|
7270
8030
|
|
|
7271
8031
|
def __post_init__(self):
|
|
7272
8032
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7273
|
-
is_valid, error_str = self.
|
|
8033
|
+
is_valid, error_str = self.validate_model_variant(self.model_variant)
|
|
7274
8034
|
if not is_valid:
|
|
7275
8035
|
raise TypeError(error_str)
|
|
7276
|
-
is_valid, error_str = self.
|
|
8036
|
+
is_valid, error_str = self.validate_min_grip_width(self.min_grip_width)
|
|
8037
|
+
if not is_valid:
|
|
8038
|
+
raise TypeError(error_str)
|
|
8039
|
+
is_valid, error_str = self.validate_max_grip_width(self.max_grip_width)
|
|
7277
8040
|
if not is_valid:
|
|
7278
8041
|
raise TypeError(error_str)
|
|
7279
8042
|
|
|
7280
|
-
def
|
|
7281
|
-
return
|
|
7282
|
-
|
|
7283
|
-
|
|
8043
|
+
def parse_robotiq_2_f_gripper_configuration(data: object):
|
|
8044
|
+
return Robotiq2FGripperConfiguration(
|
|
8045
|
+
model_variant=parse_str(data["model_variant"]) if "model_variant" in data and data.get("model_variant") is not None else None,
|
|
8046
|
+
min_grip_width=parse_linear_unit(data["min_grip_width"]) if "min_grip_width" in data and data.get("min_grip_width") is not None else None,
|
|
8047
|
+
max_grip_width=parse_linear_unit(data["max_grip_width"]) if "max_grip_width" in data and data.get("max_grip_width") is not None else None,
|
|
7284
8048
|
)
|
|
7285
8049
|
|
|
7286
|
-
def
|
|
8050
|
+
def serialize_robotiq_2_f_gripper_configuration(data: Robotiq2FGripperConfiguration) -> object:
|
|
7287
8051
|
return {
|
|
7288
|
-
"
|
|
7289
|
-
"
|
|
8052
|
+
"model_variant": None if data.model_variant is None else serialize_str(data.model_variant),
|
|
8053
|
+
"min_grip_width": None if data.min_grip_width is None else serialize_linear_unit(data.min_grip_width),
|
|
8054
|
+
"max_grip_width": None if data.max_grip_width is None else serialize_linear_unit(data.max_grip_width),
|
|
7290
8055
|
}
|
|
7291
8056
|
|
|
7292
8057
|
@dataclass
|
|
7293
|
-
class
|
|
7294
|
-
"""
|
|
7295
|
-
|
|
7296
|
-
|
|
7297
|
-
|
|
7298
|
-
onrobot_3fg15: Union[OnRobot3FG15GripperConfiguration, None] = None
|
|
7299
|
-
onrobot_screwdriver: Union[OnRobotScrewdriverConfiguration, None] = None
|
|
7300
|
-
dh_ag: Union[DHAGGripperConfiguration, None] = None
|
|
7301
|
-
dh_pgc: Union[DHPGCGripperConfiguration, None] = None
|
|
7302
|
-
dh_cgi: Union[DHCGIGripperConfiguration, None] = None
|
|
7303
|
-
|
|
7304
|
-
def validate_kind(self, value: GripperKindEnum) -> Tuple[bool, str]:
|
|
7305
|
-
if value is None:
|
|
7306
|
-
return [False, "kind is required for GripperConfiguration"]
|
|
7307
|
-
|
|
7308
|
-
if not ((isinstance(value, str) and GripperKindEnum in ['onrobot_2fg7', 'onrobot_2fg14', 'onrobot_3fg15', 'onrobot_screwdriver', 'dh_ag', 'dh_pgc', 'dh_cgi', 'schunk_egx', 'none_connected']) or isinstance(value, GripperKindEnum)):
|
|
7309
|
-
return [False, "kind must be of type GripperKindEnum for GripperConfiguration, got " + type(value).__name__]
|
|
7310
|
-
|
|
7311
|
-
return [True, ""]
|
|
7312
|
-
|
|
7313
|
-
def validate_onrobot_2fg7(self, value: OnRobot2FG7GripperConfiguration) -> Tuple[bool, str]:
|
|
7314
|
-
if value is None:
|
|
7315
|
-
return [True, ""]
|
|
7316
|
-
|
|
7317
|
-
if not isinstance(value, OnRobot2FG7GripperConfiguration):
|
|
7318
|
-
return [False, "onrobot_2fg7 must be of type OnRobot2FG7GripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
7319
|
-
|
|
7320
|
-
return [True, ""]
|
|
8058
|
+
class SchunkEGxGripperCommandRequest:
|
|
8059
|
+
"""Control the Schunk EGU / EGK gripper (end effector) of the robot
|
|
8060
|
+
"""
|
|
8061
|
+
target_grip_width: Union[LinearUnit, None] = None
|
|
8062
|
+
control_kind: Union[SchunkEGxControlKindEnum, None] = None
|
|
7321
8063
|
|
|
7322
|
-
def
|
|
8064
|
+
def validate_target_grip_width(self, value: LinearUnit) -> Tuple[bool, str]:
|
|
7323
8065
|
if value is None:
|
|
7324
8066
|
return [True, ""]
|
|
7325
8067
|
|
|
7326
|
-
if not isinstance(value,
|
|
7327
|
-
return [False, "
|
|
8068
|
+
if not isinstance(value, LinearUnit):
|
|
8069
|
+
return [False, "target_grip_width must be of type LinearUnit for SchunkEGxGripperCommandRequest, got " + type(value).__name__]
|
|
7328
8070
|
|
|
7329
8071
|
return [True, ""]
|
|
7330
8072
|
|
|
7331
|
-
def
|
|
8073
|
+
def validate_control_kind(self, value: SchunkEGxControlKindEnum) -> Tuple[bool, str]:
|
|
7332
8074
|
if value is None:
|
|
7333
|
-
return [
|
|
8075
|
+
return [False, "control_kind is required for SchunkEGxGripperCommandRequest"]
|
|
7334
8076
|
|
|
7335
|
-
if not isinstance(value,
|
|
7336
|
-
return [False, "
|
|
8077
|
+
if not ((isinstance(value, str) and SchunkEGxControlKindEnum in ['move']) or isinstance(value, SchunkEGxControlKindEnum)):
|
|
8078
|
+
return [False, "control_kind must be of type SchunkEGxControlKindEnum for SchunkEGxGripperCommandRequest, got " + type(value).__name__]
|
|
7337
8079
|
|
|
7338
8080
|
return [True, ""]
|
|
7339
8081
|
|
|
7340
|
-
def
|
|
7341
|
-
if
|
|
7342
|
-
|
|
7343
|
-
|
|
7344
|
-
|
|
7345
|
-
|
|
7346
|
-
|
|
7347
|
-
|
|
8082
|
+
def __post_init__(self):
|
|
8083
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
8084
|
+
is_valid, error_str = self.validate_target_grip_width(self.target_grip_width)
|
|
8085
|
+
if not is_valid:
|
|
8086
|
+
raise TypeError(error_str)
|
|
8087
|
+
is_valid, error_str = self.validate_control_kind(self.control_kind)
|
|
8088
|
+
if not is_valid:
|
|
8089
|
+
raise TypeError(error_str)
|
|
7348
8090
|
|
|
7349
|
-
|
|
7350
|
-
|
|
7351
|
-
|
|
8091
|
+
def parse_schunk_e_gx_gripper_command_request(data: object):
|
|
8092
|
+
return SchunkEGxGripperCommandRequest(
|
|
8093
|
+
target_grip_width=parse_linear_unit(data["target_grip_width"]) if "target_grip_width" in data and data.get("target_grip_width") is not None else None,
|
|
8094
|
+
control_kind=parse_schunk_e_gx_control_kind_enum(data["control_kind"]) if "control_kind" in data and data.get("control_kind") is not None else None,
|
|
8095
|
+
)
|
|
7352
8096
|
|
|
7353
|
-
|
|
7354
|
-
|
|
8097
|
+
def serialize_schunk_e_gx_gripper_command_request(data: SchunkEGxGripperCommandRequest) -> object:
|
|
8098
|
+
return {
|
|
8099
|
+
"target_grip_width": None if data.target_grip_width is None else serialize_linear_unit(data.target_grip_width),
|
|
8100
|
+
"control_kind": serialize_schunk_e_gx_control_kind_enum(data.control_kind),
|
|
8101
|
+
}
|
|
7355
8102
|
|
|
7356
|
-
|
|
8103
|
+
@dataclass
|
|
8104
|
+
class OffsetConfig:
|
|
8105
|
+
"""Config of the offset"""
|
|
8106
|
+
position: Union[Position, None] = None
|
|
8107
|
+
orientation: Union[Quaternion, None] = None
|
|
7357
8108
|
|
|
7358
|
-
def
|
|
8109
|
+
def validate_position(self, value: Position) -> Tuple[bool, str]:
|
|
7359
8110
|
if value is None:
|
|
7360
8111
|
return [True, ""]
|
|
7361
8112
|
|
|
7362
|
-
if not isinstance(value,
|
|
7363
|
-
return [False, "
|
|
8113
|
+
if not isinstance(value, Position):
|
|
8114
|
+
return [False, "position must be of type Position for OffsetConfig, got " + type(value).__name__]
|
|
7364
8115
|
|
|
7365
8116
|
return [True, ""]
|
|
7366
8117
|
|
|
7367
|
-
def
|
|
8118
|
+
def validate_orientation(self, value: Quaternion) -> Tuple[bool, str]:
|
|
7368
8119
|
if value is None:
|
|
7369
8120
|
return [True, ""]
|
|
7370
8121
|
|
|
7371
|
-
if not isinstance(value,
|
|
7372
|
-
return [False, "
|
|
8122
|
+
if not isinstance(value, Quaternion):
|
|
8123
|
+
return [False, "orientation must be of type Quaternion for OffsetConfig, got " + type(value).__name__]
|
|
7373
8124
|
|
|
7374
8125
|
return [True, ""]
|
|
7375
8126
|
|
|
7376
8127
|
def __post_init__(self):
|
|
7377
8128
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7378
|
-
is_valid, error_str = self.
|
|
7379
|
-
if not is_valid:
|
|
7380
|
-
raise TypeError(error_str)
|
|
7381
|
-
is_valid, error_str = self.validate_onrobot_2fg7(self.onrobot_2fg7)
|
|
7382
|
-
if not is_valid:
|
|
7383
|
-
raise TypeError(error_str)
|
|
7384
|
-
is_valid, error_str = self.validate_onrobot_2fg14(self.onrobot_2fg14)
|
|
7385
|
-
if not is_valid:
|
|
7386
|
-
raise TypeError(error_str)
|
|
7387
|
-
is_valid, error_str = self.validate_onrobot_3fg15(self.onrobot_3fg15)
|
|
7388
|
-
if not is_valid:
|
|
7389
|
-
raise TypeError(error_str)
|
|
7390
|
-
is_valid, error_str = self.validate_onrobot_screwdriver(self.onrobot_screwdriver)
|
|
7391
|
-
if not is_valid:
|
|
7392
|
-
raise TypeError(error_str)
|
|
7393
|
-
is_valid, error_str = self.validate_dh_ag(self.dh_ag)
|
|
7394
|
-
if not is_valid:
|
|
7395
|
-
raise TypeError(error_str)
|
|
7396
|
-
is_valid, error_str = self.validate_dh_pgc(self.dh_pgc)
|
|
8129
|
+
is_valid, error_str = self.validate_position(self.position)
|
|
7397
8130
|
if not is_valid:
|
|
7398
8131
|
raise TypeError(error_str)
|
|
7399
|
-
is_valid, error_str = self.
|
|
8132
|
+
is_valid, error_str = self.validate_orientation(self.orientation)
|
|
7400
8133
|
if not is_valid:
|
|
7401
8134
|
raise TypeError(error_str)
|
|
7402
8135
|
|
|
7403
|
-
def
|
|
7404
|
-
return
|
|
7405
|
-
|
|
7406
|
-
|
|
7407
|
-
onrobot_2fg14=parse_on_robot_2_fg_14_gripper_configuration(data["onrobot_2fg14"]) if "onrobot_2fg14" in data and data.get("onrobot_2fg14") is not None else None,
|
|
7408
|
-
onrobot_3fg15=parse_on_robot_3_fg_15_gripper_configuration(data["onrobot_3fg15"]) if "onrobot_3fg15" in data and data.get("onrobot_3fg15") is not None else None,
|
|
7409
|
-
onrobot_screwdriver=parse_on_robot_screwdriver_configuration(data["onrobot_screwdriver"]) if "onrobot_screwdriver" in data and data.get("onrobot_screwdriver") is not None else None,
|
|
7410
|
-
dh_ag=parse_dhag_gripper_configuration(data["dh_ag"]) if "dh_ag" in data and data.get("dh_ag") is not None else None,
|
|
7411
|
-
dh_pgc=parse_dhpgc_gripper_configuration(data["dh_pgc"]) if "dh_pgc" in data and data.get("dh_pgc") is not None else None,
|
|
7412
|
-
dh_cgi=parse_dhcgi_gripper_configuration(data["dh_cgi"]) if "dh_cgi" in data and data.get("dh_cgi") is not None else None,
|
|
8136
|
+
def parse_offset_config(data: object):
|
|
8137
|
+
return OffsetConfig(
|
|
8138
|
+
position=parse_position(data["position"]) if "position" in data and data.get("position") is not None else None,
|
|
8139
|
+
orientation=parse_quaternion(data["orientation"]) if "orientation" in data and data.get("orientation") is not None else None,
|
|
7413
8140
|
)
|
|
7414
8141
|
|
|
7415
|
-
def
|
|
8142
|
+
def serialize_offset_config(data: OffsetConfig) -> object:
|
|
7416
8143
|
return {
|
|
7417
|
-
"
|
|
7418
|
-
"
|
|
7419
|
-
"onrobot_2fg14": None if data.onrobot_2fg14 is None else serialize_on_robot_2_fg_14_gripper_configuration(data.onrobot_2fg14),
|
|
7420
|
-
"onrobot_3fg15": None if data.onrobot_3fg15 is None else serialize_on_robot_3_fg_15_gripper_configuration(data.onrobot_3fg15),
|
|
7421
|
-
"onrobot_screwdriver": None if data.onrobot_screwdriver is None else serialize_on_robot_screwdriver_configuration(data.onrobot_screwdriver),
|
|
7422
|
-
"dh_ag": None if data.dh_ag is None else serialize_dhag_gripper_configuration(data.dh_ag),
|
|
7423
|
-
"dh_pgc": None if data.dh_pgc is None else serialize_dhpgc_gripper_configuration(data.dh_pgc),
|
|
7424
|
-
"dh_cgi": None if data.dh_cgi is None else serialize_dhcgi_gripper_configuration(data.dh_cgi),
|
|
8144
|
+
"position": None if data.position is None else serialize_position(data.position),
|
|
8145
|
+
"orientation": None if data.orientation is None else serialize_quaternion(data.orientation),
|
|
7425
8146
|
}
|
|
7426
8147
|
|
|
7427
8148
|
@dataclass
|
|
@@ -7627,6 +8348,51 @@ def serialize_failure_state_response(data: FailureStateResponse) -> object:
|
|
|
7627
8348
|
"failure": None if data.failure is None else serialize_failure_state_details(data.failure),
|
|
7628
8349
|
}
|
|
7629
8350
|
|
|
8351
|
+
@dataclass
|
|
8352
|
+
class SetRobotFrameRequest:
|
|
8353
|
+
"""Request to set robot frame"""
|
|
8354
|
+
primary: Union[RobotFrame, None] = None
|
|
8355
|
+
secondary: Union[SecondaryBotRobotFrame, None] = None
|
|
8356
|
+
|
|
8357
|
+
def validate_primary(self, value: RobotFrame) -> Tuple[bool, str]:
|
|
8358
|
+
if value is None:
|
|
8359
|
+
return [False, "primary is required for SetRobotFrameRequest"]
|
|
8360
|
+
|
|
8361
|
+
if not ((isinstance(value, str) and RobotFrame in ['world', 'tooltip']) or isinstance(value, RobotFrame)):
|
|
8362
|
+
return [False, "primary must be of type RobotFrame for SetRobotFrameRequest, got " + type(value).__name__]
|
|
8363
|
+
|
|
8364
|
+
return [True, ""]
|
|
8365
|
+
|
|
8366
|
+
def validate_secondary(self, value: SecondaryBotRobotFrame) -> Tuple[bool, str]:
|
|
8367
|
+
if value is None:
|
|
8368
|
+
return [True, ""]
|
|
8369
|
+
|
|
8370
|
+
if not (isinstance(value, dict) and all((isinstance(k, str) and ((isinstance(val, str) and RobotFrame in ['world', 'tooltip']) or isinstance(val, RobotFrame))) for k, val in value.items())):
|
|
8371
|
+
return [False, "secondary must be of type SecondaryBotRobotFrame for SetRobotFrameRequest, got " + type(value).__name__]
|
|
8372
|
+
|
|
8373
|
+
return [True, ""]
|
|
8374
|
+
|
|
8375
|
+
def __post_init__(self):
|
|
8376
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
8377
|
+
is_valid, error_str = self.validate_primary(self.primary)
|
|
8378
|
+
if not is_valid:
|
|
8379
|
+
raise TypeError(error_str)
|
|
8380
|
+
is_valid, error_str = self.validate_secondary(self.secondary)
|
|
8381
|
+
if not is_valid:
|
|
8382
|
+
raise TypeError(error_str)
|
|
8383
|
+
|
|
8384
|
+
def parse_set_robot_frame_request(data: object):
|
|
8385
|
+
return SetRobotFrameRequest(
|
|
8386
|
+
primary=parse_robot_frame(data["primary"]) if "primary" in data and data.get("primary") is not None else None,
|
|
8387
|
+
secondary=parse_secondary_bot_robot_frame(data["secondary"]) if "secondary" in data and data.get("secondary") is not None else None,
|
|
8388
|
+
)
|
|
8389
|
+
|
|
8390
|
+
def serialize_set_robot_frame_request(data: SetRobotFrameRequest) -> object:
|
|
8391
|
+
return {
|
|
8392
|
+
"primary": serialize_robot_frame(data.primary),
|
|
8393
|
+
"secondary": None if data.secondary is None else serialize_secondary_bot_robot_frame(data.secondary),
|
|
8394
|
+
}
|
|
8395
|
+
|
|
7630
8396
|
@dataclass
|
|
7631
8397
|
class SensorsConfiguration:
|
|
7632
8398
|
"""Configuration of all sensors defined in custom equipment"""
|
|
@@ -7855,6 +8621,171 @@ def serialize_active_calibration_container(data: ActiveCalibrationContainer) ->
|
|
|
7855
8621
|
"calibrationData": None if data.calibrationData is None else serialize_calibration_data(data.calibrationData),
|
|
7856
8622
|
}
|
|
7857
8623
|
|
|
8624
|
+
@dataclass
|
|
8625
|
+
class GripperConfiguration:
|
|
8626
|
+
"""Configuration of gripper, also known as End Effector"""
|
|
8627
|
+
kind: Union[GripperKindEnum, None] = None
|
|
8628
|
+
onrobot_2fg7: Union[OnRobot2FG7GripperConfiguration, None] = None
|
|
8629
|
+
onrobot_2fg14: Union[OnRobot2FG14GripperConfiguration, None] = None
|
|
8630
|
+
onrobot_3fg15: Union[OnRobot3FG15GripperConfiguration, None] = None
|
|
8631
|
+
onrobot_screwdriver: Union[OnRobotScrewdriverConfiguration, None] = None
|
|
8632
|
+
dh_ag: Union[DHAGGripperConfiguration, None] = None
|
|
8633
|
+
dh_pgc: Union[DHPGCGripperConfiguration, None] = None
|
|
8634
|
+
dh_cgi: Union[DHCGIGripperConfiguration, None] = None
|
|
8635
|
+
robotiq_2f: Union[Robotiq2FGripperConfiguration, None] = None
|
|
8636
|
+
robotiq_epick: Union[RobotiqEPickGripperConfiguration, None] = None
|
|
8637
|
+
|
|
8638
|
+
def validate_kind(self, value: GripperKindEnum) -> Tuple[bool, str]:
|
|
8639
|
+
if value is None:
|
|
8640
|
+
return [False, "kind is required for GripperConfiguration"]
|
|
8641
|
+
|
|
8642
|
+
if not ((isinstance(value, str) and GripperKindEnum in ['onrobot_2fg7', 'onrobot_2fg14', 'onrobot_3fg15', 'onrobot_screwdriver', 'dh_ag', 'dh_pgc', 'dh_cgi', 'schunk_egx', 'robotiq_2f', 'robotiq_epick', 'none_connected']) or isinstance(value, GripperKindEnum)):
|
|
8643
|
+
return [False, "kind must be of type GripperKindEnum for GripperConfiguration, got " + type(value).__name__]
|
|
8644
|
+
|
|
8645
|
+
return [True, ""]
|
|
8646
|
+
|
|
8647
|
+
def validate_onrobot_2fg7(self, value: OnRobot2FG7GripperConfiguration) -> Tuple[bool, str]:
|
|
8648
|
+
if value is None:
|
|
8649
|
+
return [True, ""]
|
|
8650
|
+
|
|
8651
|
+
if not isinstance(value, OnRobot2FG7GripperConfiguration):
|
|
8652
|
+
return [False, "onrobot_2fg7 must be of type OnRobot2FG7GripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8653
|
+
|
|
8654
|
+
return [True, ""]
|
|
8655
|
+
|
|
8656
|
+
def validate_onrobot_2fg14(self, value: OnRobot2FG14GripperConfiguration) -> Tuple[bool, str]:
|
|
8657
|
+
if value is None:
|
|
8658
|
+
return [True, ""]
|
|
8659
|
+
|
|
8660
|
+
if not isinstance(value, OnRobot2FG14GripperConfiguration):
|
|
8661
|
+
return [False, "onrobot_2fg14 must be of type OnRobot2FG14GripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8662
|
+
|
|
8663
|
+
return [True, ""]
|
|
8664
|
+
|
|
8665
|
+
def validate_onrobot_3fg15(self, value: OnRobot3FG15GripperConfiguration) -> Tuple[bool, str]:
|
|
8666
|
+
if value is None:
|
|
8667
|
+
return [True, ""]
|
|
8668
|
+
|
|
8669
|
+
if not isinstance(value, OnRobot3FG15GripperConfiguration):
|
|
8670
|
+
return [False, "onrobot_3fg15 must be of type OnRobot3FG15GripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8671
|
+
|
|
8672
|
+
return [True, ""]
|
|
8673
|
+
|
|
8674
|
+
def validate_onrobot_screwdriver(self, value: OnRobotScrewdriverConfiguration) -> Tuple[bool, str]:
|
|
8675
|
+
if value is None:
|
|
8676
|
+
return [True, ""]
|
|
8677
|
+
|
|
8678
|
+
if not isinstance(value, OnRobotScrewdriverConfiguration):
|
|
8679
|
+
return [False, "onrobot_screwdriver must be of type OnRobotScrewdriverConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8680
|
+
|
|
8681
|
+
return [True, ""]
|
|
8682
|
+
|
|
8683
|
+
def validate_dh_ag(self, value: DHAGGripperConfiguration) -> Tuple[bool, str]:
|
|
8684
|
+
if value is None:
|
|
8685
|
+
return [True, ""]
|
|
8686
|
+
|
|
8687
|
+
if not isinstance(value, DHAGGripperConfiguration):
|
|
8688
|
+
return [False, "dh_ag must be of type DHAGGripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8689
|
+
|
|
8690
|
+
return [True, ""]
|
|
8691
|
+
|
|
8692
|
+
def validate_dh_pgc(self, value: DHPGCGripperConfiguration) -> Tuple[bool, str]:
|
|
8693
|
+
if value is None:
|
|
8694
|
+
return [True, ""]
|
|
8695
|
+
|
|
8696
|
+
if not isinstance(value, DHPGCGripperConfiguration):
|
|
8697
|
+
return [False, "dh_pgc must be of type DHPGCGripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8698
|
+
|
|
8699
|
+
return [True, ""]
|
|
8700
|
+
|
|
8701
|
+
def validate_dh_cgi(self, value: DHCGIGripperConfiguration) -> Tuple[bool, str]:
|
|
8702
|
+
if value is None:
|
|
8703
|
+
return [True, ""]
|
|
8704
|
+
|
|
8705
|
+
if not isinstance(value, DHCGIGripperConfiguration):
|
|
8706
|
+
return [False, "dh_cgi must be of type DHCGIGripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8707
|
+
|
|
8708
|
+
return [True, ""]
|
|
8709
|
+
|
|
8710
|
+
def validate_robotiq_2f(self, value: Robotiq2FGripperConfiguration) -> Tuple[bool, str]:
|
|
8711
|
+
if value is None:
|
|
8712
|
+
return [True, ""]
|
|
8713
|
+
|
|
8714
|
+
if not isinstance(value, Robotiq2FGripperConfiguration):
|
|
8715
|
+
return [False, "robotiq_2f must be of type Robotiq2FGripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8716
|
+
|
|
8717
|
+
return [True, ""]
|
|
8718
|
+
|
|
8719
|
+
def validate_robotiq_epick(self, value: RobotiqEPickGripperConfiguration) -> Tuple[bool, str]:
|
|
8720
|
+
if value is None:
|
|
8721
|
+
return [True, ""]
|
|
8722
|
+
|
|
8723
|
+
if not isinstance(value, RobotiqEPickGripperConfiguration):
|
|
8724
|
+
return [False, "robotiq_epick must be of type RobotiqEPickGripperConfiguration for GripperConfiguration, got " + type(value).__name__]
|
|
8725
|
+
|
|
8726
|
+
return [True, ""]
|
|
8727
|
+
|
|
8728
|
+
def __post_init__(self):
|
|
8729
|
+
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
8730
|
+
is_valid, error_str = self.validate_kind(self.kind)
|
|
8731
|
+
if not is_valid:
|
|
8732
|
+
raise TypeError(error_str)
|
|
8733
|
+
is_valid, error_str = self.validate_onrobot_2fg7(self.onrobot_2fg7)
|
|
8734
|
+
if not is_valid:
|
|
8735
|
+
raise TypeError(error_str)
|
|
8736
|
+
is_valid, error_str = self.validate_onrobot_2fg14(self.onrobot_2fg14)
|
|
8737
|
+
if not is_valid:
|
|
8738
|
+
raise TypeError(error_str)
|
|
8739
|
+
is_valid, error_str = self.validate_onrobot_3fg15(self.onrobot_3fg15)
|
|
8740
|
+
if not is_valid:
|
|
8741
|
+
raise TypeError(error_str)
|
|
8742
|
+
is_valid, error_str = self.validate_onrobot_screwdriver(self.onrobot_screwdriver)
|
|
8743
|
+
if not is_valid:
|
|
8744
|
+
raise TypeError(error_str)
|
|
8745
|
+
is_valid, error_str = self.validate_dh_ag(self.dh_ag)
|
|
8746
|
+
if not is_valid:
|
|
8747
|
+
raise TypeError(error_str)
|
|
8748
|
+
is_valid, error_str = self.validate_dh_pgc(self.dh_pgc)
|
|
8749
|
+
if not is_valid:
|
|
8750
|
+
raise TypeError(error_str)
|
|
8751
|
+
is_valid, error_str = self.validate_dh_cgi(self.dh_cgi)
|
|
8752
|
+
if not is_valid:
|
|
8753
|
+
raise TypeError(error_str)
|
|
8754
|
+
is_valid, error_str = self.validate_robotiq_2f(self.robotiq_2f)
|
|
8755
|
+
if not is_valid:
|
|
8756
|
+
raise TypeError(error_str)
|
|
8757
|
+
is_valid, error_str = self.validate_robotiq_epick(self.robotiq_epick)
|
|
8758
|
+
if not is_valid:
|
|
8759
|
+
raise TypeError(error_str)
|
|
8760
|
+
|
|
8761
|
+
def parse_gripper_configuration(data: object):
|
|
8762
|
+
return GripperConfiguration(
|
|
8763
|
+
kind=parse_gripper_kind_enum(data["kind"]) if "kind" in data and data.get("kind") is not None else None,
|
|
8764
|
+
onrobot_2fg7=parse_on_robot_2_fg_7_gripper_configuration(data["onrobot_2fg7"]) if "onrobot_2fg7" in data and data.get("onrobot_2fg7") is not None else None,
|
|
8765
|
+
onrobot_2fg14=parse_on_robot_2_fg_14_gripper_configuration(data["onrobot_2fg14"]) if "onrobot_2fg14" in data and data.get("onrobot_2fg14") is not None else None,
|
|
8766
|
+
onrobot_3fg15=parse_on_robot_3_fg_15_gripper_configuration(data["onrobot_3fg15"]) if "onrobot_3fg15" in data and data.get("onrobot_3fg15") is not None else None,
|
|
8767
|
+
onrobot_screwdriver=parse_on_robot_screwdriver_configuration(data["onrobot_screwdriver"]) if "onrobot_screwdriver" in data and data.get("onrobot_screwdriver") is not None else None,
|
|
8768
|
+
dh_ag=parse_dhag_gripper_configuration(data["dh_ag"]) if "dh_ag" in data and data.get("dh_ag") is not None else None,
|
|
8769
|
+
dh_pgc=parse_dhpgc_gripper_configuration(data["dh_pgc"]) if "dh_pgc" in data and data.get("dh_pgc") is not None else None,
|
|
8770
|
+
dh_cgi=parse_dhcgi_gripper_configuration(data["dh_cgi"]) if "dh_cgi" in data and data.get("dh_cgi") is not None else None,
|
|
8771
|
+
robotiq_2f=parse_robotiq_2_f_gripper_configuration(data["robotiq_2f"]) if "robotiq_2f" in data and data.get("robotiq_2f") is not None else None,
|
|
8772
|
+
robotiq_epick=parse_robotiq_e_pick_gripper_configuration(data["robotiq_epick"]) if "robotiq_epick" in data and data.get("robotiq_epick") is not None else None,
|
|
8773
|
+
)
|
|
8774
|
+
|
|
8775
|
+
def serialize_gripper_configuration(data: GripperConfiguration) -> object:
|
|
8776
|
+
return {
|
|
8777
|
+
"kind": serialize_gripper_kind_enum(data.kind),
|
|
8778
|
+
"onrobot_2fg7": None if data.onrobot_2fg7 is None else serialize_on_robot_2_fg_7_gripper_configuration(data.onrobot_2fg7),
|
|
8779
|
+
"onrobot_2fg14": None if data.onrobot_2fg14 is None else serialize_on_robot_2_fg_14_gripper_configuration(data.onrobot_2fg14),
|
|
8780
|
+
"onrobot_3fg15": None if data.onrobot_3fg15 is None else serialize_on_robot_3_fg_15_gripper_configuration(data.onrobot_3fg15),
|
|
8781
|
+
"onrobot_screwdriver": None if data.onrobot_screwdriver is None else serialize_on_robot_screwdriver_configuration(data.onrobot_screwdriver),
|
|
8782
|
+
"dh_ag": None if data.dh_ag is None else serialize_dhag_gripper_configuration(data.dh_ag),
|
|
8783
|
+
"dh_pgc": None if data.dh_pgc is None else serialize_dhpgc_gripper_configuration(data.dh_pgc),
|
|
8784
|
+
"dh_cgi": None if data.dh_cgi is None else serialize_dhcgi_gripper_configuration(data.dh_cgi),
|
|
8785
|
+
"robotiq_2f": None if data.robotiq_2f is None else serialize_robotiq_2_f_gripper_configuration(data.robotiq_2f),
|
|
8786
|
+
"robotiq_epick": None if data.robotiq_epick is None else serialize_robotiq_e_pick_gripper_configuration(data.robotiq_epick),
|
|
8787
|
+
}
|
|
8788
|
+
|
|
7858
8789
|
@dataclass
|
|
7859
8790
|
class GripperCommandRequest:
|
|
7860
8791
|
"""Control the gripper (end effector) of the robot
|
|
@@ -7867,12 +8798,14 @@ class GripperCommandRequest:
|
|
|
7867
8798
|
dh_pgc: Union[DHPGCGripperCommandRequest, None] = None
|
|
7868
8799
|
dh_cgi: Union[DHCGIGripperCommandRequest, None] = None
|
|
7869
8800
|
schunk_egx: Union[SchunkEGxGripperCommandRequest, None] = None
|
|
8801
|
+
robotiq_2f: Union[Robotiq2FGripperCommandRequest, None] = None
|
|
8802
|
+
robotiq_epick: Union[RobotiqEPickGripperCommandRequest, None] = None
|
|
7870
8803
|
|
|
7871
8804
|
def validate_kind(self, value: GripperKindEnum) -> Tuple[bool, str]:
|
|
7872
8805
|
if value is None:
|
|
7873
8806
|
return [False, "kind is required for GripperCommandRequest"]
|
|
7874
8807
|
|
|
7875
|
-
if not ((isinstance(value, str) and GripperKindEnum in ['onrobot_2fg7', 'onrobot_2fg14', 'onrobot_3fg15', 'onrobot_screwdriver', 'dh_ag', 'dh_pgc', 'dh_cgi', 'schunk_egx', 'none_connected']) or isinstance(value, GripperKindEnum)):
|
|
8808
|
+
if not ((isinstance(value, str) and GripperKindEnum in ['onrobot_2fg7', 'onrobot_2fg14', 'onrobot_3fg15', 'onrobot_screwdriver', 'dh_ag', 'dh_pgc', 'dh_cgi', 'schunk_egx', 'robotiq_2f', 'robotiq_epick', 'none_connected']) or isinstance(value, GripperKindEnum)):
|
|
7876
8809
|
return [False, "kind must be of type GripperKindEnum for GripperCommandRequest, got " + type(value).__name__]
|
|
7877
8810
|
|
|
7878
8811
|
return [True, ""]
|
|
@@ -7940,6 +8873,24 @@ class GripperCommandRequest:
|
|
|
7940
8873
|
|
|
7941
8874
|
return [True, ""]
|
|
7942
8875
|
|
|
8876
|
+
def validate_robotiq_2f(self, value: Robotiq2FGripperCommandRequest) -> Tuple[bool, str]:
|
|
8877
|
+
if value is None:
|
|
8878
|
+
return [True, ""]
|
|
8879
|
+
|
|
8880
|
+
if not isinstance(value, Robotiq2FGripperCommandRequest):
|
|
8881
|
+
return [False, "robotiq_2f must be of type Robotiq2FGripperCommandRequest for GripperCommandRequest, got " + type(value).__name__]
|
|
8882
|
+
|
|
8883
|
+
return [True, ""]
|
|
8884
|
+
|
|
8885
|
+
def validate_robotiq_epick(self, value: RobotiqEPickGripperCommandRequest) -> Tuple[bool, str]:
|
|
8886
|
+
if value is None:
|
|
8887
|
+
return [True, ""]
|
|
8888
|
+
|
|
8889
|
+
if not isinstance(value, RobotiqEPickGripperCommandRequest):
|
|
8890
|
+
return [False, "robotiq_epick must be of type RobotiqEPickGripperCommandRequest for GripperCommandRequest, got " + type(value).__name__]
|
|
8891
|
+
|
|
8892
|
+
return [True, ""]
|
|
8893
|
+
|
|
7943
8894
|
def __post_init__(self):
|
|
7944
8895
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
7945
8896
|
is_valid, error_str = self.validate_kind(self.kind)
|
|
@@ -7966,6 +8917,12 @@ class GripperCommandRequest:
|
|
|
7966
8917
|
is_valid, error_str = self.validate_schunk_egx(self.schunk_egx)
|
|
7967
8918
|
if not is_valid:
|
|
7968
8919
|
raise TypeError(error_str)
|
|
8920
|
+
is_valid, error_str = self.validate_robotiq_2f(self.robotiq_2f)
|
|
8921
|
+
if not is_valid:
|
|
8922
|
+
raise TypeError(error_str)
|
|
8923
|
+
is_valid, error_str = self.validate_robotiq_epick(self.robotiq_epick)
|
|
8924
|
+
if not is_valid:
|
|
8925
|
+
raise TypeError(error_str)
|
|
7969
8926
|
|
|
7970
8927
|
def parse_gripper_command_request(data: object):
|
|
7971
8928
|
return GripperCommandRequest(
|
|
@@ -7977,6 +8934,8 @@ def parse_gripper_command_request(data: object):
|
|
|
7977
8934
|
dh_pgc=parse_dhpgc_gripper_command_request(data["dh_pgc"]) if "dh_pgc" in data and data.get("dh_pgc") is not None else None,
|
|
7978
8935
|
dh_cgi=parse_dhcgi_gripper_command_request(data["dh_cgi"]) if "dh_cgi" in data and data.get("dh_cgi") is not None else None,
|
|
7979
8936
|
schunk_egx=parse_schunk_e_gx_gripper_command_request(data["schunk_egx"]) if "schunk_egx" in data and data.get("schunk_egx") is not None else None,
|
|
8937
|
+
robotiq_2f=parse_robotiq_2_f_gripper_command_request(data["robotiq_2f"]) if "robotiq_2f" in data and data.get("robotiq_2f") is not None else None,
|
|
8938
|
+
robotiq_epick=parse_robotiq_e_pick_gripper_command_request(data["robotiq_epick"]) if "robotiq_epick" in data and data.get("robotiq_epick") is not None else None,
|
|
7980
8939
|
)
|
|
7981
8940
|
|
|
7982
8941
|
def serialize_gripper_command_request(data: GripperCommandRequest) -> object:
|
|
@@ -7989,6 +8948,8 @@ def serialize_gripper_command_request(data: GripperCommandRequest) -> object:
|
|
|
7989
8948
|
"dh_pgc": None if data.dh_pgc is None else serialize_dhpgc_gripper_command_request(data.dh_pgc),
|
|
7990
8949
|
"dh_cgi": None if data.dh_cgi is None else serialize_dhcgi_gripper_command_request(data.dh_cgi),
|
|
7991
8950
|
"schunk_egx": None if data.schunk_egx is None else serialize_schunk_e_gx_gripper_command_request(data.schunk_egx),
|
|
8951
|
+
"robotiq_2f": None if data.robotiq_2f is None else serialize_robotiq_2_f_gripper_command_request(data.robotiq_2f),
|
|
8952
|
+
"robotiq_epick": None if data.robotiq_epick is None else serialize_robotiq_e_pick_gripper_command_request(data.robotiq_epick),
|
|
7992
8953
|
}
|
|
7993
8954
|
|
|
7994
8955
|
@dataclass
|
|
@@ -8189,6 +9150,7 @@ class RecorderConfig:
|
|
|
8189
9150
|
offset: Union[OffsetConfig, None] = None
|
|
8190
9151
|
sensors: Union[SensorConfigList, None] = None
|
|
8191
9152
|
equipmentKeyAssignments: Union[EquipmentKeyAssignments, None] = None
|
|
9153
|
+
tags: Union[StringArray, None] = None
|
|
8192
9154
|
|
|
8193
9155
|
def validate_isSecondary(self, value: bool) -> Tuple[bool, str]:
|
|
8194
9156
|
if value is None:
|
|
@@ -8253,6 +9215,15 @@ class RecorderConfig:
|
|
|
8253
9215
|
|
|
8254
9216
|
return [True, ""]
|
|
8255
9217
|
|
|
9218
|
+
def validate_tags(self, value: StringArray) -> Tuple[bool, str]:
|
|
9219
|
+
if value is None:
|
|
9220
|
+
return [True, ""]
|
|
9221
|
+
|
|
9222
|
+
if not (isinstance(value, list) and all(isinstance(x, str) for x in value)):
|
|
9223
|
+
return [False, "tags must be of type StringArray for RecorderConfig, got " + type(value).__name__]
|
|
9224
|
+
|
|
9225
|
+
return [True, ""]
|
|
9226
|
+
|
|
8256
9227
|
def __post_init__(self):
|
|
8257
9228
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
8258
9229
|
is_valid, error_str = self.validate_isSecondary(self.isSecondary)
|
|
@@ -8276,6 +9247,9 @@ class RecorderConfig:
|
|
|
8276
9247
|
is_valid, error_str = self.validate_equipmentKeyAssignments(self.equipmentKeyAssignments)
|
|
8277
9248
|
if not is_valid:
|
|
8278
9249
|
raise TypeError(error_str)
|
|
9250
|
+
is_valid, error_str = self.validate_tags(self.tags)
|
|
9251
|
+
if not is_valid:
|
|
9252
|
+
raise TypeError(error_str)
|
|
8279
9253
|
|
|
8280
9254
|
def parse_recorder_config(data: object):
|
|
8281
9255
|
return RecorderConfig(
|
|
@@ -8286,6 +9260,7 @@ def parse_recorder_config(data: object):
|
|
|
8286
9260
|
offset=parse_offset_config(data["offset"]) if "offset" in data and data.get("offset") is not None else None,
|
|
8287
9261
|
sensors=parse_sensor_config_list(data["sensors"]) if "sensors" in data and data.get("sensors") is not None else None,
|
|
8288
9262
|
equipmentKeyAssignments=parse_equipment_key_assignments(data["equipmentKeyAssignments"]) if "equipmentKeyAssignments" in data and data.get("equipmentKeyAssignments") is not None else None,
|
|
9263
|
+
tags=parse_string_array(data["tags"]) if "tags" in data and data.get("tags") is not None else None,
|
|
8289
9264
|
)
|
|
8290
9265
|
|
|
8291
9266
|
def serialize_recorder_config(data: RecorderConfig) -> object:
|
|
@@ -8297,6 +9272,7 @@ def serialize_recorder_config(data: RecorderConfig) -> object:
|
|
|
8297
9272
|
"offset": None if data.offset is None else serialize_offset_config(data.offset),
|
|
8298
9273
|
"sensors": None if data.sensors is None else serialize_sensor_config_list(data.sensors),
|
|
8299
9274
|
"equipmentKeyAssignments": None if data.equipmentKeyAssignments is None else serialize_equipment_key_assignments(data.equipmentKeyAssignments),
|
|
9275
|
+
"tags": None if data.tags is None else serialize_string_array(data.tags),
|
|
8300
9276
|
}
|
|
8301
9277
|
|
|
8302
9278
|
@dataclass
|
|
@@ -8304,6 +9280,7 @@ class TeleopConfig:
|
|
|
8304
9280
|
"""Config of the teleop"""
|
|
8305
9281
|
isSecondary: Union[bool, None] = None
|
|
8306
9282
|
bots: Union[BotTeleopDetailsList, None] = None
|
|
9283
|
+
enableBoltHeadTracking: Union[bool, None] = None
|
|
8307
9284
|
|
|
8308
9285
|
def validate_isSecondary(self, value: bool) -> Tuple[bool, str]:
|
|
8309
9286
|
if value is None:
|
|
@@ -8323,6 +9300,15 @@ class TeleopConfig:
|
|
|
8323
9300
|
|
|
8324
9301
|
return [True, ""]
|
|
8325
9302
|
|
|
9303
|
+
def validate_enableBoltHeadTracking(self, value: bool) -> Tuple[bool, str]:
|
|
9304
|
+
if value is None:
|
|
9305
|
+
return [True, ""]
|
|
9306
|
+
|
|
9307
|
+
if not isinstance(value, bool):
|
|
9308
|
+
return [False, "enableBoltHeadTracking must be of type bool for TeleopConfig, got " + type(value).__name__]
|
|
9309
|
+
|
|
9310
|
+
return [True, ""]
|
|
9311
|
+
|
|
8326
9312
|
def __post_init__(self):
|
|
8327
9313
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
8328
9314
|
is_valid, error_str = self.validate_isSecondary(self.isSecondary)
|
|
@@ -8331,17 +9317,22 @@ class TeleopConfig:
|
|
|
8331
9317
|
is_valid, error_str = self.validate_bots(self.bots)
|
|
8332
9318
|
if not is_valid:
|
|
8333
9319
|
raise TypeError(error_str)
|
|
9320
|
+
is_valid, error_str = self.validate_enableBoltHeadTracking(self.enableBoltHeadTracking)
|
|
9321
|
+
if not is_valid:
|
|
9322
|
+
raise TypeError(error_str)
|
|
8334
9323
|
|
|
8335
9324
|
def parse_teleop_config(data: object):
|
|
8336
9325
|
return TeleopConfig(
|
|
8337
9326
|
isSecondary=parse_bool(data["isSecondary"]) if "isSecondary" in data and data.get("isSecondary") is not None else None,
|
|
8338
9327
|
bots=parse_bot_teleop_details_list(data["bots"]) if "bots" in data and data.get("bots") is not None else None,
|
|
9328
|
+
enableBoltHeadTracking=parse_bool(data["enableBoltHeadTracking"]) if "enableBoltHeadTracking" in data and data.get("enableBoltHeadTracking") is not None else None,
|
|
8339
9329
|
)
|
|
8340
9330
|
|
|
8341
9331
|
def serialize_teleop_config(data: TeleopConfig) -> object:
|
|
8342
9332
|
return {
|
|
8343
9333
|
"isSecondary": None if data.isSecondary is None else serialize_bool(data.isSecondary),
|
|
8344
9334
|
"bots": None if data.bots is None else serialize_bot_teleop_details_list(data.bots),
|
|
9335
|
+
"enableBoltHeadTracking": None if data.enableBoltHeadTracking is None else serialize_bool(data.enableBoltHeadTracking),
|
|
8345
9336
|
}
|
|
8346
9337
|
|
|
8347
9338
|
@dataclass
|
|
@@ -8838,6 +9829,12 @@ class TeleopState:
|
|
|
8838
9829
|
config: Union[TeleopConfig, None] = None
|
|
8839
9830
|
status: Union[TeleopStatus, None] = None
|
|
8840
9831
|
botsInSync: Union[bool, None] = None
|
|
9832
|
+
errors: Union[TeleopErrorArray, None] = None
|
|
9833
|
+
gripperBounds: Union[GripperBounds, None] = None
|
|
9834
|
+
robotFrame: Union[RobotFrame, None] = None
|
|
9835
|
+
filterType: Union[str, None] = None
|
|
9836
|
+
connectedClients: Union[TeleopClientList, None] = None
|
|
9837
|
+
activeClientId: Union[str, None] = None
|
|
8841
9838
|
|
|
8842
9839
|
def validate_config(self, value: TeleopConfig) -> Tuple[bool, str]:
|
|
8843
9840
|
if value is None:
|
|
@@ -8866,6 +9863,60 @@ class TeleopState:
|
|
|
8866
9863
|
|
|
8867
9864
|
return [True, ""]
|
|
8868
9865
|
|
|
9866
|
+
def validate_errors(self, value: TeleopErrorArray) -> Tuple[bool, str]:
|
|
9867
|
+
if value is None:
|
|
9868
|
+
return [True, ""]
|
|
9869
|
+
|
|
9870
|
+
if not (isinstance(value, list) and all(isinstance(x, str) for x in value)):
|
|
9871
|
+
return [False, "errors must be of type TeleopErrorArray for TeleopState, got " + type(value).__name__]
|
|
9872
|
+
|
|
9873
|
+
return [True, ""]
|
|
9874
|
+
|
|
9875
|
+
def validate_gripperBounds(self, value: GripperBounds) -> Tuple[bool, str]:
|
|
9876
|
+
if value is None:
|
|
9877
|
+
return [True, ""]
|
|
9878
|
+
|
|
9879
|
+
if not isinstance(value, GripperBounds):
|
|
9880
|
+
return [False, "gripperBounds must be of type GripperBounds for TeleopState, got " + type(value).__name__]
|
|
9881
|
+
|
|
9882
|
+
return [True, ""]
|
|
9883
|
+
|
|
9884
|
+
def validate_robotFrame(self, value: RobotFrame) -> Tuple[bool, str]:
|
|
9885
|
+
if value is None:
|
|
9886
|
+
return [True, ""]
|
|
9887
|
+
|
|
9888
|
+
if not ((isinstance(value, str) and RobotFrame in ['world', 'tooltip']) or isinstance(value, RobotFrame)):
|
|
9889
|
+
return [False, "robotFrame must be of type RobotFrame for TeleopState, got " + type(value).__name__]
|
|
9890
|
+
|
|
9891
|
+
return [True, ""]
|
|
9892
|
+
|
|
9893
|
+
def validate_filterType(self, value: str) -> Tuple[bool, str]:
|
|
9894
|
+
if value is None:
|
|
9895
|
+
return [True, ""]
|
|
9896
|
+
|
|
9897
|
+
if not isinstance(value, str):
|
|
9898
|
+
return [False, "filterType must be of type str for TeleopState, got " + type(value).__name__]
|
|
9899
|
+
|
|
9900
|
+
return [True, ""]
|
|
9901
|
+
|
|
9902
|
+
def validate_connectedClients(self, value: TeleopClientList) -> Tuple[bool, str]:
|
|
9903
|
+
if value is None:
|
|
9904
|
+
return [True, ""]
|
|
9905
|
+
|
|
9906
|
+
if not (isinstance(value, list) and all(isinstance(x, TeleopClient) for x in value)):
|
|
9907
|
+
return [False, "connectedClients must be of type TeleopClientList for TeleopState, got " + type(value).__name__]
|
|
9908
|
+
|
|
9909
|
+
return [True, ""]
|
|
9910
|
+
|
|
9911
|
+
def validate_activeClientId(self, value: str) -> Tuple[bool, str]:
|
|
9912
|
+
if value is None:
|
|
9913
|
+
return [True, ""]
|
|
9914
|
+
|
|
9915
|
+
if not isinstance(value, str):
|
|
9916
|
+
return [False, "activeClientId must be of type str for TeleopState, got " + type(value).__name__]
|
|
9917
|
+
|
|
9918
|
+
return [True, ""]
|
|
9919
|
+
|
|
8869
9920
|
def __post_init__(self):
|
|
8870
9921
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
8871
9922
|
is_valid, error_str = self.validate_config(self.config)
|
|
@@ -8877,12 +9928,36 @@ class TeleopState:
|
|
|
8877
9928
|
is_valid, error_str = self.validate_botsInSync(self.botsInSync)
|
|
8878
9929
|
if not is_valid:
|
|
8879
9930
|
raise TypeError(error_str)
|
|
9931
|
+
is_valid, error_str = self.validate_errors(self.errors)
|
|
9932
|
+
if not is_valid:
|
|
9933
|
+
raise TypeError(error_str)
|
|
9934
|
+
is_valid, error_str = self.validate_gripperBounds(self.gripperBounds)
|
|
9935
|
+
if not is_valid:
|
|
9936
|
+
raise TypeError(error_str)
|
|
9937
|
+
is_valid, error_str = self.validate_robotFrame(self.robotFrame)
|
|
9938
|
+
if not is_valid:
|
|
9939
|
+
raise TypeError(error_str)
|
|
9940
|
+
is_valid, error_str = self.validate_filterType(self.filterType)
|
|
9941
|
+
if not is_valid:
|
|
9942
|
+
raise TypeError(error_str)
|
|
9943
|
+
is_valid, error_str = self.validate_connectedClients(self.connectedClients)
|
|
9944
|
+
if not is_valid:
|
|
9945
|
+
raise TypeError(error_str)
|
|
9946
|
+
is_valid, error_str = self.validate_activeClientId(self.activeClientId)
|
|
9947
|
+
if not is_valid:
|
|
9948
|
+
raise TypeError(error_str)
|
|
8880
9949
|
|
|
8881
9950
|
def parse_teleop_state(data: object):
|
|
8882
9951
|
return TeleopState(
|
|
8883
9952
|
config=parse_teleop_config(data["config"]) if "config" in data and data.get("config") is not None else None,
|
|
8884
9953
|
status=parse_teleop_status(data["status"]) if "status" in data and data.get("status") is not None else None,
|
|
8885
9954
|
botsInSync=parse_bool(data["botsInSync"]) if "botsInSync" in data and data.get("botsInSync") is not None else None,
|
|
9955
|
+
errors=parse_teleop_error_array(data["errors"]) if "errors" in data and data.get("errors") is not None else None,
|
|
9956
|
+
gripperBounds=parse_gripper_bounds(data["gripperBounds"]) if "gripperBounds" in data and data.get("gripperBounds") is not None else None,
|
|
9957
|
+
robotFrame=parse_robot_frame(data["robotFrame"]) if "robotFrame" in data and data.get("robotFrame") is not None else None,
|
|
9958
|
+
filterType=parse_str(data["filterType"]) if "filterType" in data and data.get("filterType") is not None else None,
|
|
9959
|
+
connectedClients=parse_teleop_client_list(data["connectedClients"]) if "connectedClients" in data and data.get("connectedClients") is not None else None,
|
|
9960
|
+
activeClientId=parse_str(data["activeClientId"]) if "activeClientId" in data and data.get("activeClientId") is not None else None,
|
|
8886
9961
|
)
|
|
8887
9962
|
|
|
8888
9963
|
def serialize_teleop_state(data: TeleopState) -> object:
|
|
@@ -8890,6 +9965,12 @@ def serialize_teleop_state(data: TeleopState) -> object:
|
|
|
8890
9965
|
"config": None if data.config is None else serialize_teleop_config(data.config),
|
|
8891
9966
|
"status": None if data.status is None else serialize_teleop_status(data.status),
|
|
8892
9967
|
"botsInSync": None if data.botsInSync is None else serialize_bool(data.botsInSync),
|
|
9968
|
+
"errors": None if data.errors is None else serialize_teleop_error_array(data.errors),
|
|
9969
|
+
"gripperBounds": None if data.gripperBounds is None else serialize_gripper_bounds(data.gripperBounds),
|
|
9970
|
+
"robotFrame": None if data.robotFrame is None else serialize_robot_frame(data.robotFrame),
|
|
9971
|
+
"filterType": None if data.filterType is None else serialize_str(data.filterType),
|
|
9972
|
+
"connectedClients": None if data.connectedClients is None else serialize_teleop_client_list(data.connectedClients),
|
|
9973
|
+
"activeClientId": None if data.activeClientId is None else serialize_str(data.activeClientId),
|
|
8893
9974
|
}
|
|
8894
9975
|
|
|
8895
9976
|
@dataclass
|
|
@@ -9071,6 +10152,7 @@ class StopRecordingResponse:
|
|
|
9071
10152
|
state: Union[RecorderState, None] = None
|
|
9072
10153
|
startTimestamp: Union[str, None] = None
|
|
9073
10154
|
endTimestamp: Union[str, None] = None
|
|
10155
|
+
status: Union[RecorderStatus, None] = None
|
|
9074
10156
|
|
|
9075
10157
|
def validate_state(self, value: RecorderState) -> Tuple[bool, str]:
|
|
9076
10158
|
if value is None:
|
|
@@ -9099,6 +10181,15 @@ class StopRecordingResponse:
|
|
|
9099
10181
|
|
|
9100
10182
|
return [True, ""]
|
|
9101
10183
|
|
|
10184
|
+
def validate_status(self, value: RecorderStatus) -> Tuple[bool, str]:
|
|
10185
|
+
if value is None:
|
|
10186
|
+
return [True, ""]
|
|
10187
|
+
|
|
10188
|
+
if not ((isinstance(value, str) and RecorderStatus in ['not_recording', 'recording', 'error', 'complete', 'initializing']) or isinstance(value, RecorderStatus)):
|
|
10189
|
+
return [False, "status must be of type RecorderStatus for StopRecordingResponse, got " + type(value).__name__]
|
|
10190
|
+
|
|
10191
|
+
return [True, ""]
|
|
10192
|
+
|
|
9102
10193
|
def __post_init__(self):
|
|
9103
10194
|
# Type check incoming model - raise error if invalid (required or wrong type)
|
|
9104
10195
|
is_valid, error_str = self.validate_state(self.state)
|
|
@@ -9110,12 +10201,16 @@ class StopRecordingResponse:
|
|
|
9110
10201
|
is_valid, error_str = self.validate_endTimestamp(self.endTimestamp)
|
|
9111
10202
|
if not is_valid:
|
|
9112
10203
|
raise TypeError(error_str)
|
|
10204
|
+
is_valid, error_str = self.validate_status(self.status)
|
|
10205
|
+
if not is_valid:
|
|
10206
|
+
raise TypeError(error_str)
|
|
9113
10207
|
|
|
9114
10208
|
def parse_stop_recording_response(data: object):
|
|
9115
10209
|
return StopRecordingResponse(
|
|
9116
10210
|
state=parse_recorder_state(data["state"]) if "state" in data and data.get("state") is not None else None,
|
|
9117
10211
|
startTimestamp=parse_str(data["startTimestamp"]) if "startTimestamp" in data and data.get("startTimestamp") is not None else None,
|
|
9118
10212
|
endTimestamp=parse_str(data["endTimestamp"]) if "endTimestamp" in data and data.get("endTimestamp") is not None else None,
|
|
10213
|
+
status=parse_recorder_status(data["status"]) if "status" in data and data.get("status") is not None else None,
|
|
9119
10214
|
)
|
|
9120
10215
|
|
|
9121
10216
|
def serialize_stop_recording_response(data: StopRecordingResponse) -> object:
|
|
@@ -9123,6 +10218,7 @@ def serialize_stop_recording_response(data: StopRecordingResponse) -> object:
|
|
|
9123
10218
|
"state": None if data.state is None else serialize_recorder_state(data.state),
|
|
9124
10219
|
"startTimestamp": None if data.startTimestamp is None else serialize_str(data.startTimestamp),
|
|
9125
10220
|
"endTimestamp": None if data.endTimestamp is None else serialize_str(data.endTimestamp),
|
|
10221
|
+
"status": None if data.status is None else serialize_recorder_status(data.status),
|
|
9126
10222
|
}
|
|
9127
10223
|
|
|
9128
10224
|
@dataclass
|