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,67 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetPropertiesRequest, GetPropertiesResponse
|
|
6
|
+
from viam.proto.component.audioout import AudioOutServiceStub, PlayRequest
|
|
7
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
8
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
9
|
+
|
|
10
|
+
from .audio_out import AudioInfo, AudioOut
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AudioOutClient(AudioOut, ReconfigurableResourceRPCClientBase):
|
|
14
|
+
"""gRPC client for AudioOut component."""
|
|
15
|
+
|
|
16
|
+
def __init__(self, name: str, channel: Channel) -> None:
|
|
17
|
+
self.channel = channel
|
|
18
|
+
self.client = AudioOutServiceStub(channel)
|
|
19
|
+
super().__init__(name)
|
|
20
|
+
|
|
21
|
+
async def play(
|
|
22
|
+
self,
|
|
23
|
+
data: bytes,
|
|
24
|
+
info: Optional[AudioInfo] = None,
|
|
25
|
+
*,
|
|
26
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
27
|
+
timeout: Optional[float] = None,
|
|
28
|
+
**kwargs,
|
|
29
|
+
) -> None:
|
|
30
|
+
if extra is None:
|
|
31
|
+
extra = {}
|
|
32
|
+
|
|
33
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
34
|
+
request = PlayRequest(
|
|
35
|
+
name=self.name,
|
|
36
|
+
audio_data=data,
|
|
37
|
+
audio_info=info,
|
|
38
|
+
extra=dict_to_struct(extra),
|
|
39
|
+
)
|
|
40
|
+
await self.client.Play(request, timeout=timeout, metadata=md)
|
|
41
|
+
|
|
42
|
+
async def get_properties(
|
|
43
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
44
|
+
) -> AudioOut.Properties:
|
|
45
|
+
if extra is None:
|
|
46
|
+
extra = {}
|
|
47
|
+
|
|
48
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
49
|
+
request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
|
|
50
|
+
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
|
|
51
|
+
return response
|
|
52
|
+
|
|
53
|
+
async def do_command(
|
|
54
|
+
self,
|
|
55
|
+
command: Mapping[str, ValueTypes],
|
|
56
|
+
*,
|
|
57
|
+
timeout: Optional[float] = None,
|
|
58
|
+
**kwargs,
|
|
59
|
+
) -> Mapping[str, ValueTypes]:
|
|
60
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
61
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
62
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
63
|
+
return struct_to_dict(response.result)
|
|
64
|
+
|
|
65
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
66
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
67
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.proto.common import (
|
|
4
|
+
DoCommandRequest,
|
|
5
|
+
DoCommandResponse,
|
|
6
|
+
GetGeometriesRequest,
|
|
7
|
+
GetGeometriesResponse,
|
|
8
|
+
GetPropertiesRequest,
|
|
9
|
+
GetPropertiesResponse,
|
|
10
|
+
)
|
|
11
|
+
from viam.proto.component.audioout import (
|
|
12
|
+
AudioOutServiceBase,
|
|
13
|
+
PlayRequest,
|
|
14
|
+
PlayResponse,
|
|
15
|
+
)
|
|
16
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
17
|
+
from viam.utils import dict_to_struct, struct_to_dict
|
|
18
|
+
|
|
19
|
+
from .audio_out import AudioOut
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class AudioOutRPCService(AudioOutServiceBase, ResourceRPCServiceBase[AudioOut]):
|
|
23
|
+
"""gRPC service for AudioOut component."""
|
|
24
|
+
|
|
25
|
+
RESOURCE_TYPE = AudioOut
|
|
26
|
+
|
|
27
|
+
async def Play(self, stream: Stream[PlayRequest, PlayResponse]) -> None:
|
|
28
|
+
request = await stream.recv_message()
|
|
29
|
+
assert request is not None
|
|
30
|
+
name = request.name
|
|
31
|
+
audio_out = self.get_resource(name)
|
|
32
|
+
# Check if audio_info was provided in the request
|
|
33
|
+
audio_info = request.audio_info if request.HasField("audio_info") else None
|
|
34
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
35
|
+
await audio_out.play(request.audio_data, audio_info, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
36
|
+
await stream.send_message(PlayResponse())
|
|
37
|
+
|
|
38
|
+
async def GetProperties(self, stream: Stream[GetPropertiesRequest, GetPropertiesResponse]) -> None:
|
|
39
|
+
request = await stream.recv_message()
|
|
40
|
+
assert request is not None
|
|
41
|
+
name = request.name
|
|
42
|
+
audio_out = self.get_resource(name)
|
|
43
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
44
|
+
properties = await audio_out.get_properties(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
45
|
+
await stream.send_message(properties)
|
|
46
|
+
|
|
47
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
48
|
+
request = await stream.recv_message()
|
|
49
|
+
assert request is not None
|
|
50
|
+
audio_out = self.get_resource(request.name)
|
|
51
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
52
|
+
result = await audio_out.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
53
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
54
|
+
await stream.send_message(response)
|
|
55
|
+
|
|
56
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
57
|
+
request = await stream.recv_message()
|
|
58
|
+
assert request is not None
|
|
59
|
+
audio_out = self.get_resource(request.name)
|
|
60
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
61
|
+
geometries = await audio_out.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
62
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
63
|
+
await stream.send_message(response)
|
viam/components/base/__init__.py
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
from viam.proto.common import
|
|
2
|
-
from viam.proto.robot import Status
|
|
1
|
+
from viam.proto.common import Vector3
|
|
3
2
|
from viam.resource.registry import Registry, ResourceRegistration
|
|
4
|
-
from viam.utils import message_to_struct
|
|
5
3
|
|
|
6
4
|
from .base import Base
|
|
7
5
|
from .client import BaseClient
|
|
@@ -12,10 +10,4 @@ __all__ = [
|
|
|
12
10
|
"Vector3",
|
|
13
11
|
]
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
async def create_status(component: Base) -> Status:
|
|
17
|
-
s = ActuatorStatus(is_moving=await component.is_moving())
|
|
18
|
-
return Status(name=Base.get_resource_name(component.name), status=message_to_struct(s))
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Registry.register_subtype(ResourceRegistration(Base, BaseRPCService, lambda name, channel: BaseClient(name, channel), create_status))
|
|
13
|
+
Registry.register_api(ResourceRegistration(Base, BaseRPCService, lambda name, channel: BaseClient(name, channel)))
|
viam/components/base/base.py
CHANGED
|
@@ -2,7 +2,7 @@ import abc
|
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
from typing import Any, Dict, Final, Optional
|
|
4
4
|
|
|
5
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
6
|
|
|
7
7
|
from ..component_base import ComponentBase
|
|
8
8
|
from . import Vector3
|
|
@@ -20,10 +20,10 @@ class Base(ComponentBase):
|
|
|
20
20
|
|
|
21
21
|
from viam.components.base import Base
|
|
22
22
|
|
|
23
|
-
For more information, see `Base component <https://docs.viam.com/components/base/>`_.
|
|
23
|
+
For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/>`_.
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
27
27
|
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "base"
|
|
28
28
|
)
|
|
29
29
|
|
|
@@ -51,7 +51,7 @@ class Base(ComponentBase):
|
|
|
51
51
|
|
|
52
52
|
::
|
|
53
53
|
|
|
54
|
-
my_base = Base.from_robot(robot=
|
|
54
|
+
my_base = Base.from_robot(robot=machine, name="my_base")
|
|
55
55
|
|
|
56
56
|
# Move the base 40 mm at a velocity of 90 mm/s, forward.
|
|
57
57
|
await my_base.move_straight(distance=40, velocity=90)
|
|
@@ -65,7 +65,7 @@ class Base(ComponentBase):
|
|
|
65
65
|
velocity (float): The velocity (in millimeters per second) to move.
|
|
66
66
|
Negative implies backwards.
|
|
67
67
|
|
|
68
|
-
For more information, see `Base component <https://docs.viam.com/components/base
|
|
68
|
+
For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#movestraight>`_.
|
|
69
69
|
"""
|
|
70
70
|
...
|
|
71
71
|
|
|
@@ -87,7 +87,7 @@ class Base(ComponentBase):
|
|
|
87
87
|
|
|
88
88
|
::
|
|
89
89
|
|
|
90
|
-
my_base = Base.from_robot(robot=
|
|
90
|
+
my_base = Base.from_robot(robot=machine, name="my_base")
|
|
91
91
|
|
|
92
92
|
# Spin the base 10 degrees at an angular velocity of 15 deg/sec.
|
|
93
93
|
await my_base.spin(angle=10, velocity=15)
|
|
@@ -98,7 +98,7 @@ class Base(ComponentBase):
|
|
|
98
98
|
to spin.
|
|
99
99
|
Given a positive angle and a positive velocity, the base will turn to the left.
|
|
100
100
|
|
|
101
|
-
For more information, see `Base component <https://docs.viam.com/components/base
|
|
101
|
+
For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#spin>`_.
|
|
102
102
|
"""
|
|
103
103
|
...
|
|
104
104
|
|
|
@@ -113,20 +113,20 @@ class Base(ComponentBase):
|
|
|
113
113
|
**kwargs,
|
|
114
114
|
):
|
|
115
115
|
"""Set the linear and angular velocity of the Base
|
|
116
|
-
When ``linear`` is 0, the
|
|
117
|
-
When ``angular`` is 0, the
|
|
116
|
+
When ``linear`` is 0, the base will spin.
|
|
117
|
+
When ``angular`` is 0, the base will move in a straight line.
|
|
118
118
|
When both ``linear`` and ``angular`` are 0, the base will stop.
|
|
119
119
|
When ``linear`` and ``angular`` are both nonzero, the base will move in an arc,
|
|
120
120
|
with a tighter radius if angular power is greater than linear power.
|
|
121
121
|
|
|
122
122
|
::
|
|
123
123
|
|
|
124
|
-
my_base = Base.from_robot(robot=
|
|
124
|
+
my_base = Base.from_robot(robot=machine, name="my_base")
|
|
125
125
|
|
|
126
126
|
# Make your wheeled base move forward. Set linear power to 75%.
|
|
127
127
|
print("move forward")
|
|
128
128
|
await my_base.set_power(
|
|
129
|
-
linear=Vector3(x=0, y
|
|
129
|
+
linear=Vector3(x=0, y=.75, z=0),
|
|
130
130
|
angular=Vector3(x=0, y=0, z=0))
|
|
131
131
|
|
|
132
132
|
# Make your wheeled base move backward. Set linear power to -100%.
|
|
@@ -153,7 +153,7 @@ class Base(ComponentBase):
|
|
|
153
153
|
angular (Vector3): The angular component. Only the Z component is used
|
|
154
154
|
for wheeled base. Positive turns left; negative turns right.
|
|
155
155
|
|
|
156
|
-
For more information, see `Base component <https://docs.viam.com/components/base
|
|
156
|
+
For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#setpower>`_.
|
|
157
157
|
"""
|
|
158
158
|
...
|
|
159
159
|
|
|
@@ -172,7 +172,7 @@ class Base(ComponentBase):
|
|
|
172
172
|
|
|
173
173
|
::
|
|
174
174
|
|
|
175
|
-
my_base = Base.from_robot(robot=
|
|
175
|
+
my_base = Base.from_robot(robot=machine, name="my_base")
|
|
176
176
|
|
|
177
177
|
# Set the linear velocity to 50 mm/sec and the angular velocity to
|
|
178
178
|
# 15 degree/sec.
|
|
@@ -183,7 +183,7 @@ class Base(ComponentBase):
|
|
|
183
183
|
linear (Vector3): Velocity in mm/sec
|
|
184
184
|
angular (Vector3): Velocity in deg/sec
|
|
185
185
|
|
|
186
|
-
For more information, see `Base component <https://docs.viam.com/components/base
|
|
186
|
+
For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#setvelocity>`_.
|
|
187
187
|
"""
|
|
188
188
|
|
|
189
189
|
@abc.abstractmethod
|
|
@@ -199,7 +199,7 @@ class Base(ComponentBase):
|
|
|
199
199
|
|
|
200
200
|
::
|
|
201
201
|
|
|
202
|
-
my_base = Base.from_robot(robot=
|
|
202
|
+
my_base = Base.from_robot(robot=machine, name="my_base")
|
|
203
203
|
|
|
204
204
|
# Move the base forward 10 mm at a velocity of 50 mm/s.
|
|
205
205
|
await my_base.move_straight(distance=10, velocity=50)
|
|
@@ -207,7 +207,7 @@ class Base(ComponentBase):
|
|
|
207
207
|
# Stop the base.
|
|
208
208
|
await my_base.stop()
|
|
209
209
|
|
|
210
|
-
For more information, see `Base component <https://docs.viam.com/components/base
|
|
210
|
+
For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#stop>`_.
|
|
211
211
|
"""
|
|
212
212
|
...
|
|
213
213
|
|
|
@@ -218,7 +218,7 @@ class Base(ComponentBase):
|
|
|
218
218
|
|
|
219
219
|
::
|
|
220
220
|
|
|
221
|
-
my_base = Base.from_robot(robot=
|
|
221
|
+
my_base = Base.from_robot(robot=machine, name="my_base")
|
|
222
222
|
|
|
223
223
|
# Check whether the base is currently moving.
|
|
224
224
|
moving = await my_base.is_moving()
|
|
@@ -227,7 +227,7 @@ class Base(ComponentBase):
|
|
|
227
227
|
Returns:
|
|
228
228
|
bool: Whether the base is moving.
|
|
229
229
|
|
|
230
|
-
For more information, see `Base component <https://docs.viam.com/components/base
|
|
230
|
+
For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#ismoving>`_.
|
|
231
231
|
"""
|
|
232
232
|
...
|
|
233
233
|
|
|
@@ -238,7 +238,7 @@ class Base(ComponentBase):
|
|
|
238
238
|
|
|
239
239
|
::
|
|
240
240
|
|
|
241
|
-
my_base = Base.from_robot(robot=
|
|
241
|
+
my_base = Base.from_robot(robot=machine, name="my_base")
|
|
242
242
|
|
|
243
243
|
# Get the width and turning radius of the base
|
|
244
244
|
properties = await my_base.get_properties()
|
|
@@ -255,6 +255,6 @@ class Base(ComponentBase):
|
|
|
255
255
|
Returns:
|
|
256
256
|
Properties: The properties of the base
|
|
257
257
|
|
|
258
|
-
For more information, see `Base component <https://docs.viam.com/components/base
|
|
258
|
+
For more information, see `Base component <https://docs.viam.com/dev/reference/apis/components/base/#getproperties>`_.
|
|
259
259
|
"""
|
|
260
260
|
...
|
viam/components/base/client.py
CHANGED
|
@@ -38,17 +38,16 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
|
|
|
38
38
|
*,
|
|
39
39
|
extra: Optional[Dict[str, Any]] = None,
|
|
40
40
|
timeout: Optional[float] = None,
|
|
41
|
-
**
|
|
41
|
+
**kwargs,
|
|
42
42
|
):
|
|
43
|
-
|
|
44
|
-
extra = {}
|
|
43
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
45
44
|
request = MoveStraightRequest(
|
|
46
45
|
name=self.name,
|
|
47
46
|
distance_mm=distance,
|
|
48
47
|
mm_per_sec=velocity,
|
|
49
48
|
extra=dict_to_struct(extra),
|
|
50
49
|
)
|
|
51
|
-
await self.client.MoveStraight(request, timeout=timeout)
|
|
50
|
+
await self.client.MoveStraight(request, timeout=timeout, metadata=md)
|
|
52
51
|
|
|
53
52
|
async def spin(
|
|
54
53
|
self,
|
|
@@ -57,17 +56,16 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
|
|
|
57
56
|
*,
|
|
58
57
|
extra: Optional[Dict[str, Any]] = None,
|
|
59
58
|
timeout: Optional[float] = None,
|
|
60
|
-
**
|
|
59
|
+
**kwargs,
|
|
61
60
|
):
|
|
62
|
-
|
|
63
|
-
extra = {}
|
|
61
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
64
62
|
request = SpinRequest(
|
|
65
63
|
name=self.name,
|
|
66
64
|
angle_deg=angle,
|
|
67
65
|
degs_per_sec=velocity,
|
|
68
66
|
extra=dict_to_struct(extra),
|
|
69
67
|
)
|
|
70
|
-
await self.client.Spin(request, timeout=timeout)
|
|
68
|
+
await self.client.Spin(request, timeout=timeout, metadata=md)
|
|
71
69
|
|
|
72
70
|
async def set_power(
|
|
73
71
|
self,
|
|
@@ -76,17 +74,16 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
|
|
|
76
74
|
*,
|
|
77
75
|
extra: Optional[Dict[str, Any]] = None,
|
|
78
76
|
timeout: Optional[float] = None,
|
|
79
|
-
**
|
|
77
|
+
**kwargs,
|
|
80
78
|
):
|
|
81
|
-
|
|
82
|
-
extra = {}
|
|
79
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
83
80
|
request = SetPowerRequest(
|
|
84
81
|
name=self.name,
|
|
85
82
|
linear=linear,
|
|
86
83
|
angular=angular,
|
|
87
84
|
extra=dict_to_struct(extra),
|
|
88
85
|
)
|
|
89
|
-
await self.client.SetPower(request, timeout=timeout)
|
|
86
|
+
await self.client.SetPower(request, timeout=timeout, metadata=md)
|
|
90
87
|
|
|
91
88
|
async def set_velocity(
|
|
92
89
|
self,
|
|
@@ -95,33 +92,32 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
|
|
|
95
92
|
*,
|
|
96
93
|
extra: Optional[Dict[str, Any]] = None,
|
|
97
94
|
timeout: Optional[float] = None,
|
|
98
|
-
**
|
|
95
|
+
**kwargs,
|
|
99
96
|
):
|
|
100
|
-
|
|
101
|
-
extra = {}
|
|
97
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
102
98
|
request = SetVelocityRequest(name=self.name, linear=linear, angular=angular, extra=dict_to_struct(extra))
|
|
103
|
-
await self.client.SetVelocity(request, timeout=timeout)
|
|
99
|
+
await self.client.SetVelocity(request, timeout=timeout, metadata=md)
|
|
104
100
|
|
|
105
101
|
async def stop(
|
|
106
102
|
self,
|
|
107
103
|
*,
|
|
108
104
|
extra: Optional[Dict[str, Any]] = None,
|
|
109
105
|
timeout: Optional[float] = None,
|
|
110
|
-
**
|
|
106
|
+
**kwargs,
|
|
111
107
|
):
|
|
112
|
-
|
|
113
|
-
extra = {}
|
|
108
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
114
109
|
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
|
|
115
|
-
await self.client.Stop(request, timeout=timeout)
|
|
110
|
+
await self.client.Stop(request, timeout=timeout, metadata=md)
|
|
116
111
|
|
|
117
112
|
async def is_moving(
|
|
118
113
|
self,
|
|
119
114
|
*,
|
|
120
115
|
timeout: Optional[float] = None,
|
|
121
|
-
**
|
|
116
|
+
**kwargs,
|
|
122
117
|
) -> bool:
|
|
118
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
123
119
|
request = IsMovingRequest(name=self.name)
|
|
124
|
-
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
|
|
120
|
+
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
|
|
125
121
|
return response.is_moving
|
|
126
122
|
|
|
127
123
|
async def get_properties(
|
|
@@ -129,12 +125,11 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
|
|
|
129
125
|
*,
|
|
130
126
|
extra: Optional[Dict[str, Any]] = None,
|
|
131
127
|
timeout: Optional[float] = None,
|
|
132
|
-
**
|
|
128
|
+
**kwargs,
|
|
133
129
|
) -> Base.Properties:
|
|
134
|
-
|
|
135
|
-
extra = {}
|
|
130
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
136
131
|
request = GetPropertiesRequest(name=self.name, extra=dict_to_struct(extra))
|
|
137
|
-
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout)
|
|
132
|
+
response: GetPropertiesResponse = await self.client.GetProperties(request, timeout=timeout, metadata=md)
|
|
138
133
|
return Base.Properties(
|
|
139
134
|
width_meters=response.width_meters,
|
|
140
135
|
turning_radius_meters=response.turning_radius_meters,
|
|
@@ -146,11 +141,13 @@ class BaseClient(Base, ReconfigurableResourceRPCClientBase):
|
|
|
146
141
|
command: Mapping[str, ValueTypes],
|
|
147
142
|
*,
|
|
148
143
|
timeout: Optional[float] = None,
|
|
149
|
-
**
|
|
144
|
+
**kwargs,
|
|
150
145
|
) -> Mapping[str, ValueTypes]:
|
|
146
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
151
147
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
152
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
148
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
153
149
|
return struct_to_dict(response.result)
|
|
154
150
|
|
|
155
|
-
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None) -> List[Geometry]:
|
|
156
|
-
|
|
151
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
152
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
153
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
@@ -1,32 +1,9 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
|
|
3
|
-
from viam.proto.component.board import Status as BoardStatus
|
|
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 .board import Board, Tick, TickStream
|
|
9
4
|
from .client import BoardClient
|
|
10
5
|
from .service import BoardRPCService
|
|
11
6
|
|
|
12
|
-
__all__ = ["Board"]
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
async def create_status(component: Board) -> Status:
|
|
16
|
-
(analog_names, digital_interrupt_names) = await asyncio.gather(component.analog_names(), component.digital_interrupt_names())
|
|
17
|
-
analogs, digital_interrupts = {}, {}
|
|
18
|
-
for x in analog_names:
|
|
19
|
-
analog = await component.analog_by_name(x)
|
|
20
|
-
read = await analog.read()
|
|
21
|
-
analogs[x] = read.value
|
|
22
|
-
|
|
23
|
-
for y in digital_interrupt_names:
|
|
24
|
-
digital_interrupt = await component.digital_interrupt_by_name(y)
|
|
25
|
-
val = await digital_interrupt.value()
|
|
26
|
-
digital_interrupts[y] = val
|
|
27
|
-
|
|
28
|
-
s = BoardStatus(analogs=analogs, digital_interrupts=digital_interrupts)
|
|
29
|
-
return Status(name=Board.get_resource_name(component.name), status=message_to_struct(s))
|
|
30
|
-
|
|
7
|
+
__all__ = ["Board", "Tick", "TickStream"]
|
|
31
8
|
|
|
32
|
-
Registry.
|
|
9
|
+
Registry.register_api(ResourceRegistration(Board, BoardRPCService, lambda name, channel: BoardClient(name, channel)))
|