Skip to content

Commit ba2c70c

Browse files
[RSDK-10924] Add IsHoldingSomething to Gripper API (#935)
Co-authored-by: viambot <[email protected]>
1 parent 48fa272 commit ba2c70c

File tree

10 files changed

+156
-10
lines changed

10 files changed

+156
-10
lines changed

examples/server/v1/components.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,17 +513,28 @@ class ExampleGripper(Gripper):
513513
def __init__(self, name: str):
514514
self.opened = False
515515
self.is_stopped = True
516+
self.holding_something = False
516517
self.kinematics = (KinematicsFileFormat.KINEMATICS_FILE_FORMAT_SVA, b"\x00\x01\x02")
517518
super().__init__(name)
518519

519520
async def open(self, extra: Optional[Dict[str, Any]] = None, **kwargs):
520521
self.opened = True
521522
self.is_stopped = False
523+
self.holding_something = False
522524

523525
async def grab(self, extra: Optional[Dict[str, Any]] = None, **kwargs) -> bool:
524526
self.opened = False
525527
self.is_stopped = False
526-
return random.choice([True, False])
528+
self.holding_something = random.choice([True, False])
529+
return self.holding_something
530+
531+
async def is_holding_something(
532+
self,
533+
*,
534+
extra: Optional[Dict[str, Any]] = None,
535+
**kwargs
536+
) -> Gripper.HoldingStatus:
537+
return Gripper.HoldingStatus(self.holding_something)
527538

528539
async def stop(self, extra: Optional[Dict[str, Any]] = None, **kwargs):
529540
self.is_stopped = True

src/viam/components/gripper/client.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
IsMovingResponse,
1212
OpenRequest,
1313
StopRequest,
14+
IsHoldingSomethingRequest,
15+
IsHoldingSomethingResponse
1416
)
1517
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
1618
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
@@ -63,6 +65,18 @@ async def stop(
6365
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
6466
await self.client.Stop(request, timeout=timeout, metadata=md)
6567

68+
async def is_holding_something(
69+
self,
70+
*,
71+
extra: Optional[Dict[str, Any]] = None,
72+
timeout: Optional[float] = None,
73+
**kwargs
74+
) -> Gripper.HoldingStatus:
75+
md = kwargs.get("metadata", self.Metadata()).proto
76+
request = IsHoldingSomethingRequest(name=self.name, extra=dict_to_struct(extra))
77+
response: IsHoldingSomethingResponse = await self.client.IsHoldingSomething(request, timeout=timeout, metadata=md)
78+
return Gripper.HoldingStatus(response.is_holding_something, meta=struct_to_dict(response.meta))
79+
6680
async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
6781
md = kwargs.get("metadata", self.Metadata()).proto
6882
request = IsMovingRequest(name=self.name)

src/viam/components/gripper/gripper.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import abc
2+
from dataclasses import dataclass
23
from typing import Any, Dict, Final, Optional, Tuple
34

45
from viam.components.component_base import ComponentBase
56
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
67

78
from . import KinematicsFileFormat
89

9-
1010
class Gripper(ComponentBase):
1111
"""
1212
Gripper represents a physical robotic gripper.
@@ -26,6 +26,16 @@ class Gripper(ComponentBase):
2626
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "gripper"
2727
)
2828

29+
@dataclass
30+
class HoldingStatus:
31+
"""
32+
HoldingStatus represents whether the gripper is currently holding onto an object. The
33+
additional ``meta`` attribute contains other optional contextual information (i.e. confidence
34+
interval, pressure, etc.)
35+
"""
36+
is_holding_something: bool
37+
meta: Optional[Dict[str, Any]] = None
38+
2939
@abc.abstractmethod
3040
async def open(
3141
self,
@@ -73,6 +83,33 @@ async def grab(
7383
"""
7484
...
7585

86+
@abc.abstractmethod
87+
async def is_holding_something(
88+
self,
89+
*,
90+
extra: Optional[Dict[str, Any]] = None,
91+
timeout: Optional[float] = None,
92+
**kwargs,
93+
) -> HoldingStatus:
94+
"""
95+
Get information about whether the gripper is currently holding onto an object.
96+
97+
::
98+
99+
my_gripper = Gripper.from_robot(robot=machine, name="my_gripper")
100+
101+
# Grab with the gripper.
102+
holding_status = await my_gripper.is_holding_something()
103+
# get the boolean result
104+
is_holding_something = holding_status.is_holding_something
105+
106+
Returns:
107+
HoldingStatus: see documentation on `HoldingStatus` for more information
108+
109+
For more information, see `Gripper component <https://docs.viam.com/dev/reference/apis/components/gripper/#grab>`_.
110+
111+
"""
112+
76113
@abc.abstractmethod
77114
async def stop(
78115
self,

src/viam/components/gripper/service.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
OpenResponse,
1919
StopRequest,
2020
StopResponse,
21+
IsHoldingSomethingRequest,
22+
IsHoldingSomethingResponse
2123
)
2224
from viam.resource.rpc_service_base import ResourceRPCServiceBase
2325
from viam.utils import dict_to_struct, struct_to_dict
@@ -69,6 +71,16 @@ async def IsMoving(self, stream: Stream[IsMovingRequest, IsMovingResponse]) -> N
6971
response = IsMovingResponse(is_moving=is_moving)
7072
await stream.send_message(response)
7173

74+
async def IsHoldingSomething(self, stream: Stream[IsHoldingSomethingRequest, IsHoldingSomethingResponse]) -> None:
75+
request = await stream.recv_message()
76+
assert request is not None
77+
name = request.name
78+
gripper = self.get_resource(name)
79+
holding_status = await gripper.is_holding_something()
80+
response = IsHoldingSomethingResponse(
81+
is_holding_something=holding_status.is_holding_something, meta=dict_to_struct(holding_status.meta))
82+
await stream.send_message(response)
83+
7284
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
7385
request = await stream.recv_message()
7486
assert request is not None

src/viam/gen/component/gripper/v1/gripper_grpc.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ async def Stop(self, stream: 'grpclib.server.Stream[component.gripper.v1.gripper
2828
async def IsMoving(self, stream: 'grpclib.server.Stream[component.gripper.v1.gripper_pb2.IsMovingRequest, component.gripper.v1.gripper_pb2.IsMovingResponse]') -> None:
2929
pass
3030

31+
@abc.abstractmethod
32+
async def IsHoldingSomething(self, stream: 'grpclib.server.Stream[component.gripper.v1.gripper_pb2.IsHoldingSomethingRequest, component.gripper.v1.gripper_pb2.IsHoldingSomethingResponse]') -> None:
33+
pass
34+
3135
@abc.abstractmethod
3236
async def DoCommand(self, stream: 'grpclib.server.Stream[common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse]') -> None:
3337
pass
@@ -41,7 +45,7 @@ async def GetKinematics(self, stream: 'grpclib.server.Stream[common.v1.common_pb
4145
pass
4246

4347
def __mapping__(self) -> typing.Dict[str, grpclib.const.Handler]:
44-
return {'/viam.component.gripper.v1.GripperService/Open': grpclib.const.Handler(self.Open, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.OpenRequest, component.gripper.v1.gripper_pb2.OpenResponse), '/viam.component.gripper.v1.GripperService/Grab': grpclib.const.Handler(self.Grab, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.GrabRequest, component.gripper.v1.gripper_pb2.GrabResponse), '/viam.component.gripper.v1.GripperService/Stop': grpclib.const.Handler(self.Stop, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.StopRequest, component.gripper.v1.gripper_pb2.StopResponse), '/viam.component.gripper.v1.GripperService/IsMoving': grpclib.const.Handler(self.IsMoving, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.IsMovingRequest, component.gripper.v1.gripper_pb2.IsMovingResponse), '/viam.component.gripper.v1.GripperService/DoCommand': grpclib.const.Handler(self.DoCommand, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse), '/viam.component.gripper.v1.GripperService/GetGeometries': grpclib.const.Handler(self.GetGeometries, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse), '/viam.component.gripper.v1.GripperService/GetKinematics': grpclib.const.Handler(self.GetKinematics, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetKinematicsRequest, common.v1.common_pb2.GetKinematicsResponse)}
48+
return {'/viam.component.gripper.v1.GripperService/Open': grpclib.const.Handler(self.Open, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.OpenRequest, component.gripper.v1.gripper_pb2.OpenResponse), '/viam.component.gripper.v1.GripperService/Grab': grpclib.const.Handler(self.Grab, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.GrabRequest, component.gripper.v1.gripper_pb2.GrabResponse), '/viam.component.gripper.v1.GripperService/Stop': grpclib.const.Handler(self.Stop, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.StopRequest, component.gripper.v1.gripper_pb2.StopResponse), '/viam.component.gripper.v1.GripperService/IsMoving': grpclib.const.Handler(self.IsMoving, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.IsMovingRequest, component.gripper.v1.gripper_pb2.IsMovingResponse), '/viam.component.gripper.v1.GripperService/IsHoldingSomething': grpclib.const.Handler(self.IsHoldingSomething, grpclib.const.Cardinality.UNARY_UNARY, component.gripper.v1.gripper_pb2.IsHoldingSomethingRequest, component.gripper.v1.gripper_pb2.IsHoldingSomethingResponse), '/viam.component.gripper.v1.GripperService/DoCommand': grpclib.const.Handler(self.DoCommand, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse), '/viam.component.gripper.v1.GripperService/GetGeometries': grpclib.const.Handler(self.GetGeometries, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse), '/viam.component.gripper.v1.GripperService/GetKinematics': grpclib.const.Handler(self.GetKinematics, grpclib.const.Cardinality.UNARY_UNARY, common.v1.common_pb2.GetKinematicsRequest, common.v1.common_pb2.GetKinematicsResponse)}
4549

4650
class UnimplementedGripperServiceBase(GripperServiceBase):
4751

@@ -57,6 +61,9 @@ async def Stop(self, stream: 'grpclib.server.Stream[component.gripper.v1.gripper
5761
async def IsMoving(self, stream: 'grpclib.server.Stream[component.gripper.v1.gripper_pb2.IsMovingRequest, component.gripper.v1.gripper_pb2.IsMovingResponse]') -> None:
5862
raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
5963

64+
async def IsHoldingSomething(self, stream: 'grpclib.server.Stream[component.gripper.v1.gripper_pb2.IsHoldingSomethingRequest, component.gripper.v1.gripper_pb2.IsHoldingSomethingResponse]') -> None:
65+
raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
66+
6067
async def DoCommand(self, stream: 'grpclib.server.Stream[common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse]') -> None:
6168
raise grpclib.exceptions.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
6269

@@ -73,6 +80,7 @@ def __init__(self, channel: grpclib.client.Channel) -> None:
7380
self.Grab = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.gripper.v1.GripperService/Grab', component.gripper.v1.gripper_pb2.GrabRequest, component.gripper.v1.gripper_pb2.GrabResponse)
7481
self.Stop = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.gripper.v1.GripperService/Stop', component.gripper.v1.gripper_pb2.StopRequest, component.gripper.v1.gripper_pb2.StopResponse)
7582
self.IsMoving = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.gripper.v1.GripperService/IsMoving', component.gripper.v1.gripper_pb2.IsMovingRequest, component.gripper.v1.gripper_pb2.IsMovingResponse)
83+
self.IsHoldingSomething = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.gripper.v1.GripperService/IsHoldingSomething', component.gripper.v1.gripper_pb2.IsHoldingSomethingRequest, component.gripper.v1.gripper_pb2.IsHoldingSomethingResponse)
7684
self.DoCommand = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.gripper.v1.GripperService/DoCommand', common.v1.common_pb2.DoCommandRequest, common.v1.common_pb2.DoCommandResponse)
7785
self.GetGeometries = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.gripper.v1.GripperService/GetGeometries', common.v1.common_pb2.GetGeometriesRequest, common.v1.common_pb2.GetGeometriesResponse)
7886
self.GetKinematics = grpclib.client.UnaryUnaryMethod(channel, '/viam.component.gripper.v1.GripperService/GetKinematics', common.v1.common_pb2.GetKinematicsRequest, common.v1.common_pb2.GetKinematicsResponse)

src/viam/gen/component/gripper/v1/gripper_pb2.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from ....common.v1 import common_pb2 as common_dot_v1_dot_common__pb2
1010
from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
1111
from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
12-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n"component/gripper/v1/gripper.proto\x12\x19viam.component.gripper.v1\x1a\x16common/v1/common.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1cgoogle/protobuf/struct.proto"P\n\x0bOpenRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x0e\n\x0cOpenResponse"P\n\x0bGrabRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"W\n\x0cGrabResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"P\n\x0bStopRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x0e\n\x0cStopResponse"%\n\x0fIsMovingRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"/\n\x10IsMovingResponse\x12\x1b\n\tis_moving\x18\x01 \x01(\x08R\x08isMoving2\xa0\x08\n\x0eGripperService\x12\x8f\x01\n\x04Open\x12&.viam.component.gripper.v1.OpenRequest\x1a\'.viam.component.gripper.v1.OpenResponse"6\xa0\x92)\x01\x82\xd3\xe4\x93\x02,\x1a*/viam/api/v1/component/gripper/{name}/open\x12\x8f\x01\n\x04Grab\x12&.viam.component.gripper.v1.GrabRequest\x1a\'.viam.component.gripper.v1.GrabResponse"6\xa0\x92)\x01\x82\xd3\xe4\x93\x02,\x1a*/viam/api/v1/component/gripper/{name}/grab\x12\x8b\x01\n\x04Stop\x12&.viam.component.gripper.v1.StopRequest\x1a\'.viam.component.gripper.v1.StopResponse"2\x82\xd3\xe4\x93\x02,"*/viam/api/v1/component/gripper/{name}/stop\x12\x9c\x01\n\x08IsMoving\x12*.viam.component.gripper.v1.IsMovingRequest\x1a+.viam.component.gripper.v1.IsMovingResponse"7\x82\xd3\xe4\x93\x021\x12//viam/api/v1/component/gripper/{name}/is_moving\x12\x8a\x01\n\tDoCommand\x12 .viam.common.v1.DoCommandRequest\x1a!.viam.common.v1.DoCommandResponse"8\x82\xd3\xe4\x93\x022"0/viam/api/v1/component/gripper/{name}/do_command\x12\x96\x01\n\rGetGeometries\x12$.viam.common.v1.GetGeometriesRequest\x1a%.viam.common.v1.GetGeometriesResponse"8\x82\xd3\xe4\x93\x022\x120/viam/api/v1/component/gripper/{name}/geometries\x12\x96\x01\n\rGetKinematics\x12$.viam.common.v1.GetKinematicsRequest\x1a%.viam.common.v1.GetKinematicsResponse"8\x82\xd3\xe4\x93\x022\x120/viam/api/v1/component/gripper/{name}/kinematicsBE\n\x1dcom.viam.component.gripper.v1Z$go.viam.com/api/component/gripper/v1b\x06proto3')
12+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n"component/gripper/v1/gripper.proto\x12\x19viam.component.gripper.v1\x1a\x16common/v1/common.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1cgoogle/protobuf/struct.proto"P\n\x0bOpenRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x0e\n\x0cOpenResponse"P\n\x0bGrabRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"W\n\x0cGrabResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"P\n\x0bStopRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"\x0e\n\x0cStopResponse"%\n\x0fIsMovingRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name"/\n\x10IsMovingResponse\x12\x1b\n\tis_moving\x18\x01 \x01(\x08R\x08isMoving"^\n\x19IsHoldingSomethingRequest\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12-\n\x05extra\x18c \x01(\x0b2\x17.google.protobuf.StructR\x05extra"{\n\x1aIsHoldingSomethingResponse\x120\n\x14is_holding_something\x18\x01 \x01(\x08R\x12isHoldingSomething\x12+\n\x04meta\x18c \x01(\x0b2\x17.google.protobuf.StructR\x04meta2\xe8\t\n\x0eGripperService\x12\x8f\x01\n\x04Open\x12&.viam.component.gripper.v1.OpenRequest\x1a\'.viam.component.gripper.v1.OpenResponse"6\xa0\x92)\x01\x82\xd3\xe4\x93\x02,\x1a*/viam/api/v1/component/gripper/{name}/open\x12\x8f\x01\n\x04Grab\x12&.viam.component.gripper.v1.GrabRequest\x1a\'.viam.component.gripper.v1.GrabResponse"6\xa0\x92)\x01\x82\xd3\xe4\x93\x02,\x1a*/viam/api/v1/component/gripper/{name}/grab\x12\x8b\x01\n\x04Stop\x12&.viam.component.gripper.v1.StopRequest\x1a\'.viam.component.gripper.v1.StopResponse"2\x82\xd3\xe4\x93\x02,"*/viam/api/v1/component/gripper/{name}/stop\x12\x9c\x01\n\x08IsMoving\x12*.viam.component.gripper.v1.IsMovingRequest\x1a+.viam.component.gripper.v1.IsMovingResponse"7\x82\xd3\xe4\x93\x021\x12//viam/api/v1/component/gripper/{name}/is_moving\x12\xc5\x01\n\x12IsHoldingSomething\x124.viam.component.gripper.v1.IsHoldingSomethingRequest\x1a5.viam.component.gripper.v1.IsHoldingSomethingResponse"B\x82\xd3\xe4\x93\x02<\x12:/viam/api/v1/component/gripper/{name}/is_holding_something\x12\x8a\x01\n\tDoCommand\x12 .viam.common.v1.DoCommandRequest\x1a!.viam.common.v1.DoCommandResponse"8\x82\xd3\xe4\x93\x022"0/viam/api/v1/component/gripper/{name}/do_command\x12\x96\x01\n\rGetGeometries\x12$.viam.common.v1.GetGeometriesRequest\x1a%.viam.common.v1.GetGeometriesResponse"8\x82\xd3\xe4\x93\x022\x120/viam/api/v1/component/gripper/{name}/geometries\x12\x96\x01\n\rGetKinematics\x12$.viam.common.v1.GetKinematicsRequest\x1a%.viam.common.v1.GetKinematicsResponse"8\x82\xd3\xe4\x93\x022\x120/viam/api/v1/component/gripper/{name}/kinematicsBE\n\x1dcom.viam.component.gripper.v1Z$go.viam.com/api/component/gripper/v1b\x06proto3')
1313
_globals = globals()
1414
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
1515
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'component.gripper.v1.gripper_pb2', _globals)
@@ -24,6 +24,8 @@
2424
_globals['_GRIPPERSERVICE'].methods_by_name['Stop']._serialized_options = b'\x82\xd3\xe4\x93\x02,"*/viam/api/v1/component/gripper/{name}/stop'
2525
_globals['_GRIPPERSERVICE'].methods_by_name['IsMoving']._loaded_options = None
2626
_globals['_GRIPPERSERVICE'].methods_by_name['IsMoving']._serialized_options = b'\x82\xd3\xe4\x93\x021\x12//viam/api/v1/component/gripper/{name}/is_moving'
27+
_globals['_GRIPPERSERVICE'].methods_by_name['IsHoldingSomething']._loaded_options = None
28+
_globals['_GRIPPERSERVICE'].methods_by_name['IsHoldingSomething']._serialized_options = b'\x82\xd3\xe4\x93\x02<\x12:/viam/api/v1/component/gripper/{name}/is_holding_something'
2729
_globals['_GRIPPERSERVICE'].methods_by_name['DoCommand']._loaded_options = None
2830
_globals['_GRIPPERSERVICE'].methods_by_name['DoCommand']._serialized_options = b'\x82\xd3\xe4\x93\x022"0/viam/api/v1/component/gripper/{name}/do_command'
2931
_globals['_GRIPPERSERVICE'].methods_by_name['GetGeometries']._loaded_options = None
@@ -46,5 +48,9 @@
4648
_globals['_ISMOVINGREQUEST']._serialized_end = 553
4749
_globals['_ISMOVINGRESPONSE']._serialized_start = 555
4850
_globals['_ISMOVINGRESPONSE']._serialized_end = 602
49-
_globals['_GRIPPERSERVICE']._serialized_start = 605
50-
_globals['_GRIPPERSERVICE']._serialized_end = 1661
51+
_globals['_ISHOLDINGSOMETHINGREQUEST']._serialized_start = 604
52+
_globals['_ISHOLDINGSOMETHINGREQUEST']._serialized_end = 698
53+
_globals['_ISHOLDINGSOMETHINGRESPONSE']._serialized_start = 700
54+
_globals['_ISHOLDINGSOMETHINGRESPONSE']._serialized_end = 823
55+
_globals['_GRIPPERSERVICE']._serialized_start = 826
56+
_globals['_GRIPPERSERVICE']._serialized_end = 2082

0 commit comments

Comments
 (0)