viam-sdk 0.3.0__py3-none-linux_armv6l.whl → 0.66.0__py3-none-linux_armv6l.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.
Potentially problematic release.
This version of viam-sdk might be problematic. Click here for more details.
- viam/__init__.py +29 -2
- viam/app/_logs.py +34 -0
- viam/app/app_client.py +2696 -0
- viam/app/billing_client.py +185 -0
- viam/app/data_client.py +2231 -0
- viam/app/ml_training_client.py +249 -0
- viam/app/provisioning_client.py +93 -0
- viam/app/viam_client.py +275 -0
- viam/components/arm/__init__.py +3 -26
- viam/components/arm/arm.py +123 -8
- viam/components/arm/client.py +37 -24
- viam/components/arm/service.py +35 -32
- 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_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 +6 -11
- viam/components/base/base.py +134 -8
- viam/components/base/client.py +51 -23
- viam/components/base/service.py +33 -30
- viam/components/board/__init__.py +3 -12
- viam/components/board/board.py +247 -91
- viam/components/board/client.py +149 -83
- viam/components/board/service.py +63 -33
- 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 +3 -3
- viam/components/camera/camera.py +62 -27
- viam/components/camera/client.py +59 -27
- viam/components/camera/service.py +42 -65
- viam/components/component_base.py +28 -5
- viam/components/encoder/__init__.py +1 -1
- viam/components/encoder/client.py +25 -14
- viam/components/encoder/encoder.py +48 -10
- viam/components/encoder/service.py +14 -18
- viam/components/gantry/__init__.py +1 -13
- viam/components/gantry/client.py +80 -25
- viam/components/gantry/gantry.py +123 -9
- viam/components/gantry/service.py +51 -29
- viam/components/generic/__init__.py +1 -1
- viam/components/generic/client.py +21 -8
- viam/components/generic/generic.py +10 -2
- viam/components/generic/service.py +12 -7
- viam/components/gripper/__init__.py +3 -13
- viam/components/gripper/client.py +69 -21
- viam/components/gripper/gripper.py +123 -3
- viam/components/gripper/service.py +44 -22
- viam/components/input/__init__.py +1 -14
- viam/components/input/client.py +55 -23
- viam/components/input/input.py +106 -3
- viam/components/input/service.py +16 -21
- viam/components/motor/__init__.py +1 -21
- viam/components/motor/client.py +56 -33
- viam/components/motor/motor.py +127 -4
- viam/components/motor/service.py +33 -44
- viam/components/movement_sensor/__init__.py +1 -1
- viam/components/movement_sensor/client.py +102 -45
- viam/components/movement_sensor/movement_sensor.py +130 -61
- viam/components/movement_sensor/service.py +38 -41
- viam/components/pose_tracker/__init__.py +1 -1
- viam/components/pose_tracker/client.py +18 -7
- viam/components/pose_tracker/pose_tracker.py +4 -2
- viam/components/pose_tracker/service.py +12 -10
- viam/components/power_sensor/__init__.py +17 -0
- viam/components/power_sensor/client.py +86 -0
- viam/components/power_sensor/power_sensor.py +104 -0
- viam/components/power_sensor/service.py +72 -0
- viam/components/sensor/__init__.py +2 -1
- viam/components/sensor/client.py +26 -10
- viam/components/sensor/sensor.py +22 -4
- viam/components/sensor/service.py +20 -11
- viam/components/servo/__init__.py +1 -13
- viam/components/servo/client.py +47 -21
- viam/components/servo/service.py +15 -22
- viam/components/servo/servo.py +61 -2
- 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 +98 -0
- viam/errors.py +10 -0
- viam/gen/app/agent/v1/agent_grpc.py +29 -0
- viam/gen/app/agent/v1/agent_pb2.py +47 -0
- viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
- viam/gen/app/cloudslam/v1/__init__.py +0 -0
- viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
- viam/gen/app/data/v1/data_grpc.py +197 -8
- viam/gen/app/data/v1/data_pb2.py +238 -99
- viam/gen/app/data/v1/data_pb2.pyi +1222 -259
- viam/gen/app/datapipelines/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/__init__.py +0 -0
- 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/__init__.py +0 -0
- viam/gen/app/dataset/v1/__init__.py +0 -0
- viam/gen/app/dataset/v1/dataset_grpc.py +68 -0
- viam/gen/app/dataset/v1/dataset_pb2.py +44 -0
- viam/gen/app/dataset/v1/dataset_pb2.pyi +214 -0
- viam/gen/app/datasync/v1/data_sync_grpc.py +21 -4
- viam/gen/app/datasync/v1/data_sync_pb2.py +62 -128
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +156 -199
- 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 +51 -3
- viam/gen/app/mltraining/v1/ml_training_pb2.py +135 -58
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +328 -39
- viam/gen/app/packages/v1/packages_grpc.py +15 -1
- viam/gen/app/packages/v1/packages_pb2.py +44 -64
- viam/gen/app/packages/v1/packages_pb2.pyi +75 -85
- viam/gen/app/v1/app_grpc.py +644 -3
- viam/gen/app/v1/app_pb2.py +695 -295
- viam/gen/app/v1/app_pb2.pyi +4488 -635
- viam/gen/app/v1/billing_grpc.py +53 -11
- viam/gen/app/v1/billing_pb2.py +94 -39
- viam/gen/app/v1/billing_pb2.pyi +391 -191
- viam/gen/app/v1/end_user_grpc.py +59 -0
- viam/gen/app/v1/end_user_pb2.py +55 -0
- viam/gen/app/v1/end_user_pb2.pyi +181 -0
- viam/gen/app/v1/robot_grpc.py +16 -1
- viam/gen/app/v1/robot_pb2.py +122 -94
- viam/gen/app/v1/robot_pb2.pyi +463 -123
- viam/gen/common/v1/common_pb2.py +87 -58
- viam/gen/common/v1/common_pb2.pyi +456 -149
- viam/gen/component/arm/v1/arm_grpc.py +58 -2
- viam/gen/component/arm/v1/arm_pb2.py +68 -51
- viam/gen/component/arm/v1/arm_pb2.pyi +108 -42
- 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_grpc.py +25 -2
- viam/gen/component/audioinput/v1/audioinput_pb2.py +36 -31
- viam/gen/component/audioinput/v1/audioinput_pb2.pyi +22 -22
- 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_grpc.py +42 -2
- viam/gen/component/base/v1/base_pb2.py +58 -47
- viam/gen/component/base/v1/base_pb2.pyi +65 -30
- viam/gen/component/board/v1/board_grpc.py +59 -7
- viam/gen/component/board/v1/board_pb2.py +94 -73
- viam/gen/component/board/v1/board_pb2.pyi +165 -68
- 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_grpc.py +38 -2
- viam/gen/component/camera/v1/camera_pb2.py +60 -43
- viam/gen/component/camera/v1/camera_pb2.pyi +191 -37
- viam/gen/component/encoder/v1/encoder_grpc.py +25 -2
- viam/gen/component/encoder/v1/encoder_pb2.py +36 -31
- viam/gen/component/encoder/v1/encoder_pb2.pyi +15 -15
- viam/gen/component/gantry/v1/gantry_grpc.py +47 -2
- viam/gen/component/gantry/v1/gantry_pb2.py +56 -43
- viam/gen/component/gantry/v1/gantry_pb2.pyi +67 -31
- viam/gen/component/generic/v1/generic_grpc.py +16 -2
- viam/gen/component/generic/v1/generic_pb2.py +16 -11
- viam/gen/component/gripper/v1/gripper_grpc.py +44 -2
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -35
- viam/gen/component/gripper/v1/gripper_pb2.pyi +62 -24
- viam/gen/component/inputcontroller/v1/input_controller_grpc.py +28 -2
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +46 -41
- viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +32 -36
- viam/gen/component/motor/v1/motor_grpc.py +51 -2
- viam/gen/component/motor/v1/motor_pb2.py +78 -67
- viam/gen/component/motor/v1/motor_pb2.pyi +75 -46
- viam/gen/component/movementsensor/v1/movementsensor_grpc.py +48 -2
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +70 -63
- viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +84 -57
- viam/gen/component/posetracker/v1/pose_tracker_grpc.py +19 -2
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +26 -21
- viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +9 -13
- viam/gen/component/powersensor/__init__.py +0 -0
- viam/gen/component/powersensor/v1/__init__.py +0 -0
- viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
- viam/gen/component/sensor/v1/sensor_grpc.py +21 -5
- viam/gen/component/sensor/v1/sensor_pb2.py +18 -22
- viam/gen/component/sensor/v1/sensor_pb2.pyi +1 -69
- viam/gen/component/servo/v1/servo_grpc.py +28 -2
- viam/gen/component/servo/v1/servo_pb2.py +42 -37
- viam/gen/component/servo/v1/servo_pb2.pyi +22 -26
- 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_grpc.py +15 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +29 -26
- viam/gen/component/testecho/v1/testecho_pb2.pyi +16 -20
- viam/gen/module/v1/module_grpc.py +18 -0
- viam/gen/module/v1/module_pb2.py +36 -33
- viam/gen/module/v1/module_pb2.pyi +39 -34
- viam/gen/opentelemetry/__init__.py +0 -0
- viam/gen/opentelemetry/proto/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/common_grpc.py +0 -0
- viam/gen/opentelemetry/proto/common/v1/common_pb2.py +27 -0
- viam/gen/opentelemetry/proto/common/v1/common_pb2.pyi +208 -0
- viam/gen/opentelemetry/proto/resource/__init__.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_grpc.py +0 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_pb2.py +18 -0
- viam/gen/opentelemetry/proto/resource/v1/resource_pb2.pyi +59 -0
- viam/gen/opentelemetry/proto/trace/__init__.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/__init__.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_grpc.py +0 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_pb2.py +37 -0
- viam/gen/opentelemetry/proto/trace/v1/trace_pb2.pyi +402 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +12 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +25 -22
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +13 -17
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +12 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +23 -20
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +13 -17
- viam/gen/proto/rpc/v1/auth_grpc.py +11 -0
- viam/gen/proto/rpc/v1/auth_pb2.py +27 -24
- viam/gen/proto/rpc/v1/auth_pb2.pyi +12 -16
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +35 -32
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +37 -41
- viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +15 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +62 -57
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +78 -69
- viam/gen/provisioning/__init__.py +0 -0
- viam/gen/provisioning/v1/__init__.py +0 -0
- viam/gen/provisioning/v1/provisioning_grpc.py +59 -0
- viam/gen/provisioning/v1/provisioning_pb2.py +45 -0
- viam/gen/provisioning/v1/provisioning_pb2.pyi +229 -0
- viam/gen/robot/v1/robot_grpc.py +144 -15
- viam/gen/robot/v1/robot_pb2.py +193 -119
- viam/gen/robot/v1/robot_pb2.pyi +565 -137
- viam/gen/service/datamanager/v1/data_manager_grpc.py +20 -2
- viam/gen/service/datamanager/v1/data_manager_pb2.py +27 -17
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +52 -10
- 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/__init__.py +0 -0
- viam/gen/service/generic/v1/__init__.py +0 -0
- viam/gen/service/generic/v1/generic_grpc.py +29 -0
- viam/gen/service/generic/v1/generic_pb2.py +21 -0
- viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/service/mlmodel/v1/mlmodel_grpc.py +9 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +76 -29
- viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +307 -28
- viam/gen/service/motion/v1/motion_grpc.py +42 -4
- viam/gen/service/motion/v1/motion_pb2.py +119 -51
- viam/gen/service/motion/v1/motion_pb2.pyi +595 -120
- viam/gen/service/navigation/v1/navigation_grpc.py +49 -1
- viam/gen/service/navigation/v1/navigation_pb2.py +76 -51
- viam/gen/service/navigation/v1/navigation_pb2.pyi +188 -33
- viam/gen/service/sensors/v1/sensors_grpc.py +12 -0
- viam/gen/service/sensors/v1/sensors_pb2.py +60 -29
- viam/gen/service/sensors/v1/sensors_pb2.pyi +18 -21
- viam/gen/service/shell/v1/shell_grpc.py +27 -1
- viam/gen/service/shell/v1/shell_pb2.py +37 -15
- viam/gen/service/shell/v1/shell_pb2.pyi +260 -7
- viam/gen/service/slam/v1/slam_grpc.py +24 -2
- viam/gen/service/slam/v1/slam_pb2.py +44 -30
- viam/gen/service/slam/v1/slam_pb2.pyi +128 -27
- 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_grpc.py +39 -1
- viam/gen/service/vision/v1/vision_pb2.py +61 -45
- viam/gen/service/vision/v1/vision_pb2.pyi +180 -41
- 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/__init__.py +0 -0
- viam/gen/stream/v1/__init__.py +0 -0
- viam/gen/stream/v1/stream_grpc.py +59 -0
- viam/gen/stream/v1/stream_pb2.py +39 -0
- viam/gen/stream/v1/stream_pb2.pyi +161 -0
- viam/gen/tagger/v1/tagger_pb2.py +9 -8
- viam/logging.py +160 -17
- viam/media/__init__.py +0 -9
- viam/media/audio.py +22 -10
- viam/media/utils/__init__.py +0 -0
- viam/media/utils/pil/__init__.py +55 -0
- viam/media/{viam_rgba_plugin.py → utils/pil/viam_rgba_plugin.py} +10 -16
- viam/media/viam_rgba.py +10 -0
- viam/media/video.py +197 -73
- viam/module/module.py +191 -44
- viam/module/resource_data_consumer.py +41 -0
- viam/module/service.py +9 -1
- viam/module/types.py +4 -5
- viam/operations.py +4 -3
- viam/proto/app/__init__.py +361 -5
- viam/proto/app/agent/__init__.py +28 -0
- viam/proto/app/billing.py +51 -27
- viam/proto/app/cloudslam/__init__.py +48 -0
- viam/proto/app/data/__init__.py +103 -17
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +40 -0
- viam/proto/app/datasync/__init__.py +11 -5
- viam/proto/app/end_user.py +34 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +25 -1
- viam/proto/app/packages/__init__.py +3 -3
- viam/proto/app/robot.py +19 -1
- viam/proto/common/__init__.py +35 -8
- viam/proto/component/arm/__init__.py +9 -1
- viam/proto/component/audioin/__init__.py +16 -0
- viam/proto/component/audioinput/__init__.py +3 -1
- viam/proto/component/audioout/__init__.py +15 -0
- viam/proto/component/base/__init__.py +7 -1
- viam/proto/component/board/__init__.py +13 -5
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +9 -1
- viam/proto/component/encoder/__init__.py +3 -1
- viam/proto/component/gantry/__init__.py +7 -1
- viam/proto/component/generic/__init__.py +3 -1
- viam/proto/component/gripper/__init__.py +7 -1
- viam/proto/component/inputcontroller/__init__.py +7 -1
- viam/proto/component/motor/__init__.py +7 -1
- viam/proto/component/movementsensor/__init__.py +7 -1
- viam/proto/component/posetracker/__init__.py +7 -1
- viam/proto/component/powersensor/__init__.py +30 -0
- viam/proto/component/sensor/__init__.py +3 -4
- viam/proto/component/servo/__init__.py +3 -1
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +3 -1
- viam/proto/module/__init__.py +3 -1
- viam/proto/opentelemetry/__init__.py +0 -0
- viam/proto/opentelemetry/proto/__init__.py +0 -0
- viam/proto/opentelemetry/proto/common/__init__.py +15 -0
- viam/proto/opentelemetry/proto/resource/__init__.py +10 -0
- viam/proto/opentelemetry/proto/trace/__init__.py +15 -0
- viam/proto/provisioning/__init__.py +42 -0
- viam/proto/robot/__init__.py +57 -9
- viam/proto/rpc/auth.py +11 -1
- viam/proto/rpc/examples/echo/__init__.py +3 -1
- viam/proto/rpc/examples/echoresource/__init__.py +7 -1
- viam/proto/rpc/webrtc/grpc.py +3 -1
- viam/proto/rpc/webrtc/signaling.py +5 -1
- viam/proto/service/datamanager/__init__.py +15 -2
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +12 -0
- viam/proto/service/mlmodel/__init__.py +27 -1
- viam/proto/service/motion/__init__.py +35 -5
- viam/proto/service/navigation/__init__.py +19 -1
- viam/proto/service/sensors/__init__.py +3 -1
- viam/proto/service/shell/__init__.py +25 -2
- viam/proto/service/slam/__init__.py +13 -1
- viam/proto/service/video/__init__.py +15 -0
- viam/proto/service/vision/__init__.py +11 -1
- viam/proto/service/worldstatestore/__init__.py +32 -0
- viam/proto/stream/__init__.py +36 -0
- viam/py.typed +0 -0
- viam/resource/base.py +45 -8
- viam/resource/easy_resource.py +149 -0
- viam/resource/manager.py +35 -14
- viam/resource/registry.py +40 -52
- viam/resource/rpc_client_base.py +33 -1
- viam/resource/rpc_service_base.py +15 -8
- viam/resource/types.py +39 -26
- viam/robot/client.py +458 -91
- viam/robot/service.py +13 -107
- viam/rpc/dial.py +133 -15
- viam/rpc/libviam_rust_utils.so +0 -0
- viam/rpc/server.py +59 -15
- 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 +18 -0
- viam/services/generic/client.py +58 -0
- viam/services/generic/generic.py +58 -0
- viam/services/generic/service.py +29 -0
- viam/services/mlmodel/__init__.py +15 -1
- viam/services/mlmodel/client.py +20 -15
- viam/services/mlmodel/mlmodel.py +44 -7
- viam/services/mlmodel/service.py +9 -13
- viam/services/mlmodel/utils.py +101 -0
- viam/services/motion/__init__.py +15 -3
- viam/services/motion/client.py +109 -150
- viam/services/motion/motion.py +380 -0
- viam/services/motion/service.py +132 -0
- viam/services/navigation/__init__.py +11 -0
- viam/services/navigation/client.py +99 -0
- viam/services/navigation/navigation.py +250 -0
- viam/services/navigation/service.py +137 -0
- viam/services/service_base.py +43 -4
- viam/services/service_client_base.py +4 -4
- viam/services/slam/__init__.py +4 -1
- viam/services/slam/client.py +21 -11
- viam/services/slam/service.py +16 -19
- viam/services/slam/slam.py +66 -5
- viam/services/vision/__init__.py +8 -0
- viam/services/vision/client.py +115 -111
- viam/services/vision/service.py +143 -0
- viam/services/vision/vision.py +317 -0
- 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 +254 -0
- viam/streams.py +44 -0
- viam/utils.py +143 -15
- viam/version_metadata.py +4 -0
- viam_sdk-0.66.0.dist-info/METADATA +157 -0
- viam_sdk-0.66.0.dist-info/RECORD +531 -0
- {viam_sdk-0.3.0.dist-info → viam_sdk-0.66.0.dist-info}/WHEEL +1 -1
- viam/components/audio_input/__init__.py +0 -18
- viam/components/audio_input/audio_input.py +0 -79
- viam/components/audio_input/client.py +0 -60
- viam/components/audio_input/service.py +0 -118
- viam/components/types.py +0 -5
- viam/gen/app/model/v1/model_grpc.py +0 -39
- viam/gen/app/model/v1/model_pb2.py +0 -71
- viam/gen/app/model/v1/model_pb2.pyi +0 -285
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_grpc.py +0 -21
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.py +0 -18
- viam/gen/proto/rpc/examples/fileupload/v1/fileupload_pb2.pyi +0 -49
- viam/media/media.py +0 -53
- viam/proto/app/model/__init__.py +0 -40
- viam/proto/rpc/examples/fileupload/__init__.py +0 -13
- viam/services/sensors/__init__.py +0 -5
- viam/services/sensors/client.py +0 -63
- viam_sdk-0.3.0.dist-info/LICENSE +0 -202
- viam_sdk-0.3.0.dist-info/METADATA +0 -122
- viam_sdk-0.3.0.dist-info/RECORD +0 -372
- /viam/{gen/app/model → app}/__init__.py +0 -0
- /viam/gen/app/{model/v1 → agent}/__init__.py +0 -0
- /viam/gen/{proto/rpc/examples/fileupload → app/agent/v1}/__init__.py +0 -0
- /viam/gen/{proto/rpc/examples/fileupload/v1 → app/cloudslam}/__init__.py +0 -0
- /LICENSE → /viam_sdk-0.66.0.dist-info/licenses/LICENSE +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from typing import Any, Dict, Final, Mapping, Optional, Tuple
|
|
3
|
+
|
|
4
|
+
from viam.components.component_base import ComponentBase
|
|
5
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
|
+
from viam.utils import SensorReading
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PowerSensor(ComponentBase):
|
|
10
|
+
"""PowerSensor reports information about voltage, current and power.
|
|
11
|
+
|
|
12
|
+
This acts as an abstract base class for any sensors that can provide data regarding voltage, current and/or power.
|
|
13
|
+
This cannot be used on its own. If the ``__init__()`` function is overridden, it must call the ``super().__init__()`` function.
|
|
14
|
+
|
|
15
|
+
::
|
|
16
|
+
|
|
17
|
+
from viam.components.power_sensor import PowerSensor
|
|
18
|
+
|
|
19
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/>`_.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
23
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "power_sensor"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
@abc.abstractmethod
|
|
27
|
+
async def get_voltage(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Tuple[float, bool]:
|
|
28
|
+
"""Return the voltage reading of a specified device and whether it is AC or DC.
|
|
29
|
+
|
|
30
|
+
::
|
|
31
|
+
|
|
32
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
33
|
+
|
|
34
|
+
# Get the voltage reading from the power sensor
|
|
35
|
+
voltage, is_ac = await my_power_sensor.get_voltage()
|
|
36
|
+
print("The voltage is", voltage, "V, Is AC:", is_ac)
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
Tuple[float, bool]: A float representing the voltage reading in V. A bool indicating whether the voltage is AC (`true`) or DC
|
|
40
|
+
(`false`).
|
|
41
|
+
|
|
42
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getvoltage>`_.
|
|
43
|
+
"""
|
|
44
|
+
...
|
|
45
|
+
|
|
46
|
+
@abc.abstractmethod
|
|
47
|
+
async def get_current(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Tuple[float, bool]:
|
|
48
|
+
"""Return the current of a specified device and whether it is AC or DC.
|
|
49
|
+
|
|
50
|
+
::
|
|
51
|
+
|
|
52
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
53
|
+
|
|
54
|
+
# Get the current reading from the power sensor
|
|
55
|
+
current, is_ac = await my_power_sensor.get_current()
|
|
56
|
+
print("The current is ", current, " A, Is AC: ", is_ac)
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
Tuple[float, bool]: A tuple which includes a float representing the current reading in amps, and a bool indicating whether the
|
|
60
|
+
current is AC (`true`) or DC (`false`).
|
|
61
|
+
|
|
62
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getcurrent>`_.
|
|
63
|
+
"""
|
|
64
|
+
...
|
|
65
|
+
|
|
66
|
+
@abc.abstractmethod
|
|
67
|
+
async def get_power(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> float:
|
|
68
|
+
"""Return the power reading in watts.
|
|
69
|
+
|
|
70
|
+
::
|
|
71
|
+
|
|
72
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
73
|
+
|
|
74
|
+
# Get the power reading from the power sensor
|
|
75
|
+
power = await my_power_sensor.get_power()
|
|
76
|
+
print("The power is", power, "Watts")
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
float: The power reading in watts.
|
|
80
|
+
|
|
81
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getpower>`_.
|
|
82
|
+
"""
|
|
83
|
+
...
|
|
84
|
+
|
|
85
|
+
async def get_readings(
|
|
86
|
+
self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
87
|
+
) -> Mapping[str, SensorReading]:
|
|
88
|
+
"""Get the measurements or readings that this power sensor provides. If a sensor is not configured correctly or fails to read a
|
|
89
|
+
piece of data, it will not appear in the readings dictionary.
|
|
90
|
+
|
|
91
|
+
::
|
|
92
|
+
|
|
93
|
+
my_power_sensor = PowerSensor.from_robot(robot=machine, name='my_power_sensor')
|
|
94
|
+
|
|
95
|
+
# Get the readings provided by the sensor.
|
|
96
|
+
readings = await my_power_sensor.get_readings()
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
Mapping[str, Any]: The readings for the PowerSensor. Can be of any type. Includes voltage in volts (float), current in
|
|
100
|
+
amperes (float), is_ac (bool), and power in watts (float).
|
|
101
|
+
|
|
102
|
+
For more information, see `Power Sensor component <https://docs.viam.com/dev/reference/apis/components/power-sensor/#getreadings>`_.
|
|
103
|
+
"""
|
|
104
|
+
...
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.components.power_sensor.power_sensor import PowerSensor
|
|
4
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetReadingsRequest, GetReadingsResponse
|
|
5
|
+
from viam.proto.component.powersensor import (
|
|
6
|
+
GetCurrentRequest,
|
|
7
|
+
GetCurrentResponse,
|
|
8
|
+
GetPowerRequest,
|
|
9
|
+
GetPowerResponse,
|
|
10
|
+
GetVoltageRequest,
|
|
11
|
+
GetVoltageResponse,
|
|
12
|
+
PowerSensorServiceBase,
|
|
13
|
+
)
|
|
14
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
15
|
+
from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class PowerSensorRPCService(PowerSensorServiceBase, ResourceRPCServiceBase[PowerSensor]):
|
|
19
|
+
"""
|
|
20
|
+
gRPC Service for a PowerSensor
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
RESOURCE_TYPE = PowerSensor
|
|
24
|
+
|
|
25
|
+
async def GetReadings(self, stream: Stream[GetReadingsRequest, GetReadingsResponse]) -> None:
|
|
26
|
+
request = await stream.recv_message()
|
|
27
|
+
assert request is not None
|
|
28
|
+
name = request.name
|
|
29
|
+
sensor = self.get_resource(name)
|
|
30
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
31
|
+
readings = await sensor.get_readings(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
32
|
+
response = GetReadingsResponse(readings=sensor_readings_native_to_value(readings))
|
|
33
|
+
await stream.send_message(response)
|
|
34
|
+
|
|
35
|
+
async def GetVoltage(self, stream: Stream[GetVoltageRequest, GetVoltageResponse]) -> None:
|
|
36
|
+
request = await stream.recv_message()
|
|
37
|
+
assert request is not None
|
|
38
|
+
name = request.name
|
|
39
|
+
sensor = self.get_resource(name)
|
|
40
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
41
|
+
voltage, is_ac = await sensor.get_voltage(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
42
|
+
response = GetVoltageResponse(volts=voltage, is_ac=is_ac)
|
|
43
|
+
await stream.send_message(response)
|
|
44
|
+
|
|
45
|
+
async def GetCurrent(self, stream: Stream[GetCurrentRequest, GetCurrentResponse]) -> None:
|
|
46
|
+
request = await stream.recv_message()
|
|
47
|
+
assert request is not None
|
|
48
|
+
name = request.name
|
|
49
|
+
sensor = self.get_resource(name)
|
|
50
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
51
|
+
current, is_ac = await sensor.get_current(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
52
|
+
response = GetCurrentResponse(amperes=current, is_ac=is_ac)
|
|
53
|
+
await stream.send_message(response)
|
|
54
|
+
|
|
55
|
+
async def GetPower(self, stream: Stream[GetPowerRequest, GetPowerResponse]) -> None:
|
|
56
|
+
request = await stream.recv_message()
|
|
57
|
+
assert request is not None
|
|
58
|
+
name = request.name
|
|
59
|
+
sensor = self.get_resource(name)
|
|
60
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
61
|
+
power = await sensor.get_power(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
62
|
+
response = GetPowerResponse(watts=power)
|
|
63
|
+
await stream.send_message(response)
|
|
64
|
+
|
|
65
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
66
|
+
request = await stream.recv_message()
|
|
67
|
+
assert request is not None
|
|
68
|
+
sensor = self.get_resource(request.name)
|
|
69
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
70
|
+
result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
71
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
72
|
+
await stream.send_message(response)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import viam.gen.component.sensor.v1.sensor_pb2 # Need this import for Sensor service descriptors to resolve
|
|
1
2
|
from viam.resource.registry import Registry, ResourceRegistration
|
|
2
3
|
|
|
3
4
|
from .client import SensorClient
|
|
@@ -8,7 +9,7 @@ __all__ = [
|
|
|
8
9
|
"Sensor",
|
|
9
10
|
]
|
|
10
11
|
|
|
11
|
-
Registry.
|
|
12
|
+
Registry.register_api(
|
|
12
13
|
ResourceRegistration(
|
|
13
14
|
Sensor,
|
|
14
15
|
SensorRPCService,
|
viam/components/sensor/client.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
from typing import Any, Mapping, Optional
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
2
2
|
|
|
3
3
|
from grpclib.client import Channel
|
|
4
4
|
|
|
5
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
6
|
-
from viam.proto.component.sensor import
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry, GetReadingsRequest, GetReadingsResponse
|
|
6
|
+
from viam.proto.component.sensor import SensorServiceStub
|
|
7
7
|
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
8
|
-
from viam.utils import ValueTypes, dict_to_struct, sensor_readings_value_to_native, struct_to_dict
|
|
8
|
+
from viam.utils import SensorReading, ValueTypes, dict_to_struct, get_geometries, sensor_readings_value_to_native, struct_to_dict
|
|
9
9
|
|
|
10
10
|
from .sensor import Sensor
|
|
11
11
|
|
|
@@ -20,14 +20,30 @@ class SensorClient(Sensor, ReconfigurableResourceRPCClientBase):
|
|
|
20
20
|
self.client = SensorServiceStub(channel)
|
|
21
21
|
super().__init__(name)
|
|
22
22
|
|
|
23
|
-
async def get_readings(
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
async def get_readings(
|
|
24
|
+
self,
|
|
25
|
+
*,
|
|
26
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
27
|
+
timeout: Optional[float] = None,
|
|
28
|
+
**kwargs,
|
|
29
|
+
) -> Mapping[str, SensorReading]:
|
|
30
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
26
31
|
request = GetReadingsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
27
|
-
response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout)
|
|
32
|
+
response: GetReadingsResponse = await self.client.GetReadings(request, timeout=timeout, metadata=md)
|
|
28
33
|
return sensor_readings_value_to_native(response.readings)
|
|
29
34
|
|
|
30
|
-
async def do_command(
|
|
35
|
+
async def do_command(
|
|
36
|
+
self,
|
|
37
|
+
command: Mapping[str, ValueTypes],
|
|
38
|
+
*,
|
|
39
|
+
timeout: Optional[float] = None,
|
|
40
|
+
**kwargs,
|
|
41
|
+
) -> Mapping[str, ValueTypes]:
|
|
42
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
31
43
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
32
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
44
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
33
45
|
return struct_to_dict(response.result)
|
|
46
|
+
|
|
47
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
48
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
49
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
viam/components/sensor/sensor.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import abc
|
|
2
|
-
from typing import Any, Mapping, Optional
|
|
2
|
+
from typing import Any, Final, Mapping, Optional
|
|
3
3
|
|
|
4
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
4
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
|
+
from viam.utils import SensorReading
|
|
5
6
|
|
|
6
7
|
from ..component_base import ComponentBase
|
|
7
8
|
|
|
@@ -13,18 +14,35 @@ class Sensor(ComponentBase):
|
|
|
13
14
|
This acts as an abstract base class for any drivers representing specific
|
|
14
15
|
sensor implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
15
16
|
overridden, it must call the ``super().__init__()`` function.
|
|
17
|
+
|
|
18
|
+
::
|
|
19
|
+
|
|
20
|
+
from viam.components.sensor import Sensor
|
|
21
|
+
|
|
22
|
+
For more information, see `Sensor component <https://docs.viam.com/dev/reference/apis/components/sensor/>`_.
|
|
16
23
|
"""
|
|
17
24
|
|
|
18
|
-
|
|
25
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
26
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "sensor"
|
|
27
|
+
)
|
|
19
28
|
|
|
20
29
|
@abc.abstractmethod
|
|
21
30
|
async def get_readings(
|
|
22
31
|
self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
23
|
-
) -> Mapping[str,
|
|
32
|
+
) -> Mapping[str, SensorReading]:
|
|
24
33
|
"""
|
|
25
34
|
Obtain the measurements/data specific to this sensor.
|
|
26
35
|
|
|
36
|
+
::
|
|
37
|
+
|
|
38
|
+
my_sensor = Sensor.from_robot(robot=machine, name='my_sensor')
|
|
39
|
+
|
|
40
|
+
# Get the readings provided by the sensor.
|
|
41
|
+
readings = await my_sensor.get_readings()
|
|
42
|
+
|
|
27
43
|
Returns:
|
|
28
44
|
Mapping[str, Any]: The measurements. Can be of any type.
|
|
45
|
+
|
|
46
|
+
For more information, see `Sensor component <https://docs.viam.com/dev/reference/apis/components/sensor/#getreadings>`_.
|
|
29
47
|
"""
|
|
30
48
|
...
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
from grpclib.server import Stream
|
|
2
2
|
|
|
3
|
-
from viam.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
from viam.proto.common import (
|
|
4
|
+
DoCommandRequest,
|
|
5
|
+
DoCommandResponse,
|
|
6
|
+
GetGeometriesRequest,
|
|
7
|
+
GetGeometriesResponse,
|
|
8
|
+
GetReadingsRequest,
|
|
9
|
+
GetReadingsResponse,
|
|
10
|
+
)
|
|
11
|
+
from viam.proto.component.sensor import SensorServiceBase
|
|
6
12
|
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
7
13
|
from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
|
|
8
14
|
|
|
@@ -20,10 +26,7 @@ class SensorRPCService(SensorServiceBase, ResourceRPCServiceBase[Sensor]):
|
|
|
20
26
|
request = await stream.recv_message()
|
|
21
27
|
assert request is not None
|
|
22
28
|
name = request.name
|
|
23
|
-
|
|
24
|
-
sensor = self.get_resource(name)
|
|
25
|
-
except ResourceNotFoundError as e:
|
|
26
|
-
raise e.grpc_error
|
|
29
|
+
sensor = self.get_resource(name)
|
|
27
30
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
28
31
|
readings = await sensor.get_readings(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
29
32
|
response = GetReadingsResponse(readings=sensor_readings_native_to_value(readings))
|
|
@@ -32,11 +35,17 @@ class SensorRPCService(SensorServiceBase, ResourceRPCServiceBase[Sensor]):
|
|
|
32
35
|
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
33
36
|
request = await stream.recv_message()
|
|
34
37
|
assert request is not None
|
|
35
|
-
|
|
36
|
-
sensor = self.get_resource(request.name)
|
|
37
|
-
except ResourceNotFoundError as e:
|
|
38
|
-
raise e.grpc_error
|
|
38
|
+
sensor = self.get_resource(request.name)
|
|
39
39
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
40
40
|
result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
41
41
|
response = DoCommandResponse(result=dict_to_struct(result))
|
|
42
42
|
await stream.send_message(response)
|
|
43
|
+
|
|
44
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
45
|
+
request = await stream.recv_message()
|
|
46
|
+
assert request is not None
|
|
47
|
+
sensor = self.get_resource(request.name)
|
|
48
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
49
|
+
geometries = await sensor.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
50
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
51
|
+
await stream.send_message(response)
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
|
|
3
|
-
from viam.proto.component.servo import Status as ServoStatus
|
|
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 ServoClient
|
|
9
4
|
from .service import ServoRPCService
|
|
@@ -13,11 +8,4 @@ __all__ = [
|
|
|
13
8
|
"Servo",
|
|
14
9
|
]
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
async def create_status(component: Servo) -> Status:
|
|
18
|
-
(position_deg, is_moving) = await asyncio.gather(component.get_position(), component.is_moving())
|
|
19
|
-
s = ServoStatus(position_deg=position_deg, is_moving=is_moving)
|
|
20
|
-
return Status(name=Servo.get_resource_name(component.name), status=message_to_struct(s))
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
Registry.register_subtype(ResourceRegistration(Servo, ServoRPCService, lambda name, channel: ServoClient(name, channel), create_status))
|
|
11
|
+
Registry.register_api(ResourceRegistration(Servo, ServoRPCService, lambda name, channel: ServoClient(name, channel)))
|
viam/components/servo/client.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
from typing import Any, Dict, Mapping, Optional
|
|
1
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
2
2
|
|
|
3
3
|
from grpclib.client import Channel
|
|
4
4
|
|
|
5
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
5
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
6
6
|
from viam.proto.component.servo import (
|
|
7
7
|
GetPositionRequest,
|
|
8
8
|
GetPositionResponse,
|
|
@@ -13,7 +13,7 @@ from viam.proto.component.servo import (
|
|
|
13
13
|
StopRequest,
|
|
14
14
|
)
|
|
15
15
|
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
16
|
-
from viam.utils import ValueTypes, dict_to_struct, struct_to_dict
|
|
16
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
17
17
|
|
|
18
18
|
from .servo import Servo
|
|
19
19
|
|
|
@@ -28,33 +28,59 @@ class ServoClient(Servo, ReconfigurableResourceRPCClientBase):
|
|
|
28
28
|
self.client = ServoServiceStub(channel)
|
|
29
29
|
super().__init__(name)
|
|
30
30
|
|
|
31
|
-
async def get_position(
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
async def get_position(
|
|
32
|
+
self,
|
|
33
|
+
*,
|
|
34
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
35
|
+
timeout: Optional[float] = None,
|
|
36
|
+
**kwargs,
|
|
37
|
+
) -> int:
|
|
38
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
34
39
|
request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
35
|
-
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout)
|
|
40
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
36
41
|
return response.position_deg
|
|
37
42
|
|
|
38
|
-
async def move(
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
async def move(
|
|
44
|
+
self,
|
|
45
|
+
angle: int,
|
|
46
|
+
*,
|
|
47
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
48
|
+
timeout: Optional[float] = None,
|
|
49
|
+
**kwargs,
|
|
50
|
+
):
|
|
51
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
41
52
|
request = MoveRequest(name=self.name, angle_deg=angle, extra=dict_to_struct(extra))
|
|
42
|
-
await self.client.Move(request, timeout=timeout)
|
|
53
|
+
await self.client.Move(request, timeout=timeout, metadata=md)
|
|
43
54
|
|
|
44
|
-
async def stop(
|
|
45
|
-
|
|
46
|
-
|
|
55
|
+
async def stop(
|
|
56
|
+
self,
|
|
57
|
+
*,
|
|
58
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
59
|
+
timeout: Optional[float] = None,
|
|
60
|
+
**kwargs,
|
|
61
|
+
):
|
|
62
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
47
63
|
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
|
|
48
|
-
await self.client.Stop(request, timeout=timeout)
|
|
64
|
+
await self.client.Stop(request, timeout=timeout, metadata=md)
|
|
49
65
|
|
|
50
|
-
async def is_moving(self, *,
|
|
51
|
-
|
|
52
|
-
extra = {}
|
|
66
|
+
async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
|
|
67
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
53
68
|
request = IsMovingRequest(name=self.name)
|
|
54
|
-
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout)
|
|
69
|
+
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
|
|
55
70
|
return response.is_moving
|
|
56
71
|
|
|
57
|
-
async def do_command(
|
|
72
|
+
async def do_command(
|
|
73
|
+
self,
|
|
74
|
+
command: Mapping[str, ValueTypes],
|
|
75
|
+
*,
|
|
76
|
+
timeout: Optional[float] = None,
|
|
77
|
+
**kwargs,
|
|
78
|
+
) -> Mapping[str, ValueTypes]:
|
|
79
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
58
80
|
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
59
|
-
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout)
|
|
81
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
60
82
|
return struct_to_dict(response.result)
|
|
83
|
+
|
|
84
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
85
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
86
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
viam/components/servo/service.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from grpclib.server import Stream
|
|
2
2
|
|
|
3
|
-
from viam.
|
|
4
|
-
from viam.proto.common import DoCommandRequest, DoCommandResponse
|
|
3
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
5
4
|
from viam.proto.component.servo import (
|
|
6
5
|
GetPositionRequest,
|
|
7
6
|
GetPositionResponse,
|
|
@@ -30,10 +29,7 @@ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
|
|
|
30
29
|
request = await stream.recv_message()
|
|
31
30
|
assert request is not None
|
|
32
31
|
name = request.name
|
|
33
|
-
|
|
34
|
-
servo = self.get_resource(name)
|
|
35
|
-
except ResourceNotFoundError as e:
|
|
36
|
-
raise e.grpc_error
|
|
32
|
+
servo = self.get_resource(name)
|
|
37
33
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
38
34
|
await servo.move(request.angle_deg, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
39
35
|
await stream.send_message(MoveResponse())
|
|
@@ -42,10 +38,7 @@ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
|
|
|
42
38
|
request = await stream.recv_message()
|
|
43
39
|
assert request is not None
|
|
44
40
|
name = request.name
|
|
45
|
-
|
|
46
|
-
servo = self.get_resource(name)
|
|
47
|
-
except ResourceNotFoundError as e:
|
|
48
|
-
raise e.grpc_error
|
|
41
|
+
servo = self.get_resource(name)
|
|
49
42
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
50
43
|
position = await servo.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
51
44
|
resp = GetPositionResponse(position_deg=position)
|
|
@@ -55,10 +48,7 @@ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
|
|
|
55
48
|
request = await stream.recv_message()
|
|
56
49
|
assert request is not None
|
|
57
50
|
name = request.name
|
|
58
|
-
|
|
59
|
-
servo = self.get_resource(name)
|
|
60
|
-
except ResourceNotFoundError as e:
|
|
61
|
-
raise e.grpc_error
|
|
51
|
+
servo = self.get_resource(name)
|
|
62
52
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
63
53
|
await servo.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
64
54
|
await stream.send_message(StopResponse())
|
|
@@ -67,21 +57,24 @@ class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
|
|
|
67
57
|
request = await stream.recv_message()
|
|
68
58
|
assert request is not None
|
|
69
59
|
name = request.name
|
|
70
|
-
|
|
71
|
-
servo = self.get_resource(name)
|
|
72
|
-
except ResourceNotFoundError as e:
|
|
73
|
-
raise e.grpc_error
|
|
60
|
+
servo = self.get_resource(name)
|
|
74
61
|
is_moving = await servo.is_moving()
|
|
75
62
|
await stream.send_message(IsMovingResponse(is_moving=is_moving))
|
|
76
63
|
|
|
77
64
|
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
78
65
|
request = await stream.recv_message()
|
|
79
66
|
assert request is not None
|
|
80
|
-
|
|
81
|
-
servo = self.get_resource(request.name)
|
|
82
|
-
except ResourceNotFoundError as e:
|
|
83
|
-
raise e.grpc_error
|
|
67
|
+
servo = self.get_resource(request.name)
|
|
84
68
|
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
85
69
|
result = await servo.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
86
70
|
response = DoCommandResponse(result=dict_to_struct(result))
|
|
87
71
|
await stream.send_message(response)
|
|
72
|
+
|
|
73
|
+
async def GetGeometries(self, stream: Stream[GetGeometriesRequest, GetGeometriesResponse]) -> None:
|
|
74
|
+
request = await stream.recv_message()
|
|
75
|
+
assert request is not None
|
|
76
|
+
servo = self.get_resource(request.name)
|
|
77
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
78
|
+
geometries = await servo.get_geometries(extra=struct_to_dict(request.extra), timeout=timeout)
|
|
79
|
+
response = GetGeometriesResponse(geometries=geometries)
|
|
80
|
+
await stream.send_message(response)
|
viam/components/servo/servo.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import abc
|
|
2
2
|
from typing import Any, Final, Mapping, Optional
|
|
3
3
|
|
|
4
|
-
from viam.resource.types import RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
4
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
5
|
|
|
6
6
|
from ..component_base import ComponentBase
|
|
7
7
|
|
|
@@ -13,17 +13,37 @@ class Servo(ComponentBase):
|
|
|
13
13
|
This acts as an abstract base class for any drivers representing specific
|
|
14
14
|
servo implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
15
15
|
overridden, it must call the ``super().__init__()`` function.
|
|
16
|
+
|
|
17
|
+
::
|
|
18
|
+
|
|
19
|
+
from viam.components.servo import Servo
|
|
20
|
+
|
|
21
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/>`_.
|
|
16
22
|
"""
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
25
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "servo"
|
|
26
|
+
)
|
|
19
27
|
|
|
20
28
|
@abc.abstractmethod
|
|
21
29
|
async def move(self, angle: int, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
|
|
22
30
|
"""
|
|
23
31
|
Move the servo to the provided angle.
|
|
24
32
|
|
|
33
|
+
::
|
|
34
|
+
|
|
35
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
36
|
+
|
|
37
|
+
# Move the servo from its origin to the desired angle of 10 degrees.
|
|
38
|
+
await my_servo.move(10)
|
|
39
|
+
|
|
40
|
+
# Move the servo from its origin to the desired angle of 90 degrees.
|
|
41
|
+
await my_servo.move(90)
|
|
42
|
+
|
|
25
43
|
Args:
|
|
26
44
|
angle (int): The desired angle of the servo in degrees.
|
|
45
|
+
|
|
46
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#move>`_.
|
|
27
47
|
"""
|
|
28
48
|
...
|
|
29
49
|
|
|
@@ -32,8 +52,26 @@ class Servo(ComponentBase):
|
|
|
32
52
|
"""
|
|
33
53
|
Get the current angle (degrees) of the servo.
|
|
34
54
|
|
|
55
|
+
::
|
|
56
|
+
|
|
57
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
58
|
+
|
|
59
|
+
# Move the servo from its origin to the desired angle of 10 degrees.
|
|
60
|
+
await my_servo.move(10)
|
|
61
|
+
|
|
62
|
+
# Get the current set angle of the servo.
|
|
63
|
+
pos1 = await my_servo.get_position()
|
|
64
|
+
|
|
65
|
+
# Move the servo from its origin to the desired angle of 20 degrees.
|
|
66
|
+
await my_servo.move(20)
|
|
67
|
+
|
|
68
|
+
# Get the current set angle of the servo.
|
|
69
|
+
pos2 = await my_servo.get_position()
|
|
70
|
+
|
|
35
71
|
Returns:
|
|
36
72
|
int: The current angle of the servo in degrees.
|
|
73
|
+
|
|
74
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#getposition>`_.
|
|
37
75
|
"""
|
|
38
76
|
...
|
|
39
77
|
|
|
@@ -41,6 +79,18 @@ class Servo(ComponentBase):
|
|
|
41
79
|
async def stop(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
|
|
42
80
|
"""
|
|
43
81
|
Stop the servo. It is assumed that the servo stops immediately.
|
|
82
|
+
|
|
83
|
+
::
|
|
84
|
+
|
|
85
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
86
|
+
|
|
87
|
+
# Move the servo from its origin to the desired angle of 10 degrees.
|
|
88
|
+
await my_servo.move(10)
|
|
89
|
+
|
|
90
|
+
# Stop the servo. It is assumed that the servo stops moving immediately.
|
|
91
|
+
await my_servo.stop()
|
|
92
|
+
|
|
93
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#stop>`_.
|
|
44
94
|
"""
|
|
45
95
|
...
|
|
46
96
|
|
|
@@ -49,7 +99,16 @@ class Servo(ComponentBase):
|
|
|
49
99
|
"""
|
|
50
100
|
Get if the servo is currently moving.
|
|
51
101
|
|
|
102
|
+
::
|
|
103
|
+
|
|
104
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
105
|
+
|
|
106
|
+
print(await my_servo.is_moving())
|
|
107
|
+
|
|
108
|
+
|
|
52
109
|
Returns:
|
|
53
110
|
bool: Whether the servo is moving.
|
|
111
|
+
|
|
112
|
+
For more information, see `Servo component <https://docs.viam.com/dev/reference/apis/components/servo/#ismoving>`_.
|
|
54
113
|
"""
|
|
55
114
|
...
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import viam.gen.component.switch.v1.switch_pb2
|
|
2
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
3
|
+
|
|
4
|
+
from .client import SwitchClient
|
|
5
|
+
from .service import SwitchRPCService
|
|
6
|
+
from .switch import Switch
|
|
7
|
+
|
|
8
|
+
__all__ = ["Switch"]
|
|
9
|
+
|
|
10
|
+
Registry.register_api(ResourceRegistration(Switch, SwitchRPCService, lambda name, channel: SwitchClient(name, channel)))
|