viam-sdk 0.45.2__py3-none-win_amd64.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 +71 -0
- viam/app/__init__.py +0 -0
- viam/app/_logs.py +34 -0
- viam/app/app_client.py +2525 -0
- viam/app/billing_client.py +143 -0
- viam/app/data_client.py +1715 -0
- viam/app/ml_training_client.py +251 -0
- viam/app/provisioning_client.py +95 -0
- viam/app/viam_client.py +260 -0
- viam/components/__init__.py +0 -0
- viam/components/arm/__init__.py +16 -0
- viam/components/arm/arm.py +223 -0
- viam/components/arm/client.py +124 -0
- viam/components/arm/service.py +123 -0
- viam/components/audio_input/__init__.py +18 -0
- viam/components/audio_input/audio_input.py +81 -0
- viam/components/audio_input/client.py +70 -0
- viam/components/audio_input/service.py +114 -0
- viam/components/base/__init__.py +13 -0
- viam/components/base/base.py +260 -0
- viam/components/base/client.py +153 -0
- viam/components/base/service.py +138 -0
- viam/components/board/__init__.py +9 -0
- viam/components/board/board.py +414 -0
- viam/components/board/client.py +241 -0
- viam/components/board/service.py +223 -0
- 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 +22 -0
- viam/components/camera/camera.py +138 -0
- viam/components/camera/client.py +98 -0
- viam/components/camera/service.py +105 -0
- viam/components/component_base.py +65 -0
- viam/components/encoder/__init__.py +18 -0
- viam/components/encoder/client.py +83 -0
- viam/components/encoder/encoder.py +118 -0
- viam/components/encoder/service.py +72 -0
- viam/components/gantry/__init__.py +11 -0
- viam/components/gantry/client.py +115 -0
- viam/components/gantry/gantry.py +156 -0
- viam/components/gantry/service.py +113 -0
- viam/components/generic/__init__.py +18 -0
- viam/components/generic/client.py +62 -0
- viam/components/generic/generic.py +76 -0
- viam/components/generic/service.py +40 -0
- viam/components/gripper/__init__.py +11 -0
- viam/components/gripper/client.py +85 -0
- viam/components/gripper/gripper.py +114 -0
- viam/components/gripper/service.py +81 -0
- viam/components/input/__init__.py +15 -0
- viam/components/input/client.py +194 -0
- viam/components/input/input.py +297 -0
- viam/components/input/service.py +175 -0
- viam/components/motor/__init__.py +11 -0
- viam/components/motor/client.py +168 -0
- viam/components/motor/motor.py +301 -0
- viam/components/motor/service.py +150 -0
- viam/components/movement_sensor/__init__.py +21 -0
- viam/components/movement_sensor/client.py +161 -0
- viam/components/movement_sensor/movement_sensor.py +253 -0
- viam/components/movement_sensor/service.py +146 -0
- viam/components/pose_tracker/__init__.py +17 -0
- viam/components/pose_tracker/client.py +50 -0
- viam/components/pose_tracker/pose_tracker.py +40 -0
- viam/components/pose_tracker/service.py +45 -0
- 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 +18 -0
- viam/components/sensor/client.py +49 -0
- viam/components/sensor/sensor.py +48 -0
- viam/components/sensor/service.py +51 -0
- viam/components/servo/__init__.py +11 -0
- viam/components/servo/client.py +86 -0
- viam/components/servo/service.py +80 -0
- viam/components/servo/servo.py +114 -0
- 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/errors.py +105 -0
- viam/gen/__init__.py +0 -0
- viam/gen/app/__init__.py +0 -0
- viam/gen/app/agent/__init__.py +0 -0
- viam/gen/app/agent/v1/__init__.py +0 -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/__init__.py +0 -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/__init__.py +0 -0
- viam/gen/app/data/v1/__init__.py +0 -0
- viam/gen/app/data/v1/data_grpc.py +206 -0
- viam/gen/app/data/v1/data_pb2.py +178 -0
- viam/gen/app/data/v1/data_pb2.pyi +1485 -0
- 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 +56 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +370 -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 +60 -0
- viam/gen/app/dataset/v1/dataset_pb2.py +40 -0
- viam/gen/app/dataset/v1/dataset_pb2.pyi +179 -0
- viam/gen/app/datasync/__init__.py +0 -0
- viam/gen/app/datasync/v1/__init__.py +0 -0
- viam/gen/app/datasync/v1/data_sync_grpc.py +47 -0
- viam/gen/app/datasync/v1/data_sync_pb2.py +70 -0
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +425 -0
- 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/__init__.py +0 -0
- viam/gen/app/mltraining/v1/__init__.py +0 -0
- viam/gen/app/mltraining/v1/ml_training_grpc.py +78 -0
- viam/gen/app/mltraining/v1/ml_training_pb2.py +124 -0
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +415 -0
- viam/gen/app/packages/__init__.py +0 -0
- viam/gen/app/packages/v1/__init__.py +0 -0
- viam/gen/app/packages/v1/packages_grpc.py +54 -0
- viam/gen/app/packages/v1/packages_pb2.py +52 -0
- viam/gen/app/packages/v1/packages_pb2.pyi +311 -0
- viam/gen/app/v1/__init__.py +0 -0
- viam/gen/app/v1/app_grpc.py +863 -0
- viam/gen/app/v1/app_pb2.py +649 -0
- viam/gen/app/v1/app_pb2.pyi +5279 -0
- viam/gen/app/v1/billing_grpc.py +76 -0
- viam/gen/app/v1/billing_pb2.py +92 -0
- viam/gen/app/v1/billing_pb2.pyi +463 -0
- 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 +55 -0
- viam/gen/app/v1/robot_pb2.py +127 -0
- viam/gen/app/v1/robot_pb2.pyi +1202 -0
- viam/gen/common/__init__.py +0 -0
- viam/gen/common/v1/__init__.py +0 -0
- viam/gen/common/v1/common_grpc.py +0 -0
- viam/gen/common/v1/common_pb2.py +78 -0
- viam/gen/common/v1/common_pb2.pyi +687 -0
- viam/gen/component/__init__.py +0 -0
- viam/gen/component/arm/__init__.py +0 -0
- viam/gen/component/arm/v1/__init__.py +0 -0
- viam/gen/component/arm/v1/arm_grpc.py +102 -0
- viam/gen/component/arm/v1/arm_pb2.py +74 -0
- viam/gen/component/arm/v1/arm_pb2.pyi +344 -0
- viam/gen/component/audioinput/__init__.py +0 -0
- viam/gen/component/audioinput/v1/__init__.py +0 -0
- viam/gen/component/audioinput/v1/audioinput_grpc.py +63 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.py +45 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.pyi +179 -0
- viam/gen/component/base/__init__.py +0 -0
- viam/gen/component/base/v1/__init__.py +0 -0
- viam/gen/component/base/v1/base_grpc.py +94 -0
- viam/gen/component/base/v1/base_pb2.py +66 -0
- viam/gen/component/base/v1/base_pb2.pyi +258 -0
- viam/gen/component/board/__init__.py +0 -0
- viam/gen/component/board/v1/__init__.py +0 -0
- viam/gen/component/board/v1/board_grpc.py +127 -0
- viam/gen/component/board/v1/board_pb2.py +103 -0
- viam/gen/component/board/v1/board_pb2.pyi +496 -0
- 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/__init__.py +0 -0
- viam/gen/component/camera/v1/__init__.py +0 -0
- viam/gen/component/camera/v1/camera_grpc.py +79 -0
- viam/gen/component/camera/v1/camera_pb2.py +67 -0
- viam/gen/component/camera/v1/camera_pb2.pyi +373 -0
- viam/gen/component/encoder/__init__.py +0 -0
- viam/gen/component/encoder/v1/__init__.py +0 -0
- viam/gen/component/encoder/v1/encoder_grpc.py +62 -0
- viam/gen/component/encoder/v1/encoder_pb2.py +44 -0
- viam/gen/component/encoder/v1/encoder_pb2.pyi +147 -0
- viam/gen/component/gantry/__init__.py +0 -0
- viam/gen/component/gantry/v1/__init__.py +0 -0
- viam/gen/component/gantry/v1/gantry_grpc.py +86 -0
- viam/gen/component/gantry/v1/gantry_pb2.py +62 -0
- viam/gen/component/gantry/v1/gantry_pb2.pyi +239 -0
- viam/gen/component/generic/__init__.py +0 -0
- viam/gen/component/generic/v1/__init__.py +0 -0
- viam/gen/component/generic/v1/generic_grpc.py +37 -0
- viam/gen/component/generic/v1/generic_pb2.py +23 -0
- viam/gen/component/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/component/gripper/__init__.py +0 -0
- viam/gen/component/gripper/v1/__init__.py +0 -0
- viam/gen/component/gripper/v1/gripper_grpc.py +70 -0
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -0
- viam/gen/component/gripper/v1/gripper_pb2.pyi +137 -0
- viam/gen/component/inputcontroller/__init__.py +0 -0
- viam/gen/component/inputcontroller/v1/__init__.py +0 -0
- viam/gen/component/inputcontroller/v1/input_controller_grpc.py +71 -0
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +55 -0
- viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +243 -0
- viam/gen/component/motor/__init__.py +0 -0
- viam/gen/component/motor/v1/__init__.py +0 -0
- viam/gen/component/motor/v1/motor_grpc.py +118 -0
- viam/gen/component/motor/v1/motor_pb2.py +86 -0
- viam/gen/component/motor/v1/motor_pb2.pyi +368 -0
- viam/gen/component/movementsensor/__init__.py +0 -0
- viam/gen/component/movementsensor/v1/__init__.py +0 -0
- viam/gen/component/movementsensor/v1/movementsensor_grpc.py +110 -0
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +78 -0
- viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +384 -0
- viam/gen/component/posetracker/__init__.py +0 -0
- viam/gen/component/posetracker/v1/__init__.py +0 -0
- viam/gen/component/posetracker/v1/pose_tracker_grpc.py +46 -0
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +34 -0
- viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +79 -0
- 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/__init__.py +0 -0
- viam/gen/component/sensor/v1/__init__.py +0 -0
- viam/gen/component/sensor/v1/sensor_grpc.py +45 -0
- viam/gen/component/sensor/v1/sensor_pb2.py +25 -0
- viam/gen/component/sensor/v1/sensor_pb2.pyi +6 -0
- viam/gen/component/servo/__init__.py +0 -0
- viam/gen/component/servo/v1/__init__.py +0 -0
- viam/gen/component/servo/v1/servo_grpc.py +70 -0
- viam/gen/component/servo/v1/servo_pb2.py +50 -0
- viam/gen/component/servo/v1/servo_pb2.pyi +150 -0
- 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 +109 -0
- viam/gen/component/testecho/__init__.py +0 -0
- viam/gen/component/testecho/v1/__init__.py +0 -0
- viam/gen/component/testecho/v1/testecho_grpc.py +52 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +36 -0
- viam/gen/component/testecho/v1/testecho_pb2.pyi +114 -0
- viam/gen/module/__init__.py +0 -0
- viam/gen/module/v1/__init__.py +0 -0
- viam/gen/module/v1/module_grpc.py +61 -0
- viam/gen/module/v1/module_pb2.py +43 -0
- viam/gen/module/v1/module_pb2.pyi +211 -0
- viam/gen/proto/__init__.py +0 -0
- viam/gen/proto/rpc/__init__.py +0 -0
- viam/gen/proto/rpc/examples/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/v1/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +44 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +32 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +87 -0
- viam/gen/proto/rpc/examples/echoresource/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echoresource/v1/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +43 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +29 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +93 -0
- viam/gen/proto/rpc/v1/__init__.py +0 -0
- viam/gen/proto/rpc/v1/auth_grpc.py +47 -0
- viam/gen/proto/rpc/v1/auth_pb2.py +34 -0
- viam/gen/proto/rpc/v1/auth_pb2.pyi +92 -0
- viam/gen/proto/rpc/webrtc/__init__.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/__init__.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_grpc.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +43 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +304 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +54 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +70 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +496 -0
- viam/gen/provisioning/__init__.py +0 -0
- viam/gen/provisioning/v1/__init__.py +0 -0
- viam/gen/provisioning/v1/provisioning_grpc.py +51 -0
- viam/gen/provisioning/v1/provisioning_pb2.py +39 -0
- viam/gen/provisioning/v1/provisioning_pb2.pyi +188 -0
- viam/gen/robot/__init__.py +0 -0
- viam/gen/robot/v1/__init__.py +0 -0
- viam/gen/robot/v1/robot_grpc.py +208 -0
- viam/gen/robot/v1/robot_pb2.py +188 -0
- viam/gen/robot/v1/robot_pb2.pyi +1020 -0
- viam/gen/service/__init__.py +0 -0
- viam/gen/service/datamanager/__init__.py +0 -0
- viam/gen/service/datamanager/v1/__init__.py +0 -0
- viam/gen/service/datamanager/v1/data_manager_grpc.py +38 -0
- viam/gen/service/datamanager/v1/data_manager_pb2.py +28 -0
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +39 -0
- 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/__init__.py +0 -0
- viam/gen/service/mlmodel/v1/__init__.py +0 -0
- viam/gen/service/mlmodel/v1/mlmodel_grpc.py +37 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +83 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +480 -0
- viam/gen/service/motion/__init__.py +0 -0
- viam/gen/service/motion/v1/__init__.py +0 -0
- viam/gen/service/motion/v1/motion_grpc.py +87 -0
- viam/gen/service/motion/v1/motion_pb2.py +97 -0
- viam/gen/service/motion/v1/motion_pb2.pyi +838 -0
- viam/gen/service/navigation/__init__.py +0 -0
- viam/gen/service/navigation/v1/__init__.py +0 -0
- viam/gen/service/navigation/v1/navigation_grpc.py +102 -0
- viam/gen/service/navigation/v1/navigation_pb2.py +84 -0
- viam/gen/service/navigation/v1/navigation_pb2.pyi +419 -0
- viam/gen/service/sensors/__init__.py +0 -0
- viam/gen/service/sensors/v1/__init__.py +0 -0
- viam/gen/service/sensors/v1/sensors_grpc.py +46 -0
- viam/gen/service/sensors/v1/sensors_pb2.py +68 -0
- viam/gen/service/sensors/v1/sensors_pb2.pyi +137 -0
- viam/gen/service/shell/__init__.py +0 -0
- viam/gen/service/shell/v1/__init__.py +0 -0
- viam/gen/service/shell/v1/shell_grpc.py +55 -0
- viam/gen/service/shell/v1/shell_pb2.py +45 -0
- viam/gen/service/shell/v1/shell_pb2.pyi +307 -0
- viam/gen/service/slam/__init__.py +0 -0
- viam/gen/service/slam/v1/__init__.py +0 -0
- viam/gen/service/slam/v1/slam_grpc.py +61 -0
- viam/gen/service/slam/v1/slam_pb2.py +51 -0
- viam/gen/service/slam/v1/slam_pb2.pyi +213 -0
- viam/gen/service/vision/__init__.py +0 -0
- viam/gen/service/vision/v1/__init__.py +0 -0
- viam/gen/service/vision/v1/vision_grpc.py +87 -0
- viam/gen/service/vision/v1/vision_pb2.py +69 -0
- viam/gen/service/vision/v1/vision_pb2.pyi +454 -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/__init__.py +0 -0
- viam/gen/tagger/v1/__init__.py +0 -0
- viam/gen/tagger/v1/tagger_grpc.py +0 -0
- viam/gen/tagger/v1/tagger_pb2.py +16 -0
- viam/gen/tagger/v1/tagger_pb2.pyi +15 -0
- viam/logging.py +216 -0
- viam/media/__init__.py +0 -0
- viam/media/audio.py +16 -0
- viam/media/utils/__init__.py +0 -0
- viam/media/utils/pil/__init__.py +51 -0
- viam/media/utils/pil/viam_rgba_plugin.py +73 -0
- viam/media/viam_rgba.py +10 -0
- viam/media/video.py +217 -0
- viam/module/__init__.py +5 -0
- viam/module/module.py +281 -0
- viam/module/service.py +66 -0
- viam/module/types.py +23 -0
- viam/operations.py +124 -0
- viam/proto/__init__.py +0 -0
- viam/proto/app/__init__.py +554 -0
- viam/proto/app/agent/__init__.py +28 -0
- viam/proto/app/billing.py +58 -0
- viam/proto/app/cloudslam/__init__.py +48 -0
- viam/proto/app/data/__init__.py +138 -0
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +36 -0
- viam/proto/app/datasync/__init__.py +44 -0
- viam/proto/app/end_user.py +34 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +52 -0
- viam/proto/app/packages/__init__.py +38 -0
- viam/proto/app/robot.py +84 -0
- viam/proto/common/__init__.py +66 -0
- viam/proto/component/__init__.py +0 -0
- viam/proto/component/arm/__init__.py +48 -0
- viam/proto/component/audioinput/__init__.py +30 -0
- viam/proto/component/base/__init__.py +42 -0
- viam/proto/component/board/__init__.py +62 -0
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +46 -0
- viam/proto/component/encoder/__init__.py +28 -0
- viam/proto/component/gantry/__init__.py +40 -0
- viam/proto/component/generic/__init__.py +12 -0
- viam/proto/component/gripper/__init__.py +30 -0
- viam/proto/component/inputcontroller/__init__.py +38 -0
- viam/proto/component/motor/__init__.py +56 -0
- viam/proto/component/movementsensor/__init__.py +50 -0
- viam/proto/component/posetracker/__init__.py +19 -0
- viam/proto/component/powersensor/__init__.py +30 -0
- viam/proto/component/sensor/__init__.py +12 -0
- viam/proto/component/servo/__init__.py +32 -0
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +30 -0
- viam/proto/module/__init__.py +38 -0
- viam/proto/provisioning/__init__.py +36 -0
- viam/proto/robot/__init__.py +130 -0
- viam/proto/rpc/__init__.py +0 -0
- viam/proto/rpc/auth.py +34 -0
- viam/proto/rpc/examples/__init__.py +0 -0
- viam/proto/rpc/examples/echo/__init__.py +26 -0
- viam/proto/rpc/examples/echoresource/__init__.py +30 -0
- viam/proto/rpc/webrtc/__init__.py +0 -0
- viam/proto/rpc/webrtc/grpc.py +36 -0
- viam/proto/rpc/webrtc/signaling.py +58 -0
- viam/proto/service/__init__.py +0 -0
- viam/proto/service/datamanager/__init__.py +19 -0
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +12 -0
- viam/proto/service/mlmodel/__init__.py +54 -0
- viam/proto/service/motion/__init__.py +68 -0
- viam/proto/service/navigation/__init__.py +58 -0
- viam/proto/service/sensors/__init__.py +18 -0
- viam/proto/service/shell/__init__.py +36 -0
- viam/proto/service/slam/__init__.py +36 -0
- viam/proto/service/vision/__init__.py +46 -0
- viam/proto/stream/__init__.py +36 -0
- viam/proto/tagger/__init__.py +6 -0
- viam/py.typed +0 -0
- viam/resource/__init__.py +0 -0
- viam/resource/base.py +123 -0
- viam/resource/easy_resource.py +153 -0
- viam/resource/manager.py +126 -0
- viam/resource/registry.py +199 -0
- viam/resource/rpc_client_base.py +65 -0
- viam/resource/rpc_service_base.py +48 -0
- viam/resource/types.py +213 -0
- viam/robot/__init__.py +0 -0
- viam/robot/client.py +909 -0
- viam/robot/service.py +69 -0
- viam/rpc/__init__.py +0 -0
- viam/rpc/dial.py +420 -0
- viam/rpc/libviam_rust_utils.dll +0 -0
- viam/rpc/server.py +201 -0
- viam/rpc/signaling.py +29 -0
- viam/rpc/types.py +22 -0
- viam/services/__init__.py +0 -0
- 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 +24 -0
- viam/services/mlmodel/client.py +37 -0
- viam/services/mlmodel/mlmodel.py +78 -0
- viam/services/mlmodel/service.py +38 -0
- viam/services/mlmodel/utils.py +101 -0
- viam/services/motion/__init__.py +17 -0
- viam/services/motion/client.py +215 -0
- viam/services/motion/motion.py +378 -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 +78 -0
- viam/services/service_client_base.py +46 -0
- viam/services/slam/__init__.py +17 -0
- viam/services/slam/client.py +62 -0
- viam/services/slam/service.py +75 -0
- viam/services/slam/slam.py +111 -0
- viam/services/vision/__init__.py +15 -0
- viam/services/vision/client.py +206 -0
- viam/services/vision/service.py +146 -0
- viam/services/vision/vision.py +315 -0
- viam/sessions_client.py +245 -0
- viam/streams.py +44 -0
- viam/utils.py +365 -0
- viam/version_metadata.py +4 -0
- viam_sdk-0.45.2.dist-info/METADATA +157 -0
- viam_sdk-0.45.2.dist-info/RECORD +476 -0
- viam_sdk-0.45.2.dist-info/WHEEL +4 -0
- viam_sdk-0.45.2.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from typing import Any, Final, Mapping, Optional
|
|
3
|
+
|
|
4
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
|
+
from viam.utils import SensorReading
|
|
6
|
+
|
|
7
|
+
from ..component_base import ComponentBase
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Sensor(ComponentBase):
|
|
11
|
+
"""
|
|
12
|
+
Sensor represents a physical sensing device that can provide measurement readings.
|
|
13
|
+
|
|
14
|
+
This acts as an abstract base class for any drivers representing specific
|
|
15
|
+
sensor implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
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/>`_.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
26
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "sensor"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
@abc.abstractmethod
|
|
30
|
+
async def get_readings(
|
|
31
|
+
self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
32
|
+
) -> Mapping[str, SensorReading]:
|
|
33
|
+
"""
|
|
34
|
+
Obtain the measurements/data specific to this sensor.
|
|
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
|
+
|
|
43
|
+
Returns:
|
|
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>`_.
|
|
47
|
+
"""
|
|
48
|
+
...
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
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
|
|
12
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
13
|
+
from viam.utils import dict_to_struct, sensor_readings_native_to_value, struct_to_dict
|
|
14
|
+
|
|
15
|
+
from .sensor import Sensor
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SensorRPCService(SensorServiceBase, ResourceRPCServiceBase[Sensor]):
|
|
19
|
+
"""
|
|
20
|
+
gRPC Service for a generic Sensor
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
RESOURCE_TYPE = Sensor
|
|
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 DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
36
|
+
request = await stream.recv_message()
|
|
37
|
+
assert request is not None
|
|
38
|
+
sensor = self.get_resource(request.name)
|
|
39
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
40
|
+
result = await sensor.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
41
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
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)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from viam.resource.registry import Registry, ResourceRegistration
|
|
2
|
+
|
|
3
|
+
from .client import ServoClient
|
|
4
|
+
from .service import ServoRPCService
|
|
5
|
+
from .servo import Servo
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"Servo",
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
Registry.register_api(ResourceRegistration(Servo, ServoRPCService, lambda name, channel: ServoClient(name, channel)))
|
|
@@ -0,0 +1,86 @@
|
|
|
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
|
|
6
|
+
from viam.proto.component.servo import (
|
|
7
|
+
GetPositionRequest,
|
|
8
|
+
GetPositionResponse,
|
|
9
|
+
IsMovingRequest,
|
|
10
|
+
IsMovingResponse,
|
|
11
|
+
MoveRequest,
|
|
12
|
+
ServoServiceStub,
|
|
13
|
+
StopRequest,
|
|
14
|
+
)
|
|
15
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
16
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
17
|
+
|
|
18
|
+
from .servo import Servo
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ServoClient(Servo, ReconfigurableResourceRPCClientBase):
|
|
22
|
+
"""
|
|
23
|
+
gRPC client for the Servo component.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, name: str, channel: Channel):
|
|
27
|
+
self.channel = channel
|
|
28
|
+
self.client = ServoServiceStub(channel)
|
|
29
|
+
super().__init__(name)
|
|
30
|
+
|
|
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
|
|
39
|
+
request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
40
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
41
|
+
return response.position_deg
|
|
42
|
+
|
|
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
|
|
52
|
+
request = MoveRequest(name=self.name, angle_deg=angle, extra=dict_to_struct(extra))
|
|
53
|
+
await self.client.Move(request, timeout=timeout, metadata=md)
|
|
54
|
+
|
|
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
|
|
63
|
+
request = StopRequest(name=self.name, extra=dict_to_struct(extra))
|
|
64
|
+
await self.client.Stop(request, timeout=timeout, metadata=md)
|
|
65
|
+
|
|
66
|
+
async def is_moving(self, *, timeout: Optional[float] = None, **kwargs) -> bool:
|
|
67
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
68
|
+
request = IsMovingRequest(name=self.name)
|
|
69
|
+
response: IsMovingResponse = await self.client.IsMoving(request, timeout=timeout, metadata=md)
|
|
70
|
+
return response.is_moving
|
|
71
|
+
|
|
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
|
|
80
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
81
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
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)
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, GetGeometriesRequest, GetGeometriesResponse
|
|
4
|
+
from viam.proto.component.servo import (
|
|
5
|
+
GetPositionRequest,
|
|
6
|
+
GetPositionResponse,
|
|
7
|
+
IsMovingRequest,
|
|
8
|
+
IsMovingResponse,
|
|
9
|
+
MoveRequest,
|
|
10
|
+
MoveResponse,
|
|
11
|
+
ServoServiceBase,
|
|
12
|
+
StopRequest,
|
|
13
|
+
StopResponse,
|
|
14
|
+
)
|
|
15
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
16
|
+
from viam.utils import dict_to_struct, struct_to_dict
|
|
17
|
+
|
|
18
|
+
from .servo import Servo
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ServoRPCService(ServoServiceBase, ResourceRPCServiceBase[Servo]):
|
|
22
|
+
"""
|
|
23
|
+
gRPC Service for a Servo
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
RESOURCE_TYPE = Servo
|
|
27
|
+
|
|
28
|
+
async def Move(self, stream: Stream[MoveRequest, MoveResponse]) -> None:
|
|
29
|
+
request = await stream.recv_message()
|
|
30
|
+
assert request is not None
|
|
31
|
+
name = request.name
|
|
32
|
+
servo = self.get_resource(name)
|
|
33
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
34
|
+
await servo.move(request.angle_deg, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
35
|
+
await stream.send_message(MoveResponse())
|
|
36
|
+
|
|
37
|
+
async def GetPosition(self, stream: Stream[GetPositionRequest, GetPositionResponse]) -> None:
|
|
38
|
+
request = await stream.recv_message()
|
|
39
|
+
assert request is not None
|
|
40
|
+
name = request.name
|
|
41
|
+
servo = self.get_resource(name)
|
|
42
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
43
|
+
position = await servo.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
44
|
+
resp = GetPositionResponse(position_deg=position)
|
|
45
|
+
await stream.send_message(resp)
|
|
46
|
+
|
|
47
|
+
async def Stop(self, stream: Stream[StopRequest, StopResponse]) -> None:
|
|
48
|
+
request = await stream.recv_message()
|
|
49
|
+
assert request is not None
|
|
50
|
+
name = request.name
|
|
51
|
+
servo = self.get_resource(name)
|
|
52
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
53
|
+
await servo.stop(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
54
|
+
await stream.send_message(StopResponse())
|
|
55
|
+
|
|
56
|
+
async def IsMoving(self, stream: Stream[IsMovingRequest, IsMovingResponse]) -> None:
|
|
57
|
+
request = await stream.recv_message()
|
|
58
|
+
assert request is not None
|
|
59
|
+
name = request.name
|
|
60
|
+
servo = self.get_resource(name)
|
|
61
|
+
is_moving = await servo.is_moving()
|
|
62
|
+
await stream.send_message(IsMovingResponse(is_moving=is_moving))
|
|
63
|
+
|
|
64
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
65
|
+
request = await stream.recv_message()
|
|
66
|
+
assert request is not None
|
|
67
|
+
servo = self.get_resource(request.name)
|
|
68
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
69
|
+
result = await servo.do_command(command=struct_to_dict(request.command), timeout=timeout, metadata=stream.metadata)
|
|
70
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
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)
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from typing import Any, Final, Mapping, Optional
|
|
3
|
+
|
|
4
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
5
|
+
|
|
6
|
+
from ..component_base import ComponentBase
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Servo(ComponentBase):
|
|
10
|
+
"""
|
|
11
|
+
Servo represents a physical servo.
|
|
12
|
+
|
|
13
|
+
This acts as an abstract base class for any drivers representing specific
|
|
14
|
+
servo implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
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/>`_.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
25
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "servo"
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
@abc.abstractmethod
|
|
29
|
+
async def move(self, angle: int, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
|
|
30
|
+
"""
|
|
31
|
+
Move the servo to the provided angle.
|
|
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
|
+
|
|
43
|
+
Args:
|
|
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>`_.
|
|
47
|
+
"""
|
|
48
|
+
...
|
|
49
|
+
|
|
50
|
+
@abc.abstractmethod
|
|
51
|
+
async def get_position(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
|
|
52
|
+
"""
|
|
53
|
+
Get the current angle (degrees) of the servo.
|
|
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
|
+
|
|
71
|
+
Returns:
|
|
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>`_.
|
|
75
|
+
"""
|
|
76
|
+
...
|
|
77
|
+
|
|
78
|
+
@abc.abstractmethod
|
|
79
|
+
async def stop(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
|
|
80
|
+
"""
|
|
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>`_.
|
|
94
|
+
"""
|
|
95
|
+
...
|
|
96
|
+
|
|
97
|
+
@abc.abstractmethod
|
|
98
|
+
async def is_moving(self) -> bool:
|
|
99
|
+
"""
|
|
100
|
+
Get if the servo is currently moving.
|
|
101
|
+
|
|
102
|
+
::
|
|
103
|
+
|
|
104
|
+
my_servo = Servo.from_robot(robot=machine, name="my_servo")
|
|
105
|
+
|
|
106
|
+
print(await my_servo.is_moving())
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
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>`_.
|
|
113
|
+
"""
|
|
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)))
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from typing import Any, Mapping, Optional
|
|
2
|
+
|
|
3
|
+
from grpclib.client import Channel
|
|
4
|
+
|
|
5
|
+
from viam.gen.component.switch.v1.switch_pb2 import (
|
|
6
|
+
GetNumberOfPositionsRequest,
|
|
7
|
+
GetNumberOfPositionsResponse,
|
|
8
|
+
GetPositionRequest,
|
|
9
|
+
GetPositionResponse,
|
|
10
|
+
SetPositionRequest,
|
|
11
|
+
)
|
|
12
|
+
from viam.proto.common import (
|
|
13
|
+
DoCommandRequest,
|
|
14
|
+
DoCommandResponse,
|
|
15
|
+
)
|
|
16
|
+
from viam.proto.component.switch import SwitchServiceStub
|
|
17
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase
|
|
18
|
+
from viam.utils import (
|
|
19
|
+
ValueTypes,
|
|
20
|
+
dict_to_struct,
|
|
21
|
+
struct_to_dict,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
from .switch import Switch
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class SwitchClient(Switch, ReconfigurableResourceRPCClientBase):
|
|
28
|
+
"""
|
|
29
|
+
gRPC client for Switch component
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(self, name: str, channel: Channel):
|
|
33
|
+
self.channel = channel
|
|
34
|
+
self.client = SwitchServiceStub(channel)
|
|
35
|
+
super().__init__(name)
|
|
36
|
+
|
|
37
|
+
async def get_position(
|
|
38
|
+
self,
|
|
39
|
+
*,
|
|
40
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
41
|
+
timeout: Optional[float] = None,
|
|
42
|
+
**kwargs,
|
|
43
|
+
) -> int:
|
|
44
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
45
|
+
request = GetPositionRequest(name=self.name, extra=dict_to_struct(extra))
|
|
46
|
+
response: GetPositionResponse = await self.client.GetPosition(request, timeout=timeout, metadata=md)
|
|
47
|
+
return response.position
|
|
48
|
+
|
|
49
|
+
async def set_position(
|
|
50
|
+
self,
|
|
51
|
+
position: int,
|
|
52
|
+
*,
|
|
53
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
54
|
+
timeout: Optional[float] = None,
|
|
55
|
+
**kwargs,
|
|
56
|
+
) -> None:
|
|
57
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
58
|
+
request = SetPositionRequest(name=self.name, position=position, extra=dict_to_struct(extra))
|
|
59
|
+
await self.client.SetPosition(request, timeout=timeout, metadata=md)
|
|
60
|
+
|
|
61
|
+
async def get_number_of_positions(
|
|
62
|
+
self,
|
|
63
|
+
*,
|
|
64
|
+
extra: Optional[Mapping[str, Any]] = None,
|
|
65
|
+
timeout: Optional[float] = None,
|
|
66
|
+
**kwargs,
|
|
67
|
+
) -> int:
|
|
68
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
69
|
+
request = GetNumberOfPositionsRequest(name=self.name, extra=dict_to_struct(extra))
|
|
70
|
+
response: GetNumberOfPositionsResponse = await self.client.GetNumberOfPositions(request, timeout=timeout, metadata=md)
|
|
71
|
+
return response.number_of_positions
|
|
72
|
+
|
|
73
|
+
async def do_command(
|
|
74
|
+
self,
|
|
75
|
+
command: Mapping[str, ValueTypes],
|
|
76
|
+
*,
|
|
77
|
+
timeout: Optional[float] = None,
|
|
78
|
+
**kwargs,
|
|
79
|
+
) -> Mapping[str, ValueTypes]:
|
|
80
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
81
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
82
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
83
|
+
return struct_to_dict(response.result)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
from grpclib.server import Stream
|
|
2
|
+
|
|
3
|
+
from viam.gen.component.switch.v1.switch_pb2 import (
|
|
4
|
+
GetNumberOfPositionsRequest,
|
|
5
|
+
GetNumberOfPositionsResponse,
|
|
6
|
+
GetPositionRequest,
|
|
7
|
+
GetPositionResponse,
|
|
8
|
+
SetPositionRequest,
|
|
9
|
+
SetPositionResponse,
|
|
10
|
+
)
|
|
11
|
+
from viam.proto.common import (
|
|
12
|
+
DoCommandRequest,
|
|
13
|
+
DoCommandResponse,
|
|
14
|
+
)
|
|
15
|
+
from viam.proto.component.switch import SwitchServiceBase
|
|
16
|
+
from viam.resource.rpc_service_base import ResourceRPCServiceBase
|
|
17
|
+
from viam.utils import dict_to_struct, struct_to_dict
|
|
18
|
+
|
|
19
|
+
from .switch import Switch
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class SwitchRPCService(SwitchServiceBase, ResourceRPCServiceBase[Switch]):
|
|
23
|
+
"""
|
|
24
|
+
gRPC Service for a generic Switch
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
RESOURCE_TYPE = Switch
|
|
28
|
+
|
|
29
|
+
async def GetPosition(self, stream: Stream[GetPositionRequest, GetPositionResponse]) -> None:
|
|
30
|
+
request = await stream.recv_message()
|
|
31
|
+
assert request is not None
|
|
32
|
+
name = request.name
|
|
33
|
+
switch = self.get_resource(name)
|
|
34
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
35
|
+
position = await switch.get_position(extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
36
|
+
response = GetPositionResponse(position=position)
|
|
37
|
+
await stream.send_message(response)
|
|
38
|
+
|
|
39
|
+
async def SetPosition(self, stream: Stream[SetPositionRequest, SetPositionResponse]) -> None:
|
|
40
|
+
request = await stream.recv_message()
|
|
41
|
+
assert request is not None
|
|
42
|
+
name = request.name
|
|
43
|
+
switch = self.get_resource(name)
|
|
44
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
45
|
+
await switch.set_position(position=request.position, extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata)
|
|
46
|
+
await stream.send_message(SetPositionResponse())
|
|
47
|
+
|
|
48
|
+
async def GetNumberOfPositions(self, stream: Stream[GetNumberOfPositionsRequest, GetNumberOfPositionsResponse]) -> None:
|
|
49
|
+
request = await stream.recv_message()
|
|
50
|
+
assert request is not None
|
|
51
|
+
name = request.name
|
|
52
|
+
switch = self.get_resource(name)
|
|
53
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
54
|
+
number_of_positions = await switch.get_number_of_positions(
|
|
55
|
+
extra=struct_to_dict(request.extra), timeout=timeout, metadata=stream.metadata
|
|
56
|
+
)
|
|
57
|
+
response = GetNumberOfPositionsResponse(number_of_positions=number_of_positions)
|
|
58
|
+
await stream.send_message(response)
|
|
59
|
+
|
|
60
|
+
async def DoCommand(self, stream: Stream[DoCommandRequest, DoCommandResponse]) -> None:
|
|
61
|
+
request = await stream.recv_message()
|
|
62
|
+
assert request is not None
|
|
63
|
+
name = request.name
|
|
64
|
+
switch = self.get_resource(name)
|
|
65
|
+
timeout = stream.deadline.time_remaining() if stream.deadline else None
|
|
66
|
+
result = await switch.do_command(
|
|
67
|
+
command=struct_to_dict(request.command),
|
|
68
|
+
timeout=timeout,
|
|
69
|
+
metadata=stream.metadata,
|
|
70
|
+
)
|
|
71
|
+
response = DoCommandResponse(result=dict_to_struct(result))
|
|
72
|
+
await stream.send_message(response)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
from typing import Any, Final, Mapping, Optional
|
|
3
|
+
|
|
4
|
+
from viam.components.component_base import ComponentBase
|
|
5
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Switch(ComponentBase):
|
|
9
|
+
"""
|
|
10
|
+
Switch represents a device with two or more finite states (or positions) than can be set and retrieved.
|
|
11
|
+
|
|
12
|
+
This acts as an abstract base class for any drivers representing specific
|
|
13
|
+
switch implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
14
|
+
overridden, it must call the ``super().__init__()`` function.
|
|
15
|
+
|
|
16
|
+
::
|
|
17
|
+
|
|
18
|
+
from viam.components.switch import Switch
|
|
19
|
+
|
|
20
|
+
For more information, see `Switch component <https://docs.viam.com/dev/reference/apis/components/switch/>`_.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
24
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "switch"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
@abc.abstractmethod
|
|
28
|
+
async def get_position(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
|
|
29
|
+
"""
|
|
30
|
+
Get the current position of the switch
|
|
31
|
+
|
|
32
|
+
::
|
|
33
|
+
|
|
34
|
+
my_switch = Switch.from_robot(robot=machine, name="my_switch")
|
|
35
|
+
|
|
36
|
+
# Update the switch from its current position to the desired position of 1.
|
|
37
|
+
await my_switch.set_position(1)
|
|
38
|
+
|
|
39
|
+
# Get the current set position of the switch.
|
|
40
|
+
pos1 = await my_switch.get_position()
|
|
41
|
+
|
|
42
|
+
# Update the switch from its current position to the desired position.
|
|
43
|
+
await my_switch.set_position(0)
|
|
44
|
+
|
|
45
|
+
# Get the current set position of the switch.
|
|
46
|
+
pos2 = await my_switch.get_position()
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
int: The current position of the switch within the range of available positions.
|
|
50
|
+
|
|
51
|
+
For more information, see `Switch component <https://docs.viam.com/dev/reference/apis/components/Switch/#getposition>`_.
|
|
52
|
+
"""
|
|
53
|
+
...
|
|
54
|
+
|
|
55
|
+
@abc.abstractmethod
|
|
56
|
+
async def set_position(
|
|
57
|
+
self, position: int, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs
|
|
58
|
+
) -> None:
|
|
59
|
+
"""
|
|
60
|
+
Sets the current position of the switch.
|
|
61
|
+
|
|
62
|
+
::
|
|
63
|
+
|
|
64
|
+
my_switch = Switch.from_robot(robot=machine, name="my_switch")
|
|
65
|
+
|
|
66
|
+
# Update the switch from its current position to the desired position of 1.
|
|
67
|
+
await my_switch.set_position(1)
|
|
68
|
+
|
|
69
|
+
# Update the switch from its current position to the desired position of 0.
|
|
70
|
+
await my_switch.set_position(0)
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
position (int): The position of the switch within the range of available positions.
|
|
74
|
+
|
|
75
|
+
For more information, see `Switch component <https://docs.viam.com/dev/reference/apis/components/switch/#setposition>`_.
|
|
76
|
+
"""
|
|
77
|
+
...
|
|
78
|
+
|
|
79
|
+
@abc.abstractmethod
|
|
80
|
+
async def get_number_of_positions(self, *, extra: Optional[Mapping[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
|
|
81
|
+
"""
|
|
82
|
+
Get the number of available positions on the switch.
|
|
83
|
+
|
|
84
|
+
::
|
|
85
|
+
|
|
86
|
+
my_switch = Switch.from_robot(robot=machine, name="my_switch")
|
|
87
|
+
|
|
88
|
+
print(await my_switch.get_number_of_positions())
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
int: The number of available positions.
|
|
92
|
+
|
|
93
|
+
For more information, see `Switch component <https://docs.viam.com/dev/reference/apis/components/switch/#getnumberofpositions>`_.
|
|
94
|
+
"""
|
|
95
|
+
...
|