Skip to content

Commit 4951cfa

Browse files
committed
no longer a breaking change, using union type
1 parent 601716c commit 4951cfa

File tree

8 files changed

+53
-187
lines changed

8 files changed

+53
-187
lines changed

docs/examples/example.ipynb

Lines changed: 6 additions & 175 deletions
Large diffs are not rendered by default.

docs/examples/my_cool_arm.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import asyncio
44
import json
5-
from typing import Any, Dict, List, Optional, Tuple
5+
from typing import Any, Dict, List, Mapping, Optional, Tuple, Union
66

77
from viam.components.arm import Arm, JointPositions, KinematicsFileFormat, Pose
88
from viam.operations import run_with_operation
9-
from viam.proto.common import Capsule, Geometry, Sphere
9+
from viam.proto.common import Capsule, Geometry, Mesh, Sphere
1010

1111

1212
class MyCoolArm(Arm):
@@ -100,7 +100,9 @@ async def is_moving(self) -> bool:
100100
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
101101
return self.geometries
102102

103-
async def get_kinematics(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[KinematicsFileFormat.ValueType, bytes]:
103+
async def get_kinematics(
104+
self, extra: Optional[Dict[str, Any]] = None, **kwargs
105+
) -> Union[Tuple[KinematicsFileFormat.ValueType, bytes], Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]]:
104106
return KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, self.kinematics
105107

106108
async def close(self):

src/viam/components/arm/arm.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import abc
2-
from typing import Any, Dict, Final, Optional, Tuple, Mapping
2+
from typing import Any, Dict, Final, Optional, Tuple, Mapping, Union
33

44
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
55

66
from ..component_base import ComponentBase
77
from . import JointPositions, KinematicsFileFormat, Pose
88
from viam.proto.common import Mesh
99

10+
KinematicsReturn = Union[
11+
Tuple[KinematicsFileFormat.ValueType, bytes],
12+
Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]],
13+
]
14+
1015

1116
class Arm(ComponentBase):
1217
"""
@@ -196,7 +201,7 @@ async def is_moving(self) -> bool:
196201
@abc.abstractmethod
197202
async def get_kinematics(
198203
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
199-
) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]:
204+
) -> KinematicsReturn:
200205
"""
201206
Get the kinematics information associated with the arm.
202207
@@ -218,6 +223,7 @@ async def get_kinematics(
218223
file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or
219224
Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``),
220225
and the second [1] value represents the byte contents of the file.
226+
If available, a third [2] value provides meshes keyed by URDF filepath.
221227
222228
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#getkinematics>`_.
223229
"""

src/viam/components/arm/service.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,12 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics
109109
assert request is not None
110110
arm = self.get_resource(request.name)
111111
timeout = stream.deadline.time_remaining() if stream.deadline else None
112-
format, kinematics_data, meshes = await arm.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
112+
kinematics = await arm.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
113+
if len(kinematics) == 2:
114+
format, kinematics_data = kinematics
115+
meshes = {}
116+
else:
117+
format, kinematics_data, meshes = kinematics
113118
response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data, meshes_by_urdf_filepath=meshes)
114119
await stream.send_message(response)
115120

src/viam/components/gantry/gantry.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import abc
2-
from typing import Any, Dict, Final, List, Optional, Tuple, Mapping
2+
from typing import Any, Dict, Final, List, Optional, Tuple, Mapping, Union
33

44
from viam.components.arm import KinematicsFileFormat
55
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
66
from viam.proto.common import Mesh
77

88
from ..component_base import ComponentBase
99

10+
KinematicsReturn = Union[
11+
Tuple[KinematicsFileFormat.ValueType, bytes],
12+
Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]],
13+
]
14+
1015

1116
class Gantry(ComponentBase):
1217
"""
@@ -160,7 +165,7 @@ async def is_moving(self) -> bool:
160165
@abc.abstractmethod
161166
async def get_kinematics(
162167
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
163-
) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]:
168+
) -> KinematicsReturn:
164169
"""
165170
Get the kinematics information associated with the gantry.
166171
@@ -182,6 +187,7 @@ async def get_kinematics(
182187
file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or
183188
Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``),
184189
and the second [1] value represents the byte contents of the file.
190+
If available, a third [2] value provides meshes keyed by URDF filepath.
185191
186192
For more information, see `Arm component <https://docs.viam.com/dev/reference/apis/components/arm/#getkinematics>`_.
187193
"""

src/viam/components/gantry/service.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,12 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics
115115
assert request is not None
116116
gantry = self.get_resource(request.name)
117117
timeout = stream.deadline.time_remaining() if stream.deadline else None
118-
format, data, meshes = await gantry.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
118+
kinematics = await gantry.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
119+
if len(kinematics) == 2:
120+
format, data = kinematics
121+
meshes = {}
122+
else:
123+
format, data, meshes = kinematics
119124
response = GetKinematicsResponse(format=format, kinematics_data=data, meshes_by_urdf_filepath=meshes)
120125
await stream.send_message(response)
121126

src/viam/components/gripper/gripper.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
import abc
22
from dataclasses import dataclass
3-
from typing import Any, Dict, Final, Optional, Tuple, Mapping
3+
from typing import Any, Dict, Final, Optional, Tuple, Mapping, Union
44

55
from viam.components.component_base import ComponentBase
66
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
77
from viam.proto.common import Mesh
88

99
from . import KinematicsFileFormat
1010

11+
KinematicsReturn = Union[
12+
Tuple[KinematicsFileFormat.ValueType, bytes],
13+
Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]],
14+
]
15+
1116

1217
class Gripper(ComponentBase):
1318
"""
@@ -162,7 +167,7 @@ async def get_kinematics(
162167
extra: Optional[Dict[str, Any]] = None,
163168
timeout: Optional[float] = None,
164169
**kwargs,
165-
) -> Tuple[KinematicsFileFormat.ValueType, bytes, Mapping[str, Mesh]]:
170+
) -> KinematicsReturn:
166171
"""
167172
Get the kinematics information associated with the gripper.
168173
@@ -184,6 +189,7 @@ async def get_kinematics(
184189
file, either in URDF format (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_URDF``) or
185190
Viam's kinematic parameter format (spatial vector algebra) (``KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA``),
186191
and the second [1] value represents the byte contents of the file.
192+
If available, a third [2] value provides meshes keyed by URDF filepath.
187193
188194
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#getkinematics>`_.
189195
"""

src/viam/components/gripper/service.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ async def GetKinematics(self, stream: Stream[GetKinematicsRequest, GetKinematics
105105
assert request is not None
106106
gripper = self.get_resource(request.name)
107107
timeout = stream.deadline.time_remaining() if stream.deadline else None
108-
format, kinematics_data, meshes = await gripper.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout)
108+
kinematics = await gripper.get_kinematics(extra=struct_to_dict(request.extra), timeout=timeout)
109+
if len(kinematics) == 2:
110+
format, kinematics_data = kinematics
111+
meshes = {}
112+
else:
113+
format, kinematics_data, meshes = kinematics
109114
response = GetKinematicsResponse(format=format, kinematics_data=kinematics_data, meshes_by_urdf_filepath=meshes)
110115
await stream.send_message(response)

0 commit comments

Comments
 (0)