viam-sdk 0.25.2__py3-none-linux_armv7l.whl → 0.62.0__py3-none-linux_armv7l.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.
- viam/app/_logs.py +3 -6
- viam/app/app_client.py +606 -262
- viam/app/billing_client.py +60 -18
- viam/app/data_client.py +1086 -315
- viam/app/ml_training_client.py +51 -48
- viam/app/provisioning_client.py +3 -5
- viam/app/viam_client.py +105 -11
- viam/components/arm/__init__.py +1 -25
- viam/components/arm/arm.py +21 -22
- viam/components/arm/client.py +27 -30
- viam/components/arm/service.py +3 -3
- viam/components/audio_in/__init__.py +24 -0
- viam/components/audio_in/audio_in.py +74 -0
- viam/components/audio_in/client.py +76 -0
- viam/components/audio_in/service.py +83 -0
- viam/components/audio_input/__init__.py +1 -1
- viam/components/audio_input/audio_input.py +4 -3
- viam/components/audio_input/client.py +19 -8
- viam/components/audio_input/service.py +10 -0
- viam/components/audio_out/__init__.py +21 -0
- viam/components/audio_out/audio_out.py +72 -0
- viam/components/audio_out/client.py +67 -0
- viam/components/audio_out/service.py +63 -0
- viam/components/base/__init__.py +2 -10
- viam/components/base/base.py +20 -20
- viam/components/base/client.py +27 -30
- viam/components/board/__init__.py +2 -25
- viam/components/board/board.py +39 -77
- viam/components/board/client.py +39 -73
- viam/components/button/__init__.py +10 -0
- viam/components/button/button.py +41 -0
- viam/components/button/client.py +52 -0
- viam/components/button/service.py +46 -0
- viam/components/camera/__init__.py +1 -1
- viam/components/camera/camera.py +31 -22
- viam/components/camera/client.py +30 -20
- viam/components/camera/service.py +14 -12
- viam/components/component_base.py +10 -7
- viam/components/encoder/__init__.py +1 -1
- viam/components/encoder/client.py +15 -16
- viam/components/encoder/encoder.py +9 -9
- viam/components/gantry/__init__.py +1 -13
- viam/components/gantry/client.py +41 -28
- viam/components/gantry/gantry.py +48 -17
- viam/components/gantry/service.py +21 -5
- viam/components/generic/__init__.py +1 -1
- viam/components/generic/client.py +11 -7
- viam/components/generic/generic.py +3 -3
- viam/components/gripper/__init__.py +3 -12
- viam/components/gripper/client.py +43 -20
- viam/components/gripper/gripper.py +87 -12
- viam/components/gripper/service.py +32 -3
- viam/components/input/__init__.py +1 -14
- viam/components/input/client.py +22 -23
- viam/components/input/input.py +18 -12
- viam/components/motor/__init__.py +1 -21
- viam/components/motor/client.py +36 -42
- viam/components/motor/motor.py +24 -24
- viam/components/movement_sensor/__init__.py +1 -1
- viam/components/movement_sensor/client.py +33 -40
- viam/components/movement_sensor/movement_sensor.py +12 -12
- viam/components/pose_tracker/__init__.py +1 -1
- viam/components/pose_tracker/client.py +9 -8
- viam/components/pose_tracker/pose_tracker.py +2 -2
- viam/components/power_sensor/__init__.py +1 -1
- viam/components/power_sensor/client.py +15 -18
- viam/components/power_sensor/power_sensor.py +12 -12
- viam/components/sensor/__init__.py +1 -1
- viam/components/sensor/client.py +9 -8
- viam/components/sensor/sensor.py +5 -5
- viam/components/servo/__init__.py +1 -13
- viam/components/servo/client.py +18 -18
- viam/components/servo/servo.py +12 -12
- viam/components/switch/__init__.py +10 -0
- viam/components/switch/client.py +83 -0
- viam/components/switch/service.py +72 -0
- viam/components/switch/switch.py +95 -0
- viam/gen/app/agent/v1/agent_pb2.py +40 -29
- viam/gen/app/agent/v1/agent_pb2.pyi +73 -11
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +45 -42
- viam/gen/app/data/v1/data_grpc.py +98 -2
- viam/gen/app/data/v1/data_pb2.py +238 -119
- viam/gen/app/data/v1/data_pb2.pyi +804 -34
- viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +57 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +387 -0
- viam/gen/app/dataset/v1/dataset_grpc.py +10 -2
- viam/gen/app/dataset/v1/dataset_pb2.py +38 -31
- viam/gen/app/dataset/v1/dataset_pb2.pyi +36 -1
- viam/gen/app/datasync/v1/data_sync_grpc.py +1 -1
- viam/gen/app/datasync/v1/data_sync_pb2.py +61 -51
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +52 -12
- viam/gen/app/mlinference/__init__.py +0 -0
- viam/gen/app/mlinference/v1/__init__.py +0 -0
- viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
- viam/gen/app/mltraining/v1/ml_training_grpc.py +18 -2
- viam/gen/app/mltraining/v1/ml_training_pb2.py +134 -101
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +193 -7
- viam/gen/app/packages/v1/packages_pb2.py +43 -40
- viam/gen/app/v1/app_grpc.py +290 -2
- viam/gen/app/v1/app_pb2.py +670 -453
- viam/gen/app/v1/app_pb2.pyi +3133 -947
- viam/gen/app/v1/billing_grpc.py +34 -2
- viam/gen/app/v1/billing_pb2.py +94 -35
- viam/gen/app/v1/billing_pb2.pyi +314 -61
- viam/gen/app/v1/end_user_pb2.py +50 -29
- viam/gen/app/v1/robot_pb2.py +120 -111
- viam/gen/app/v1/robot_pb2.pyi +137 -15
- viam/gen/common/v1/common_pb2.py +86 -66
- viam/gen/common/v1/common_pb2.pyi +184 -8
- viam/gen/component/arm/v1/arm_grpc.py +18 -2
- viam/gen/component/arm/v1/arm_pb2.py +68 -55
- viam/gen/component/arm/v1/arm_pb2.pyi +73 -3
- viam/gen/component/audioin/__init__.py +0 -0
- viam/gen/component/audioin/v1/__init__.py +0 -0
- viam/gen/component/audioin/v1/audioin_grpc.py +54 -0
- viam/gen/component/audioin/v1/audioin_pb2.py +34 -0
- viam/gen/component/audioin/v1/audioin_pb2.pyi +94 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.py +35 -32
- viam/gen/component/audioout/__init__.py +0 -0
- viam/gen/component/audioout/v1/__init__.py +0 -0
- viam/gen/component/audioout/v1/audioout_grpc.py +54 -0
- viam/gen/component/audioout/v1/audioout_pb2.py +32 -0
- viam/gen/component/audioout/v1/audioout_pb2.pyi +47 -0
- viam/gen/component/base/v1/base_pb2.py +57 -54
- viam/gen/component/board/v1/board_pb2.py +93 -90
- viam/gen/component/button/__init__.py +0 -0
- viam/gen/component/button/v1/__init__.py +0 -0
- viam/gen/component/button/v1/button_grpc.py +38 -0
- viam/gen/component/button/v1/button_pb2.py +28 -0
- viam/gen/component/button/v1/button_pb2.pyi +39 -0
- viam/gen/component/camera/v1/camera_pb2.py +58 -55
- viam/gen/component/camera/v1/camera_pb2.pyi +31 -7
- viam/gen/component/encoder/v1/encoder_pb2.py +35 -32
- viam/gen/component/gantry/v1/gantry_grpc.py +9 -1
- viam/gen/component/gantry/v1/gantry_pb2.py +56 -51
- viam/gen/component/generic/v1/generic_pb2.py +15 -12
- viam/gen/component/gripper/v1/gripper_grpc.py +18 -2
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -37
- viam/gen/component/gripper/v1/gripper_pb2.pyi +43 -1
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +45 -42
- viam/gen/component/motor/v1/motor_pb2.py +77 -74
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +69 -66
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +25 -22
- viam/gen/component/powersensor/v1/powersensor_pb2.py +33 -30
- viam/gen/component/sensor/v1/sensor_pb2.py +17 -14
- viam/gen/component/servo/v1/servo_pb2.py +41 -38
- viam/gen/component/switch/__init__.py +0 -0
- viam/gen/component/switch/v1/__init__.py +0 -0
- viam/gen/component/switch/v1/switch_grpc.py +54 -0
- viam/gen/component/switch/v1/switch_pb2.py +40 -0
- viam/gen/component/switch/v1/switch_pb2.pyi +116 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
- viam/gen/module/v1/module_pb2.py +36 -33
- viam/gen/module/v1/module_pb2.pyi +7 -2
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +26 -23
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
- viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +18 -4
- viam/gen/provisioning/v1/provisioning_grpc.py +10 -2
- viam/gen/provisioning/v1/provisioning_pb2.py +38 -31
- viam/gen/provisioning/v1/provisioning_pb2.pyi +20 -2
- viam/gen/robot/v1/robot_grpc.py +61 -29
- viam/gen/robot/v1/robot_pb2.py +186 -155
- viam/gen/robot/v1/robot_pb2.pyi +278 -59
- viam/gen/service/datamanager/v1/data_manager_grpc.py +11 -2
- viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +47 -1
- viam/gen/service/discovery/__init__.py +0 -0
- viam/gen/service/discovery/v1/__init__.py +0 -0
- viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
- viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
- viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
- viam/gen/service/generic/v1/generic_pb2.py +13 -10
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +75 -72
- viam/gen/service/motion/v1/motion_pb2.py +118 -85
- viam/gen/service/motion/v1/motion_pb2.pyi +130 -68
- viam/gen/service/navigation/v1/navigation_pb2.py +75 -72
- viam/gen/service/sensors/v1/sensors_pb2.py +59 -56
- viam/gen/service/shell/v1/shell_pb2.py +35 -32
- viam/gen/service/slam/v1/slam_pb2.py +43 -40
- viam/gen/service/slam/v1/slam_pb2.pyi +1 -1
- viam/gen/service/video/__init__.py +0 -0
- viam/gen/service/video/v1/__init__.py +0 -0
- viam/gen/service/video/v1/video_grpc.py +39 -0
- viam/gen/service/video/v1/video_pb2.py +29 -0
- viam/gen/service/video/v1/video_pb2.pyi +72 -0
- viam/gen/service/vision/v1/vision_pb2.py +60 -57
- viam/gen/service/vision/v1/vision_pb2.pyi +28 -3
- viam/gen/service/worldstatestore/__init__.py +0 -0
- viam/gen/service/worldstatestore/v1/__init__.py +0 -0
- viam/gen/service/worldstatestore/v1/world_state_store_grpc.py +55 -0
- viam/gen/service/worldstatestore/v1/world_state_store_pb2.py +39 -0
- viam/gen/service/worldstatestore/v1/world_state_store_pb2.pyi +171 -0
- viam/gen/stream/v1/stream_grpc.py +17 -1
- viam/gen/stream/v1/stream_pb2.py +34 -21
- viam/gen/stream/v1/stream_pb2.pyi +79 -1
- viam/gen/tagger/v1/tagger_pb2.py +9 -8
- viam/logging.py +77 -18
- viam/media/audio.py +28 -0
- viam/media/utils/pil/__init__.py +7 -3
- viam/media/video.py +80 -17
- viam/module/module.py +111 -38
- viam/module/resource_data_consumer.py +41 -0
- viam/module/service.py +9 -1
- viam/module/types.py +2 -4
- viam/proto/app/__init__.py +199 -0
- viam/proto/app/agent/__init__.py +5 -2
- viam/proto/app/billing.py +31 -4
- viam/proto/app/cloudslam/__init__.py +1 -0
- viam/proto/app/data/__init__.py +63 -0
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +5 -0
- viam/proto/app/datasync/__init__.py +3 -0
- viam/proto/app/end_user.py +1 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +13 -0
- viam/proto/app/packages/__init__.py +1 -0
- viam/proto/app/robot.py +7 -0
- viam/proto/common/__init__.py +15 -0
- viam/proto/component/arm/__init__.py +7 -0
- viam/proto/component/audioin/__init__.py +16 -0
- viam/proto/component/audioinput/__init__.py +1 -0
- viam/proto/component/audioout/__init__.py +15 -0
- viam/proto/component/base/__init__.py +1 -0
- viam/proto/component/board/__init__.py +1 -0
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +1 -0
- viam/proto/component/encoder/__init__.py +1 -0
- viam/proto/component/gantry/__init__.py +1 -0
- viam/proto/component/generic/__init__.py +1 -0
- viam/proto/component/gripper/__init__.py +5 -0
- viam/proto/component/inputcontroller/__init__.py +1 -0
- viam/proto/component/motor/__init__.py +1 -0
- viam/proto/component/movementsensor/__init__.py +1 -0
- viam/proto/component/posetracker/__init__.py +1 -0
- viam/proto/component/powersensor/__init__.py +1 -0
- viam/proto/component/sensor/__init__.py +1 -0
- viam/proto/component/servo/__init__.py +1 -0
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +1 -0
- viam/proto/module/__init__.py +1 -0
- viam/proto/provisioning/__init__.py +5 -0
- viam/proto/robot/__init__.py +29 -8
- viam/proto/rpc/auth.py +1 -0
- viam/proto/rpc/examples/echo/__init__.py +1 -0
- viam/proto/rpc/examples/echoresource/__init__.py +1 -0
- viam/proto/rpc/webrtc/grpc.py +1 -0
- viam/proto/rpc/webrtc/signaling.py +3 -0
- viam/proto/service/datamanager/__init__.py +9 -1
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +1 -0
- viam/proto/service/mlmodel/__init__.py +1 -0
- viam/proto/service/motion/__init__.py +3 -0
- viam/proto/service/navigation/__init__.py +1 -0
- viam/proto/service/sensors/__init__.py +1 -0
- viam/proto/service/shell/__init__.py +1 -0
- viam/proto/service/slam/__init__.py +1 -0
- viam/proto/service/video/__init__.py +15 -0
- viam/proto/service/vision/__init__.py +1 -0
- viam/proto/service/worldstatestore/__init__.py +32 -0
- viam/proto/stream/__init__.py +11 -0
- viam/py.typed +0 -0
- viam/resource/base.py +12 -8
- viam/resource/easy_resource.py +24 -13
- viam/resource/manager.py +6 -5
- viam/resource/registry.py +39 -51
- viam/resource/rpc_client_base.py +33 -1
- viam/resource/types.py +13 -14
- viam/robot/client.py +190 -122
- viam/robot/service.py +2 -50
- viam/rpc/dial.py +54 -4
- viam/rpc/libviam_rust_utils.so +0 -0
- viam/rpc/server.py +25 -11
- viam/rpc/types.py +2 -4
- viam/services/discovery/__init__.py +12 -0
- viam/services/discovery/client.py +55 -0
- viam/services/discovery/discovery.py +52 -0
- viam/services/discovery/service.py +43 -0
- viam/services/generic/__init__.py +1 -1
- viam/services/generic/client.py +8 -5
- viam/services/generic/generic.py +2 -2
- viam/services/mlmodel/__init__.py +1 -1
- viam/services/mlmodel/client.py +17 -7
- viam/services/mlmodel/mlmodel.py +23 -12
- viam/services/mlmodel/service.py +5 -2
- viam/services/mlmodel/utils.py +11 -1
- viam/services/motion/__init__.py +2 -2
- viam/services/motion/client.py +32 -32
- viam/services/motion/motion.py +66 -62
- viam/services/navigation/__init__.py +1 -1
- viam/services/navigation/client.py +30 -20
- viam/services/navigation/navigation.py +23 -23
- viam/services/service_base.py +13 -9
- viam/services/service_client_base.py +3 -3
- viam/services/slam/__init__.py +1 -1
- viam/services/slam/client.py +15 -10
- viam/services/slam/slam.py +11 -11
- viam/services/vision/__init__.py +1 -1
- viam/services/vision/client.py +31 -24
- viam/services/vision/service.py +8 -8
- viam/services/vision/vision.py +36 -53
- viam/services/worldstatestore/__init__.py +18 -0
- viam/services/worldstatestore/client.py +94 -0
- viam/services/worldstatestore/service.py +55 -0
- viam/services/worldstatestore/worldstatestore.py +90 -0
- viam/sessions_client.py +115 -46
- viam/streams.py +3 -6
- viam/utils.py +44 -14
- viam/version_metadata.py +4 -0
- {viam_sdk-0.25.2.dist-info → viam_sdk-0.62.0.dist-info}/METADATA +27 -28
- viam_sdk-0.62.0.dist-info/RECORD +514 -0
- {viam_sdk-0.25.2.dist-info → viam_sdk-0.62.0.dist-info}/WHEEL +1 -1
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -27
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -45
- viam/proto/rpc/examples/fileupload/__init__.py +0 -18
- viam/services/sensors/__init__.py +0 -5
- viam/services/sensors/client.py +0 -65
- viam_sdk-0.25.2.dist-info/LICENSE +0 -202
- viam_sdk-0.25.2.dist-info/RECORD +0 -442
- /viam/gen/{proto/rpc/examples/fileupload → app/datapipelines}/__init__.py +0 -0
- /viam/gen/{proto/rpc/examples/fileupload → app/datapipelines}/v1/__init__.py +0 -0
- /LICENSE → /viam_sdk-0.62.0.dist-info/licenses/LICENSE +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from typing import Any, Mapping, Optional
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.gen.component.button.v1.button_pb2 import PushRequest
|
|
6
|
+
from viam.proto.common import (
|
|
7
|
+
DoCommandRequest,
|
|
8
|
+
DoCommandResponse,
|
|
9
|
+
)
|
|
10
|
+
from viam.proto.component.button import ButtonServiceStub
|
|
11
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
12
|
+
from viam.utils import (
|
|
13
|
+
ValueTypes,
|
|
14
|
+
dict_to_struct,
|
|
15
|
+
struct_to_dict,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
from .button import Button
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ButtonClient(Button, ReconfigurableResourceRPCClientBase):
|
|
22
|
+
"""
|
|
23
|
+
gRPC client for Button component
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, name: str, channel: Channel):
|
|
27
|
+
self.channel = channel
|
|
28
|
+
self.client = ButtonServiceStub(channel)
|
|
29
|
+
super().__init__(name)
|
|
30
|
+
|
|
31
|
+
async def push(
|
|
32
|
+
self,
|
|
33
|
+
*,
|
|
34
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
35
|
+
timeout: Optional[float] = None,
|
|
36
|
+
**kwargs,
|
|
37
|
+
) -> None:
|
|
38
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
39
|
+
request = PushRequest(name=self.name, extra=dict_to_struct(extra))
|
|
40
|
+
await self.client.Push(request, timeout=timeout, metadata=md)
|
|
41
|
+
|
|
42
|
+
async def do_command(
|
|
43
|
+
self,
|
|
44
|
+
command: Mapping[str, ValueTypes],
|
|
45
|
+
*,
|
|
46
|
+
timeout: Optional[float] = None,
|
|
47
|
+
**kwargs,
|
|
48
|
+
) -> Mapping[str, ValueTypes]:
|
|
49
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
50
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
51
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
52
|
+
return struct_to_dict(response.result)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.gen.component.button.v1.button_pb2 import (
|
|
4
|
+
PushRequest,
|
|
5
|
+
PushResponse,
|
|
6
|
+
)
|
|
7
|
+
from viam.proto.common import (
|
|
8
|
+
DoCommandRequest,
|
|
9
|
+
DoCommandResponse,
|
|
10
|
+
)
|
|
11
|
+
from viam.proto.component.button import ButtonServiceBase
|
|
12
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
13
|
+
from viam.utils import dict_to_struct, struct_to_dict
|
|
14
|
+
|
|
15
|
+
from .button import Button
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ButtonRPCService(ButtonServiceBase, ResourceRPCServiceBase[Button]):
|
|
19
|
+
"""
|
|
20
|
+
gRPC Service for a generic Button
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
RESOURCE_TYPE = Button
|
|
24
|
+
|
|
25
|
+
async def Push(self, stream: Stream[PushRequest, PushResponse]) -> None:
|
|
26
|
+
request = await stream.recv_message()
|
|
27
|
+
assert request is not None
|
|
28
|
+
name = request.name
|
|
29
|
+
button = self.get_resource(name)
|
|
30
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
31
|
+
await button.push(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
32
|
+
await stream.send_message(PushResponse())
|
|
33
|
+
|
|
34
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
35
|
+
request = await stream.recv_message()
|
|
36
|
+
assert request is not None
|
|
37
|
+
name = request.name
|
|
38
|
+
button = self.get_resource(name)
|
|
39
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
40
|
+
result = await button.do_command(
|
|
41
|
+
command=struct_to_dict(request.command),
|
|
42
|
+
timeout=timeout,
|
|
43
|
+
metadata=stream.metadata,
|
|
44
|
+
)
|
|
45
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
46
|
+
await stream.send_message(response)
|
viam/components/camera/camera.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
import sys
|
|
3
|
-
from typing import Any, Dict, Final,
|
|
3
|
+
from typing import Any, Dict, Final, Optional, Sequence, Tuple
|
|
4
4
|
|
|
5
5
|
from viam.media.video import NamedImage, ViamImage
|
|
6
6
|
from viam.proto.common import ResponseMetadata
|
|
7
7
|
from viam.proto.component.camera import GetPropertiesResponse
|
|
8
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
8
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
9
9
|
|
|
10
10
|
from ..component_base import ComponentBase
|
|
11
11
|
|
|
@@ -27,10 +27,10 @@ class Camera(ComponentBase):
|
|
|
27
27
|
|
|
28
28
|
from viam.components.camera import Camera
|
|
29
29
|
|
|
30
|
-
For more information, see `Camera component <https://docs.viam.com/components/camera/>`_.
|
|
30
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/>`_.
|
|
31
31
|
"""
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
34
34
|
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "camera"
|
|
35
35
|
)
|
|
36
36
|
|
|
@@ -48,14 +48,9 @@ class Camera(ComponentBase):
|
|
|
48
48
|
|
|
49
49
|
::
|
|
50
50
|
|
|
51
|
-
my_camera = Camera.from_robot(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
frame = await my_camera.get_image(mime_type = CameraMimeType.VIAM_RAW_DEPTH)
|
|
55
|
-
|
|
56
|
-
# Convert "frame" to a standard 2D image representation.
|
|
57
|
-
# Remove the 1st 3x8 bytes and reshape the raw bytes to List[List[Int]].
|
|
58
|
-
standard_frame = frame.bytes_to_depth_array()
|
|
51
|
+
my_camera = Camera.from_robot(machine, "my_camera")
|
|
52
|
+
frame = await my_camera.get_image()
|
|
53
|
+
print(f"Frame: {frame}")
|
|
59
54
|
|
|
60
55
|
Args:
|
|
61
56
|
mime_type (str): The desired mime type of the image. This does not guarantee output type
|
|
@@ -63,28 +58,39 @@ class Camera(ComponentBase):
|
|
|
63
58
|
Returns:
|
|
64
59
|
ViamImage: The frame.
|
|
65
60
|
|
|
66
|
-
For more information, see `Camera component <https://docs.viam.com/components/camera
|
|
61
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getimage>`_.
|
|
67
62
|
"""
|
|
68
63
|
...
|
|
69
64
|
|
|
70
65
|
@abc.abstractmethod
|
|
71
|
-
async def get_images(
|
|
66
|
+
async def get_images(
|
|
67
|
+
self,
|
|
68
|
+
*,
|
|
69
|
+
filter_source_names: Optional[Sequence[str]] = None,
|
|
70
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
71
|
+
timeout: Optional[float] = None,
|
|
72
|
+
**kwargs,
|
|
73
|
+
) -> Tuple[Sequence[NamedImage], ResponseMetadata]:
|
|
72
74
|
"""Get simultaneous images from different imagers, along with associated metadata.
|
|
73
75
|
This should not be used for getting a time series of images from the same imager.
|
|
74
76
|
|
|
75
77
|
::
|
|
76
78
|
|
|
77
|
-
my_camera = Camera.from_robot(robot=
|
|
79
|
+
my_camera = Camera.from_robot(robot=machine, name="my_camera")
|
|
78
80
|
|
|
79
81
|
images, metadata = await my_camera.get_images()
|
|
80
|
-
|
|
82
|
+
first_image = images[0]
|
|
81
83
|
timestamp = metadata.captured_at
|
|
82
84
|
|
|
85
|
+
Args:
|
|
86
|
+
filter_source_names (Sequence[str]): The filter_source_names parameter can be used to filter only the images from the specified
|
|
87
|
+
source names. When unspecified, all images are returned.
|
|
88
|
+
|
|
83
89
|
Returns:
|
|
84
|
-
Tuple[
|
|
90
|
+
Tuple[Sequence[NamedImage], ResponseMetadata]: A tuple containing two values; the first [0] a list of images
|
|
85
91
|
returned from the camera system, and the second [1] the metadata associated with this response.
|
|
86
92
|
|
|
87
|
-
For more information, see `Camera component <https://docs.viam.com/components/camera
|
|
93
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getimages>`_.
|
|
88
94
|
"""
|
|
89
95
|
...
|
|
90
96
|
|
|
@@ -100,12 +106,15 @@ class Camera(ComponentBase):
|
|
|
100
106
|
by the mimetype.
|
|
101
107
|
|
|
102
108
|
To deserialize the returned information into a numpy array, use the Open3D library.
|
|
109
|
+
|
|
103
110
|
::
|
|
104
111
|
|
|
105
112
|
import numpy as np
|
|
106
113
|
import open3d as o3d
|
|
107
114
|
|
|
108
|
-
|
|
115
|
+
my_camera = Camera.from_robot(robot=machine, name="my_camera")
|
|
116
|
+
|
|
117
|
+
data, _ = await my_camera.get_point_cloud()
|
|
109
118
|
|
|
110
119
|
# write the point cloud into a temporary file
|
|
111
120
|
with open("/tmp/pointcloud_data.pcd", "wb") as f:
|
|
@@ -117,7 +126,7 @@ class Camera(ComponentBase):
|
|
|
117
126
|
Tuple[bytes, str]: A tuple containing two values; the first [0] the pointcloud data,
|
|
118
127
|
and the second [1] the mimetype of the pointcloud (for example, PCD).
|
|
119
128
|
|
|
120
|
-
For more information, see `Camera component <https://docs.viam.com/components/camera
|
|
129
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getpointcloud>`_.
|
|
121
130
|
"""
|
|
122
131
|
...
|
|
123
132
|
|
|
@@ -128,13 +137,13 @@ class Camera(ComponentBase):
|
|
|
128
137
|
|
|
129
138
|
::
|
|
130
139
|
|
|
131
|
-
my_camera = Camera.from_robot(robot=
|
|
140
|
+
my_camera = Camera.from_robot(robot=machine, name="my_camera")
|
|
132
141
|
|
|
133
142
|
properties = await my_camera.get_properties()
|
|
134
143
|
|
|
135
144
|
Returns:
|
|
136
145
|
Properties: The properties of the camera.
|
|
137
146
|
|
|
138
|
-
For more information, see `Camera component <https://docs.viam.com/components/camera
|
|
147
|
+
For more information, see `Camera component <https://docs.viam.com/dev/reference/apis/components/camera/#getproperties>`_.
|
|
139
148
|
"""
|
|
140
149
|
...
|
viam/components/camera/client.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any, Dict,
|
|
1
|
+
from typing import Any, Dict, Mapping, Optional, Sequence, Tuple
|
|
2
2
|
|
|
3
3
|
from grpclib.client import Channel
|
|
4
4
|
|
|
@@ -36,25 +36,31 @@ class CameraClient(Camera, ReconfigurableResourceRPCClientBase):
|
|
|
36
36
|
*,
|
|
37
37
|
extra: Optional[Dict[str, Any]] = None,
|
|
38
38
|
timeout: Optional[float] = None,
|
|
39
|
-
**
|
|
39
|
+
**kwargs,
|
|
40
40
|
) -> ViamImage:
|
|
41
|
-
|
|
42
|
-
extra = {}
|
|
41
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
43
42
|
request = GetImageRequest(name=self.name, mime_type=mime_type, extra=dict_to_struct(extra))
|
|
44
|
-
response: GetImageResponse = await self.client.GetImage(request, timeout=timeout)
|
|
43
|
+
response: GetImageResponse = await self.client.GetImage(request, timeout=timeout, metadata=md)
|
|
45
44
|
return ViamImage(response.image, CameraMimeType.from_string(response.mime_type))
|
|
46
45
|
|
|
47
46
|
async def get_images(
|
|
48
47
|
self,
|
|
49
48
|
*,
|
|
49
|
+
filter_source_names: Optional[Sequence[str]] = None,
|
|
50
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
50
51
|
timeout: Optional[float] = None,
|
|
51
|
-
**
|
|
52
|
-
) -> Tuple[
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
**kwargs,
|
|
53
|
+
) -> Tuple[Sequence[NamedImage], ResponseMetadata]:
|
|
54
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
55
|
+
request = GetImagesRequest(name=self.name, extra=dict_to_struct(extra), filter_source_names=filter_source_names)
|
|
56
|
+
response: GetImagesResponse = await self.client.GetImages(request, timeout=timeout, metadata=md)
|
|
55
57
|
imgs = []
|
|
56
58
|
for img_data in response.images:
|
|
57
|
-
|
|
59
|
+
if img_data.mime_type:
|
|
60
|
+
mime_type = CameraMimeType.from_string(img_data.mime_type)
|
|
61
|
+
else:
|
|
62
|
+
# TODO(RSDK-11728): remove this once we deleted the format field
|
|
63
|
+
mime_type = CameraMimeType.from_proto(img_data.format)
|
|
58
64
|
img = NamedImage(img_data.source_name, img_data.image, mime_type)
|
|
59
65
|
imgs.append(img)
|
|
60
66
|
resp_metadata: ResponseMetadata = response.response_metadata
|
|
@@ -65,32 +71,36 @@ class CameraClient(Camera, ReconfigurableResourceRPCClientBase):
|
|
|
65
71
|
*,
|
|
66
72
|
extra: Optional[Dict[str, Any]] = None,
|
|
67
73
|
timeout: Optional[float] = None,
|
|
68
|
-
**
|
|
74
|
+
**kwargs,
|
|
69
75
|
) -> Tuple[bytes, str]:
|
|
70
|
-
|
|
71
|
-
extra = {}
|
|
76
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
72
77
|
request = GetPointCloudRequest(name=self.name, mime_type=CameraMimeType.PCD, extra=dict_to_struct(extra))
|
|
73
|
-
response: GetPointCloudResponse = await self.client.GetPointCloud(request, timeout=timeout)
|
|
78
|
+
response: GetPointCloudResponse = await self.client.GetPointCloud(request, timeout=timeout, metadata=md)
|
|
74
79
|
return (response.point_cloud, response.mime_type)
|
|
75
80
|
|
|
76
81
|
async def get_properties(
|
|
77
82
|
self,
|
|
78
83
|
*,
|
|
79
84
|
timeout: Optional[float] = None,
|
|
80
|
-
**
|
|
85
|
+
**kwargs,
|
|
81
86
|
) -> Camera.Properties:
|
|
82
|
-
|
|
87
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
88
|
+
return await self.client.GetProperties(GetPropertiesRequest(name=self.name), timeout=timeout, metadata=md)
|
|
83
89
|
|
|
84
90
|
async def do_command(
|
|
85
91
|
self,
|
|
86
92
|
command: Mapping[str, ValueTypes],
|
|
87
93
|
*,
|
|
88
94
|
timeout: Optional[float] = None,
|
|
89
|
-
**
|
|
95
|
+
**kwargs,
|
|
90
96
|
) -> Mapping[str, ValueTypes]:
|
|
97
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
91
98
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
92
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
99
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
93
100
|
return struct_to_dict(response.result)
|
|
94
101
|
|
|
95
|
-
async def get_geometries(
|
|
96
|
-
|
|
102
|
+
async def get_geometries(
|
|
103
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
104
|
+
) -> Sequence[Geometry]:
|
|
105
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
106
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from google.api.httpbody_pb2 import HttpBody # type: ignore
|
|
4
4
|
from grpclib.server import Stream
|
|
5
5
|
|
|
6
|
+
from viam.media.video import CameraMimeType
|
|
6
7
|
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
7
8
|
from viam.proto.component.camera import (
|
|
8
9
|
CameraServiceBase,
|
|
@@ -44,16 +45,23 @@ class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
|
|
|
44
45
|
async def GetImages(self, stream: Stream[GetImagesRequest, GetImagesResponse]) -> None:
|
|
45
46
|
request = await stream.recv_message()
|
|
46
47
|
assert request is not None
|
|
47
|
-
|
|
48
|
-
camera = self.get_resource(name)
|
|
48
|
+
camera = self.get_resource(request.name)
|
|
49
49
|
|
|
50
50
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
51
|
-
images, metadata = await camera.get_images(
|
|
51
|
+
images, metadata = await camera.get_images(
|
|
52
|
+
timeout=timeout,
|
|
53
|
+
metadata=stream.metadata,
|
|
54
|
+
extra=struct_to_dict(request.extra),
|
|
55
|
+
filter_source_names=request.filter_source_names,
|
|
56
|
+
)
|
|
52
57
|
img_bytes_lst = []
|
|
53
58
|
for img in images:
|
|
54
|
-
|
|
59
|
+
mime_type = CameraMimeType.from_string(img.mime_type)
|
|
60
|
+
# TODO(RSDK-11728): remove this fmt logic once we deleted the format field
|
|
61
|
+
fmt = mime_type.to_proto() # Will be Format.FORMAT_UNSPECIFIED if an unsupported/custom mime type is set
|
|
62
|
+
|
|
55
63
|
img_bytes = img.data
|
|
56
|
-
img_bytes_lst.append(Image(source_name=name, format=fmt, image=img_bytes))
|
|
64
|
+
img_bytes_lst.append(Image(source_name=img.name, mime_type=img.mime_type, format=fmt, image=img_bytes))
|
|
57
65
|
response = GetImagesResponse(images=img_bytes_lst, response_metadata=metadata)
|
|
58
66
|
await stream.send_message(response)
|
|
59
67
|
|
|
@@ -84,13 +92,7 @@ class CameraRPCService(CameraServiceBase, ResourceRPCServiceBase[Camera]):
|
|
|
84
92
|
camera = self.get_resource(name)
|
|
85
93
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
86
94
|
properties = await camera.get_properties(timeout=timeout, metadata=stream.metadata)
|
|
87
|
-
|
|
88
|
-
supports_pcd=properties.supports_pcd,
|
|
89
|
-
intrinsic_parameters=properties.intrinsic_parameters,
|
|
90
|
-
distortion_parameters=properties.distortion_parameters,
|
|
91
|
-
mime_types=properties.mime_types,
|
|
92
|
-
)
|
|
93
|
-
await stream.send_message(response)
|
|
95
|
+
await stream.send_message(properties)
|
|
94
96
|
|
|
95
97
|
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
96
98
|
request = await stream.recv_message()
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
from
|
|
2
|
+
from logging import Logger
|
|
3
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Dict, List, Mapping, Optional, Sequence, SupportsBytes, SupportsFloat, Union, cast
|
|
3
4
|
|
|
4
5
|
from typing_extensions import Self
|
|
5
6
|
|
|
6
7
|
from viam.errors import MethodNotImplementedError
|
|
8
|
+
from viam.logging import getLogger
|
|
7
9
|
from viam.proto.common import Geometry
|
|
8
10
|
from viam.resource.base import ResourceBase
|
|
9
11
|
|
|
10
12
|
if TYPE_CHECKING:
|
|
11
|
-
from viam.resource.types import
|
|
13
|
+
from viam.resource.types import API
|
|
12
14
|
from viam.robot.client import RobotClient
|
|
13
15
|
|
|
14
16
|
|
|
@@ -21,10 +23,11 @@ class ComponentBase(abc.ABC, ResourceBase):
|
|
|
21
23
|
All components must inherit from this class.
|
|
22
24
|
"""
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
API: ClassVar["API"]
|
|
25
27
|
|
|
26
|
-
def __init__(self, name: str):
|
|
28
|
+
def __init__(self, name: str, *, logger: Optional[Logger] = None):
|
|
27
29
|
self.name = name
|
|
30
|
+
self.logger = logger if logger is not None else getLogger(f"{self.API}.{name}")
|
|
28
31
|
|
|
29
32
|
@classmethod
|
|
30
33
|
def from_robot(cls, robot: "RobotClient", name: str) -> Self:
|
|
@@ -38,15 +41,15 @@ class ComponentBase(abc.ABC, ResourceBase):
|
|
|
38
41
|
Self: The component, if it exists on the robot
|
|
39
42
|
"""
|
|
40
43
|
component = robot.get_component(cls.get_resource_name(name))
|
|
41
|
-
return cast(cls, component)
|
|
44
|
+
return cast(cls, component) # type: ignore
|
|
42
45
|
|
|
43
46
|
async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Optional[float] = None, **kwargs) -> Mapping[str, ValueTypes]:
|
|
44
47
|
raise NotImplementedError()
|
|
45
48
|
|
|
46
|
-
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) ->
|
|
49
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> Sequence[Geometry]:
|
|
47
50
|
"""
|
|
48
51
|
Get all geometries associated with the component, in their current configuration, in the
|
|
49
|
-
`frame <https://docs.viam.com/
|
|
52
|
+
`frame <https://docs.viam.com/operate/mobility/define-geometry/>`__ of the component.
|
|
50
53
|
|
|
51
54
|
::
|
|
52
55
|
|
|
@@ -33,12 +33,11 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
|
|
|
33
33
|
*,
|
|
34
34
|
extra: Optional[Dict[str, Any]] = None,
|
|
35
35
|
timeout: Optional[float] = None,
|
|
36
|
-
**
|
|
36
|
+
**kwargs,
|
|
37
37
|
):
|
|
38
|
-
|
|
39
|
-
extra = {}
|
|
38
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
40
39
|
request = ResetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
41
|
-
await self.client.ResetPosition(request, timeout=timeout)
|
|
40
|
+
await self.client.ResetPosition(request, timeout=timeout, metadata=md)
|
|
42
41
|
|
|
43
42
|
async def get_position(
|
|
44
43
|
self,
|
|
@@ -46,12 +45,11 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
|
|
|
46
45
|
*,
|
|
47
46
|
extra: Optional[Dict[str, Any]] = None,
|
|
48
47
|
timeout: Optional[float] = None,
|
|
49
|
-
**
|
|
48
|
+
**kwargs,
|
|
50
49
|
) -> Tuple[float, PositionType.ValueType]:
|
|
51
|
-
|
|
52
|
-
extra = {}
|
|
50
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
53
51
|
request = GetPositionRequest(name=self.name, position_type=position_type, extra=dict_to_struct(extra))
|
|
54
|
-
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout)
|
|
52
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
55
53
|
return response.value, response.position_type
|
|
56
54
|
|
|
57
55
|
async def get_properties(
|
|
@@ -59,12 +57,11 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
|
|
|
59
57
|
*,
|
|
60
58
|
extra: Optional[Dict[str, Any]] = None,
|
|
61
59
|
timeout: Optional[float] = None,
|
|
62
|
-
**
|
|
60
|
+
**kwargs,
|
|
63
61
|
) -> Encoder.Properties:
|
|
64
|
-
|
|
65
|
-
extra = {}
|
|
62
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
66
63
|
request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
|
|
67
|
-
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout)
|
|
64
|
+
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
|
|
68
65
|
return Encoder.Properties(
|
|
69
66
|
ticks_count_supported=response.ticks_count_supported, angle_degrees_supported=response.angle_degrees_supported
|
|
70
67
|
)
|
|
@@ -74,11 +71,13 @@ class EncoderClient(Encoder, ReconfigurableResourceRPCClientBase):
|
|
|
74
71
|
command: Mapping[str, ValueTypes],
|
|
75
72
|
*,
|
|
76
73
|
timeout: Optional[float] = None,
|
|
77
|
-
**
|
|
74
|
+
**kwargs,
|
|
78
75
|
) -> Mapping[str, ValueTypes]:
|
|
76
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
79
77
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
80
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
78
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
81
79
|
return struct_to_dict(response.result)
|
|
82
80
|
|
|
83
|
-
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
|
|
84
|
-
|
|
81
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
82
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
83
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
@@ -3,7 +3,7 @@ from dataclasses import dataclass
|
|
|
3
3
|
from typing import Any, Dict, Final, Optional, Tuple
|
|
4
4
|
|
|
5
5
|
from viam.proto.component.encoder import PositionType
|
|
6
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
7
7
|
|
|
8
8
|
from ..component_base import ComponentBase
|
|
9
9
|
|
|
@@ -25,10 +25,10 @@ class Encoder(ComponentBase):
|
|
|
25
25
|
|
|
26
26
|
from viam.components.encoder import Encoder
|
|
27
27
|
|
|
28
|
-
For more information, see `Encoder component <https://docs.viam.com/components/encoder/>`_.
|
|
28
|
+
For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/>`_.
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
32
32
|
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "encoder"
|
|
33
33
|
)
|
|
34
34
|
|
|
@@ -45,13 +45,13 @@ class Encoder(ComponentBase):
|
|
|
45
45
|
|
|
46
46
|
::
|
|
47
47
|
|
|
48
|
-
my_encoder = Encoder.from_robot(robot=
|
|
48
|
+
my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
|
|
49
49
|
|
|
50
50
|
# Reset the zero position of the encoder.
|
|
51
51
|
await my_encoder.reset_position()
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
For more information, see `Encoder component <https://docs.viam.com/components/encoder
|
|
54
|
+
For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#resetposition>`_.
|
|
55
55
|
"""
|
|
56
56
|
...
|
|
57
57
|
|
|
@@ -73,7 +73,7 @@ class Encoder(ComponentBase):
|
|
|
73
73
|
|
|
74
74
|
::
|
|
75
75
|
|
|
76
|
-
my_encoder = Encoder.from_robot(robot=
|
|
76
|
+
my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
|
|
77
77
|
|
|
78
78
|
# Get the position of the encoder in ticks
|
|
79
79
|
position = await my_encoder.get_position(PositionType.POSITION_TYPE_TICKS_COUNT)
|
|
@@ -88,7 +88,7 @@ class Encoder(ComponentBase):
|
|
|
88
88
|
ticks since last zeroing for a relative encoder or degrees for an absolute encoder, and the second [1] the type of
|
|
89
89
|
position the encoder returns (ticks or degrees).
|
|
90
90
|
|
|
91
|
-
For more information, see `Encoder component <https://docs.viam.com/components/encoder
|
|
91
|
+
For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#getposition>`_.
|
|
92
92
|
"""
|
|
93
93
|
...
|
|
94
94
|
|
|
@@ -105,7 +105,7 @@ class Encoder(ComponentBase):
|
|
|
105
105
|
|
|
106
106
|
::
|
|
107
107
|
|
|
108
|
-
my_encoder = Encoder.from_robot(robot=
|
|
108
|
+
my_encoder = Encoder.from_robot(robot=machine, name='my_encoder')
|
|
109
109
|
|
|
110
110
|
# Get whether the encoder returns position in ticks or degrees.
|
|
111
111
|
properties = await my_encoder.get_properties()
|
|
@@ -113,6 +113,6 @@ class Encoder(ComponentBase):
|
|
|
113
113
|
Returns:
|
|
114
114
|
Encoder.Properties: Map of position types to supported status.
|
|
115
115
|
|
|
116
|
-
For more information, see `Encoder component <https://docs.viam.com/components/encoder
|
|
116
|
+
For more information, see `Encoder component <https://docs.viam.com/dev/reference/apis/components/encoder/#getproperties>`_.
|
|
117
117
|
"""
|
|
118
118
|
...
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
|
|
3
|
-
from viam.proto.component.gantry import Status as GantryStatus
|
|
4
|
-
from viam.proto.robot import Status
|
|
5
1
|
from viam.resource.registry import Registry, ResourceRegistration
|
|
6
|
-
from viam.utils import message_to_struct
|
|
7
2
|
|
|
8
3
|
from .client import GantryClient
|
|
9
4
|
from .gantry import Gantry
|
|
@@ -13,11 +8,4 @@ __all__ = [
|
|
|
13
8
|
"Gantry",
|
|
14
9
|
]
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
async def create_status(component: Gantry) -> Status:
|
|
18
|
-
(positions_mm, lengths_mm, is_moving) = await asyncio.gather(component.get_position(), component.get_lengths(), component.is_moving())
|
|
19
|
-
s = GantryStatus(positions_mm=positions_mm, lengths_mm=lengths_mm, is_moving=is_moving)
|
|
20
|
-
return Status(name=Gantry.get_resource_name(component.name), status=message_to_struct(s))
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
Registry.register_subtype(ResourceRegistration(Gantry, GantryRPCService, lambda name, channel: GantryClient(name, channel), create_status))
|
|
11
|
+
Registry.register_api(ResourceRegistration(Gantry, GantryRPCService, lambda name, channel: GantryClient(name, channel)))
|